{"version":3,"file":"discourse-ai.js","names":["define","_exports","Object","defineProperty","value","default","resource","path","map","this","route","resetNamespace","_rest","Adapter","jsonMode","basePath","pathFor","store","type","findArgs","pluralize","apiNameFor","appendQueryParams","AiFeatureAdapter","AiToolAdapter","_ajax","AiEmbedding","createProperties","getProperties","updateProperties","attrs","id","testConfig","ajax","data","ai_embedding","workingCopy","createRecord","AiFeature","AiLlm","llm_quotas","llmConfig","ai_llm","CREATE_ATTRIBUTES","SYSTEM_ATTRIBUTES","AiPersona","createUser","result","user","user_id","flattenedToolStructure","tools","tName","toolOptions","forcedTools","includes","populateTools","flatTools","tool","toolId","options","force","mappedOptions","optionId","hasOwnProperty","keys","length","push","system","fromPOJO","dataClone","JSON","parse","stringify","persona","create","toPOJO","forced_tool_count","response_format","examples","_trackedBuiltIns","AiTool","trackParameters","parameters","TrackedArray","p","parameter","TrackedObject","enum","_component","_component2","_dIcon","_number","_getUrl","_templateFactory","AdminReportEmotion","dt7948","c","todayLink","date","moment","format","_filterURL","yesterdayLink","subtract","lastSevenDaysLink","lastThirtyDaysLink","_baseFilter","_model","model","static","setComponentTemplate","createTemplateFactory","block","moduleName","scope","isStrictMode","attributeBindings","classNames","_tracking","_helper","_modifier","_object","_didInsert","_service","_emberModifier","_truthHelpers","_dButton","_horizontalOverflowNav","_postList","_bodyClass","_categoryBadge","_replaceEmoji","_ajaxError","_later","_utilities","_category","_post","_discourseI18n","_dTooltip","_doughnutChart","_aiSentimentHorizontalBar","AdminReportSentimentAnalysis","g","prototype","service","router","i","tracked","selectedChart","posts","hasMorePosts","nextOffset","showingSelectedChart","activeFilter","shareIcon","setActiveFilter","modifier","element","clearActiveFilters","querySelector","classList","add","filterButtons","querySelectorAll","button","remove","calculateNeutralScore","total_count","positive_count","negative_count","sentimentMapping","sentiment","text","i18n","icon","groupingType","localePrefix","args","category_name","colors","currentGroupFilter","available_filters","find","filter","currentSortFilter","transformedData","category","findById","category_id","title","tag_name","scores","score_map","positive","neutral","negative","total_score","widths","filteredPosts","post","topic_title","postFilters","action","postRequest","group_by","group_value","start_date","end_date","offset","openToChart","queryParams","currentRoute","response","has_more","next_offset","e","popupAjaxError","n","showDetails","currentQueryParams","currentFilters","filters","transitionTo","name","fetchMorePosts","mappedPosts","pushObjects","backToAllCharts","shareChart","url","currentURL","clipboardCopy","getAbsoluteURL","on","fn","and","_template","_htmlClass","AiArtifactComponent","siteSettings","expanded","showingArtifact","constructor","super","arguments","keydownHandler","handleKeydown","bind","popStateHandler","handlePopState","window","addEventListener","willDestroy","removeEventListener","event","key","history","back","state","artifactId","requireClickToRun","ai_artifact_security","autorun","artifactUrl","artifactVersion","showArtifact","toggleView","pushState","location","href","wrapperClasses","seamless","setDataAttributes","dataAttributes","entries","forEach","_ref","setAttribute","heightStyle","artifactHeight","height","parseInt","isNaN","htmlSafe","showFooter","_didUpdate","_willDestroy","_runloop","_concatClass","Block","show","shown","blinking","undefined","AiBlinkingAnimation","blocks","Array","from","nextBlockBlinkingTimer","blockBlinkingTimer","blockShownTimer","setupAnimation","firstObject","onBlinking","nextBlock","onShowing","lastObject","teardownAnimation","cancel","currentBlock","objectAt","indexOf","_owner","_jquery","_pluginOutlet","_lazyHash","_user","_hashtagAutocomplete","_uppyUpload","_uppyMediaOptimizationPlugin","_userSearch","_userStatusOnAutocomplete","_aiPersonaLlmSelector","AiBotConversations","aiBotConversationsHiddenSubmit","currentUser","mediaOptimizationWorker","site","uploads","textarea","uppyUpload","fileInputEl","_handlePaste","document","activeElement","canUpload","canPasteHtml","types","clipboardHelpers","clipboardData","files","addFiles","pasted","init","getOwner","useMultipartUploadsIfAvailable","uppyReady","composer_media_optimization_image_enabled","uppyWrapper","useUploadPlugin","optimizeFn","opts","optimizeImage","runParallel","isMobileDevice","onPreProcessProgress","file","inProgressUpload","inProgressUploads","upl","processing","onPreProcessComplete","uploadDone","upload","onProgressUploadsChanged","notifyPropertyChange","teardown","autocomplete","loading","showUploadsContainer","setPersonaId","personaId","setTargetRecipient","username","targetUsername","updateInputValue","_autoExpandTextarea","inputValue","target","handleKeyDown","tagName","shiftKey","prepareAndSubmitToBot","setTextArea","setupAutocomplete","scheduleOnce","focusTextarea","focus","$textarea","applyUserAutocomplete","applyHashtagAutocomplete","enable_mentions","template","dataSource","term","destroyUserStatuses","includeGroups","then","initUserStatusHtml","users","onRender","renderUserStatusHtml","width","treatAsTextarea","autoSelectFirstSuggestion","transformComplete","obj","afterComplete","onClose","hashtagConfig","hashtag_configurations","setupHashtagAutocomplete","registerFileInput","setup","openFileUpload","click","removeUpload","u","cancelUpload","cancelSingleUpload","fileId","submitToBot","inProgressUploadsCount","error","style","scrollHeight","maxHeight","getComputedStyle","overflowY","_aiBotHelper","_aiConversationsSidebarManager","AiBotHeaderIcon","appEvents","composer","navigationMenu","sidebarState","bots","availableBots","ai_enabled_chat_bots","bot","is_persona","has_default_llm","Boolean","model_name","showHeaderButton","ai_bot_add_to_header","clickShouldRouteOutOfConversations","isHeaderDropdownMode","ai_bot_enable_dedicated_ux","currentPanel","AI_CONVERSATIONS_PANEL","onClick","defaultHomepage","trigger","composeAiBotMessage","_templateOnly","AiBotSidebarNewConversation","shouldRender","isCurrentPanel","getElementById","routeTo","currentRouteName","outletArgs","toggleNavigationMenu","_dToast","_dToastInstance","_aiHelperOptionsList","_diffModal","_thumbnailSuggestions","AiComposerHelperMenu","modal","newSelectedText","diff","customPromptValue","noContentError","prompts","promptTypes","toolbarEvent","getText","helperOptions","ai_helper_prompts","siteLocale","default_locale","locale","available_locales","l","translatedName","language","translated_name","customPromptIndex","findIndex","customPrompt","splice","unshift","can_use_custom_prompts","reduce","memo","prompt_type","toast","owner","close","duration","theme","message","suggestChanges","option","mode","selectedText","thumbnails","thumbnailSuggestions","showResultAsDiff","revert","undoAiAction","closeMenu","_siteSetting","_siteSetting2","AiDefaultLlmSelector","defaultLlmSetting","loadDefaultLlmSetting","site_settings","plugin","setting","_backButton","_conditionalLoadingSpinner","_form","_adminSectionLandingItem","_adminSectionLandingWrapper","AiEmbeddingEditor","toasts","dialog","isSaving","selectedPreset","testRunning","testResult","testError","currentProvider","provider","formData","originalData","_originalFormData","cached","selectedProviders","embeddings","resultSetMeta","providers","prov","provName","distanceFunctions","t","df","distance_functions","presets","preset","display_name","preset_id","unshiftObject","showPresets","isNew","metaProviderParams","provider_params","testErrorMessage","displayTestResult","seeded","configurePreset","findBy","setProvider","set","params","initialParams","providerParams","acc","_ref2","field","values","v","normalizeParam","resetForm","save","dataToSave","newModel","addObject","savedProvider","success","later","test","testModel","configTestResult","confirm","didConfirm","destroyRecord","removeObject","catch","providerKeys","concat","not","get","eq","_dBreadcrumbsItem","_dPageSubheader","_adminConfigAreaEmptyList","_aiEmbeddingEditor","AiEmbeddingsListEditor","adminPluginNavManager","hasEmbeddingElements","_routing","ExpandableList","isExpanded","maxItemsToShow","hasMore","items","visibleItems","slice","remainingCount","expandToggleLabel","count","toggleExpanded","isLastItem","index","AiFeaturesList","sortedModules","modules","toArray","toSorted","a","b","module_name","localeCompare","isSpamModule","aModule","hasGroups","feature","groupList","groups","groupIds","Set","personas","allowed_groups","group","has","LinkTo","_dSelect","_filterInput","_aiDefaultLlmSelector","_aiFeaturesList","CONFIGURED","UNCONFIGURED","AiFeatures","filterValue","selectedFeatureGroup","features","f","module_enabled","featureGroupOptions","label","filteredFeatures","trim","toLowerCase","featureMatches","module","personaMatches","some","llmMatches","llm_models","llm","groupMatches","console","matchingFeatures","assign","onFilterChange","onFeatureGroupChange","resetAndFocus","hash","_dToggleSwitch","_fullPageSearch","_search","_aiIndicatorWave","AiFullPageSearch","searchPreferencesManager","searching","AiResults","showingAiResults","sortOrder","initialSearchTerm","searchTerm","onSearch","off","searchEnabled","resetAiResults","performHyDESearch","disableToggleSwitch","validSearchOrder","searchStateText","settled","noResults","searchType","SEARCH_TYPE_DEFAULT","isValidSearchTerm","searchClass","tooltipText","toggleAiResults","enabled","addSearchResults","q","async","translateResults","results","generatedByAi","finally","sortChanged","_dropdownMenu","_dMenu","AiGistToggle","gists","buttons","description","selectedOptionId","currentButton","onRegisterApi","api","dMenu","onSelect","setPreference","_withEventValue","AiHelperCustomPrompt","sendInput","submit","promptArgs","AiHelperLoading","_keyboardShortcuts","_aiHelperCustomPrompt","AiHelperOptionsList","showShortcut","desktopView","shortcutVisible","shortcut","translateModKey","PLATFORM_KEY_MODIFIER","indicatorDots","AiIndicatorWave","_boundAvatarTemplate","_adminUser","_aiQuotaDurationSelector","_aiLlmQuotaModal","AiLlmEditorForm","llmTemplate","modelName","split","info","llms","modelInfo","models","max_prompt_tokens","tokens","max_output_tokens","tokenizer","endpoint","computeProviderParams","input_cost","output_cost","cached_input_cost","api_key","enabled_chat_bot","vision_enabled","sort","tokenizers","adminUser","modulesUsingModel","usedBy","used_by","m","join","inUseWarning","settings","showAddQuotaButton","currentParams","fromEntries","k","canEditURL","openAddQuotaModal","addItemToCollection","updatedData","replaceWith","_ref3","providerParamsKeys","gt","_aiLlmEditorForm","AiLlmEditor","_comboBox","AiLlmSelector","_aiLlmEditor","isPreseeded","AiLlmsListEditor","modelDescription","replace","lookup","ignoreMissing","preseededDescription","sanitizedTranslationKey","hasLlmElements","preconfiguredTitle","preConfiguredLlms","llmsContent","content","transitionToLlmEditor","localizeUsage","usage","_group","_groupChooser","_aiPersonaResponseFormatEditor","_aiLlmSelector","_aiPersonaExample","_aiPersonaToolOptions","_aiToolSelector","_ragOptionsFk","_ragUploader","PersonaEditor","allGroups","dirtyFormData","mapToolOptions","chatPluginEnabled","chat_enabled","allTools","maxPixelValues","forcedToolStrategies","updateAllGroups","findAll","include_everyone","everyoneGroupName","personaToSave","sortPersonas","rag_uploads","userClone","toggleEnabled","dirtyData","persistField","togglePriority","form","updateUploads","newUploads","currentUploads","updatedUploads","updateToolNames","currentData","updatedTools","removedTools","ct","updatedOptions","setProperties","updatedForcedTools","fct","availableForcedTools","addExamplesPair","newExamples","currentOptions","toolNames","newValue","updatedDirtyData","update","sorted","priority","clear","setObjects","exportPersona","exportUrl","or","AiPersonaCollapsableExample","collapsed","caretIcon","toggleExample","deletePair","examplesCollection","exampleNumber","exampleTitle","number","_avatar","_aiPersona","_aiPersonaEditor","LAYOUT_BUTTONS","AiPersonaListEditor","keyValueStore","capabilities","featureFilter","currentLayout","savedLayoutId","found","filteredPersonas","textMatches","default_llm","featureFilterOptions","oldValue","err","onNameFilterChange","onFeatureFilterChange","onLayoutSelect","layoutId","importPersona","fileInput","createElement","accept","display","onchange","handleFileSelect","body","appendChild","removeChild","reader","FileReader","onload","json","uploadPersona","alert","readAsText","personaData","payload","contentType","existingPersona","insertAt","jqXHR","status","responseJSON","errors","confirmButtonLabel","_dropdownSelectBox","PERSONA_SELECTOR_KEY","LLM_SELECTOR_KEY","AiPersonaLlmSelector","allowLLMSelector","botOptions","loadStoredPersona","loadStoredLlm","next","resetTargetRecipients","hasLlmSelector","any","ai_enabled_personas","enabledPersonas","allow_personal_messages","filterable","_value","setItem","setAllowLLMSelector","innerPersona","force_default_llm","currentLlm","botUsername","llmOptions","showLLMSelector","getPersonaIdFromAttrs","personaName","getLlmIdFromAttrs","llmName","getItem","llmId","llmOption","innerLlmOption","AiPersonaToolOptions","showToolOptions","toolsMetadata","metadata","formObjectKeys","toolOptionKeys","_cookText","_fastEdit","_fastEdit2","_decorators","_text","_aiHelperLoading","_smoothStreamer3","AiPostHelperMenu","messageBus","menu","tooltip","MENU_STATES","menuState","suggestion","copyButtonIcon","copyButtonLabel","showFastEdit","showAiButtons","streaming","lastSelectedOption","isSavingFootnote","supportsFastEdit","supportsAddFootnote","smoothStreamer","showFootnoteTooltip","instance","register","identifier","placement","triggers","destroy","_activeAiRequest","footnoteDisabled","item","_showUserCustomPrompts","canEditPost","highlightedTextToggleIcon","showHighlightedText","allowInsertFootnote","enable_markdown_footnotes","display_footnotes_inline","_sanitizeForFootnote","sanitize","progressChannel","_progressChannel","unsubscribe","subscribe","_updateResult","done","updateResult","toggleHighlightedTextPreview","performAiSuggestion","streamableOptions","streamedResult","_handleStreamedResult","progress_channel","method","quoteState","buffer","custom_prompt","suggestions","_handleProofreadOption","getByIdentifier","post_id","postId","client_id","clientId","initialValue","closeFastEdit","cancelAiAction","abort","copySuggestion","setTimeout","hideToolbar","insertFootnote","sanitizedSuggestion","credits","withFootnote","newRaw","raw","DURATION_PRESETS","seconds","nameKey","DurationSelector","selectedPresetId","customHours","Math","round","presetOptions","isCustom","currentDurationSeconds","onPresetChange","updateValue","onCustomHoursChange","onChange","AiSearchDiscoveriesTooltip","discobotDiscoveries","_pluginApi","_url","_topic","_aiBlinkingAnimation","AiSearchDiscoveries","search","loadingConversationTopic","hideDiscoveries","fullDiscoveryToggled","discoveryPreviewLength","discovery","discoveryTimeout","triggerDiscovery","detectSearch","query","resetDiscovery","resetStreaming","withPluginApi","addSearchMenuOnKeyDownCallback","searchMenu","lastQuery","_updateDiscovery","modelUsed","model_used","loadingDiscoveries","activeGlobalSearchTerm","toggleLabel","toggleIcon","canShowExpandtoggle","renderedText","renderPreviewOnly","canContinueConversation","discoveryTimedOut","discoverPersona","ai_bot_discover_persona","discoverPersonaHasBot","isStreaming","continueConvoBtnLabel","timeoutDiscovery","toggleDiscovery","continueConversation","context","continueRequest","topicJSON","topic_id","topic","afterRouteComplete","closeSearchMenu","focusComposer","AiSentimentHorizontalBar","_dStatTiles","_adminConfigAreaCard","_spamTestModal","AiSpam","scanned_count","spam_detected","false_positives","false_negatives","daily_data","stats","isEnabled","selectedLLM","selectedPersonaId","customInstructions","initializeFromModel","spam_scanning_user","admin","fixScanUserNotAdmin","spamScanningUser","reload","is_enabled","llm_id","availableLLMs","autoSelectedLLM","custom_instructions","ai_persona_id","available_llms","llm_model_id","updateLLM","updatePersona","showTestModal","metrics","detected","falsePositives","falseNegatives","flagging_username","spam_score_type","AiSplitTopicSuggester","SUGGESTION_TYPES","tag","input","selectedPosts","cooked","disabled","loadSuggestions","suggestionIds","assistant","s","suggestedCategories","categories","applySuggestion","updateAction","currentValue","isArray","updatedTags","AiSummarySkeleton","_aiToolTestModal","AiToolEditorForm","uploadedFiles","PARAMETER_TYPES","editingModel","mappedParameter","isEnum","tool_name","summary","script","toggleIsEnum","parentName","copiedData","pushObject","uniqueUploads","openTestModal","currentParameterSelection","ragUploadsDescription","rag_images_enabled","exportTool","_aiToolEditorForm","AiToolEditor","_aiTool","AiToolListEditor","lastIndexOfPresets","routeToNewTool","presetId","importTool","uploadTool","ai_tool","toolData","existingTool","_multiSelect","AiToolSelector","AiTopicGist","shouldShow","preference","hasGist","gist","escapedExcerpt","_dateTimeInputRange","_formatter","_chart","AiUsage","toDate","startDate","Date","endDate","selectedFeature","selectedModel","selectedPeriod","isCustomDateActive","loadingData","fetchData","_cachedFeatures","_cachedModels","onFeatureChanged","onModelChanged","addCurrencyChar","innerText","valueElement","closest","takeUsers","start","end","normalizeTimeSeriesData","normalized","interval","period","dataMap","Map","d","currentMoment","isSameOrBefore","dateKey","existingData","total_tokens","total_cached_tokens","total_request_tokens","total_response_tokens","total_requests","total_spending","chartConfig","normalizedData","chartEl","computedStyle","getPropertyValue","request","labels","row","datasets","backgroundColor","responsive","scales","x","stacked","y","beginAtZero","availableFeatures","feature_name","availableModels","periodOptions","setPeriodDates","now","clone","onPeriodSelect","onCustomDateClick","onDateChange","onChangeDateRange","to","_startDate","_endDate","onRefreshDateRange","totalSpending","inputSpending","cachedSpending","outputSpending","toFixed","lt","DoughnutChart","canvasSize","config","totalScore","cutout","radius","maintainAspectRatio","plugins","legend","displayLegend","position","afterDraw","chart","cssVarColor","documentElement","cssFontSize","cssFontFamily","ctx","chartArea","centerX","left","right","centerY","top","bottom","restore","textAlign","textBaseline","fillStyle","font","fillText","dataset","meta","getDatasetMeta","tooltipPosition","nonZeroCount","_dModal","AiLlmQuotaModal","quota","group_name","group_id","closeModal","onSave","availableGroups","existingQuotaGroupIds","max_tokens","max_usages","duration_seconds","asSeconds","setGroupId","validateForm","addError","removeError","_jsonSchemaEditor","AiPersonaResponseFormatEditor","showJsonEditorModal","jsonSchema","uniqueItems","properties","array_type","dependencies","required","editorTitle","responseFormatAsJSON","displayJSON","toDisplay","keyDesc","prettyJSON","openModal","updateResponseFormat","_aiSummarySkeleton","AiSummaryModal","summarizedOn","summarizedBy","newPostsSinceSummary","outdated","canRegenerate","currentIndex","outdatedSummaryWarningText","outdatedText","topRepliesSummaryEnabled","resetSummary","_channel","postStream","topicId","baseSummarizationURL","channel","_updateSummary","generateSummary","fetchURL","_requestSummary","regenerateSummary","ai_topic_summary","summarized_text","topicSummary","shortDateNoYear","updated_at","algorithm","new_posts_since_summary","can_regenerate","handleClose","triggerElement","array","AiToolTestModal","isLoading","parameterValues","updateParameter","runTest","jsonToHtml","output","_conditionalLoadingSection","_dModalCancel","ChatModalChannelSummary","chatApi","sinceHours","availableSummaries","sinceOptions","hours","channelId","summarize","since","_utilities2","DebugAiModal","justCopiedText","activeTab","loadApiRequestInfo","htmlContext","parsed","formattedResponse","raw_response_payload","raw_request_payload","safe","line","escapeExpression","copyRequest","copy","copyResponse","loadLog","logId","prevLog","prev_log_id","nextLog","next_log_id","requestActive","responseActive","requestClicked","preventDefault","responseClicked","_diffStreamer3","ModalDiffModal","finalResult","escapedSelectedText","diffStreamer","diffResult","smoothStreamerResult","isDone","primaryBtnLabel","primaryBtnDisabled","cleanup","resetState","force_default_locale","triggerConfirmChanges","replaceText","cleanupAndClose","reset","ShareModal","shareKey","share_key","generateShareURL","Blob","primaryLabel","deleteLink","share","clipboardCopyAsync","maybeCopyEmbed","contains","stopPropagation","version","artifactEmbed","promise","Promise","resolve","_copyConversation","contextValue","maxContext","allPosts","postNumbers","post_number","postNumber","findPostIdForPostNumber","findLoadedPost","updateHtmlContext","copyContext","shareConversationModal","showShareConversationModal","Input","SpamTestModal","postUrl","scanLog","isSpam","post_url","is_spam","log","_thumbnailSuggestionItem","ThumbnailSuggestions","selectedImages","findThumbnails","isDisabled","addSelection","selection","thumbnailMarkdown","original_filename","short_url","removeSelection","thumbnail","appendSelectedImages","imageMarkdown","dEditorInput","setSelectionRange","execCommand","ModelAccuracies","AiCancelStreamingButton","cancelStreaming","_debugAiModal","AiDebugButton","isPostFromAiBot","debugAiResponse","_shareModal","shareAiResponse","showFeedback","AiPersonaFlair","isGPTBot","RagOptionsFk","showIndexingOptions","toggleIndexingOptions","indexingOptionsText","visionLlms","RagUploadProgress","updatedProgress","trackProgress","onIndexingUpdate","total","indexed","calculateProgress","progress","ceil","fullyIndexed","ragIndexingStatuses","_debounce","_ragUploadProgress","RagUploader","filteredUploads","ragUploads","maxFiles","uploadUrl","preventDirectS3Uploads","uploadedFile","newUpload","statusText","debouncedSearch","didReceiveAttrs","cancelAllUploads","targetName","statuses","_updateTargetWithUploads","acceptedFileTypes","allowImages","submitFiles","openPicker","cancelUploading","toUpperCase","onRemove","_reviewableCreatedBy","_reviewablePostHeader","_chatChannelTitle","_chatChannel","_modelAccuracies","ReviewableAiChatMessage","chatChannel","reviewable","chat_channel","_reviewablePostEdits","_reviewableTopicLink","ReviewableAiPost","_aiHelperSuggestions","AiCategorySuggester","untriggers","triggerIcon","showSuggestionButton","composerFields","reply","showTrigger","MIN_CHARACTER_COUNT","topicState","ai_embeddings_enabled","showDropdown","buffered","showSuggestionsError","_discourseTag","AiTagSuggester","disableTagsChooser","tagSelectorHasValues","removedAppliedTag","maxTags","max_tags_per_topic","tags","class","AiTitleSuggester","editTopicTitleField","ThumbnailSuggestionItem","selected","selectIcon","selectLabel","toggleSelection","AISentimentDashboard","ai_sentiment_enabled","_aiCategorySuggester","_showAiHelper","AiCategorySuggestion","showComposerAiHelper","_aiTagSuggester","AiTagSuggestion","_aiTitleSuggester","AiTitleSuggestion","_default","composerModel","renderChatWarning","ai_bot_enable_chat_warning","aiBotClasses","computed","isAiBotChat","targetRecipients","recipients","SearchResultDecoration","_aiGistToggle","topicThumbnails","enabledForRoute","BotSelector","reciepients","isBotMessage","setPersonaIdOnComposer","metaData","setTargetRecipientsOnComposer","_dTextarea","_autoFocus","AiImageCaptionContainer","imageCaptionPopup","updateCaption","newCaption","saveCaption","hidePopup","resizeTextarea","borderTopWidth","borderBottomWidth","scrollTop","showPopup","_request","toggleLoadingState","AiEditSuggestionButton","showPostAIHelper","_activeAIRequest","prompt","suggest","_aiSearchDiscoveries","_aiSearchDiscoveriesTooltip","AiFullPageDiscobotDiscoveries","can_use_ai_bot_discover_persona","user_option","ai_search_discoveries","previewLength","viewport","md","_aiFullPageSearch","AiFullPageSearchConnector","ai_embeddings_semantic_search_enabled","_aiPostHelperMenu","AiPostHelperTrigger","postHighlighted","currentMenu","menuData","selectedRange","highlightSelectedText","range","startContainer","nodeType","Node","TEXT_NODE","startOffset","newStartNode","splitText","setStart","endContainer","endOffset","walker","createTreeWalker","commonAncestorContainer","NodeFilter","SHOW_TEXT","acceptNode","node","intersectsNode","FILTER_ACCEPT","FILTER_REJECT","textNodes","currentNode","nextNode","textNode","highlight","cloneNode","parentNode","replaceChild","getSelection","removeAllRanges","removeHighlightedText","span","createTextNode","textContent","showAiPostHelperMenu","component","interactive","trapTab","closeOnScroll","modalForMobile","fallbackPlacements","updateOnScroll","_loadingSpinner","AiQuickSearchLoader","quickSearch","_assistantItem","_search3","AiQuickSemanticSearch","ai_embeddings_semantic_quick_search_enabled","searchTermChanged","invalidTerm","performSearch","searchResults","resultTypes","AiDiscobotDiscoveries","AiQuickSearchInfo","termTooShort","_aiSplitTopicSuggester","_aiTopicGist","AiTopicGistPlacement","discourse_ai_enabled","ai_summarization_enabled","_aiSummaryModal","AiSummaryTrigger","isAiConversation","is_bot_pm","openAiSummaryModal","_participant","_addPmParticipants","AiConversationInvite","header","participants","topicInfo","details","allowed_users","showInvite","inviteModel","AiPreferences","_adminDashboardTab","AdminDashboardSentiment","emotionFilters","emotions","_controller","DiscourseAiBotConversations","_environment","PreferencesAiController","saved","booleanSettings","settingName","checked","isIncluded","ai_bot_enabled","userSettingAttributes","isTesting","initialize","container","addAdminPluginConfigurationNav","_adminReportEmotion","require","registerReportModeComponent","registerValueTransformer","_aiArtifact","initializeAiArtifacts","decorateCookedElement","helper","renderGlimmer","artifactElement","getAttribute","hasAttribute","attr","attributes","startsWith","onlyStream","_deprecated","_renderGlimmer","_aiBotHeaderIcon","_aiPersonaFlair","_aiCancelStreamingButton","_aiDebugButton","_aiShareButton","_progressHandlers","allowDebug","initializeAIBotReplies","dag","firstButtonKey","before","after","initializePauseButton","modifyClass","pluginId","onAIBotStreamedReply","streamPostText","_super","isPrivateMessage","initializePersonaDecorator","renderAfterWrapperOutlet","withSilencedDeprecations","decorateWidget","dec","botType","getBotType","widget","attach","ai_persona_name","llm_name","registerWidgetShim","initializeWidgetPersonaDecorator","can_debug_ai_bot_conversations","headerIcons","attachHeaderIcon","getCurrentUser","archetype","initializeDebugButton","_ref4","initializeShareButton","registerTopicFooterButton","dependentKeys","displayed","can_share_ai_bot_conversations","initializeShareTopicButton","_api","_chatModalChannelSummary","apiInitializer","chatService","canSummarize","can_summarize","userCanChat","registerChatComposerButton","translatedLabel","activeChannel","_aiBotSidebarNewConversation","aiConversationsSidebarManager","addSidebarPanel","BaseCustomSidebarPanel","hidden","displayHeader","expandActiveSection","renderInOutlet","transition","forceCustomSidebar","stopForcingCustomSidebar","gistService","_aiComposerHelperMenu","onToolbarCreate","toolbar","composerContent","addButton","preventFocus","hideShortcutInTitle","shortcutAction","condition","sendAction","initializeAiHelperTrigger","buttonAttrs","ai_helper_enabled_features","can_use_assistant","addComposerImageWrapperButton","popupTrigger","buttonWrapper","imageIndex","imageSrc","mobileView","image_url","image_url_type","caption","addSaveableUserOptionField","classNameBindings","can_see_sentiment_reports","addAdminSidebarSectionLink","routeModels","_basicTopicList","RelatedTopics","ai_embeddings_semantic_related_topics_enabled","registerMoreTopicsTab","relatedTopics","Superclass","related_topics","relatedTopicsCache","_setSuggestedTopics","_cookie","ai_translation_enabled","registerCustomPostMessageCallback","topicController","triggerChangedPost","_getOwner","_composer","_shareFullTopicModal","targetBot","skipFocus","topicBody","personaUsername","draftKey","getTime","PRIVATE_MESSAGE","topicTitle","archetypeId","warningsDisabled","open","fallbackToNewTopic","openOpts","ensureBotMap","enabledChatBotMap","MAX_PERSONA_USER_ID","getOwnerWithFallback","_application","reloadFn","showProgressBar","actions","_postUpdater","MIN_LETTERS_PER_INTERVAL","addProgressDot","lastBlock","lastChild","lastNonEmptyChild","ELEMENT_NODE","dotElement","applyProgress","updaterClass","updaterInstance","progressTimer","PROGRESS_INTERVAL","noop","aiStreamingStatus","ensureProgress","GIVE_UP_INTERVAL","MAX_FLUSH_TIME","previousSibling","updater","startTime","oldRaw","letters","floor","substring","setRaw","setCooked","keepPolling","promises","postStatus","postUpdater","all","handleProgress","_loadMorphlex","_streamUpdater","PostUpdater","morphingOptions","beforeAttributeUpdated","attributeName","postElement","cook","offsetWidth","cookedElement","innerHTML","morphInner","_text3","AiTopicSummary","regenerated","showSummaryBox","canCollapseSummary","loadingSummary","processUpdate","summarized_on","collapse","fromPostNumber","toPostNumber","stream","postIds","post_ids","include_raw","post_stream","generateClipboard","_loadJsDiff","DiffStreamer","words","lastResultText","isThinking","typingTimer","currentWordIndex","currentCharIndex","jsDiff","bufferedToken","rushMode","rushBatchSize","rushTicksLeft","receivedFinalUpdate","typingDelay","loadJSDiff","newTextKey","newText","tail","tokenize","charsLeft","formatDiffWithTags","diffWordsWithSpace","streamNextChar","delta","combined","pop","streamingDiff","original","max","head","last","at","secondLast","added","removed","limit","emitted","token","charAt","refresh","useStreaming","delay","wrapChunk","diffArray","highlightLastWord","part","match","tok","lastIndex","chunk","buf","_helperEnabled","ai_helper_enabled","featureType","enableHelper","enableAssistant","canShowInPM","ai_helper_allowed_in_pm","enableFeature","privateMessage","can_use_assistant_in_post","SmoothStreamer","streamedText","streamedTextLength","getRealtimeText","setRealtimeText","realtimeText","cancelTypingTimer","onTextUpdate","typeCharacter","html","_discourse","DiscourseAiSharedConversationShowRoute","beforeModel","external_links_in_new_tab","intent","redirect","_restrictedUser","PreferencesAiRoute","setupController","controller","_uploads","AiBotConversationsHiddenSubmit","focusInput","destroyDraft","uploadData","min_personal_message_post_length","didCancel","rawContent","uploadMarkdown","getUploadMarkdown","target_recipients","meta_data","slug","topic_slug","_panels","_aiBotSidebarEmptyState","AiConversationsSidebarManager","topics","sections","isFetching","page","_registered","_hasScrollListener","_scrollElement","_didInit","_debouncedScrollHandler","clientHeight","fetchMessages","_handleNewBotPM","_attachScrollListener","addEmptyStateClass","toggle","isForcingSidebar","setPanel","setSeparatedMode","hideSwitchPanelButtons","_removeScrollListener","isAdmin","ADMIN_PANEL","MAIN_PANEL","isFirstPage","conversations","per_page","_rebuildSections","_watchForTitleUpdate","_subscribedTopicIds","_applyTitleUpdate","newTitle","fresh","todaySection","links","postedAtMs","last_posted_at","valueOf","diffDays","dateGroup","sec","getFullYear","getMonth","autoUpdatingRelativeAge","last_read_post_number","addSidebarSection","BaseCustomSidebarSection","manager","events","triggerEvent","emptyStateComponent","DiscobotDiscoveries","showDiscoveryTitle","disableDiscoveries","Gists","localStorage","list","ai_topic_gist","ImageCaptionPopup","matchingPlaceholder","IMAGE_MARKDOWN_REGEX","replacement","QuickSearch","_emberRouteTemplate","_adminReport","_dashboardPeriodSelector","_aiBotConversations","_preferenceCheckbox","_saveControls","allowList"],"sources":["discourse/plugins/discourse-ai/discourse/admin-discourse-ai-plugin-route-map.js","discourse/plugins/discourse-ai/discourse/admin-discourse-ai-route-map.js","discourse/plugins/discourse-ai/discourse/admin/adapters/ai-embedding.js","discourse/plugins/discourse-ai/discourse/admin/adapters/ai-feature.js","discourse/plugins/discourse-ai/discourse/admin/adapters/ai-llm.js","discourse/plugins/discourse-ai/discourse/admin/adapters/ai-persona.js","discourse/plugins/discourse-ai/discourse/admin/adapters/ai-tool.js","discourse/plugins/discourse-ai/discourse/admin/models/ai-embedding.js","discourse/plugins/discourse-ai/discourse/admin/models/ai-feature.js","discourse/plugins/discourse-ai/discourse/admin/models/ai-llm.js","discourse/plugins/discourse-ai/discourse/admin/models/ai-persona.js","discourse/plugins/discourse-ai/discourse/admin/models/ai-tool.js","discourse/plugins/discourse-ai/discourse/components/admin-report-emotion.js","discourse/plugins/discourse-ai/discourse/components/admin-report-sentiment-analysis.js","discourse/plugins/discourse-ai/discourse/components/ai-artifact.js","discourse/plugins/discourse-ai/discourse/components/ai-blinking-animation.js","discourse/plugins/discourse-ai/discourse/components/ai-bot-conversations.js","discourse/plugins/discourse-ai/discourse/components/ai-bot-header-icon.js","discourse/plugins/discourse-ai/discourse/components/ai-bot-sidebar-empty-state.js","discourse/plugins/discourse-ai/discourse/components/ai-bot-sidebar-new-conversation.js","discourse/plugins/discourse-ai/discourse/components/ai-composer-helper-menu.js","discourse/plugins/discourse-ai/discourse/components/ai-default-llm-selector.js","discourse/plugins/discourse-ai/discourse/components/ai-embedding-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-embeddings-list-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-features-list.js","discourse/plugins/discourse-ai/discourse/components/ai-features.js","discourse/plugins/discourse-ai/discourse/components/ai-full-page-search.js","discourse/plugins/discourse-ai/discourse/components/ai-gist-toggle.js","discourse/plugins/discourse-ai/discourse/components/ai-helper-custom-prompt.js","discourse/plugins/discourse-ai/discourse/components/ai-helper-loading.js","discourse/plugins/discourse-ai/discourse/components/ai-helper-options-list.js","discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave.js","discourse/plugins/discourse-ai/discourse/components/ai-llm-editor-form.js","discourse/plugins/discourse-ai/discourse/components/ai-llm-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-llm-selector.js","discourse/plugins/discourse-ai/discourse/components/ai-llms-list-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-persona-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-persona-example.js","discourse/plugins/discourse-ai/discourse/components/ai-persona-list-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-persona-llm-selector.js","discourse/plugins/discourse-ai/discourse/components/ai-persona-tool-options.js","discourse/plugins/discourse-ai/discourse/components/ai-post-helper-menu.js","discourse/plugins/discourse-ai/discourse/components/ai-quota-duration-selector.js","discourse/plugins/discourse-ai/discourse/components/ai-search-discoveries-tooltip.js","discourse/plugins/discourse-ai/discourse/components/ai-search-discoveries.js","discourse/plugins/discourse-ai/discourse/components/ai-sentiment-horizontal-bar.js","discourse/plugins/discourse-ai/discourse/components/ai-spam.js","discourse/plugins/discourse-ai/discourse/components/ai-split-topic-suggester.js","discourse/plugins/discourse-ai/discourse/components/ai-summary-skeleton.js","discourse/plugins/discourse-ai/discourse/components/ai-tool-editor-form.js","discourse/plugins/discourse-ai/discourse/components/ai-tool-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-tool-list-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-tool-selector.js","discourse/plugins/discourse-ai/discourse/components/ai-topic-gist.js","discourse/plugins/discourse-ai/discourse/components/ai-usage.js","discourse/plugins/discourse-ai/discourse/components/doughnut-chart.js","discourse/plugins/discourse-ai/discourse/components/modal/ai-llm-quota-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/ai-persona-response-format-editor.js","discourse/plugins/discourse-ai/discourse/components/modal/ai-summary-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/ai-tool-test-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/chat-modal-channel-summary.js","discourse/plugins/discourse-ai/discourse/components/modal/debug-ai-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/diff-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/share-full-topic-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/share-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/spam-test-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/thumbnail-suggestions.js","discourse/plugins/discourse-ai/discourse/components/model-accuracies.js","discourse/plugins/discourse-ai/discourse/components/post-menu/ai-cancel-streaming-button.js","discourse/plugins/discourse-ai/discourse/components/post-menu/ai-debug-button.js","discourse/plugins/discourse-ai/discourse/components/post-menu/ai-share-button.js","discourse/plugins/discourse-ai/discourse/components/post/ai-persona-flair.js","discourse/plugins/discourse-ai/discourse/components/rag-options-fk.js","discourse/plugins/discourse-ai/discourse/components/rag-upload-progress.js","discourse/plugins/discourse-ai/discourse/components/rag-uploader.js","discourse/plugins/discourse-ai/discourse/components/reviewable-ai-chat-message.js","discourse/plugins/discourse-ai/discourse/components/reviewable-ai-post.js","discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-category-suggester.js","discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-tag-suggester.js","discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-title-suggester.js","discourse/plugins/discourse-ai/discourse/components/thumbnail-suggestion-item.js","discourse/plugins/discourse-ai/discourse/connectors/admin-dashboard-tabs-after/admin-sentiment-dashbboard.js","discourse/plugins/discourse-ai/discourse/connectors/after-composer-category-input/ai-category-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/after-composer-tag-input/ai-tag-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/after-composer-title-input/ai-title-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/after-d-editor/composer-open.js","discourse/plugins/discourse-ai/discourse/connectors/after-search-result-entry/search-result-decoration.js","discourse/plugins/discourse-ai/discourse/connectors/before-create-topic-button/topic-list-gist-toggle.js","discourse/plugins/discourse-ai/discourse/connectors/composer-fields/persona-llm-selector.js","discourse/plugins/discourse-ai/discourse/connectors/edit-topic-category__after/ai-category-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/edit-topic-tags__after/ai-tag-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/edit-topic-title__after/ai-title-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/editor-preview/ai-image-caption-container.js","discourse/plugins/discourse-ai/discourse/connectors/fast-edit-footer-after/ai-edit-suggestion-button.js","discourse/plugins/discourse-ai/discourse/connectors/full-page-search-below-search-header/ai-full-page-discobot-discoveries.js","discourse/plugins/discourse-ai/discourse/connectors/full-page-search-below-search-header/ai-full-page-search.js","discourse/plugins/discourse-ai/discourse/connectors/post-text-buttons/ai-post-helper-trigger.js","discourse/plugins/discourse-ai/discourse/connectors/search-menu-before-advanced-search/ai-quick-search-loader.js","discourse/plugins/discourse-ai/discourse/connectors/search-menu-initial-options/ai-quick-semantic-search.js","discourse/plugins/discourse-ai/discourse/connectors/search-menu-results-top/ai-discobot-discoveries.js","discourse/plugins/discourse-ai/discourse/connectors/search-menu-results-top/ai-quick-search-info.js","discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-category-after/ai-category-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-tag-after/ai-tag-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-title-after/ai-title-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/topic-list-before-category/ai-topic-gist-placement.js","discourse/plugins/discourse-ai/discourse/connectors/topic-map-expanded-after/ai-summary-trigger.js","discourse/plugins/discourse-ai/discourse/connectors/topic-map-participants-after/ai-conversation-invite.js","discourse/plugins/discourse-ai/discourse/connectors/user-preferences-nav/ai-preferences.js","discourse/plugins/discourse-ai/discourse/controllers/admin-dashboard-sentiment.js","discourse/plugins/discourse-ai/discourse/controllers/discourse-ai-bot-conversations.js","discourse/plugins/discourse-ai/discourse/controllers/preferences-ai.js","discourse/plugins/discourse-ai/discourse/discourse-ai-bot-dashboard-route-map.js","discourse/plugins/discourse-ai/discourse/discourse-ai-shared-conversation-show-route-map.js","discourse/plugins/discourse-ai/discourse/initializers/admin-plugin-configuration-nav.js","discourse/plugins/discourse-ai/discourse/initializers/admin-reports.js","discourse/plugins/discourse-ai/discourse/initializers/ai-artifacts.js","discourse/plugins/discourse-ai/discourse/initializers/ai-bot-replies.js","discourse/plugins/discourse-ai/discourse/initializers/ai-chat-summarization.js","discourse/plugins/discourse-ai/discourse/initializers/ai-conversations-sidebar.js","discourse/plugins/discourse-ai/discourse/initializers/ai-gist-topic-list-class.js","discourse/plugins/discourse-ai/discourse/initializers/ai-helper.js","discourse/plugins/discourse-ai/discourse/initializers/ai-image-caption.js","discourse/plugins/discourse-ai/discourse/initializers/ai-search-discoveries.js","discourse/plugins/discourse-ai/discourse/initializers/ai-semantic-search.js","discourse/plugins/discourse-ai/discourse/initializers/ai-sentiment-admin-nav.js","discourse/plugins/discourse-ai/discourse/initializers/related-topics.js","discourse/plugins/discourse-ai/discourse/initializers/translation.js","discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper.js","discourse/plugins/discourse-ai/discourse/lib/ai-helper-suggestions.js","discourse/plugins/discourse-ai/discourse/lib/ai-streamer/progress-handlers.js","discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/post-updater.js","discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/stream-updater.js","discourse/plugins/discourse-ai/discourse/lib/ai-topic-summary.js","discourse/plugins/discourse-ai/discourse/lib/copy-conversation.js","discourse/plugins/discourse-ai/discourse/lib/diff-streamer.js","discourse/plugins/discourse-ai/discourse/lib/show-ai-helper.js","discourse/plugins/discourse-ai/discourse/lib/smooth-streamer.js","discourse/plugins/discourse-ai/discourse/lib/utilities.js","discourse/plugins/discourse-ai/discourse/preferences-ai-route-map.js","discourse/plugins/discourse-ai/discourse/routes/discourse-ai-shared-conversation-show.js","discourse/plugins/discourse-ai/discourse/routes/preferences-ai.js","discourse/plugins/discourse-ai/discourse/services/ai-bot-conversations-hidden-submit.js","discourse/plugins/discourse-ai/discourse/services/ai-conversations-sidebar-manager.js","discourse/plugins/discourse-ai/discourse/services/discobot-discoveries.js","discourse/plugins/discourse-ai/discourse/services/gists.js","discourse/plugins/discourse-ai/discourse/services/image-caption-popup.js","discourse/plugins/discourse-ai/discourse/services/quick-search.js","discourse/plugins/discourse-ai/discourse/templates/admin-dashboard-sentiment.js","discourse/plugins/discourse-ai/discourse/templates/discourse-ai-bot-conversations.js","discourse/plugins/discourse-ai/discourse/templates/preferences/ai.js","discourse/plugins/discourse-ai/lib/discourse-markdown/ai-tags.js"],"sourcesContent":["define(\"discourse/plugins/discourse-ai/discourse/admin-discourse-ai-plugin-route-map\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    resource: \"admin.adminPlugins.show\",\n    path: \"/plugins\",\n    map() {\n      this.route(\"discourse-ai-personas\", {\n        path: \"ai-personas\"\n      }, function () {\n        this.route(\"new\");\n        this.route(\"edit\", {\n          path: \"/:id/edit\"\n        });\n      });\n      this.route(\"discourse-ai-llms\", {\n        path: \"ai-llms\"\n      }, function () {\n        this.route(\"new\");\n        this.route(\"edit\", {\n          path: \"/:id/edit\"\n        });\n      });\n      this.route(\"discourse-ai-tools\", {\n        path: \"ai-tools\"\n      }, function () {\n        this.route(\"new\");\n        this.route(\"edit\", {\n          path: \"/:id/edit\"\n        });\n      });\n      this.route(\"discourse-ai-spam\", {\n        path: \"ai-spam\"\n      });\n      this.route(\"discourse-ai-usage\", {\n        path: \"ai-usage\"\n      });\n      this.route(\"discourse-ai-embeddings\", {\n        path: \"ai-embeddings\"\n      }, function () {\n        this.route(\"new\");\n        this.route(\"edit\", {\n          path: \"/:id/edit\"\n        });\n      });\n      this.route(\"discourse-ai-features\", {\n        path: \"ai-features\"\n      }, function () {\n        this.route(\"edit\", {\n          path: \"/:id/edit\"\n        });\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/admin-discourse-ai-route-map\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    resource: \"admin.dashboard\",\n    path: \"/dashboard\",\n    map() {\n      this.route(\"admin.dashboardSentiment\", {\n        path: \"/dashboard/sentiment\",\n        resetNamespace: true\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/adapters/ai-embedding\", [\"exports\", \"discourse/adapters/rest\"], function (_exports, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class Adapter extends _rest.default {\n    jsonMode = true;\n    basePath() {\n      return \"/admin/plugins/discourse-ai/\";\n    }\n    pathFor(store, type, findArgs) {\n      // removes underscores which are implemented in base\n      let path = this.basePath(store, type, findArgs) + store.pluralize(this.apiNameFor(type));\n      return this.appendQueryParams(path, findArgs);\n    }\n    apiNameFor() {\n      return \"ai-embedding\";\n    }\n  }\n  _exports.default = Adapter;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/adapters/ai-feature\", [\"exports\", \"discourse/adapters/rest\"], function (_exports, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiFeatureAdapter extends _rest.default {\n    jsonMode = true;\n    basePath() {\n      return \"/admin/plugins/discourse-ai/\";\n    }\n    pathFor(store, type, findArgs) {\n      // removes underscores which are implemented in base\n      let path = this.basePath(store, type, findArgs) + store.pluralize(this.apiNameFor(type));\n      return this.appendQueryParams(path, findArgs);\n    }\n    apiNameFor() {\n      return \"ai-feature\";\n    }\n  }\n  _exports.default = AiFeatureAdapter;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/adapters/ai-llm\", [\"exports\", \"discourse/adapters/rest\"], function (_exports, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class Adapter extends _rest.default {\n    jsonMode = true;\n    basePath() {\n      return \"/admin/plugins/discourse-ai/\";\n    }\n    pathFor(store, type, findArgs) {\n      // removes underscores which are implemented in base\n      let path = this.basePath(store, type, findArgs) + store.pluralize(this.apiNameFor(type));\n      return this.appendQueryParams(path, findArgs);\n    }\n    apiNameFor() {\n      return \"ai-llm\";\n    }\n  }\n  _exports.default = Adapter;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/adapters/ai-persona\", [\"exports\", \"discourse/adapters/rest\"], function (_exports, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class Adapter extends _rest.default {\n    jsonMode = true;\n    basePath() {\n      return \"/admin/plugins/discourse-ai/\";\n    }\n    pathFor(store, type, findArgs) {\n      // removes underscores which are implemented in base\n      let path = this.basePath(store, type, findArgs) + store.pluralize(this.apiNameFor(type));\n      return this.appendQueryParams(path, findArgs);\n    }\n    apiNameFor() {\n      return \"ai-persona\";\n    }\n  }\n  _exports.default = Adapter;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/adapters/ai-tool\", [\"exports\", \"discourse/adapters/rest\"], function (_exports, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiToolAdapter extends _rest.default {\n    jsonMode = true;\n    basePath() {\n      return \"/admin/plugins/discourse-ai/\";\n    }\n    pathFor(store, type, findArgs) {\n      // removes underscores which are implemented in base\n      let path = this.basePath(store, type, findArgs) + store.pluralize(this.apiNameFor(type));\n      return this.appendQueryParams(path, findArgs);\n    }\n    apiNameFor() {\n      return \"ai-tool\";\n    }\n  }\n  _exports.default = AiToolAdapter;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/models/ai-embedding\", [\"exports\", \"discourse/lib/ajax\", \"discourse/models/rest\"], function (_exports, _ajax, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiEmbedding extends _rest.default {\n    createProperties() {\n      return this.getProperties(\"id\", \"display_name\", \"dimensions\", \"provider\", \"tokenizer_class\", \"dimensions\", \"url\", \"api_key\", \"max_sequence_length\", \"provider_params\", \"pg_function\", \"embed_prompt\", \"search_prompt\", \"matryoshka_dimensions\");\n    }\n    updateProperties() {\n      const attrs = this.createProperties();\n      attrs.id = this.id;\n      return attrs;\n    }\n    async testConfig() {\n      return await (0, _ajax.ajax)(`/admin/plugins/discourse-ai/ai-embeddings/test.json`, {\n        data: {\n          ai_embedding: this.createProperties()\n        }\n      });\n    }\n    workingCopy() {\n      const attrs = this.createProperties();\n      return this.store.createRecord(\"ai-embedding\", attrs);\n    }\n  }\n  _exports.default = AiEmbedding;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/models/ai-feature\", [\"exports\", \"discourse/models/rest\"], function (_exports, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiFeature extends _rest.default {\n    createProperties() {\n      return this.getProperties(\"id\", \"module\", \"global_enabled\", \"features\");\n    }\n  }\n  _exports.default = AiFeature;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/models/ai-llm\", [\"exports\", \"discourse/lib/ajax\", \"discourse/models/rest\"], function (_exports, _ajax, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiLlm extends _rest.default {\n    createProperties() {\n      return this.getProperties(\"id\", \"display_name\", \"name\", \"provider\", \"tokenizer\", \"max_prompt_tokens\", \"max_output_tokens\", \"url\", \"api_key\", \"enabled_chat_bot\", \"provider_params\", \"vision_enabled\", \"input_cost\", \"cached_input_cost\", \"output_cost\");\n    }\n    updateProperties() {\n      const attrs = this.createProperties();\n      attrs.id = this.id;\n      attrs.llm_quotas = this.llm_quotas;\n      return attrs;\n    }\n    async testConfig(llmConfig) {\n      return await (0, _ajax.ajax)(\"/admin/plugins/discourse-ai/ai-llms/test.json\", {\n        data: {\n          ai_llm: llmConfig ?? this.createProperties()\n        }\n      });\n    }\n  }\n  _exports.default = AiLlm;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/models/ai-persona\", [\"exports\", \"discourse/lib/ajax\", \"discourse/models/rest\"], function (_exports, _ajax, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const CREATE_ATTRIBUTES = [\"id\", \"name\", \"description\", \"tools\", \"system_prompt\", \"allowed_group_ids\", \"enabled\", \"system\", \"priority\", \"top_p\", \"temperature\", \"user_id\", \"default_llm_id\", \"force_default_llm\", \"user\", \"max_context_posts\", \"vision_enabled\", \"vision_max_pixels\", \"rag_uploads\", \"rag_chunk_tokens\", \"rag_chunk_overlap_tokens\", \"rag_conversation_chunks\", \"rag_llm_model_id\", \"question_consolidator_llm_id\", \"allow_chat\", \"tool_details\", \"forced_tool_count\", \"allow_personal_messages\", \"allow_topic_mentions\", \"allow_chat_channel_mentions\", \"allow_chat_direct_messages\", \"response_format\", \"examples\"];\n  const SYSTEM_ATTRIBUTES = [\"id\", \"allowed_group_ids\", \"enabled\", \"system\", \"priority\", \"tools\", \"user_id\", \"default_llm_id\", \"force_default_llm\", \"user\", \"max_context_posts\", \"vision_enabled\", \"vision_max_pixels\", \"rag_uploads\", \"rag_chunk_tokens\", \"rag_chunk_overlap_tokens\", \"rag_conversation_chunks\", \"rag_llm_model_id\", \"question_consolidator_llm_id\", \"tool_details\", \"allow_personal_messages\", \"allow_topic_mentions\", \"allow_chat_channel_mentions\", \"allow_chat_direct_messages\"];\n  class AiPersona extends _rest.default {\n    async createUser() {\n      const result = await (0, _ajax.ajax)(`/admin/plugins/discourse-ai/ai-personas/${this.id}/create-user.json`, {\n        type: \"POST\"\n      });\n      this.user = result.user;\n      this.user_id = this.user.id;\n      return this.user;\n    }\n    flattenedToolStructure(data) {\n      return (data.tools || []).map(tName => {\n        return [tName, data.toolOptions[tName] || {}, data.forcedTools.includes(tName)];\n      });\n    }\n\n    // this code is here to convert the wire schema to easier to work with object\n    // on the wire we pass in/out tools as an Array.\n    // [[ToolName, {option1: value, option2: value}, force], ToolName2, ToolName3]\n    // We split it into tools, options and a list of forced ones.\n    populateTools(attrs) {\n      const forcedTools = [];\n      const toolOptions = {};\n      const flatTools = attrs.tools?.map(tool => {\n        if (typeof tool === \"string\") {\n          return tool;\n        } else {\n          let [toolId, options, force] = tool;\n          const mappedOptions = {};\n          for (const optionId in options) {\n            if (!options.hasOwnProperty(optionId)) {\n              continue;\n            }\n            mappedOptions[optionId] = options[optionId];\n          }\n          if (Object.keys(mappedOptions).length > 0) {\n            toolOptions[toolId] = mappedOptions;\n          }\n          if (force) {\n            forcedTools.push(toolId);\n          }\n          return toolId;\n        }\n      });\n      attrs.tools = flatTools;\n      attrs.forcedTools = forcedTools;\n      attrs.toolOptions = toolOptions;\n    }\n    updateProperties() {\n      const attrs = this.system ? this.getProperties(SYSTEM_ATTRIBUTES) : this.getProperties(CREATE_ATTRIBUTES);\n      attrs.id = this.id;\n      return attrs;\n    }\n    createProperties() {\n      return this.getProperties(CREATE_ATTRIBUTES);\n    }\n    fromPOJO(data) {\n      const dataClone = JSON.parse(JSON.stringify(data));\n      const persona = AiPersona.create(dataClone);\n      persona.tools = this.flattenedToolStructure(dataClone);\n      return persona;\n    }\n    toPOJO() {\n      const attrs = this.getProperties(CREATE_ATTRIBUTES);\n      this.populateTools(attrs);\n      attrs.forced_tool_count = this.forced_tool_count || -1;\n      attrs.response_format = attrs.response_format || [];\n      attrs.examples = attrs.examples || [];\n      return attrs;\n    }\n  }\n  _exports.default = AiPersona;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/models/ai-tool\", [\"exports\", \"@ember-compat/tracked-built-ins\", \"discourse/models/rest\"], function (_exports, _trackedBuiltIns, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const CREATE_ATTRIBUTES = [\"id\", \"name\", \"tool_name\", \"description\", \"parameters\", \"script\", \"summary\", \"rag_uploads\", \"rag_chunk_tokens\", \"rag_chunk_overlap_tokens\", \"rag_llm_model_id\", \"enabled\"];\n  class AiTool extends _rest.default {\n    createProperties() {\n      return this.getProperties(CREATE_ATTRIBUTES);\n    }\n    updateProperties() {\n      return this.getProperties(CREATE_ATTRIBUTES);\n    }\n    trackParameters(parameters) {\n      return new _trackedBuiltIns.TrackedArray(parameters?.map(p => {\n        const parameter = new _trackedBuiltIns.TrackedObject(p);\n        if (parameter.enum && parameter.enum.length) {\n          parameter.enum = new _trackedBuiltIns.TrackedArray(parameter.enum);\n        } else {\n          parameter.enum = null;\n        }\n        return parameter;\n      }));\n    }\n    workingCopy() {\n      const attrs = this.getProperties(CREATE_ATTRIBUTES);\n      attrs.parameters = this.trackParameters(attrs.parameters);\n      return this.store.createRecord(\"ai-tool\", attrs);\n    }\n  }\n  _exports.default = AiTool;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/admin-report-emotion\", [\"exports\", \"@ember/component\", \"@ember-decorators/component\", \"discourse/helpers/d-icon\", \"discourse/helpers/number\", \"discourse/lib/get-url\", \"@ember/template-factory\"], function (_exports, _component, _component2, _dIcon, _number, _getUrl, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AdminReportEmotion = dt7948.c(class AdminReportEmotion extends _component.default {\n    get todayLink() {\n      let date = moment().format(\"YYYY-MM-DD\");\n      return this._filterURL(date);\n    }\n    get yesterdayLink() {\n      let date = moment().subtract(1, \"day\").format(\"YYYY-MM-DD\");\n      return this._filterURL(date);\n    }\n    get lastSevenDaysLink() {\n      let date = moment().subtract(1, \"week\").format(\"YYYY-MM-DD\");\n      return this._filterURL(date);\n    }\n    get lastThirtyDaysLink() {\n      let date = moment().subtract(1, \"month\").format(\"YYYY-MM-DD\");\n      return this._filterURL(date);\n    }\n    _baseFilter() {\n      return \"/filter?q=activity-after%3A\";\n    }\n    _model() {\n      return \"%20order%3A\" + this.model.type;\n    }\n    _filterURL(date) {\n      return (0, _getUrl.default)(`${this._baseFilter()}${date}${this._model()}`);\n    }\n    static #_ = (() => (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"cell title\">\n          {{#if this.model.icon}}\n            {{icon this.model.icon}}\n          {{/if}}\n          {{this.model.title}}\n        </div>\n    \n        <div class=\"cell value today-count\">\n          <a href={{this.todayLink}}>\n            {{number this.model.todayCount}}\n          </a>\n        </div>\n    \n        <div\n          class=\"cell value yesterday-count {{this.model.yesterdayTrend}}\"\n          title={{this.model.yesterdayCountTitle}}\n        >\n          <a href={{this.yesterdayLink}}>\n            {{number this.model.yesterdayCount}}\n          </a>\n          {{icon this.model.yesterdayTrendIcon}}\n        </div>\n    \n        <div\n          class=\"cell value sevendays-count {{this.model.sevenDaysTrend}}\"\n          title={{this.model.sevenDaysCountTitle}}\n        >\n          <a href={{this.lastSevenDaysLink}}>\n            {{number this.model.lastSevenDaysCount}}\n          </a>\n          {{icon this.model.sevenDaysTrendIcon}}\n        </div>\n    \n        <div\n          class=\"cell value thirty-days-count {{this.model.thirtyDaysTrend}}\"\n          title={{this.model.thirtyDaysCountTitle}}\n        >\n    \n          <a href={{this.lastThirtyDaysLink}}>\n            {{number this.model.lastThirtyDaysCount}}\n          </a>\n          {{#if this.model.canDisplayTrendIcon}}\n            {{icon this.model.thirtyDaysTrendIcon}}\n          {{/if}}\n        </div>\n      \n    */\n    {\n      \"id\": \"ybkbu1Ax\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"cell title\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"model\\\",\\\"icon\\\"]],[[[1,\\\"        \\\"],[1,[28,[32,0],[[30,0,[\\\"model\\\",\\\"icon\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[1,[30,0,[\\\"model\\\",\\\"title\\\"]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"cell value today-count\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[15,6,[30,0,[\\\"todayLink\\\"]]],[12],[1,\\\"\\\\n        \\\"],[1,[28,[32,1],[[30,0,[\\\"model\\\",\\\"todayCount\\\"]]],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[15,0,[29,[\\\"cell value yesterday-count \\\",[30,0,[\\\"model\\\",\\\"yesterdayTrend\\\"]]]]],[15,\\\"title\\\",[30,0,[\\\"model\\\",\\\"yesterdayCountTitle\\\"]]],[12],[1,\\\"\\\\n      \\\"],[10,3],[15,6,[30,0,[\\\"yesterdayLink\\\"]]],[12],[1,\\\"\\\\n        \\\"],[1,[28,[32,1],[[30,0,[\\\"model\\\",\\\"yesterdayCount\\\"]]],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[1,[28,[32,0],[[30,0,[\\\"model\\\",\\\"yesterdayTrendIcon\\\"]]],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[15,0,[29,[\\\"cell value sevendays-count \\\",[30,0,[\\\"model\\\",\\\"sevenDaysTrend\\\"]]]]],[15,\\\"title\\\",[30,0,[\\\"model\\\",\\\"sevenDaysCountTitle\\\"]]],[12],[1,\\\"\\\\n      \\\"],[10,3],[15,6,[30,0,[\\\"lastSevenDaysLink\\\"]]],[12],[1,\\\"\\\\n        \\\"],[1,[28,[32,1],[[30,0,[\\\"model\\\",\\\"lastSevenDaysCount\\\"]]],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[1,[28,[32,0],[[30,0,[\\\"model\\\",\\\"sevenDaysTrendIcon\\\"]]],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[15,0,[29,[\\\"cell value thirty-days-count \\\",[30,0,[\\\"model\\\",\\\"thirtyDaysTrend\\\"]]]]],[15,\\\"title\\\",[30,0,[\\\"model\\\",\\\"thirtyDaysCountTitle\\\"]]],[12],[1,\\\"\\\\n\\\\n      \\\"],[10,3],[15,6,[30,0,[\\\"lastThirtyDaysLink\\\"]]],[12],[1,\\\"\\\\n        \\\"],[1,[28,[32,1],[[30,0,[\\\"model\\\",\\\"lastThirtyDaysCount\\\"]]],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"model\\\",\\\"canDisplayTrendIcon\\\"]],[[[1,\\\"        \\\"],[1,[28,[32,0],[[30,0,[\\\"model\\\",\\\"thirtyDaysTrendIcon\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/admin-report-emotion.js\",\n      \"scope\": () => [_dIcon.default, _number.default],\n      \"isStrictMode\": true\n    }), this))();\n  }, [(0, _component2.attributeBindings)(\"model.description:title\"), (0, _component2.classNames)(\"admin-report-counters\")]);\n  var _default = _exports.default = AdminReportEmotion;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/admin-report-sentiment-analysis\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/service\", \"ember-modifier\", \"truth-helpers\", \"discourse/components/d-button\", \"discourse/components/horizontal-overflow-nav\", \"discourse/components/post-list\", \"discourse/helpers/body-class\", \"discourse/helpers/category-badge\", \"discourse/helpers/d-icon\", \"discourse/helpers/replace-emoji\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/get-url\", \"discourse/lib/later\", \"discourse/lib/utilities\", \"discourse/models/category\", \"discourse/models/post\", \"discourse-i18n\", \"float-kit/components/d-tooltip\", \"discourse/plugins/discourse-ai/discourse/components/doughnut-chart\", \"discourse/plugins/discourse-ai/discourse/components/ai-sentiment-horizontal-bar\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _didInsert, _service, _emberModifier, _truthHelpers, _dButton, _horizontalOverflowNav, _postList, _bodyClass, _categoryBadge, _dIcon, _replaceEmoji, _ajax, _ajaxError, _getUrl, _later, _utilities, _category, _post, _discourseI18n, _dTooltip, _doughnutChart, _aiSentimentHorizontalBar, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AdminReportSentimentAnalysis extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"selectedChart\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #selectedChart = (() => (dt7948.i(this, \"selectedChart\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"posts\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #posts = (() => (dt7948.i(this, \"posts\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"hasMorePosts\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #hasMorePosts = (() => (dt7948.i(this, \"hasMorePosts\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"nextOffset\", [_tracking.tracked], function () {\n      return 0;\n    }))();\n    #nextOffset = (() => (dt7948.i(this, \"nextOffset\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"showingSelectedChart\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showingSelectedChart = (() => (dt7948.i(this, \"showingSelectedChart\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"activeFilter\", [_tracking.tracked], function () {\n      return \"all\";\n    }))();\n    #activeFilter = (() => (dt7948.i(this, \"activeFilter\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"shareIcon\", [_tracking.tracked], function () {\n      return \"link\";\n    }))();\n    #shareIcon = (() => (dt7948.i(this, \"shareIcon\"), void 0))();\n    setActiveFilter = (() => (0, _emberModifier.modifier)(element => {\n      this.clearActiveFilters(element);\n      element.querySelector(`li[data-filter-type=\"${this.activeFilter}\"] button`).classList.add(\"active\");\n    }))();\n    clearActiveFilters(element) {\n      const filterButtons = element.querySelectorAll(\"li button\");\n      for (let button of filterButtons) {\n        button.classList.remove(\"active\");\n      }\n    }\n    calculateNeutralScore(data) {\n      return data.total_count - (data.positive_count + data.negative_count);\n    }\n    sentimentMapping(sentiment) {\n      switch (sentiment) {\n        case \"positive\":\n          return {\n            id: \"positive\",\n            text: (0, _discourseI18n.i18n)(\"discourse_ai.sentiments.sentiment_analysis.filter_types.positive\"),\n            icon: \"face-smile\"\n          };\n        case \"neutral\":\n          return {\n            id: \"neutral\",\n            text: (0, _discourseI18n.i18n)(\"discourse_ai.sentiments.sentiment_analysis.filter_types.neutral\"),\n            icon: \"face-meh\"\n          };\n        case \"negative\":\n          return {\n            id: \"negative\",\n            text: (0, _discourseI18n.i18n)(\"discourse_ai.sentiments.sentiment_analysis.filter_types.negative\"),\n            icon: \"face-angry\"\n          };\n      }\n    }\n    get groupingType() {\n      const dataSample = this.args.model.data[0];\n      const localePrefix = \"discourse_ai.sentiments.sentiment_analysis.group_types\";\n      return dataSample.category_name ? (0, _discourseI18n.i18n)(`${localePrefix}.category`) : (0, _discourseI18n.i18n)(`${localePrefix}.tag`);\n    }\n    get colors() {\n      return [\"#2ecc71\", \"#95a5a6\", \"#e74c3c\"];\n    }\n    get currentGroupFilter() {\n      return this.args.model.available_filters.find(filter => filter.id === \"group_by\").default;\n    }\n    get currentSortFilter() {\n      return this.args.model.available_filters.find(filter => filter.id === \"sort_by\").default;\n    }\n    get transformedData() {\n      return this.args.model.data.map(data => {\n        return {\n          category: _category.default.findById(data.category_id),\n          title: data.category_name || data.tag_name,\n          scores: [data.positive_count, this.calculateNeutralScore(data), data.negative_count],\n          score_map: {\n            positive: data.positive_count,\n            neutral: this.calculateNeutralScore(data),\n            negative: data.negative_count\n          },\n          total_score: data.total_count,\n          widths: {\n            positive: data.positive_count / data.total_count * 100,\n            neutral: this.calculateNeutralScore(data) / data.total_count * 100,\n            negative: data.negative_count / data.total_count * 100\n          }\n        };\n      });\n    }\n    get filteredPosts() {\n      if (!this.posts || !this.posts.length) {\n        return [];\n      }\n      return this.posts.filter(post => {\n        post.topic_title = (0, _replaceEmoji.default)(post.topic_title);\n        post.category = _category.default.findById(post.category_id);\n        if (this.activeFilter === \"all\") {\n          return true;\n        }\n        return post.sentiment === this.activeFilter;\n      });\n    }\n    get postFilters() {\n      return [{\n        id: \"all\",\n        text: `${(0, _discourseI18n.i18n)(\"discourse_ai.sentiments.sentiment_analysis.filter_types.all\")} (${this.selectedChart.total_score})`,\n        icon: \"bars-staggered\",\n        action: () => {\n          this.activeFilter = \"all\";\n        }\n      }, {\n        id: \"positive\",\n        text: `${(0, _discourseI18n.i18n)(\"discourse_ai.sentiments.sentiment_analysis.filter_types.positive\")} (${this.selectedChart.scores[0]})`,\n        icon: \"face-smile\",\n        action: () => {\n          this.activeFilter = \"positive\";\n        }\n      }, {\n        id: \"neutral\",\n        text: `${(0, _discourseI18n.i18n)(\"discourse_ai.sentiments.sentiment_analysis.filter_types.neutral\")} (${this.selectedChart.scores[1]})`,\n        icon: \"face-meh\",\n        action: () => {\n          this.activeFilter = \"neutral\";\n        }\n      }, {\n        id: \"negative\",\n        text: `${(0, _discourseI18n.i18n)(\"discourse_ai.sentiments.sentiment_analysis.filter_types.negative\")} (${this.selectedChart.scores[2]})`,\n        icon: \"face-angry\",\n        action: () => {\n          this.activeFilter = \"negative\";\n        }\n      }];\n    }\n    async postRequest() {\n      return await (0, _ajax.ajax)(\"/discourse-ai/sentiment/posts\", {\n        data: {\n          group_by: this.currentGroupFilter,\n          group_value: this.selectedChart?.title,\n          start_date: this.args.model.start_date,\n          end_date: this.args.model.end_date,\n          offset: this.nextOffset\n        }\n      });\n    }\n    async openToChart() {\n      const queryParams = this.router.currentRoute.queryParams;\n      if (queryParams.selectedChart) {\n        this.selectedChart = this.transformedData.find(data => data.title === queryParams.selectedChart);\n        if (!this.selectedChart) {\n          return;\n        }\n        this.showingSelectedChart = true;\n        try {\n          const response = await this.postRequest();\n          this.posts = response.posts.map(post => _post.default.create(post));\n          this.hasMorePosts = response.has_more;\n          this.nextOffset = response.next_offset;\n        } catch (e) {\n          (0, _ajaxError.popupAjaxError)(e);\n        }\n      }\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"openToChart\", [_object.action]))();\n    async showDetails(data) {\n      if (this.selectedChart === data) {\n        // Don't do anything if the same chart is clicked again\n        return;\n      }\n      const currentQueryParams = this.router.currentRoute.queryParams;\n      const currentFilters = currentQueryParams?.filters ? JSON.parse(currentQueryParams.filters) : {};\n      this.router.transitionTo(this.router.currentRoute.name, {\n        queryParams: {\n          ...currentQueryParams,\n          filters: currentFilters,\n          selectedChart: data.title\n        }\n      });\n      this.selectedChart = data;\n      this.showingSelectedChart = true;\n      try {\n        const response = await this.postRequest();\n        this.posts = response.posts.map(post => _post.default.create(post));\n        this.hasMorePosts = response.has_more;\n        this.nextOffset = response.next_offset;\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      }\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"showDetails\", [_object.action]))();\n    async fetchMorePosts() {\n      if (!this.hasMorePosts || this.selectedChart === null) {\n        return [];\n      }\n      try {\n        const response = await this.postRequest();\n        this.hasMorePosts = response.has_more;\n        this.nextOffset = response.next_offset;\n        const mappedPosts = response.posts.map(post => _post.default.create(post));\n        this.posts.pushObjects(mappedPosts);\n        return mappedPosts;\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      }\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"fetchMorePosts\", [_object.action]))();\n    backToAllCharts() {\n      this.showingSelectedChart = false;\n      this.selectedChart = null;\n      this.activeFilter = \"all\";\n      this.posts = [];\n      const currentQueryParams = this.router.currentRoute.queryParams;\n      const currentFilters = currentQueryParams?.filters ? JSON.parse(currentQueryParams.filters) : {};\n      this.router.transitionTo(this.router.currentRoute.name, {\n        queryParams: {\n          ...currentQueryParams,\n          filters: currentFilters,\n          selectedChart: null\n        }\n      });\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"backToAllCharts\", [_object.action]))();\n    shareChart() {\n      const url = this.router.currentURL;\n      if (!url) {\n        return;\n      }\n      (0, _utilities.clipboardCopy)((0, _getUrl.getAbsoluteURL)(url));\n      this.shareIcon = \"check\";\n      (0, _later.default)(() => {\n        this.shareIcon = \"link\";\n      }, 2000);\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"shareChart\", [_object.action]))();\n    static #_14 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <span {{didInsert this.openToChart}}></span>\n    \n        {{#unless this.showingSelectedChart}}\n          <div class=\"admin-report-sentiment-analysis\">\n            <table class=\"sentiment-analysis-table md-table\">\n              <thead>\n                <th>{{this.groupingType}}</th>\n                <th>{{i18n\n                    \"discourse_ai.sentiments.sentiment_analysis.table.total_count\"\n                  }}</th>\n                <th>{{i18n\n                    \"discourse_ai.sentiments.sentiment_analysis.table.sentiment\"\n                  }}</th>\n              </thead>\n    \n              <tbody>\n                {{#each this.transformedData as |data|}}\n                  <tr\n                    class=\"sentiment-analysis-table__row\"\n                    role=\"button\"\n                    {{on \"click\" (fn this.showDetails data)}}\n                  >\n                    <td class=\"sentiment-analysis-table__title\">\n                      {{#if data.category}}\n                        {{categoryBadge data.category}}\n                      {{else}}\n                        {{data.title}}\n                      {{/if}}\n                    </td>\n                    <td\n                      class=\"sentiment-analysis-table__total-score\"\n                    >{{data.total_score}}</td>\n                    <td class=\"sentiment-horizontal-bar\">\n                      <AiSentimentHorizontalBar\n                        @type=\"positive\"\n                        @score={{data.score_map.positive}}\n                        @width={{data.widths.positive}}\n                      />\n                      <AiSentimentHorizontalBar\n                        @type=\"negative\"\n                        @score={{data.score_map.negative}}\n                        @width={{data.widths.negative}}\n                      />\n                      <AiSentimentHorizontalBar\n                        @type=\"neutral\"\n                        @score={{data.score_map.neutral}}\n                        @width={{data.widths.neutral}}\n                      />\n                    </td>\n                  </tr>\n                {{/each}}\n              </tbody>\n            </table>\n          </div>\n        {{/unless}}\n    \n        {{#if (and this.selectedChart this.showingSelectedChart)}}\n          {{bodyClass \"showing-sentiment-analysis-chart\"}}\n          <div class=\"admin-report-sentiment-analysis__selected-chart\">\n            <div class=\"admin-report-sentiment-analysis__selected-chart-actions\">\n              <DButton\n                @label=\"back_button\"\n                @icon=\"chevron-left\"\n                class=\"btn-flat\"\n                @action={{this.backToAllCharts}}\n              />\n    \n              <DTooltip\n                class=\"share btn-flat\"\n                @icon={{this.shareIcon}}\n                {{on \"click\" this.shareChart}}\n                @content={{i18n\n                  \"discourse_ai.sentiments.sentiment_analysis.share_chart\"\n                }}\n              />\n            </div>\n    \n            <DoughnutChart\n              @labels={{@model.labels}}\n              @colors={{this.colors}}\n              @data={{this.selectedChart.scores}}\n              @totalScore={{this.selectedChart.total_score}}\n              @doughnutTitle={{this.selectedChart.title}}\n              @displayLegend={{true}}\n            />\n    \n          </div>\n          <div class=\"admin-report-sentiment-analysis-details\">\n            <HorizontalOverflowNav\n              {{this.setActiveFilter}}\n              class=\"admin-report-sentiment-analysis-details__filters\"\n            >\n              {{#each this.postFilters as |filter|}}\n                <li data-filter-type={{filter.id}}>\n                  <DButton\n                    @icon={{filter.icon}}\n                    @translatedLabel={{filter.text}}\n                    @action={{filter.action}}\n                    class=\"btn-transparent\"\n                  />\n                </li>\n              {{/each}}\n            </HorizontalOverflowNav>\n    \n            <PostList\n              @posts={{this.filteredPosts}}\n              @urlPath=\"url\"\n              @idPath=\"post_id\"\n              @titlePath=\"topic_title\"\n              @usernamePath=\"username\"\n              @fetchMorePosts={{this.fetchMorePosts}}\n              class=\"admin-report-sentiment-analysis-details__post-list\"\n            >\n              <:abovePostItemExcerpt as |post|>\n                {{#let (this.sentimentMapping post.sentiment) as |sentiment|}}\n                  <span\n                    class=\"admin-report-sentiment-analysis-details__post-score\"\n                    data-sentiment-score={{sentiment.id}}\n                  >\n                    {{icon sentiment.icon}}\n                    {{sentiment.text}}\n                  </span>\n                {{/let}}\n              </:abovePostItemExcerpt>\n            </PostList>\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"vaenlI3f\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[11,1],[4,[32,0],[[30,0,[\\\"openToChart\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,0,[\\\"showingSelectedChart\\\"]]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"admin-report-sentiment-analysis\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"table\\\"],[14,0,\\\"sentiment-analysis-table md-table\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[1,[30,0,[\\\"groupingType\\\"]]],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.sentiments.sentiment_analysis.table.total_count\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.sentiments.sentiment_analysis.table.sentiment\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"transformedData\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[11,\\\"tr\\\"],[24,0,\\\"sentiment-analysis-table__row\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[32,2],[\\\"click\\\",[28,[32,3],[[30,0,[\\\"showDetails\\\"]],[30,1]],null]],null],[12],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"sentiment-analysis-table__title\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"category\\\"]],[[[1,\\\"                    \\\"],[1,[28,[32,4],[[30,1,[\\\"category\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                    \\\"],[1,[30,1,[\\\"title\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"sentiment-analysis-table__total-score\\\"],[12],[1,[30,1,[\\\"total_score\\\"]]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"sentiment-horizontal-bar\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[32,5],null,[[\\\"@type\\\",\\\"@score\\\",\\\"@width\\\"],[\\\"positive\\\",[30,1,[\\\"score_map\\\",\\\"positive\\\"]],[30,1,[\\\"widths\\\",\\\"positive\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[8,[32,5],null,[[\\\"@type\\\",\\\"@score\\\",\\\"@width\\\"],[\\\"negative\\\",[30,1,[\\\"score_map\\\",\\\"negative\\\"]],[30,1,[\\\"widths\\\",\\\"negative\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[8,[32,5],null,[[\\\"@type\\\",\\\"@score\\\",\\\"@width\\\"],[\\\"neutral\\\",[30,1,[\\\"score_map\\\",\\\"neutral\\\"]],[30,1,[\\\"widths\\\",\\\"neutral\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[32,6],[[30,0,[\\\"selectedChart\\\"]],[30,0,[\\\"showingSelectedChart\\\"]]],null],[[[1,\\\"      \\\"],[1,[28,[32,7],[\\\"showing-sentiment-analysis-chart\\\"],null]],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"admin-report-sentiment-analysis__selected-chart\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"admin-report-sentiment-analysis__selected-chart-actions\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,8],[[24,0,\\\"btn-flat\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[\\\"back_button\\\",\\\"chevron-left\\\",[30,0,[\\\"backToAllCharts\\\"]]]],null],[1,\\\"\\\\n\\\\n          \\\"],[8,[32,9],[[24,0,\\\"share btn-flat\\\"],[4,[32,2],[\\\"click\\\",[30,0,[\\\"shareChart\\\"]]],null]],[[\\\"@icon\\\",\\\"@content\\\"],[[30,0,[\\\"shareIcon\\\"]],[28,[32,1],[\\\"discourse_ai.sentiments.sentiment_analysis.share_chart\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[8,[32,10],null,[[\\\"@labels\\\",\\\"@colors\\\",\\\"@data\\\",\\\"@totalScore\\\",\\\"@doughnutTitle\\\",\\\"@displayLegend\\\"],[[30,2,[\\\"labels\\\"]],[30,0,[\\\"colors\\\"]],[30,0,[\\\"selectedChart\\\",\\\"scores\\\"]],[30,0,[\\\"selectedChart\\\",\\\"total_score\\\"]],[30,0,[\\\"selectedChart\\\",\\\"title\\\"]],true]],null],[1,\\\"\\\\n\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"admin-report-sentiment-analysis-details\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,11],[[24,0,\\\"admin-report-sentiment-analysis-details__filters\\\"],[4,[30,0,[\\\"setActiveFilter\\\"]],null,null]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"postFilters\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,\\\"li\\\"],[15,\\\"data-filter-type\\\",[30,3,[\\\"id\\\"]]],[12],[1,\\\"\\\\n              \\\"],[8,[32,8],[[24,0,\\\"btn-transparent\\\"]],[[\\\"@icon\\\",\\\"@translatedLabel\\\",\\\"@action\\\"],[[30,3,[\\\"icon\\\"]],[30,3,[\\\"text\\\"]],[30,3,[\\\"action\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[32,12],[[24,0,\\\"admin-report-sentiment-analysis-details__post-list\\\"]],[[\\\"@posts\\\",\\\"@urlPath\\\",\\\"@idPath\\\",\\\"@titlePath\\\",\\\"@usernamePath\\\",\\\"@fetchMorePosts\\\"],[[30,0,[\\\"filteredPosts\\\"]],\\\"url\\\",\\\"post_id\\\",\\\"topic_title\\\",\\\"username\\\",[30,0,[\\\"fetchMorePosts\\\"]]]],[[\\\"abovePostItemExcerpt\\\"],[[[[1,\\\"\\\\n\\\"],[44,[[28,[30,0,[\\\"sentimentMapping\\\"]],[[30,4,[\\\"sentiment\\\"]]],null]],[[[1,\\\"              \\\"],[10,1],[14,0,\\\"admin-report-sentiment-analysis-details__post-score\\\"],[15,\\\"data-sentiment-score\\\",[30,5,[\\\"id\\\"]]],[12],[1,\\\"\\\\n                \\\"],[1,[28,[32,13],[[30,5,[\\\"icon\\\"]]],null]],[1,\\\"\\\\n                \\\"],[1,[30,5,[\\\"text\\\"]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[5]]],[1,\\\"          \\\"]],[4]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"data\\\",\\\"@model\\\",\\\"filter\\\",\\\"post\\\",\\\"sentiment\\\"],false,[\\\"unless\\\",\\\"each\\\",\\\"-track-array\\\",\\\"if\\\",\\\"let\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/admin-report-sentiment-analysis.js\",\n      \"scope\": () => [_didInsert.default, _discourseI18n.i18n, _modifier.on, _helper.fn, _categoryBadge.default, _aiSentimentHorizontalBar.default, _truthHelpers.and, _bodyClass.default, _dButton.default, _dTooltip.default, _doughnutChart.default, _horizontalOverflowNav.default, _postList.default, _dIcon.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AdminReportSentimentAnalysis;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-artifact\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/service\", \"@ember/template\", \"discourse/components/d-button\", \"discourse/helpers/html-class\", \"discourse/lib/get-url\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _didInsert, _service, _template, _dButton, _htmlClass, _getUrl, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // note the panel for artifact full screen can not be at position 0,0\n  // otherwise this hack will not activate.\n  // https://github.com/discourse/discourse/blob/b8325f2190a8c0a9022405c219faeac6f0f98ca5/app/assets/javascripts/discourse/app/components/scrolling-post-stream.js#L77-L77\n  // this will cause post stream to navigate to a different post\n  class AiArtifactComponent extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"expanded\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #expanded = (() => (dt7948.i(this, \"expanded\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"showingArtifact\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showingArtifact = (() => (dt7948.i(this, \"showingArtifact\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.keydownHandler = this.handleKeydown.bind(this);\n      this.popStateHandler = this.handlePopState.bind(this);\n      window.addEventListener(\"popstate\", this.popStateHandler);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      window.removeEventListener(\"keydown\", this.keydownHandler);\n      window.removeEventListener(\"popstate\", this.popStateHandler);\n    }\n    handleKeydown(event) {\n      if (event.key === \"Escape\" || event.key === \"Esc\") {\n        history.back();\n      }\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"handleKeydown\", [_object.action]))();\n    handlePopState(event) {\n      const state = event.state;\n      this.expanded = state?.artifactId === this.args.artifactId;\n      if (!this.expanded) {\n        window.removeEventListener(\"keydown\", this.keydownHandler);\n      }\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"handlePopState\", [_object.action]))();\n    get requireClickToRun() {\n      if (this.showingArtifact) {\n        return false;\n      }\n      if (this.siteSettings.ai_artifact_security === \"strict\") {\n        return true;\n      }\n      if (this.siteSettings.ai_artifact_security === \"hybrid\") {\n        const shouldAutorun = this.args.autorun === \"true\" || this.args.autorun === true || this.args.autorun === \"1\";\n        return !shouldAutorun;\n      }\n      return this.siteSettings.ai_artifact_security !== \"lax\";\n    }\n    get artifactUrl() {\n      let url = (0, _getUrl.default)(`/discourse-ai/ai-bot/artifacts/${this.args.artifactId}`);\n      if (this.args.artifactVersion) {\n        url = `${url}/${this.args.artifactVersion}`;\n      }\n      return url;\n    }\n    showArtifact() {\n      this.showingArtifact = true;\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"showArtifact\", [_object.action]))();\n    toggleView() {\n      if (!this.expanded) {\n        window.history.pushState({\n          artifactId: this.args.artifactId\n        }, \"\", window.location.href + \"#artifact-fullscreen\");\n        window.addEventListener(\"keydown\", this.keydownHandler);\n      } else {\n        history.back();\n      }\n      this.expanded = !this.expanded;\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"toggleView\", [_object.action]))();\n    get wrapperClasses() {\n      return `ai-artifact__wrapper ${this.expanded ? \"ai-artifact__expanded\" : \"\"} ${this.seamless ? \"ai-artifact__seamless\" : \"\"}`;\n    }\n    setDataAttributes(element) {\n      if (this.args.dataAttributes) {\n        Object.entries(this.args.dataAttributes).forEach(_ref => {\n          let [key, value] = _ref;\n          element.setAttribute(key, value);\n        });\n      }\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"setDataAttributes\", [_object.action]))();\n    get heightStyle() {\n      if (this.args.artifactHeight) {\n        let height = parseInt(this.args.artifactHeight, 10);\n        if (isNaN(height) || height <= 0) {\n          height = 500; // default height if the provided value is invalid\n        }\n        if (height > 2000) {\n          height = 2000; // cap the height to a maximum of 2000px\n        }\n        return (0, _template.htmlSafe)(`height: ${height}px;`);\n      }\n    }\n    get seamless() {\n      return this.args.seamless === \"true\" || this.args.seamless === true || this.args.seamless === \"1\";\n    }\n    get showFooter() {\n      return !this.seamless && !this.requireClickToRun;\n    }\n    static #_9 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.expanded}}\n          {{htmlClass \"ai-artifact-expanded\"}}\n        {{/if}}\n        <div class={{this.wrapperClasses}} style={{this.heightStyle}}>\n          <div class=\"ai-artifact__panel--wrapper\">\n            <div class=\"ai-artifact__panel\">\n              <DButton\n                class=\"btn-flat btn-icon-text\"\n                @icon=\"discourse-compress\"\n                @label=\"discourse_ai.ai_artifact.collapse_view_label\"\n                @action={{this.toggleView}}\n              />\n            </div>\n          </div>\n          {{#if this.requireClickToRun}}\n            <div class=\"ai-artifact__click-to-run\">\n              <DButton\n                class=\"btn btn-primary\"\n                @icon=\"play\"\n                @label=\"discourse_ai.ai_artifact.click_to_run_label\"\n                @action={{this.showArtifact}}\n              />\n            </div>\n          {{else}}\n            <iframe\n              title=\"AI Artifact\"\n              src={{this.artifactUrl}}\n              width=\"100%\"\n              frameborder=\"0\"\n              {{didInsert this.setDataAttributes}}\n            ></iframe>\n          {{/if}}\n          {{#if this.showFooter}}\n            <div class=\"ai-artifact__footer\">\n              <DButton\n                class=\"btn-transparent btn-icon-text ai-artifact__expand-button\"\n                @icon=\"discourse-expand\"\n                @label=\"discourse_ai.ai_artifact.expand_view_label\"\n                @action={{this.toggleView}}\n              />\n            </div>\n          {{/if}}\n        </div>\n      \n    */\n    {\n      \"id\": \"QA/bSjnx\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"expanded\\\"]],[[[1,\\\"      \\\"],[1,[28,[32,0],[\\\"ai-artifact-expanded\\\"],null]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[15,0,[30,0,[\\\"wrapperClasses\\\"]]],[15,5,[30,0,[\\\"heightStyle\\\"]]],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"ai-artifact__panel--wrapper\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-artifact__panel\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,1],[[24,0,\\\"btn-flat btn-icon-text\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"discourse-compress\\\",\\\"discourse_ai.ai_artifact.collapse_view_label\\\",[30,0,[\\\"toggleView\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"requireClickToRun\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"ai-artifact__click-to-run\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,1],[[24,0,\\\"btn btn-primary\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"play\\\",\\\"discourse_ai.ai_artifact.click_to_run_label\\\",[30,0,[\\\"showArtifact\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[11,\\\"iframe\\\"],[24,\\\"title\\\",\\\"AI Artifact\\\"],[16,\\\"src\\\",[30,0,[\\\"artifactUrl\\\"]]],[24,\\\"width\\\",\\\"100%\\\"],[24,\\\"frameborder\\\",\\\"0\\\"],[4,[32,2],[[30,0,[\\\"setDataAttributes\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\"]],[]]],[41,[30,0,[\\\"showFooter\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"ai-artifact__footer\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,1],[[24,0,\\\"btn-transparent btn-icon-text ai-artifact__expand-button\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"discourse-expand\\\",\\\"discourse_ai.ai_artifact.expand_view_label\\\",[30,0,[\\\"toggleView\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-artifact.js\",\n      \"scope\": () => [_htmlClass.default, _dButton.default, _didInsert.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiArtifactComponent;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-blinking-animation\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/render-modifiers/modifiers/did-update\", \"@ember/render-modifiers/modifiers/will-destroy\", \"@ember/runloop\", \"discourse/helpers/concat-class\", \"discourse/lib/later\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _didInsert, _didUpdate, _willDestroy, _runloop, _concatClass, _later, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class Block {\n    static #_ = (() => dt7948.g(this.prototype, \"show\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #show = (() => (dt7948.i(this, \"show\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"shown\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #shown = (() => (dt7948.i(this, \"shown\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"blinking\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #blinking = (() => (dt7948.i(this, \"blinking\"), void 0))();\n    constructor() {\n      let args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      this.show = args.show ?? false;\n      this.shown = args.shown ?? false;\n    }\n  }\n  const BLOCKS_SIZE = 20; // changing this requires to change css accordingly\n  class AiBlinkingAnimation extends _component.default {\n    blocks = (() => [...Array.from({\n      length: BLOCKS_SIZE\n    }, () => new Block())])();\n    #nextBlockBlinkingTimer;\n    #blockBlinkingTimer;\n    #blockShownTimer;\n    setupAnimation() {\n      this.blocks.firstObject.show = true;\n      this.blocks.firstObject.shown = true;\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"setupAnimation\", [_object.action]))();\n    onBlinking(block) {\n      if (!block.blinking) {\n        return;\n      }\n      block.show = false;\n      this.#nextBlockBlinkingTimer = (0, _later.default)(this, () => {\n        this.#nextBlock(block).blinking = true;\n      }, 250);\n      this.#blockBlinkingTimer = (0, _later.default)(this, () => {\n        block.blinking = false;\n      }, 500);\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"onBlinking\", [_object.action]))();\n    onShowing(block) {\n      if (!block.show) {\n        return;\n      }\n      this.#blockShownTimer = (0, _later.default)(this, () => {\n        this.#nextBlock(block).show = true;\n        this.#nextBlock(block).shown = true;\n        if (this.blocks.lastObject === block) {\n          this.blocks.firstObject.blinking = true;\n        }\n      }, 250);\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"onShowing\", [_object.action]))();\n    teardownAnimation() {\n      (0, _runloop.cancel)(this.#blockShownTimer);\n      (0, _runloop.cancel)(this.#nextBlockBlinkingTimer);\n      (0, _runloop.cancel)(this.#blockBlinkingTimer);\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"teardownAnimation\", [_object.action]))();\n    #nextBlock(currentBlock) {\n      if (currentBlock === this.blocks.lastObject) {\n        return this.blocks.firstObject;\n      } else {\n        return this.blocks.objectAt(this.blocks.indexOf(currentBlock) + 1);\n      }\n    }\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <ul class=\"ai-blinking-animation\" {{didInsert this.setupAnimation}}>\n          {{#each this.blocks as |block|}}\n            <li\n              class={{concatClass\n                \"ai-blinking-animation__list-item\"\n                (if block.show \"show\")\n                (if block.shown \"is-shown\")\n                (if block.blinking \"blink\")\n              }}\n              {{didUpdate (fn this.onBlinking block) block.blinking}}\n              {{didUpdate (fn this.onShowing block) block.show}}\n              {{willDestroy this.teardownAnimation}}\n            ></li>\n          {{/each}}\n        </ul>\n      \n    */\n    {\n      \"id\": \"cWbDH+g8\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[11,\\\"ul\\\"],[24,0,\\\"ai-blinking-animation\\\"],[4,[32,0],[[30,0,[\\\"setupAnimation\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"blocks\\\"]]],null]],null],null,[[[1,\\\"        \\\"],[11,\\\"li\\\"],[16,0,[28,[32,1],[\\\"ai-blinking-animation__list-item\\\",[52,[30,1,[\\\"show\\\"]],\\\"show\\\"],[52,[30,1,[\\\"shown\\\"]],\\\"is-shown\\\"],[52,[30,1,[\\\"blinking\\\"]],\\\"blink\\\"]],null]],[4,[32,2],[[28,[32,3],[[30,0,[\\\"onBlinking\\\"]],[30,1]],null],[30,1,[\\\"blinking\\\"]]],null],[4,[32,2],[[28,[32,3],[[30,0,[\\\"onShowing\\\"]],[30,1]],null],[30,1,[\\\"show\\\"]]],null],[4,[32,4],[[30,0,[\\\"teardownAnimation\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"block\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-blinking-animation.js\",\n      \"scope\": () => [_didInsert.default, _concatClass.default, _didUpdate.default, _helper.fn, _willDestroy.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiBlinkingAnimation;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-bot-conversations\", [\"exports\", \"@glimmer/tracking\", \"@ember/component\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/owner\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/runloop\", \"@ember/service\", \"@ember-compat/tracked-built-ins\", \"jquery\", \"discourse/components/d-button\", \"discourse/components/plugin-outlet\", \"discourse/helpers/body-class\", \"discourse/helpers/lazy-hash\", \"discourse/lib/ajax-error\", \"discourse/lib/autocomplete/user\", \"discourse/lib/hashtag-autocomplete\", \"discourse/lib/uppy/uppy-upload\", \"discourse/lib/uppy-media-optimization-plugin\", \"discourse/lib/user-search\", \"discourse/lib/user-status-on-autocomplete\", \"discourse/lib/utilities\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-persona-llm-selector\", \"@ember/template-factory\"], function (_exports, _tracking, _component, _helper, _modifier, _object, _owner, _didInsert, _runloop, _service, _trackedBuiltIns, _jquery, _dButton, _pluginOutlet, _bodyClass, _lazyHash, _ajaxError, _user, _hashtagAutocomplete, _uppyUpload, _uppyMediaOptimizationPlugin, _userSearch, _userStatusOnAutocomplete, _utilities, _discourseI18n, _aiPersonaLlmSelector, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiBotConversations extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"aiBotConversationsHiddenSubmit\", [_service.service]))();\n    #aiBotConversationsHiddenSubmit = (() => (dt7948.i(this, \"aiBotConversationsHiddenSubmit\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"mediaOptimizationWorker\", [_service.service]))();\n    #mediaOptimizationWorker = (() => (dt7948.i(this, \"mediaOptimizationWorker\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"uploads\", [_tracking.tracked], function () {\n      return new _trackedBuiltIns.TrackedArray();\n    }))();\n    #uploads = (() => (dt7948.i(this, \"uploads\"), void 0))();\n    // Don't track this directly - we'll get it from uppyUpload\n    textarea = null;\n    uppyUpload = null;\n    fileInputEl = null;\n    _handlePaste = event => {\n      if (document.activeElement !== this.textarea) {\n        return;\n      }\n      const {\n        canUpload,\n        canPasteHtml,\n        types\n      } = (0, _utilities.clipboardHelpers)(event, {\n        siteSettings: this.siteSettings,\n        canUpload: true\n      });\n      if (!canUpload || canPasteHtml || types.includes(\"text/plain\")) {\n        return;\n      }\n      if (event && event.clipboardData && event.clipboardData.files) {\n        this.uppyUpload.addFiles([...event.clipboardData.files], {\n          pasted: true\n        });\n      }\n    };\n    init() {\n      super.init(...arguments);\n      this.uppyUpload = new _uppyUpload.default((0, _owner.getOwner)(this), {\n        id: \"ai-bot-file-uploader\",\n        type: \"ai-bot-conversation\",\n        useMultipartUploadsIfAvailable: true,\n        uppyReady: () => {\n          if (this.siteSettings.composer_media_optimization_image_enabled) {\n            this.uppyUpload.uppyWrapper.useUploadPlugin(_uppyMediaOptimizationPlugin.default, {\n              optimizeFn: (data, opts) => this.mediaOptimizationWorker.optimizeImage(data, opts),\n              runParallel: !this.site.isMobileDevice\n            });\n          }\n          this.uppyUpload.uppyWrapper.onPreProcessProgress(file => {\n            const inProgressUpload = this.inProgressUploads?.find(upl => upl.id === file.id);\n            if (inProgressUpload && !inProgressUpload.processing) {\n              inProgressUpload.processing = true;\n            }\n          });\n          this.uppyUpload.uppyWrapper.onPreProcessComplete(file => {\n            const inProgressUpload = this.inProgressUploads?.find(upl => upl.id === file.id);\n            if (inProgressUpload) {\n              inProgressUpload.processing = false;\n            }\n          });\n          this.textarea?.addEventListener(\"paste\", this._handlePaste);\n        },\n        uploadDone: upload => {\n          this.uploads.push(upload);\n        },\n        // Fix: Don't try to set inProgressUploads directly\n        onProgressUploadsChanged: () => {\n          // This is just for UI triggers - we're already tracking inProgressUploads\n          this.notifyPropertyChange(\"inProgressUploads\");\n        }\n      });\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.textarea?.removeEventListener(\"paste\", this._handlePaste);\n      this.uppyUpload?.teardown();\n      // needed for safety (textarea may not have a autocomplete)\n      if (this.textarea.autocomplete) {\n        this.textarea.autocomplete(\"destroy\");\n      }\n    }\n    get loading() {\n      return this.aiBotConversationsHiddenSubmit?.loading;\n    }\n    get inProgressUploads() {\n      return this.uppyUpload?.inProgressUploads || [];\n    }\n    get showUploadsContainer() {\n      return this.uploads?.length > 0 || this.inProgressUploads?.length > 0;\n    }\n    setPersonaId(id) {\n      this.aiBotConversationsHiddenSubmit.personaId = id;\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"setPersonaId\", [_object.action]))();\n    setTargetRecipient(username) {\n      this.aiBotConversationsHiddenSubmit.targetUsername = username;\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"setTargetRecipient\", [_object.action]))();\n    updateInputValue(value) {\n      this._autoExpandTextarea();\n      this.aiBotConversationsHiddenSubmit.inputValue = value.target?.value || value;\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"updateInputValue\", [_object.action]))();\n    handleKeyDown(event) {\n      if (event.target.tagName !== \"TEXTAREA\") {\n        return;\n      }\n      if (event.key === \"Enter\" && !event.shiftKey) {\n        this.prepareAndSubmitToBot();\n      }\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"handleKeyDown\", [_object.action]))();\n    setTextArea(element) {\n      this.textarea = element;\n      this.setupAutocomplete(element);\n      (0, _runloop.scheduleOnce)(\"afterRender\", this, this.focusTextarea);\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"setTextArea\", [_object.action]))();\n    focusTextarea() {\n      this.textarea?.focus();\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"focusTextarea\", [_object.action]))();\n    setupAutocomplete(textarea) {\n      const $textarea = (0, _jquery.default)(textarea);\n      this.applyUserAutocomplete($textarea);\n      this.applyHashtagAutocomplete($textarea);\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"setupAutocomplete\", [_object.action]))();\n    applyUserAutocomplete($textarea) {\n      if (!this.siteSettings.enable_mentions) {\n        return;\n      }\n      $textarea.autocomplete({\n        template: _user.default,\n        dataSource: term => {\n          (0, _userStatusOnAutocomplete.destroyUserStatuses)();\n          return (0, _userSearch.default)({\n            term,\n            includeGroups: true\n          }).then(result => {\n            (0, _userStatusOnAutocomplete.initUserStatusHtml)((0, _owner.getOwner)(this), result.users);\n            return result;\n          });\n        },\n        onRender: options => (0, _userStatusOnAutocomplete.renderUserStatusHtml)(options),\n        key: \"@\",\n        width: \"100%\",\n        treatAsTextarea: true,\n        autoSelectFirstSuggestion: true,\n        transformComplete: obj => obj.username || obj.name,\n        afterComplete: text => {\n          this.textarea.value = text;\n          this.focusTextarea();\n          this.updateInputValue({\n            target: {\n              value: text\n            }\n          });\n        },\n        onClose: _userStatusOnAutocomplete.destroyUserStatuses\n      });\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"applyUserAutocomplete\", [_object.action]))();\n    applyHashtagAutocomplete($textarea) {\n      // Use the \"topic-composer\" configuration or create a specific one for AI bot\n      // You can change this to \"chat-composer\" if that's more appropriate\n      const hashtagConfig = this.site.hashtag_configurations[\"topic-composer\"];\n      (0, _hashtagAutocomplete.setupHashtagAutocomplete)(hashtagConfig, $textarea, this.siteSettings, {\n        treatAsTextarea: true,\n        afterComplete: text => {\n          this.textarea.value = text;\n          this.focusTextarea();\n          this.updateInputValue({\n            target: {\n              value: text\n            }\n          });\n        }\n      });\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"applyHashtagAutocomplete\", [_object.action]))();\n    registerFileInput(element) {\n      if (element) {\n        this.fileInputEl = element;\n        if (this.uppyUpload) {\n          this.uppyUpload.setup(element);\n        }\n      }\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"registerFileInput\", [_object.action]))();\n    openFileUpload() {\n      if (this.fileInputEl) {\n        this.fileInputEl.click();\n      }\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"openFileUpload\", [_object.action]))();\n    removeUpload(upload) {\n      this.uploads = new _trackedBuiltIns.TrackedArray(this.uploads.filter(u => u !== upload));\n    }\n    static #_18 = (() => dt7948.n(this.prototype, \"removeUpload\", [_object.action]))();\n    cancelUpload(upload) {\n      this.uppyUpload.cancelSingleUpload({\n        fileId: upload.id\n      });\n    }\n    static #_19 = (() => dt7948.n(this.prototype, \"cancelUpload\", [_object.action]))();\n    async prepareAndSubmitToBot() {\n      try {\n        await this.aiBotConversationsHiddenSubmit.submitToBot({\n          uploads: this.uploads,\n          inProgressUploadsCount: this.inProgressUploads.length\n        });\n        this.uploads = new _trackedBuiltIns.TrackedArray();\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      }\n    }\n    static #_20 = (() => dt7948.n(this.prototype, \"prepareAndSubmitToBot\", [_object.action]))();\n    _autoExpandTextarea() {\n      this.textarea.style.height = \"auto\";\n      this.textarea.style.height = this.textarea.scrollHeight + \"px\";\n      // Get the max-height value from CSS (30vh)\n      const maxHeight = parseInt(getComputedStyle(this.textarea).maxHeight, 10);\n      // Only enable scrolling if content exceeds max-height\n      if (this.textarea.scrollHeight > maxHeight) {\n        this.textarea.style.overflowY = \"auto\";\n      } else {\n        this.textarea.style.overflowY = \"hidden\";\n      }\n    }\n    static #_21 = (() => (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-bot-conversations\">\n          {{bodyClass \"ai-bot-conversations-page\"}}\n          <AiPersonaLlmSelector\n            @showLabels={{true}}\n            @setPersonaId={{this.setPersonaId}}\n            @setTargetRecipient={{this.setTargetRecipient}}\n            @personaName={{@controller.persona}}\n            @llmName={{@controller.llm}}\n          />\n    \n          <div class=\"ai-bot-conversations__content-wrapper\">\n            <div class=\"ai-bot-conversations__title\">\n              {{i18n \"discourse_ai.ai_bot.conversations.header\"}}\n            </div>\n            <PluginOutlet\n              @name=\"ai-bot-conversations-above-input\"\n              @outletArgs={{lazyHash\n                updateInput=this.updateInputValue\n                submit=this.prepareAndSubmitToBot\n              }}\n            />\n    \n            <div class=\"ai-bot-conversations__input-wrapper\">\n              <DButton\n                @icon=\"upload\"\n                @action={{this.openFileUpload}}\n                @title=\"discourse_ai.ai_bot.conversations.upload_files\"\n                class=\"btn btn-transparent ai-bot-upload-btn\"\n              />\n              <textarea\n                {{didInsert this.setTextArea}}\n                {{on \"input\" this.updateInputValue}}\n                {{on \"keydown\" this.handleKeyDown}}\n                id=\"ai-bot-conversations-input\"\n                autofocus=\"true\"\n                placeholder={{i18n \"discourse_ai.ai_bot.conversations.placeholder\"}}\n                minlength=\"10\"\n                disabled={{this.loading}}\n                rows=\"1\"\n              />\n              <DButton\n                @action={{this.prepareAndSubmitToBot}}\n                @icon=\"paper-plane\"\n                @isLoading={{this.loading}}\n                @title=\"discourse_ai.ai_bot.conversations.header\"\n                class=\"ai-bot-button btn-transparent ai-conversation-submit\"\n              />\n              <input\n                type=\"file\"\n                id=\"ai-bot-file-uploader\"\n                class=\"hidden-upload-field\"\n                multiple=\"multiple\"\n                {{didInsert this.registerFileInput}}\n              />\n            </div>\n    \n            <p class=\"ai-disclaimer\">\n              {{i18n \"discourse_ai.ai_bot.conversations.disclaimer\"}}\n            </p>\n    \n            {{#if this.showUploadsContainer}}\n              <div class=\"ai-bot-conversations__uploads-container\">\n                {{#each this.uploads as |upload|}}\n                  <div class=\"ai-bot-upload\">\n                    <span class=\"ai-bot-upload__filename\">\n                      {{upload.original_filename}}\n                    </span>\n                    <DButton\n                      @icon=\"xmark\"\n                      @action={{fn this.removeUpload upload}}\n                      class=\"btn-transparent ai-bot-upload__remove\"\n                    />\n                  </div>\n                {{/each}}\n    \n                {{#each this.inProgressUploads as |upload|}}\n                  <div class=\"ai-bot-upload ai-bot-upload--in-progress\">\n                    <span class=\"ai-bot-upload__filename\">{{upload.fileName}}</span>\n                    <span class=\"ai-bot-upload__progress\">\n                      {{upload.progress}}%\n                    </span>\n                    <DButton\n                      @icon=\"xmark\"\n                      @action={{fn this.cancelUpload upload}}\n                      class=\"btn-flat ai-bot-upload__cancel\"\n                    />\n                  </div>\n                {{/each}}\n              </div>\n            {{/if}}\n          </div>\n        </div>\n      \n    */\n    {\n      \"id\": \"mtM0Tits\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-bot-conversations\\\"],[12],[1,\\\"\\\\n      \\\"],[1,[28,[32,0],[\\\"ai-bot-conversations-page\\\"],null]],[1,\\\"\\\\n      \\\"],[8,[32,1],null,[[\\\"@showLabels\\\",\\\"@setPersonaId\\\",\\\"@setTargetRecipient\\\",\\\"@personaName\\\",\\\"@llmName\\\"],[true,[30,0,[\\\"setPersonaId\\\"]],[30,0,[\\\"setTargetRecipient\\\"]],[30,1,[\\\"persona\\\"]],[30,1,[\\\"llm\\\"]]]],null],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"ai-bot-conversations__content-wrapper\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-bot-conversations__title\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[28,[32,2],[\\\"discourse_ai.ai_bot.conversations.header\\\"],null]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[32,3],null,[[\\\"@name\\\",\\\"@outletArgs\\\"],[\\\"ai-bot-conversations-above-input\\\",[28,[32,4],null,[[\\\"updateInput\\\",\\\"submit\\\"],[[30,0,[\\\"updateInputValue\\\"]],[30,0,[\\\"prepareAndSubmitToBot\\\"]]]]]]],null],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"ai-bot-conversations__input-wrapper\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,5],[[24,0,\\\"btn btn-transparent ai-bot-upload-btn\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@title\\\"],[\\\"upload\\\",[30,0,[\\\"openFileUpload\\\"]],\\\"discourse_ai.ai_bot.conversations.upload_files\\\"]],null],[1,\\\"\\\\n          \\\"],[11,\\\"textarea\\\"],[24,1,\\\"ai-bot-conversations-input\\\"],[24,\\\"autofocus\\\",\\\"true\\\"],[16,\\\"placeholder\\\",[28,[32,2],[\\\"discourse_ai.ai_bot.conversations.placeholder\\\"],null]],[24,\\\"minlength\\\",\\\"10\\\"],[16,\\\"disabled\\\",[30,0,[\\\"loading\\\"]]],[24,\\\"rows\\\",\\\"1\\\"],[4,[32,6],[[30,0,[\\\"setTextArea\\\"]]],null],[4,[32,7],[\\\"input\\\",[30,0,[\\\"updateInputValue\\\"]]],null],[4,[32,7],[\\\"keydown\\\",[30,0,[\\\"handleKeyDown\\\"]]],null],[12],[13],[1,\\\"          \\\"],[8,[32,5],[[24,0,\\\"ai-bot-button btn-transparent ai-conversation-submit\\\"]],[[\\\"@action\\\",\\\"@icon\\\",\\\"@isLoading\\\",\\\"@title\\\"],[[30,0,[\\\"prepareAndSubmitToBot\\\"]],\\\"paper-plane\\\",[30,0,[\\\"loading\\\"]],\\\"discourse_ai.ai_bot.conversations.header\\\"]],null],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[24,1,\\\"ai-bot-file-uploader\\\"],[24,0,\\\"hidden-upload-field\\\"],[24,\\\"multiple\\\",\\\"multiple\\\"],[24,4,\\\"file\\\"],[4,[32,6],[[30,0,[\\\"registerFileInput\\\"]]],null],[12],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,2],[14,0,\\\"ai-disclaimer\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[28,[32,2],[\\\"discourse_ai.ai_bot.conversations.disclaimer\\\"],null]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showUploadsContainer\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"ai-bot-conversations__uploads-container\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"uploads\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[10,0],[14,0,\\\"ai-bot-upload\\\"],[12],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"ai-bot-upload__filename\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[30,2,[\\\"original_filename\\\"]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[8,[32,5],[[24,0,\\\"btn-transparent ai-bot-upload__remove\\\"]],[[\\\"@icon\\\",\\\"@action\\\"],[\\\"xmark\\\",[28,[32,8],[[30,0,[\\\"removeUpload\\\"]],[30,2]],null]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"inProgressUploads\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[10,0],[14,0,\\\"ai-bot-upload ai-bot-upload--in-progress\\\"],[12],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"ai-bot-upload__filename\\\"],[12],[1,[30,3,[\\\"fileName\\\"]]],[13],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"ai-bot-upload__progress\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[30,3,[\\\"progress\\\"]]],[1,\\\"%\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[8,[32,5],[[24,0,\\\"btn-flat ai-bot-upload__cancel\\\"]],[[\\\"@icon\\\",\\\"@action\\\"],[\\\"xmark\\\",[28,[32,8],[[30,0,[\\\"cancelUpload\\\"]],[30,3]],null]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@controller\\\",\\\"upload\\\",\\\"upload\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-bot-conversations.js\",\n      \"scope\": () => [_bodyClass.default, _aiPersonaLlmSelector.default, _discourseI18n.i18n, _pluginOutlet.default, _lazyHash.default, _dButton.default, _didInsert.default, _modifier.on, _helper.fn],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiBotConversations;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-bot-header-icon\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/components/plugin-outlet\", \"discourse/helpers/lazy-hash\", \"discourse/lib/utilities\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", \"discourse/plugins/discourse-ai/discourse/services/ai-conversations-sidebar-manager\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _dButton, _pluginOutlet, _lazyHash, _utilities, _discourseI18n, _aiBotHelper, _aiConversationsSidebarManager, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiBotHeaderIcon extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"appEvents\", [_service.service]))();\n    #appEvents = (() => (dt7948.i(this, \"appEvents\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"composer\", [_service.service]))();\n    #composer = (() => (dt7948.i(this, \"composer\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"navigationMenu\", [_service.service]))();\n    #navigationMenu = (() => (dt7948.i(this, \"navigationMenu\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"sidebarState\", [_service.service]))();\n    #sidebarState = (() => (dt7948.i(this, \"sidebarState\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    get bots() {\n      const availableBots = this.currentUser.ai_enabled_chat_bots.filter(bot => !bot.is_persona || bot.has_default_llm).filter(Boolean);\n      return availableBots ? availableBots.map(bot => bot.model_name) : [];\n    }\n    get showHeaderButton() {\n      return this.bots.length > 0 && this.siteSettings.ai_bot_add_to_header;\n    }\n    get icon() {\n      if (this.clickShouldRouteOutOfConversations) {\n        return \"shuffle\";\n      }\n      return \"robot\";\n    }\n    get clickShouldRouteOutOfConversations() {\n      return !this.navigationMenu.isHeaderDropdownMode && this.siteSettings.ai_bot_enable_dedicated_ux && this.sidebarState.currentPanel?.key === _aiConversationsSidebarManager.AI_CONVERSATIONS_PANEL;\n    }\n    onClick() {\n      if (this.clickShouldRouteOutOfConversations) {\n        return this.router.transitionTo(`discovery.${(0, _utilities.defaultHomepage)()}`);\n      }\n      if (this.siteSettings.ai_bot_enable_dedicated_ux) {\n        this.appEvents.trigger(\"discourse-ai:bot-header-icon-clicked\");\n        return this.router.transitionTo(\"discourse-ai-bot-conversations\");\n      }\n      (0, _aiBotHelper.composeAiBotMessage)(this.bots[0], this.composer);\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"onClick\", [_object.action]))();\n    static #_9 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showHeaderButton}}\n          <li>\n            <PluginOutlet\n              @name=\"ai-bot-header-icon\"\n              @outletArgs={{lazyHash onClick=this.onClick icon=this.icon}}\n            >\n              <DButton\n                @action={{this.onClick}}\n                @icon={{this.icon}}\n                title={{i18n \"discourse_ai.ai_bot.shortcut_title\"}}\n                class=\"ai-bot-button icon btn-flat\"\n              />\n            </PluginOutlet>\n          </li>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"6IW0Whqj\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showHeaderButton\\\"]],[[[1,\\\"      \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,0],null,[[\\\"@name\\\",\\\"@outletArgs\\\"],[\\\"ai-bot-header-icon\\\",[28,[32,1],null,[[\\\"onClick\\\",\\\"icon\\\"],[[30,0,[\\\"onClick\\\"]],[30,0,[\\\"icon\\\"]]]]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[32,2],[[16,\\\"title\\\",[28,[32,3],[\\\"discourse_ai.ai_bot.shortcut_title\\\"],null]],[24,0,\\\"ai-bot-button icon btn-flat\\\"]],[[\\\"@action\\\",\\\"@icon\\\"],[[30,0,[\\\"onClick\\\"]],[30,0,[\\\"icon\\\"]]]],null],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-bot-header-icon.js\",\n      \"scope\": () => [_pluginOutlet.default, _lazyHash.default, _dButton.default, _discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiBotHeaderIcon;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-bot-sidebar-empty-state\", [\"exports\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _discourseI18n, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <div class=\"ai-bot-sidebar-empty-state\">\n      {{i18n \"discourse_ai.ai_bot.sidebar_empty\"}}\n    </div>\n  \n  */\n  {\n    \"id\": \"m29KA1Bv\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"ai-bot-sidebar-empty-state\\\"],[12],[1,\\\"\\\\n    \\\"],[1,[28,[32,0],[\\\"discourse_ai.ai_bot.sidebar_empty\\\"],null]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-bot-sidebar-empty-state.js\",\n    \"scope\": () => [_discourseI18n.i18n],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-bot-sidebar-empty-state\"));\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-bot-sidebar-new-conversation\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/plugins/discourse-ai/discourse/services/ai-conversations-sidebar-manager\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _dButton, _aiConversationsSidebarManager, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const TEXTAREA_ID = \"ai-bot-conversations-input\";\n  class AiBotSidebarNewConversation extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"appEvents\", [_service.service]))();\n    #appEvents = (() => (dt7948.i(this, \"appEvents\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"sidebarState\", [_service.service]))();\n    #sidebarState = (() => (dt7948.i(this, \"sidebarState\"), void 0))();\n    get shouldRender() {\n      return this.sidebarState.isCurrentPanel(_aiConversationsSidebarManager.AI_CONVERSATIONS_PANEL);\n    }\n    focusTextarea() {\n      document.getElementById(TEXTAREA_ID)?.focus();\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"focusTextarea\", [_object.action]))();\n    routeTo() {\n      this.appEvents.trigger(\"discourse-ai:new-conversation-btn-clicked\");\n      if (this.router.currentRouteName !== \"discourse-ai-bot-conversations\") {\n        this.router.transitionTo(\"/discourse-ai/ai-bot/conversations\");\n      } else {\n        this.focusTextarea();\n      }\n      this.args.outletArgs?.toggleNavigationMenu?.();\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"routeTo\", [_object.action]))();\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.shouldRender}}\n          <div class=\"ai-new-question-button__wrapper\">\n            <DButton\n              @label=\"discourse_ai.ai_bot.conversations.new\"\n              @icon=\"plus\"\n              @action={{this.routeTo}}\n              class=\"ai-new-question-button btn-default\"\n            />\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"0JyS5UZF\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"shouldRender\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-new-question-button__wrapper\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,0],[[24,0,\\\"ai-new-question-button btn-default\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[\\\"discourse_ai.ai_bot.conversations.new\\\",\\\"plus\\\",[30,0,[\\\"routeTo\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-bot-sidebar-new-conversation.js\",\n      \"scope\": () => [_dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiBotSidebarNewConversation;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-composer-helper-menu\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/owner\", \"@ember/service\", \"discourse-i18n\", \"float-kit/components/d-toast\", \"float-kit/lib/d-toast-instance\", \"discourse/plugins/discourse-ai/discourse/components/ai-helper-options-list\", \"discourse/plugins/discourse-ai/discourse/components/modal/diff-modal\", \"discourse/plugins/discourse-ai/discourse/components/modal/thumbnail-suggestions\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _owner, _service, _discourseI18n, _dToast, _dToastInstance, _aiHelperOptionsList, _diffModal, _thumbnailSuggestions, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiComposerHelperMenu extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"newSelectedText\", [_tracking.tracked]))();\n    #newSelectedText = (() => (dt7948.i(this, \"newSelectedText\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"diff\", [_tracking.tracked]))();\n    #diff = (() => (dt7948.i(this, \"diff\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"customPromptValue\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #customPromptValue = (() => (dt7948.i(this, \"customPromptValue\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"noContentError\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #noContentError = (() => (dt7948.i(this, \"noContentError\"), void 0))();\n    prompts = [];\n    promptTypes = {};\n    constructor() {\n      super(...arguments);\n      if (this.args.data.toolbarEvent.getText().length === 0) {\n        this.noContentError = true;\n      }\n    }\n    get helperOptions() {\n      let prompts = this.currentUser?.ai_helper_prompts;\n      prompts = prompts.filter(p => p.location.includes(\"composer\")).filter(p => p.name !== \"generate_titles\").map(p => {\n        // AI helper by default returns interface locale on translations\n        // Since we want site default translations (and we are using: force_default_locale)\n        // we need to replace the translated_name with the site default locale name\n        const siteLocale = this.siteSettings.default_locale;\n        const availableLocales = this.siteSettings.available_locales;\n        const locale = availableLocales.find(l => l.value === siteLocale);\n        const translatedName = (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.context_menu.translate_prompt\", {\n          language: locale.name\n        });\n        if (p.name === \"translate\") {\n          return {\n            ...p,\n            translated_name: translatedName\n          };\n        }\n        return p;\n      });\n      // Find the custom_prompt object and move it to the beginning of the array\n      const customPromptIndex = prompts.findIndex(p => p.name === \"custom_prompt\");\n      if (customPromptIndex !== -1) {\n        const customPrompt = prompts.splice(customPromptIndex, 1)[0];\n        prompts.unshift(customPrompt);\n      }\n      if (!this.currentUser?.can_use_custom_prompts) {\n        prompts = prompts.filter(p => p.name !== \"custom_prompt\");\n      }\n      prompts.forEach(p => {\n        this.prompts[p.name] = p;\n      });\n      this.promptTypes = prompts.reduce((memo, p) => {\n        memo[p.name] = p.prompt_type;\n        return memo;\n      }, {});\n      return prompts;\n    }\n    get toast() {\n      const owner = (0, _owner.getOwner)(this);\n      const options = {\n        close: () => this.args.close(),\n        duration: \"short\",\n        data: {\n          theme: \"error\",\n          icon: \"triangle-exclamation\",\n          message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.no_content_error\")\n        }\n      };\n      const custom = class CustomToastInstance extends _dToastInstance.default {\n        constructor() {\n          super(owner, options);\n        }\n        close() {\n          this.options.close();\n        }\n        static #_ = (() => dt7948.n(this.prototype, \"close\", [_object.action]))();\n      };\n      return new custom(owner, options);\n    }\n    async suggestChanges(option) {\n      await this.args.close();\n      if (option.name === \"illustrate_post\") {\n        return this.modal.show(_thumbnailSuggestions.default, {\n          model: {\n            mode: option.name,\n            selectedText: this.args.data.selectedText,\n            thumbnails: this.thumbnailSuggestions\n          }\n        });\n      }\n      const showResultAsDiff = option.prompt_type === \"diff\" && option.name !== \"markdown_table\";\n      return this.modal.show(_diffModal.default, {\n        model: {\n          mode: option.name,\n          selectedText: this.args.data.selectedText,\n          revert: this.undoAiAction,\n          toolbarEvent: this.args.data.toolbarEvent,\n          customPromptValue: this.customPromptValue,\n          showResultAsDiff\n        }\n      });\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"suggestChanges\", [_object.action]))();\n    closeMenu() {\n      this.customPromptValue = \"\";\n      this.args.close();\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"closeMenu\", [_object.action]))();\n    static #_11 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.noContentError}}\n          <DToast @toast={{this.toast}} />\n        {{else}}\n          <div class=\"ai-composer-helper-menu\">\n            {{#if this.site.mobileView}}\n              <div class=\"ai-composer-helper-menu__selected-text\">\n                {{@data.selectedText}}\n              </div>\n            {{/if}}\n    \n            <AiHelperOptionsList\n              @options={{this.helperOptions}}\n              @customPromptValue={{this.customPromptValue}}\n              @performAction={{this.suggestChanges}}\n              @shortcutVisible={{true}}\n            />\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"2ahoy4kS\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"noContentError\\\"]],[[[1,\\\"      \\\"],[8,[32,0],null,[[\\\"@toast\\\"],[[30,0,[\\\"toast\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-composer-helper-menu\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"site\\\",\\\"mobileView\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"ai-composer-helper-menu__selected-text\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[30,1,[\\\"selectedText\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[8,[32,1],null,[[\\\"@options\\\",\\\"@customPromptValue\\\",\\\"@performAction\\\",\\\"@shortcutVisible\\\"],[[30,0,[\\\"helperOptions\\\"]],[30,0,[\\\"customPromptValue\\\"]],[30,0,[\\\"suggestChanges\\\"]],true]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"]],[\\\"@data\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-composer-helper-menu.js\",\n      \"scope\": () => [_dToast.default, _aiHelperOptionsList.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiComposerHelperMenu;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-default-llm-selector\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"discourse/lib/ajax\", \"discourse-i18n\", \"admin/components/site-setting\", \"admin/models/site-setting\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _ajax, _discourseI18n, _siteSetting, _siteSetting2, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiDefaultLlmSelector extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"defaultLlmSetting\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #defaultLlmSetting = (() => (dt7948.i(this, \"defaultLlmSetting\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.#loadDefaultLlmSetting();\n    }\n    async #loadDefaultLlmSetting() {\n      const {\n        site_settings\n      } = await (0, _ajax.ajax)(\"/admin/config/site_settings.json\", {\n        data: {\n          plugin: \"discourse-ai\",\n          category: \"discourse_ai\"\n        }\n      });\n      const defaultLlmSetting = site_settings.find(setting => setting.setting === \"ai_default_llm_model\");\n      this.defaultLlmSetting = _siteSetting2.default.create(defaultLlmSetting);\n    }\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-configure-default-llm\">\n          <div class=\"ai-configure-default-llm__header\">\n            <h3>{{i18n \"discourse_ai.default_llm.title\"}}</h3>\n            <p>{{i18n \"discourse_ai.default_llm.description\"}}</p>\n          </div>\n    \n          {{#if this.defaultLlmSetting}}\n            <SiteSettingComponent\n              @setting={{this.defaultLlmSetting}}\n              class=\"ai-configure-default-llm__setting\"\n            />\n          {{/if}}\n        </div>\n      \n    */\n    {\n      \"id\": \"H9NPJOFZ\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-configure-default-llm\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"ai-configure-default-llm__header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h3\\\"],[12],[1,[28,[32,0],[\\\"discourse_ai.default_llm.title\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,[28,[32,0],[\\\"discourse_ai.default_llm.description\\\"],null]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"defaultLlmSetting\\\"]],[[[1,\\\"        \\\"],[8,[32,1],[[24,0,\\\"ai-configure-default-llm__setting\\\"]],[[\\\"@setting\\\"],[[30,0,[\\\"defaultLlmSetting\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-default-llm-selector.js\",\n      \"scope\": () => [_discourseI18n.i18n, _siteSetting.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiDefaultLlmSelector;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-embedding-editor\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/runloop\", \"@ember/service\", \"truth-helpers\", \"discourse/components/back-button\", \"discourse/components/conditional-loading-spinner\", \"discourse/components/d-button\", \"discourse/components/form\", \"discourse/helpers/d-icon\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"admin/components/admin-section-landing-item\", \"admin/components/admin-section-landing-wrapper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _runloop, _service, _truthHelpers, _backButton, _conditionalLoadingSpinner, _dButton, _form, _dIcon, _ajaxError, _discourseI18n, _adminSectionLandingItem, _adminSectionLandingWrapper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiEmbeddingEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"dialog\", [_service.service]))();\n    #dialog = (() => (dt7948.i(this, \"dialog\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"store\", [_service.service]))();\n    #store = (() => (dt7948.i(this, \"store\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"isSaving\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isSaving = (() => (dt7948.i(this, \"isSaving\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"selectedPreset\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #selectedPreset = (() => (dt7948.i(this, \"selectedPreset\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"testRunning\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #testRunning = (() => (dt7948.i(this, \"testRunning\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"testResult\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #testResult = (() => (dt7948.i(this, \"testResult\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"testError\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #testError = (() => (dt7948.i(this, \"testError\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"currentProvider\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #currentProvider = (() => (dt7948.i(this, \"currentProvider\"), void 0))();\n    constructor() {\n      super(...arguments);\n      if (this.args.model) {\n        this.currentProvider = this.args.model.provider;\n      }\n    }\n    get formData() {\n      let data;\n      if (this.selectedPreset) {\n        data = this.store.createRecord(\"ai-embedding\", this.selectedPreset).workingCopy();\n      } else {\n        data = this.args.model.workingCopy();\n      }\n      const originalData = JSON.parse(JSON.stringify(data));\n      this._originalFormData = originalData;\n      return originalData;\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"formData\", [_tracking.cached]))();\n    get selectedProviders() {\n      const t = provName => {\n        return (0, _discourseI18n.i18n)(`discourse_ai.embeddings.providers.${provName}`);\n      };\n      return this.args.embeddings.resultSetMeta.providers.map(prov => {\n        return {\n          id: prov,\n          name: t(prov)\n        };\n      });\n    }\n    get distanceFunctions() {\n      const t = df => {\n        return (0, _discourseI18n.i18n)(`discourse_ai.embeddings.distance_functions.${df}`);\n      };\n      return this.args.embeddings.resultSetMeta.distance_functions.map(df => {\n        return {\n          id: df,\n          name: t(df)\n        };\n      });\n    }\n    get presets() {\n      const presets = this.args.embeddings.resultSetMeta.presets.map(preset => {\n        return {\n          name: preset.display_name,\n          id: preset.preset_id,\n          provider: preset.provider\n        };\n      });\n      presets.unshiftObject({\n        name: (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.configure_manually\"),\n        id: \"manual\",\n        provider: \"fake\"\n      });\n      return presets;\n    }\n    get showPresets() {\n      return !this.selectedPreset && this.args.model.isNew;\n    }\n    get metaProviderParams() {\n      const provider = this.currentProvider;\n      if (!provider) {\n        return {};\n      }\n      const embeddings = this.args.embeddings || {};\n      const meta = embeddings.resultSetMeta || {};\n      const providerParams = meta.provider_params || {};\n      return providerParams[provider] || {};\n    }\n    get testErrorMessage() {\n      return (0, _discourseI18n.i18n)(\"discourse_ai.llms.tests.failure\", {\n        error: this.testError\n      });\n    }\n    get displayTestResult() {\n      return this.testRunning || this.testResult !== null;\n    }\n    get seeded() {\n      return this.args.model.id < 0;\n    }\n    configurePreset(preset) {\n      this.selectedPreset = this.args.embeddings.resultSetMeta.presets.findBy(\"preset_id\", preset.id) || {};\n      if (this.selectedPreset.provider) {\n        this.currentProvider = this.selectedPreset.provider;\n      }\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"configurePreset\", [_object.action]))();\n    setProvider(provider, _ref) {\n      let {\n        set\n      } = _ref;\n      set(\"provider\", provider);\n      this.currentProvider = provider;\n      const providerParams = this.args.embeddings?.resultSetMeta?.provider_params || {};\n      const params = providerParams[provider] || {};\n      const initialParams = {};\n      if (params) {\n        const keys = Object.keys(params);\n        keys.forEach(key => {\n          initialParams[key] = null;\n        });\n      }\n      set(\"provider_params\", initialParams);\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"setProvider\", [_object.action]))();\n    get providerParams() {\n      const normalizeParam = value => {\n        if (!value) {\n          return {\n            type: \"text\"\n          };\n        }\n        if (typeof value === \"string\") {\n          return {\n            type: value\n          };\n        }\n        return {\n          type: value.type || \"text\",\n          values: (value.values || []).map(v => ({\n            id: v,\n            name: v\n          })),\n          default: value.default\n        };\n      };\n      return Object.entries(this.metaProviderParams).reduce((acc, _ref2) => {\n        let [field, value] = _ref2;\n        acc[field] = normalizeParam(value);\n        return acc;\n      }, {});\n    }\n    resetForm() {\n      this.selectedPreset = null;\n      this.currentProvider = null;\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"resetForm\", [_object.action]))();\n    async save(formData) {\n      this.isSaving = true;\n      const isNew = this.args.model.isNew;\n      try {\n        const dataToSave = {\n          ...formData\n        };\n        if (this.selectedPreset) {\n          // new embeddings\n          const newModel = this.store.createRecord(\"ai-embedding\", {\n            ...this.selectedPreset,\n            ...dataToSave\n          });\n          await newModel.save();\n          this.args.embeddings.addObject(newModel);\n        } else {\n          // existing embeddings\n          await this.args.model.save(dataToSave);\n        }\n        if (isNew) {\n          this.router.transitionTo(\"adminPlugins.show.discourse-ai-embeddings.index\");\n        } else {\n          const savedProvider = this.currentProvider;\n          this._originalFormData = JSON.parse(JSON.stringify(dataToSave));\n          this.currentProvider = savedProvider;\n          this.toasts.success({\n            data: {\n              message: (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.saved\")\n            },\n            duration: \"short\"\n          });\n        }\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        (0, _runloop.later)(() => {\n          this.isSaving = false;\n        }, 1000);\n      }\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n    async test(data) {\n      this.testRunning = true;\n      try {\n        let testModel;\n        // new embeddings\n        if (this.args.model.isNew || this.selectedPreset) {\n          testModel = this.store.createRecord(\"ai-embedding\", {\n            ...this.selectedPreset,\n            ...data\n          });\n        } else {\n          // existing embeddings\n          testModel = this.args.model;\n        }\n        const configTestResult = await testModel.testConfig(data);\n        this.testResult = configTestResult.success;\n        if (this.testResult) {\n          this.testError = null;\n        } else {\n          this.testError = configTestResult.error;\n        }\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        (0, _runloop.later)(() => {\n          this.testRunning = false;\n        }, 1000);\n      }\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"test\", [_object.action]))();\n    delete() {\n      return this.dialog.confirm({\n        message: (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.confirm_delete\"),\n        didConfirm: () => {\n          return this.args.model.destroyRecord().then(() => {\n            this.args.embeddings.removeObject(this.args.model);\n            this.router.transitionTo(\"adminPlugins.show.discourse-ai-embeddings.index\");\n          }).catch(_ajaxError.popupAjaxError);\n        }\n      });\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"delete\", [_object.action]))();\n    providerKeys(providerParams) {\n      return providerParams ? Object.keys(providerParams) : [];\n    }\n    static #_18 = (() => dt7948.n(this.prototype, \"providerKeys\", [_object.action]))();\n    static #_19 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showPresets}}\n          <BackButton\n            @route=\"adminPlugins.show.discourse-ai-embeddings\"\n            @label=\"discourse_ai.embeddings.back\"\n          />\n          <div class=\"control-group\">\n            <h2>{{i18n \"discourse_ai.embeddings.presets\"}}</h2>\n            <AdminSectionLandingWrapper>\n              {{#each this.presets as |preset|}}\n                <AdminSectionLandingItem\n                  @titleLabelTranslated={{preset.name}}\n                  @taglineLabel={{concat\n                    \"discourse_ai.embeddings.providers.\"\n                    preset.provider\n                  }}\n                  data-preset-id={{preset.id}}\n                  class=\"ai-llms-list-editor__templates-list-item\"\n                >\n                  <:buttons as |buttons|>\n                    <buttons.Default\n                      @action={{fn this.configurePreset preset}}\n                      @icon=\"gear\"\n                      @label=\"discourse_ai.llms.preconfigured.button\"\n                    />\n                  </:buttons>\n                </AdminSectionLandingItem>\n              {{/each}}\n            </AdminSectionLandingWrapper>\n          </div>\n        {{else}}\n          <Form\n            @onSubmit={{this.save}}\n            @data={{this.formData}}\n            class=\"form-horizontal ai-embedding-editor {{if this.seeded 'seeded'}}\"\n            as |form data|\n          >\n            {{#if @model.isNew}}\n              <DButton\n                @action={{this.resetForm}}\n                @label=\"back_button\"\n                @icon=\"chevron-left\"\n                class=\"btn-flat back-button\"\n              />\n            {{else}}\n              <BackButton\n                @route=\"adminPlugins.show.discourse-ai-embeddings\"\n                @label=\"discourse_ai.embeddings.back\"\n              />\n            {{/if}}\n    \n            <form.Field\n              @name=\"display_name\"\n              @title={{i18n \"discourse_ai.embeddings.display_name\"}}\n              @validation=\"required|length:1,100\"\n              @format=\"large\"\n              class=\"ai-embedding-editor__display-name\"\n              as |field|\n            >\n              <field.Input />\n            </form.Field>\n    \n            <form.Field\n              @name=\"provider\"\n              @title={{i18n \"discourse_ai.embeddings.provider\"}}\n              @validation=\"required\"\n              @format=\"large\"\n              @onSet={{this.setProvider}}\n              class=\"ai-embedding-editor__provider\"\n              as |field|\n            >\n              <field.Select as |select|>\n                {{#each this.selectedProviders as |provider|}}\n                  <select.Option\n                    @value={{provider.id}}\n                  >{{provider.name}}</select.Option>\n                {{/each}}\n              </field.Select>\n            </form.Field>\n    \n            <form.Field\n              @name=\"url\"\n              @title={{i18n \"discourse_ai.embeddings.url\"}}\n              @validation=\"required\"\n              @format=\"large\"\n              class=\"ai-embedding-editor__url\"\n              as |field|\n            >\n              <field.Input />\n            </form.Field>\n    \n            <form.Field\n              @name=\"api_key\"\n              @title={{i18n \"discourse_ai.embeddings.api_key\"}}\n              @validation=\"required\"\n              @format=\"large\"\n              class=\"ai-embedding-editor__api-key\"\n              as |field|\n            >\n              <field.Password />\n            </form.Field>\n    \n            <form.Field\n              @name=\"tokenizer_class\"\n              @title={{i18n \"discourse_ai.embeddings.tokenizer\"}}\n              @validation=\"required\"\n              @format=\"large\"\n              class=\"ai-embedding-editor__tokenizer\"\n              as |field|\n            >\n              <field.Select as |select|>\n                {{#each @embeddings.resultSetMeta.tokenizers as |tokenizer|}}\n                  <select.Option\n                    @value={{tokenizer.id}}\n                  >{{tokenizer.name}}</select.Option>\n                {{/each}}\n              </field.Select>\n            </form.Field>\n    \n            <form.Field\n              @name=\"dimensions\"\n              @title={{i18n \"discourse_ai.embeddings.dimensions\"}}\n              @validation=\"required\"\n              @format=\"large\"\n              @tooltip={{if\n                @model.isNew\n                (i18n \"discourse_ai.embeddings.hints.dimensions_warning\")\n              }}\n              class=\"ai-embedding-editor__dimensions\"\n              as |field|\n            >\n              <field.Input\n                @type=\"number\"\n                step=\"any\"\n                min=\"0\"\n                lang=\"en\"\n                disabled={{not @model.isNew}}\n              />\n            </form.Field>\n    \n            <form.Field\n              @name=\"matryoshka_dimensions\"\n              @title={{i18n \"discourse_ai.embeddings.matryoshka_dimensions\"}}\n              @tooltip={{i18n\n                \"discourse_ai.embeddings.hints.matryoshka_dimensions\"\n              }}\n              @format=\"large\"\n              class=\"ai-embedding-editor__matryoshka_dimensions\"\n              as |field|\n            >\n              <field.Checkbox />\n            </form.Field>\n    \n            <form.Field\n              @name=\"embed_prompt\"\n              @title={{i18n \"discourse_ai.embeddings.embed_prompt\"}}\n              @tooltip={{i18n \"discourse_ai.embeddings.hints.embed_prompt\"}}\n              @format=\"large\"\n              class=\"ai-embedding-editor__embed_prompt\"\n              as |field|\n            >\n              <field.Textarea />\n            </form.Field>\n    \n            <form.Field\n              @name=\"search_prompt\"\n              @title={{i18n \"discourse_ai.embeddings.search_prompt\"}}\n              @tooltip={{i18n \"discourse_ai.embeddings.hints.search_prompt\"}}\n              @format=\"large\"\n              class=\"ai-embedding-editor__search_prompt\"\n              as |field|\n            >\n              <field.Textarea />\n            </form.Field>\n    \n            <form.Field\n              @name=\"max_sequence_length\"\n              @title={{i18n \"discourse_ai.embeddings.max_sequence_length\"}}\n              @tooltip={{i18n \"discourse_ai.embeddings.hints.sequence_length\"}}\n              @validation=\"required\"\n              @format=\"large\"\n              class=\"ai-embedding-editor__max_sequence_length\"\n              as |field|\n            >\n              <field.Input @type=\"number\" step=\"any\" min=\"0\" lang=\"en\" />\n            </form.Field>\n    \n            <form.Field\n              @name=\"pg_function\"\n              @title={{i18n \"discourse_ai.embeddings.distance_function\"}}\n              @tooltip={{i18n \"discourse_ai.embeddings.hints.distance_function\"}}\n              @format=\"large\"\n              @validation=\"required\"\n              class=\"ai-embedding-editor__distance_functions\"\n              as |field|\n            >\n              <field.Select @includeNone={{false}} as |select|>\n                {{#each this.distanceFunctions as |df|}}\n                  <select.Option @value={{df.id}}>{{df.name}}</select.Option>\n                {{/each}}\n              </field.Select>\n            </form.Field>\n    \n            {{! provider-specific content }}\n            {{#if this.currentProvider}}\n              <form.Object @name=\"provider_params\" as |object providerData|>\n                {{#each (this.providerKeys providerData) as |name|}}\n                  {{#let (get this.providerParams name) as |params|}}\n                    {{#if params}}\n                      <object.Field\n                        @name={{name}}\n                        @title={{i18n\n                          (concat \"discourse_ai.embeddings.provider_fields.\" name)\n                        }}\n                        @format=\"large\"\n                        @validation=\"required\"\n                        class=\"ai-embedding-editor-provider-param__{{params.type}}\"\n                        as |field|\n                      >\n                        {{#if (eq params.type \"enum\")}}\n                          <field.Select @includeNone={{false}} as |select|>\n                            {{#each params.values as |option|}}\n                              <select.Option\n                                @value={{option.id}}\n                              >{{option.name}}</select.Option>\n                            {{/each}}\n                          </field.Select>\n                        {{else if (eq params.type \"checkbox\")}}\n                          <field.Checkbox />\n                        {{else}}\n                          <field.Input @type={{params.type}} />\n                        {{/if}}\n                      </object.Field>\n                    {{/if}}\n                  {{/let}}\n                {{/each}}\n              </form.Object>\n            {{/if}}\n    \n            <form.Actions class=\"ai-embedding-editor__action_panel\">\n              <form.Button\n                @action={{fn this.test data}}\n                @disabled={{this.testRunning}}\n                @label=\"discourse_ai.embeddings.tests.title\"\n                class=\"ai-embedding-editor__test\"\n              />\n    \n              <form.Submit\n                @label=\"discourse_ai.embeddings.save\"\n                class=\"btn-primary ai-embedding-editor__save\"\n              />\n    \n              {{#unless data.isNew}}\n                <form.Button\n                  @action={{this.delete}}\n                  @label=\"discourse_ai.embeddings.delete\"\n                  class=\"btn-danger ai-embedding-editor__delete\"\n                />\n              {{/unless}}\n            </form.Actions>\n    \n            {{#if this.displayTestResult}}\n              <form.Container @format=\"full\" class=\"ai-embedding-editor-tests\">\n                <ConditionalLoadingSpinner\n                  @size=\"small\"\n                  @condition={{this.testRunning}}\n                >\n                  {{#if this.testResult}}\n                    <div class=\"ai-embedding-editor-tests__success\">\n                      {{icon \"check\"}}\n                      {{i18n \"discourse_ai.embeddings.tests.success\"}}\n                    </div>\n                  {{else}}\n                    <div class=\"ai-embedding-editor-tests__failure\">\n                      {{icon \"xmark\"}}\n                      {{this.testErrorMessage}}\n                    </div>\n                  {{/if}}\n                </ConditionalLoadingSpinner>\n              </form.Container>\n            {{/if}}\n          </Form>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"kJ5LIVvb\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showPresets\\\"]],[[[1,\\\"      \\\"],[8,[32,0],null,[[\\\"@route\\\",\\\"@label\\\"],[\\\"adminPlugins.show.discourse-ai-embeddings\\\",\\\"discourse_ai.embeddings.back\\\"]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h2\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.embeddings.presets\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,2],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"presets\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[8,[32,3],[[16,\\\"data-preset-id\\\",[30,1,[\\\"id\\\"]]],[24,0,\\\"ai-llms-list-editor__templates-list-item\\\"]],[[\\\"@titleLabelTranslated\\\",\\\"@taglineLabel\\\"],[[30,1,[\\\"name\\\"]],[28,[32,4],[\\\"discourse_ai.embeddings.providers.\\\",[30,1,[\\\"provider\\\"]]],null]]],[[\\\"buttons\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,2,[\\\"Default\\\"]],null,[[\\\"@action\\\",\\\"@icon\\\",\\\"@label\\\"],[[28,[32,5],[[30,0,[\\\"configurePreset\\\"]],[30,1]],null],\\\"gear\\\",\\\"discourse_ai.llms.preconfigured.button\\\"]],null],[1,\\\"\\\\n              \\\"]],[2]]]]],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[8,[32,6],[[16,0,[29,[\\\"form-horizontal ai-embedding-editor \\\",[52,[30,0,[\\\"seeded\\\"]],\\\"seeded\\\"]]]]],[[\\\"@onSubmit\\\",\\\"@data\\\"],[[30,0,[\\\"save\\\"]],[30,0,[\\\"formData\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,5,[\\\"isNew\\\"]],[[[1,\\\"          \\\"],[8,[32,7],[[24,0,\\\"btn-flat back-button\\\"]],[[\\\"@action\\\",\\\"@label\\\",\\\"@icon\\\"],[[30,0,[\\\"resetForm\\\"]],\\\"back_button\\\",\\\"chevron-left\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[32,0],null,[[\\\"@route\\\",\\\"@label\\\"],[\\\"adminPlugins.show.discourse-ai-embeddings\\\",\\\"discourse_ai.embeddings.back\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__display-name\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"display_name\\\",[28,[32,1],[\\\"discourse_ai.embeddings.display_name\\\"],null],\\\"required|length:1,100\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,6,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[6]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__provider\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\",\\\"@onSet\\\"],[\\\"provider\\\",[28,[32,1],[\\\"discourse_ai.embeddings.provider\\\"],null],\\\"required\\\",\\\"large\\\",[30,0,[\\\"setProvider\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,7,[\\\"Select\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"selectedProviders\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,8,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,9,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,9,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[9]],null],[1,\\\"          \\\"]],[8]]]]],[1,\\\"\\\\n        \\\"]],[7]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__url\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"url\\\",[28,[32,1],[\\\"discourse_ai.embeddings.url\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,10,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[10]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__api-key\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"api_key\\\",[28,[32,1],[\\\"discourse_ai.embeddings.api_key\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,11,[\\\"Password\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[11]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__tokenizer\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"tokenizer_class\\\",[28,[32,1],[\\\"discourse_ai.embeddings.tokenizer\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,12,[\\\"Select\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,14,[\\\"resultSetMeta\\\",\\\"tokenizers\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,13,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,15,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,15,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[15]],null],[1,\\\"          \\\"]],[13]]]]],[1,\\\"\\\\n        \\\"]],[12]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__dimensions\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\",\\\"@tooltip\\\"],[\\\"dimensions\\\",[28,[32,1],[\\\"discourse_ai.embeddings.dimensions\\\"],null],\\\"required\\\",\\\"large\\\",[52,[30,5,[\\\"isNew\\\"]],[28,[32,1],[\\\"discourse_ai.embeddings.hints.dimensions_warning\\\"],null]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,16,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"lang\\\",\\\"en\\\"],[16,\\\"disabled\\\",[28,[32,8],[[30,5,[\\\"isNew\\\"]]],null]]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n        \\\"]],[16]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__matryoshka_dimensions\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"matryoshka_dimensions\\\",[28,[32,1],[\\\"discourse_ai.embeddings.matryoshka_dimensions\\\"],null],[28,[32,1],[\\\"discourse_ai.embeddings.hints.matryoshka_dimensions\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,17,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[17]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__embed_prompt\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"embed_prompt\\\",[28,[32,1],[\\\"discourse_ai.embeddings.embed_prompt\\\"],null],[28,[32,1],[\\\"discourse_ai.embeddings.hints.embed_prompt\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,18,[\\\"Textarea\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[18]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__search_prompt\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"search_prompt\\\",[28,[32,1],[\\\"discourse_ai.embeddings.search_prompt\\\"],null],[28,[32,1],[\\\"discourse_ai.embeddings.hints.search_prompt\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,19,[\\\"Textarea\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[19]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__max_sequence_length\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"max_sequence_length\\\",[28,[32,1],[\\\"discourse_ai.embeddings.max_sequence_length\\\"],null],[28,[32,1],[\\\"discourse_ai.embeddings.hints.sequence_length\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,20,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n        \\\"]],[20]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__distance_functions\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\",\\\"@validation\\\"],[\\\"pg_function\\\",[28,[32,1],[\\\"discourse_ai.embeddings.distance_function\\\"],null],[28,[32,1],[\\\"discourse_ai.embeddings.hints.distance_function\\\"],null],\\\"large\\\",\\\"required\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,21,[\\\"Select\\\"]],null,[[\\\"@includeNone\\\"],[false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"distanceFunctions\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,22,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,23,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,23,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[23]],null],[1,\\\"          \\\"]],[22]]]]],[1,\\\"\\\\n        \\\"]],[21]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"currentProvider\\\"]],[[[1,\\\"          \\\"],[8,[30,3,[\\\"Object\\\"]],null,[[\\\"@name\\\"],[\\\"provider_params\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[28,[30,0,[\\\"providerKeys\\\"]],[[30,25]],null]],null]],null],null,[[[44,[[28,[32,9],[[30,0,[\\\"providerParams\\\"]],[30,26]],null]],[[[41,[30,27],[[[1,\\\"                  \\\"],[8,[30,24,[\\\"Field\\\"]],[[16,0,[29,[\\\"ai-embedding-editor-provider-param__\\\",[30,27,[\\\"type\\\"]]]]]],[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\",\\\"@validation\\\"],[[30,26],[28,[32,1],[[28,[32,4],[\\\"discourse_ai.embeddings.provider_fields.\\\",[30,26]],null]],null],\\\"large\\\",\\\"required\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[32,10],[[30,27,[\\\"type\\\"]],\\\"enum\\\"],null],[[[1,\\\"                      \\\"],[8,[30,28,[\\\"Select\\\"]],null,[[\\\"@includeNone\\\"],[false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,27,[\\\"values\\\"]]],null]],null],null,[[[1,\\\"                          \\\"],[8,[30,29,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,30,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,30,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[30]],null],[1,\\\"                      \\\"]],[29]]]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,10],[[30,27,[\\\"type\\\"]],\\\"checkbox\\\"],null],[[[1,\\\"                      \\\"],[8,[30,28,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      \\\"],[8,[30,28,[\\\"Input\\\"]],null,[[\\\"@type\\\"],[[30,27,[\\\"type\\\"]]]],null],[1,\\\"\\\\n                    \\\"]],[]]]],[]]],[1,\\\"                  \\\"]],[28]]]]],[1,\\\"\\\\n\\\"]],[]],null]],[27]]]],[26]],null],[1,\\\"          \\\"]],[24,25]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[8,[30,3,[\\\"Actions\\\"]],[[24,0,\\\"ai-embedding-editor__action_panel\\\"]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,3,[\\\"Button\\\"]],[[24,0,\\\"ai-embedding-editor__test\\\"]],[[\\\"@action\\\",\\\"@disabled\\\",\\\"@label\\\"],[[28,[32,5],[[30,0,[\\\"test\\\"]],[30,4]],null],[30,0,[\\\"testRunning\\\"]],\\\"discourse_ai.embeddings.tests.title\\\"]],null],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,3,[\\\"Submit\\\"]],[[24,0,\\\"btn-primary ai-embedding-editor__save\\\"]],[[\\\"@label\\\"],[\\\"discourse_ai.embeddings.save\\\"]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,4,[\\\"isNew\\\"]]],[[[1,\\\"            \\\"],[8,[30,3,[\\\"Button\\\"]],[[24,0,\\\"btn-danger ai-embedding-editor__delete\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"delete\\\"]],\\\"discourse_ai.embeddings.delete\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"displayTestResult\\\"]],[[[1,\\\"          \\\"],[8,[30,3,[\\\"Container\\\"]],[[24,0,\\\"ai-embedding-editor-tests\\\"]],[[\\\"@format\\\"],[\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[32,11],null,[[\\\"@size\\\",\\\"@condition\\\"],[\\\"small\\\",[30,0,[\\\"testRunning\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"testResult\\\"]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"ai-embedding-editor-tests__success\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[28,[32,12],[\\\"check\\\"],null]],[1,\\\"\\\\n                  \\\"],[1,[28,[32,1],[\\\"discourse_ai.embeddings.tests.success\\\"],null]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"ai-embedding-editor-tests__failure\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[28,[32,12],[\\\"xmark\\\"],null]],[1,\\\"\\\\n                  \\\"],[1,[30,0,[\\\"testErrorMessage\\\"]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"]],[3,4]]]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"]],[\\\"preset\\\",\\\"buttons\\\",\\\"form\\\",\\\"data\\\",\\\"@model\\\",\\\"field\\\",\\\"field\\\",\\\"select\\\",\\\"provider\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"select\\\",\\\"@embeddings\\\",\\\"tokenizer\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"select\\\",\\\"df\\\",\\\"object\\\",\\\"providerData\\\",\\\"name\\\",\\\"params\\\",\\\"field\\\",\\\"select\\\",\\\"option\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\",\\\"let\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-embedding-editor.js\",\n      \"scope\": () => [_backButton.default, _discourseI18n.i18n, _adminSectionLandingWrapper.default, _adminSectionLandingItem.default, _helper.concat, _helper.fn, _form.default, _dButton.default, _truthHelpers.not, _helper.get, _truthHelpers.eq, _conditionalLoadingSpinner.default, _dIcon.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiEmbeddingEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-embeddings-list-editor\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/service\", \"discourse/components/d-breadcrumbs-item\", \"discourse/components/d-button\", \"discourse/components/d-page-subheader\", \"discourse-i18n\", \"admin/components/admin-config-area-empty-list\", \"float-kit/components/d-tooltip\", \"discourse/plugins/discourse-ai/discourse/components/ai-embedding-editor\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _service, _dBreadcrumbsItem, _dButton, _dPageSubheader, _discourseI18n, _adminConfigAreaEmptyList, _dTooltip, _aiEmbeddingEditor, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiEmbeddingsListEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"adminPluginNavManager\", [_service.service]))();\n    #adminPluginNavManager = (() => (dt7948.i(this, \"adminPluginNavManager\"), void 0))();\n    get hasEmbeddingElements() {\n      return this.args.embeddings.length !== 0;\n    }\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DBreadcrumbsItem\n          @path=\"/admin/plugins/{{this.adminPluginNavManager.currentPlugin.name}}/ai-embeddings\"\n          @label={{i18n \"discourse_ai.embeddings.short_title\"}}\n        />\n        <section class=\"ai-embeddings-list-editor admin-detail\">\n          {{#if @currentEmbedding}}\n            <AiEmbeddingEditor\n              @model={{@currentEmbedding}}\n              @embeddings={{@embeddings}}\n            />\n          {{else}}\n            <DPageSubheader\n              @titleLabel={{i18n \"discourse_ai.embeddings.short_title\"}}\n              @descriptionLabel={{i18n \"discourse_ai.embeddings.description\"}}\n              @learnMoreUrl=\"https://meta.discourse.org/t/discourse-ai-embeddings/259603\"\n            >\n              <:actions as |actions|>\n                <actions.Primary\n                  @label=\"discourse_ai.embeddings.new\"\n                  @route=\"adminPlugins.show.discourse-ai-embeddings.new\"\n                  @icon=\"plus\"\n                  class=\"ai-embeddings-list-editor__new-button\"\n                />\n              </:actions>\n            </DPageSubheader>\n    \n            {{#if this.hasEmbeddingElements}}\n              <table class=\"d-admin-table\">\n                <thead>\n                  <tr>\n                    <th>{{i18n \"discourse_ai.embeddings.display_name\"}}</th>\n                    <th>{{i18n \"discourse_ai.embeddings.provider\"}}</th>\n                    <th></th>\n                  </tr>\n                </thead>\n                <tbody>\n                  {{#each @embeddings as |embedding|}}\n                    <tr class=\"ai-embeddings-list__row d-admin-row__content\">\n                      <td class=\"d-admin-row__overview\">\n                        <div class=\"ai-embeddings-list__name\">\n                          <strong>\n                            {{embedding.display_name}}\n                          </strong>\n                        </div>\n                      </td>\n                      <td class=\"d-admin-row__detail\">\n                        <div class=\"d-admin-row__mobile-label\">\n                          {{i18n \"discourse_ai.embeddings.provider\"}}\n                        </div>\n                        {{i18n\n                          (concat\n                            \"discourse_ai.embeddings.providers.\" embedding.provider\n                          )\n                        }}\n                      </td>\n                      <td class=\"d-admin-row__controls\">\n                        {{#if embedding.seeded}}\n                          <DTooltip\n                            class=\"ai-embeddings-list__edit-disabled-tooltip\"\n                          >\n                            <:trigger>\n                              <DButton\n                                class=\"btn btn-default btn-small disabled\"\n                                @label=\"discourse_ai.embeddings.edit\"\n                              />\n                            </:trigger>\n                            <:content>\n                              {{i18n \"discourse_ai.embeddings.seeded_warning\"}}\n                            </:content>\n                          </DTooltip>\n                        {{else}}\n                          <DButton\n                            class=\"btn btn-default btn-small ai-embeddings-list__edit-button\"\n                            @label=\"discourse_ai.embeddings.edit\"\n                            @route=\"adminPlugins.show.discourse-ai-embeddings.edit\"\n                            @routeModels={{embedding.id}}\n                          />\n                        {{/if}}\n                      </td>\n                    </tr>\n                  {{/each}}\n                </tbody>\n              </table>\n            {{else}}\n              <AdminConfigAreaEmptyList\n                @ctaLabel=\"discourse_ai.embeddings.new\"\n                @ctaRoute=\"adminPlugins.show.discourse-ai-embeddings.new\"\n                @ctaClass=\"ai-embeddings-list-editor__empty-new-button\"\n                @emptyLabel=\"discourse_ai.embeddings.empty\"\n              />\n            {{/if}}\n          {{/if}}\n        </section>\n      \n    */\n    {\n      \"id\": \"MiS/W6iF\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@path\\\",\\\"@label\\\"],[[29,[\\\"/admin/plugins/\\\",[30,0,[\\\"adminPluginNavManager\\\",\\\"currentPlugin\\\",\\\"name\\\"]],\\\"/ai-embeddings\\\"]],[28,[32,1],[\\\"discourse_ai.embeddings.short_title\\\"],null]]],null],[1,\\\"\\\\n    \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-embeddings-list-editor admin-detail\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"        \\\"],[8,[32,2],null,[[\\\"@model\\\",\\\"@embeddings\\\"],[[30,1],[30,2]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[32,3],null,[[\\\"@titleLabel\\\",\\\"@descriptionLabel\\\",\\\"@learnMoreUrl\\\"],[[28,[32,1],[\\\"discourse_ai.embeddings.short_title\\\"],null],[28,[32,1],[\\\"discourse_ai.embeddings.description\\\"],null],\\\"https://meta.discourse.org/t/discourse-ai-embeddings/259603\\\"]],[[\\\"actions\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,3,[\\\"Primary\\\"]],[[24,0,\\\"ai-embeddings-list-editor__new-button\\\"]],[[\\\"@label\\\",\\\"@route\\\",\\\"@icon\\\"],[\\\"discourse_ai.embeddings.new\\\",\\\"adminPlugins.show.discourse-ai-embeddings.new\\\",\\\"plus\\\"]],null],[1,\\\"\\\\n          \\\"]],[3]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"hasEmbeddingElements\\\"]],[[[1,\\\"          \\\"],[10,\\\"table\\\"],[14,0,\\\"d-admin-table\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.embeddings.display_name\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.embeddings.provider\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,2]],null]],null],null,[[[1,\\\"                \\\"],[10,\\\"tr\\\"],[14,0,\\\"ai-embeddings-list__row d-admin-row__content\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__overview\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"ai-embeddings-list__name\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[30,4,[\\\"display_name\\\"]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__detail\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"d-admin-row__mobile-label\\\"],[12],[1,\\\"\\\\n                      \\\"],[1,[28,[32,1],[\\\"discourse_ai.embeddings.provider\\\"],null]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[1,[28,[32,1],[[28,[32,4],[\\\"discourse_ai.embeddings.providers.\\\",[30,4,[\\\"provider\\\"]]],null]],null]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__controls\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,4,[\\\"seeded\\\"]],[[[1,\\\"                      \\\"],[8,[32,5],[[24,0,\\\"ai-embeddings-list__edit-disabled-tooltip\\\"]],null,[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n                          \\\"],[8,[32,6],[[24,0,\\\"btn btn-default btn-small disabled\\\"]],[[\\\"@label\\\"],[\\\"discourse_ai.embeddings.edit\\\"]],null],[1,\\\"\\\\n                        \\\"]],[]],[[[1,\\\"\\\\n                          \\\"],[1,[28,[32,1],[\\\"discourse_ai.embeddings.seeded_warning\\\"],null]],[1,\\\"\\\\n                        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      \\\"],[8,[32,6],[[24,0,\\\"btn btn-default btn-small ai-embeddings-list__edit-button\\\"]],[[\\\"@label\\\",\\\"@route\\\",\\\"@routeModels\\\"],[\\\"discourse_ai.embeddings.edit\\\",\\\"adminPlugins.show.discourse-ai-embeddings.edit\\\",[30,4,[\\\"id\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[32,7],null,[[\\\"@ctaLabel\\\",\\\"@ctaRoute\\\",\\\"@ctaClass\\\",\\\"@emptyLabel\\\"],[\\\"discourse_ai.embeddings.new\\\",\\\"adminPlugins.show.discourse-ai-embeddings.new\\\",\\\"ai-embeddings-list-editor__empty-new-button\\\",\\\"discourse_ai.embeddings.empty\\\"]],null],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@currentEmbedding\\\",\\\"@embeddings\\\",\\\"actions\\\",\\\"embedding\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-embeddings-list-editor.js\",\n      \"scope\": () => [_dBreadcrumbsItem.default, _discourseI18n.i18n, _aiEmbeddingEditor.default, _dPageSubheader.default, _helper.concat, _dTooltip.default, _dButton.default, _adminConfigAreaEmptyList.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiEmbeddingsListEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-features-list\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/routing\", \"discourse/components/d-button\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _routing, _dButton, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ExpandableList extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"isExpanded\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isExpanded = (() => (dt7948.i(this, \"isExpanded\"), void 0))();\n    get maxItemsToShow() {\n      return this.args.maxItemsToShow ?? 5;\n    }\n    get hasMore() {\n      return this.args.items?.length > this.maxItemsToShow;\n    }\n    get visibleItems() {\n      if (!this.args.items) {\n        return [];\n      }\n      return this.isExpanded ? this.args.items : this.args.items.slice(0, this.maxItemsToShow);\n    }\n    get remainingCount() {\n      return this.args.items?.length - this.maxItemsToShow;\n    }\n    get expandToggleLabel() {\n      if (this.isExpanded) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.features.collapse_list\");\n      } else {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.features.expand_list\", {\n          count: this.remainingCount\n        });\n      }\n    }\n    toggleExpanded() {\n      this.isExpanded = !this.isExpanded;\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"toggleExpanded\", [_object.action]))();\n    isLastItem(index) {\n      return index === this.visibleItems.length - 1;\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"isLastItem\", [_object.action]))();\n    static #_4 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#each this.visibleItems as |item index|}}\n          {{yield item index this.isLastItem}}\n        {{/each}}\n    \n        {{#if this.hasMore}}\n          <DButton\n            class=\"btn-flat ai-expanded-list__toggle-button\"\n            @translatedLabel={{this.expandToggleLabel}}\n            @action={{this.toggleExpanded}}\n          />\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"vN0dpvEG\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"visibleItems\\\"]]],null]],null],null,[[[1,\\\"      \\\"],[18,3,[[30,1],[30,2],[30,0,[\\\"isLastItem\\\"]]]],[1,\\\"\\\\n\\\"]],[1,2]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasMore\\\"]],[[[1,\\\"      \\\"],[8,[32,0],[[24,0,\\\"btn-flat ai-expanded-list__toggle-button\\\"]],[[\\\"@translatedLabel\\\",\\\"@action\\\"],[[30,0,[\\\"expandToggleLabel\\\"]],[30,0,[\\\"toggleExpanded\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"item\\\",\\\"index\\\",\\\"&default\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"yield\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-features-list.js\",\n      \"scope\": () => [_dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  class AiFeaturesList extends _component.default {\n    get sortedModules() {\n      const modules = this.args.modules?.toArray() || this.args.modules;\n      return [...(modules || [])].toSorted((a, b) => (a.module_name || \"\").localeCompare(b.module_name || \"\"));\n    }\n    isSpamModule(aModule) {\n      return aModule.module_name === \"spam\";\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"isSpamModule\", [_object.action]))();\n    hasGroups(feature) {\n      return this.groupList(feature).length > 0;\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"hasGroups\", [_object.action]))();\n    groupList(feature) {\n      const groups = [];\n      const groupIds = new Set();\n      if (feature.personas) {\n        feature.personas.forEach(persona => {\n          if (persona.allowed_groups) {\n            persona.allowed_groups.forEach(group => {\n              if (!groupIds.has(group.id)) {\n                groupIds.add(group.id);\n                groups.push(group);\n              }\n            });\n          }\n        });\n      }\n      return groups;\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"groupList\", [_object.action]))();\n    static #_4 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-features-list\">\n          {{#each this.sortedModules as |module|}}\n            <div class=\"ai-module\" data-module-name={{module.module_name}}>\n              <div class=\"ai-module__header\">\n                <div class=\"ai-module__module-title\">\n                  <h3>{{i18n\n                      (concat \"discourse_ai.features.\" module.module_name \".name\")\n                    }}</h3>\n                  {{#if (this.isSpamModule module)}}\n                    <DButton\n                      class=\"edit\"\n                      @label=\"discourse_ai.features.edit\"\n                      @route=\"adminPlugins.show.discourse-ai-spam\"\n                    />\n                  {{else}}\n                    <DButton\n                      class=\"edit\"\n                      @label=\"discourse_ai.features.edit\"\n                      @route=\"adminPlugins.show.discourse-ai-features.edit\"\n                      @routeModels={{module.id}}\n                    />\n                  {{/if}}\n                </div>\n                <div>{{i18n\n                    (concat\n                      \"discourse_ai.features.\" module.module_name \".description\"\n                    )\n                  }}</div>\n              </div>\n    \n              <div class=\"admin-section-landing-wrapper ai-feature-cards\">\n                {{#each module.features as |feature|}}\n                  <div\n                    class=\"admin-section-landing-item ai-feature-card\"\n                    data-feature-name={{feature.name}}\n                  >\n                    <div class=\"admin-section-landing-item__content\">\n                      <div class=\"ai-feature-card__feature-name\">\n                        {{i18n\n                          (concat\n                            \"discourse_ai.features.\"\n                            module.module_name\n                            \".\"\n                            feature.name\n                          )\n                        }}\n                        {{#unless feature.enabled}}\n                          <span>{{i18n \"discourse_ai.features.disabled\"}}</span>\n                        {{/unless}}\n                      </div>\n                      <div class=\"ai-feature-card__persona\">\n                        <span class=\"ai-feature-card__label\">\n                          {{i18n\n                            \"discourse_ai.features.persona\"\n                            count=feature.personas.length\n                          }}\n                        </span>\n                        {{#if feature.personas}}\n                          <ExpandableList\n                            @items={{feature.personas}}\n                            @maxItemsToShow={{5}}\n                            as |persona index isLastItem|\n                          >\n                            <LinkTo\n                              @route=\"adminPlugins.show.discourse-ai-personas.edit\"\n                              @model={{persona.id}}\n                              class=\"ai-feature-card__persona-link\"\n                            >\n                              {{concat\n                                persona.name\n                                (unless (isLastItem index) \", \")\n                              }}\n                            </LinkTo>\n                          </ExpandableList>\n                        {{else}}\n                          <span class=\"ai-feature-card__label\">\n                            {{i18n \"discourse_ai.features.no_persona\"}}\n                          </span>\n                        {{/if}}\n                      </div>\n                      <div class=\"ai-feature-card__llm\">\n                        {{#if feature.llm_models}}\n                          <span class=\"ai-feature-card__label\">\n                            {{i18n\n                              \"discourse_ai.features.llm\"\n                              count=feature.llm_models.length\n                            }}\n                          </span>\n                        {{/if}}\n                        {{#if feature.llm_models}}\n                          <ExpandableList\n                            @items={{feature.llm_models}}\n                            @maxItemsToShow={{5}}\n                            as |llm index isLastItem|\n                          >\n                            <LinkTo\n                              @route=\"adminPlugins.show.discourse-ai-llms.edit\"\n                              @model={{llm.id}}\n                              class=\"ai-feature-card__llm-link\"\n                            >\n                              {{concat llm.name (unless (isLastItem index) \", \")}}\n                            </LinkTo>\n                          </ExpandableList>\n                        {{else}}\n                          <span class=\"ai-feature-card__label\">\n                            {{i18n \"discourse_ai.features.no_llm\"}}\n                          </span>\n                        {{/if}}\n                      </div>\n                      {{#unless (this.isSpamModule module)}}\n                        {{#if feature.personas}}\n                          <div class=\"ai-feature-card__groups\">\n                            <span class=\"ai-feature-card__label\">\n                              {{i18n \"discourse_ai.features.groups\"}}\n                            </span>\n                            {{#if (this.hasGroups feature)}}\n                              <ul class=\"ai-feature-card__item-groups\">\n                                {{#each (this.groupList feature) as |group|}}\n                                  <li>{{group.name}}</li>\n                                {{/each}}\n                              </ul>\n                            {{else}}\n                              <span class=\"ai-feature-card__label\">\n                                {{i18n \"discourse_ai.features.no_groups\"}}\n                              </span>\n                            {{/if}}\n                          </div>\n                        {{/if}}\n                      {{/unless}}\n                    </div>\n                  </div>\n                {{/each}}\n              </div>\n            </div>\n          {{/each}}\n        </div>\n      \n    */\n    {\n      \"id\": \"gxMRtBhY\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-features-list\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"sortedModules\\\"]]],null]],null],null,[[[1,\\\"        \\\"],[10,0],[14,0,\\\"ai-module\\\"],[15,\\\"data-module-name\\\",[30,1,[\\\"module_name\\\"]]],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"ai-module__header\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"ai-module__module-title\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"h3\\\"],[12],[1,[28,[32,0],[[28,[32,1],[\\\"discourse_ai.features.\\\",[30,1,[\\\"module_name\\\"]],\\\".name\\\"],null]],null]],[13],[1,\\\"\\\\n\\\"],[41,[28,[30,0,[\\\"isSpamModule\\\"]],[[30,1]],null],[[[1,\\\"                \\\"],[8,[32,2],[[24,0,\\\"edit\\\"]],[[\\\"@label\\\",\\\"@route\\\"],[\\\"discourse_ai.features.edit\\\",\\\"adminPlugins.show.discourse-ai-spam\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[8,[32,2],[[24,0,\\\"edit\\\"]],[[\\\"@label\\\",\\\"@route\\\",\\\"@routeModels\\\"],[\\\"discourse_ai.features.edit\\\",\\\"adminPlugins.show.discourse-ai-features.edit\\\",[30,1,[\\\"id\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[12],[1,[28,[32,0],[[28,[32,1],[\\\"discourse_ai.features.\\\",[30,1,[\\\"module_name\\\"]],\\\".description\\\"],null]],null]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[10,0],[14,0,\\\"admin-section-landing-wrapper ai-feature-cards\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,1,[\\\"features\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[10,0],[14,0,\\\"admin-section-landing-item ai-feature-card\\\"],[15,\\\"data-feature-name\\\",[30,2,[\\\"name\\\"]]],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"admin-section-landing-item__content\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"ai-feature-card__feature-name\\\"],[12],[1,\\\"\\\\n                    \\\"],[1,[28,[32,0],[[28,[32,1],[\\\"discourse_ai.features.\\\",[30,1,[\\\"module_name\\\"]],\\\".\\\",[30,2,[\\\"name\\\"]]],null]],null]],[1,\\\"\\\\n\\\"],[41,[51,[30,2,[\\\"enabled\\\"]]],[[[1,\\\"                      \\\"],[10,1],[12],[1,[28,[32,0],[\\\"discourse_ai.features.disabled\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"ai-feature-card__persona\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,1],[14,0,\\\"ai-feature-card__label\\\"],[12],[1,\\\"\\\\n                      \\\"],[1,[28,[32,0],[\\\"discourse_ai.features.persona\\\"],[[\\\"count\\\"],[[30,2,[\\\"personas\\\",\\\"length\\\"]]]]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"personas\\\"]],[[[1,\\\"                      \\\"],[8,[32,3],null,[[\\\"@items\\\",\\\"@maxItemsToShow\\\"],[[30,2,[\\\"personas\\\"]],5]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[8,[32,4],[[24,0,\\\"ai-feature-card__persona-link\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"adminPlugins.show.discourse-ai-personas.edit\\\",[30,3,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                          \\\"],[1,[28,[32,1],[[30,3,[\\\"name\\\"]],[52,[51,[28,[30,5],[[30,4]],null]],\\\", \\\"]],null]],[1,\\\"\\\\n                        \\\"]],[]]]]],[1,\\\"\\\\n                      \\\"]],[3,4,5]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      \\\"],[10,1],[14,0,\\\"ai-feature-card__label\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[28,[32,0],[\\\"discourse_ai.features.no_persona\\\"],null]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"ai-feature-card__llm\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"llm_models\\\"]],[[[1,\\\"                      \\\"],[10,1],[14,0,\\\"ai-feature-card__label\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[28,[32,0],[\\\"discourse_ai.features.llm\\\"],[[\\\"count\\\"],[[30,2,[\\\"llm_models\\\",\\\"length\\\"]]]]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,2,[\\\"llm_models\\\"]],[[[1,\\\"                      \\\"],[8,[32,3],null,[[\\\"@items\\\",\\\"@maxItemsToShow\\\"],[[30,2,[\\\"llm_models\\\"]],5]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[8,[32,4],[[24,0,\\\"ai-feature-card__llm-link\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"adminPlugins.show.discourse-ai-llms.edit\\\",[30,6,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                          \\\"],[1,[28,[32,1],[[30,6,[\\\"name\\\"]],[52,[51,[28,[30,8],[[30,7]],null]],\\\", \\\"]],null]],[1,\\\"\\\\n                        \\\"]],[]]]]],[1,\\\"\\\\n                      \\\"]],[6,7,8]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      \\\"],[10,1],[14,0,\\\"ai-feature-card__label\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[28,[32,0],[\\\"discourse_ai.features.no_llm\\\"],null]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[28,[30,0,[\\\"isSpamModule\\\"]],[[30,1]],null]],[[[41,[30,2,[\\\"personas\\\"]],[[[1,\\\"                      \\\"],[10,0],[14,0,\\\"ai-feature-card__groups\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,1],[14,0,\\\"ai-feature-card__label\\\"],[12],[1,\\\"\\\\n                          \\\"],[1,[28,[32,0],[\\\"discourse_ai.features.groups\\\"],null]],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[30,0,[\\\"hasGroups\\\"]],[[30,2]],null],[[[1,\\\"                          \\\"],[10,\\\"ul\\\"],[14,0,\\\"ai-feature-card__item-groups\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[28,[30,0,[\\\"groupList\\\"]],[[30,2]],null]],null]],null],null,[[[1,\\\"                              \\\"],[10,\\\"li\\\"],[12],[1,[30,9,[\\\"name\\\"]]],[13],[1,\\\"\\\\n\\\"]],[9]],null],[1,\\\"                          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                          \\\"],[10,1],[14,0,\\\"ai-feature-card__label\\\"],[12],[1,\\\"\\\\n                            \\\"],[1,[28,[32,0],[\\\"discourse_ai.features.no_groups\\\"],null]],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"module\\\",\\\"feature\\\",\\\"persona\\\",\\\"index\\\",\\\"isLastItem\\\",\\\"llm\\\",\\\"index\\\",\\\"isLastItem\\\",\\\"group\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-features-list.js\",\n      \"scope\": () => [_discourseI18n.i18n, _helper.concat, _dButton.default, ExpandableList, _routing.LinkTo],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiFeaturesList;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-features\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-breadcrumbs-item\", \"discourse/components/d-button\", \"discourse/components/d-page-subheader\", \"discourse/components/d-select\", \"discourse/components/filter-input\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-default-llm-selector\", \"discourse/plugins/discourse-ai/discourse/components/ai-features-list\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _service, _dBreadcrumbsItem, _dButton, _dPageSubheader, _dSelect, _filterInput, _discourseI18n, _aiDefaultLlmSelector, _aiFeaturesList, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ALL = \"all\";\n  const CONFIGURED = \"configured\";\n  const UNCONFIGURED = \"unconfigured\";\n  class AiFeatures extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"adminPluginNavManager\", [_service.service]))();\n    #adminPluginNavManager = (() => (dt7948.i(this, \"adminPluginNavManager\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"filterValue\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #filterValue = (() => (dt7948.i(this, \"filterValue\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"selectedFeatureGroup\", [_tracking.tracked], function () {\n      return CONFIGURED;\n    }))();\n    #selectedFeatureGroup = (() => (dt7948.i(this, \"selectedFeatureGroup\"), void 0))();\n    constructor() {\n      super(...arguments);\n      // if there are features but none are configured, show unconfigured\n      if (this.args.features?.length > 0) {\n        const configuredCount = this.args.features.filter(f => f.module_enabled === true).length;\n        if (configuredCount === 0) {\n          this.selectedFeatureGroup = UNCONFIGURED;\n        }\n      }\n    }\n    get featureGroupOptions() {\n      return [{\n        value: ALL,\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.features.filters.all\")\n      }, {\n        value: CONFIGURED,\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.features.nav.configured\")\n      }, {\n        value: UNCONFIGURED,\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.features.nav.unconfigured\")\n      }];\n    }\n    get filteredFeatures() {\n      if (!this.args.features || this.args.features.length === 0) {\n        return [];\n      }\n      let features = this.args.features;\n      if (this.selectedFeatureGroup === CONFIGURED) {\n        features = features.filter(feature => feature.module_enabled === true);\n      } else if (this.selectedFeatureGroup === UNCONFIGURED) {\n        features = features.filter(feature => feature.module_enabled === false);\n      }\n      if (this.filterValue && this.filterValue.trim() !== \"\") {\n        const term = this.filterValue.toLowerCase().trim();\n        const featureMatches = (module, feature) => {\n          try {\n            const featureName = (0, _discourseI18n.i18n)(`discourse_ai.features.${module.module_name}.${feature.name}`).toLowerCase();\n            if (featureName.includes(term)) {\n              return true;\n            }\n            const personaMatches = feature.personas?.some(persona => persona.name?.toLowerCase().includes(term));\n            const llmMatches = feature.llm_models?.some(llm => llm.name?.toLowerCase().includes(term));\n            const groupMatches = feature.personas?.some(persona => persona.allowed_groups?.some(group => group.name?.toLowerCase().includes(term)));\n            return personaMatches || llmMatches || groupMatches;\n          } catch (error) {\n            // eslint-disable-next-line no-console\n            console.error(`Error filtering features`, error);\n            return false;\n          }\n        };\n        // Filter modules by name or features\n        features = features.filter(module => {\n          try {\n            const moduleName = (0, _discourseI18n.i18n)(`discourse_ai.features.${module.module_name}.name`).toLowerCase();\n            if (moduleName.includes(term)) {\n              return true;\n            }\n            return (module.features || []).some(feature => featureMatches(module, feature));\n          } catch (error) {\n            // eslint-disable-next-line no-console\n            console.error(`Error filtering features`, error);\n            return false;\n          }\n        });\n        // For modules that don't match by name, filter features\n        features = features.map(module => {\n          try {\n            const moduleName = (0, _discourseI18n.i18n)(`discourse_ai.features.${module.module_name}.name`).toLowerCase();\n            // if name matches\n            if (moduleName.includes(term)) {\n              return module;\n            }\n            // if no name match\n            const matchingFeatures = (module.features || []).filter(feature => featureMatches(module, feature));\n            // recreate with matching features\n            return Object.assign({}, module, {\n              features: matchingFeatures\n            });\n          } catch (error) {\n            // eslint-disable-next-line no-console\n            console.error(`Error filtering features`, error);\n            return module;\n          }\n        }).filter(module => module.features && module.features.length > 0);\n      }\n      return features;\n    }\n    onFilterChange(event) {\n      this.filterValue = event.target?.value || \"\";\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"onFilterChange\", [_object.action]))();\n    onFeatureGroupChange(value) {\n      this.selectedFeatureGroup = value;\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"onFeatureGroupChange\", [_object.action]))();\n    resetAndFocus() {\n      this.filterValue = \"\";\n      this.selectedFeatureGroup = CONFIGURED;\n      document.querySelector(\".admin-filter__input\").focus();\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"resetAndFocus\", [_object.action]))();\n    static #_7 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DBreadcrumbsItem\n          @path=\"/admin/plugins/{{this.adminPluginNavManager.currentPlugin.name}}/ai-features\"\n          @label={{i18n \"discourse_ai.features.short_title\"}}\n        />\n        <section class=\"ai-features admin-detail\">\n          <DPageSubheader\n            @titleLabel={{i18n \"discourse_ai.features.short_title\"}}\n            @descriptionLabel={{i18n \"discourse_ai.features.description\"}}\n            @learnMoreUrl=\"todo\"\n          />\n    \n          <div class=\"ai-features__controls\">\n            <DSelect\n              @value={{this.selectedFeatureGroup}}\n              @includeNone={{false}}\n              @onChange={{this.onFeatureGroupChange}}\n              as |select|\n            >\n              {{#each this.featureGroupOptions as |option|}}\n                <select.Option @value={{option.value}}>\n                  {{option.label}}\n                </select.Option>\n              {{/each}}\n            </DSelect>\n    \n            <FilterInput\n              placeholder={{i18n \"discourse_ai.features.filters.text\"}}\n              @filterAction={{this.onFilterChange}}\n              @value={{this.filterValue}}\n              class=\"admin-filter__input\"\n              @icons={{hash left=\"magnifying-glass\"}}\n            />\n          </div>\n    \n          <AiDefaultLlmSelector />\n    \n          {{#if this.filteredFeatures.length}}\n            <AiFeaturesList @modules={{this.filteredFeatures}} />\n          {{else}}\n            <div class=\"ai-features__no-results\">\n              <h3>{{i18n \"discourse_ai.features.filters.no_results\"}}</h3>\n              <DButton\n                @icon=\"arrow-rotate-left\"\n                @label=\"discourse_ai.features.filters.reset\"\n                @action={{this.resetAndFocus}}\n                class=\"btn-default\"\n              />\n            </div>\n          {{/if}}\n        </section>\n      \n    */\n    {\n      \"id\": \"EVQauSDQ\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@path\\\",\\\"@label\\\"],[[29,[\\\"/admin/plugins/\\\",[30,0,[\\\"adminPluginNavManager\\\",\\\"currentPlugin\\\",\\\"name\\\"]],\\\"/ai-features\\\"]],[28,[32,1],[\\\"discourse_ai.features.short_title\\\"],null]]],null],[1,\\\"\\\\n    \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-features admin-detail\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,2],null,[[\\\"@titleLabel\\\",\\\"@descriptionLabel\\\",\\\"@learnMoreUrl\\\"],[[28,[32,1],[\\\"discourse_ai.features.short_title\\\"],null],[28,[32,1],[\\\"discourse_ai.features.description\\\"],null],\\\"todo\\\"]],null],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"ai-features__controls\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,3],null,[[\\\"@value\\\",\\\"@includeNone\\\",\\\"@onChange\\\"],[[30,0,[\\\"selectedFeatureGroup\\\"]],false,[30,0,[\\\"onFeatureGroupChange\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"featureGroupOptions\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[8,[30,1,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,2,[\\\"value\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,2,[\\\"label\\\"]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"        \\\"]],[1]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[32,4],[[16,\\\"placeholder\\\",[28,[32,1],[\\\"discourse_ai.features.filters.text\\\"],null]],[24,0,\\\"admin-filter__input\\\"]],[[\\\"@filterAction\\\",\\\"@value\\\",\\\"@icons\\\"],[[30,0,[\\\"onFilterChange\\\"]],[30,0,[\\\"filterValue\\\"]],[28,[32,5],null,[[\\\"left\\\"],[\\\"magnifying-glass\\\"]]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[8,[32,6],null,null,null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"filteredFeatures\\\",\\\"length\\\"]],[[[1,\\\"        \\\"],[8,[32,7],null,[[\\\"@modules\\\"],[[30,0,[\\\"filteredFeatures\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"ai-features__no-results\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"h3\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.features.filters.no_results\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,8],[[24,0,\\\"btn-default\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"arrow-rotate-left\\\",\\\"discourse_ai.features.filters.reset\\\",[30,0,[\\\"resetAndFocus\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"select\\\",\\\"option\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-features.js\",\n      \"scope\": () => [_dBreadcrumbsItem.default, _discourseI18n.i18n, _dPageSubheader.default, _dSelect.default, _filterInput.default, _helper.hash, _aiDefaultLlmSelector.default, _aiFeaturesList.default, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiFeatures;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-full-page-search\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/modifier\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-update\", \"@ember/service\", \"discourse/components/d-toggle-switch\", \"discourse/controllers/full-page-search\", \"discourse/helpers/concat-class\", \"discourse/helpers/d-icon\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/search\", \"discourse-i18n\", \"float-kit/components/d-tooltip\", \"discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _modifier, _object, _didUpdate, _service, _dToggleSwitch, _fullPageSearch, _concatClass, _dIcon, _ajax, _ajaxError, _search, _discourseI18n, _dTooltip, _aiIndicatorWave, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AI_RESULTS_TOGGLED = \"full-page-search:ai-results-toggled\";\n  class AiFullPageSearch extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"appEvents\", [_service.service]))();\n    #appEvents = (() => (dt7948.i(this, \"appEvents\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"searchPreferencesManager\", [_service.service]))();\n    #searchPreferencesManager = (() => (dt7948.i(this, \"searchPreferencesManager\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"searching\", [_tracking.tracked]))();\n    #searching = (() => (dt7948.i(this, \"searching\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"AiResults\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #AiResults = (() => (dt7948.i(this, \"AiResults\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"showingAiResults\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showingAiResults = (() => (dt7948.i(this, \"showingAiResults\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"sortOrder\", [_tracking.tracked], function () {\n      return this.args.sortOrder;\n    }))();\n    #sortOrder = (() => (dt7948.i(this, \"sortOrder\"), void 0))();\n    initialSearchTerm = this.args.searchTerm;\n    constructor() {\n      super(...arguments);\n      this.appEvents.on(\"full-page-search:trigger-search\", this, this.onSearch);\n      this.onSearch();\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.appEvents.off(\"full-page-search:trigger-search\", this, this.onSearch);\n    }\n    onSearch() {\n      if (!this.searchEnabled) {\n        return;\n      }\n      this.initialSearchTerm = this.args.searchTerm;\n      this.searching = true;\n      this.resetAiResults();\n      return this.performHyDESearch();\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"onSearch\", [_object.action]))();\n    get disableToggleSwitch() {\n      if (this.searching || this.AiResults.length === 0 || !this.validSearchOrder) {\n        return true;\n      }\n    }\n    get validSearchOrder() {\n      return this.sortOrder === 0;\n    }\n    get searchStateText() {\n      if (!this.validSearchOrder) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_results.unavailable\");\n      }\n      // Search loading:\n      if (this.searching) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_loading\");\n      }\n      // We have results and we are showing them\n      if (this.AiResults.length && this.showingAiResults) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_results.toggle\", {\n          count: this.AiResults.length\n        });\n      }\n      // We have results but are hiding them\n      if (this.AiResults.length && !this.showingAiResults) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_results.toggle_hidden\", {\n          count: this.AiResults.length\n        });\n      }\n      // Typing to search:\n      if (this.AiResults.length === 0 && this.searchTerm !== this.initialSearchTerm) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_results.new\");\n      }\n      // No results:\n      if (this.AiResults.length === 0) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_results.none\");\n      }\n    }\n    get settled() {\n      return this.validSearchOrder && !this.searching && this.searchTerm === this.initialSearchTerm;\n    }\n    get noResults() {\n      return this.settled && this.AiResults.length === 0;\n    }\n    get searchTerm() {\n      if (this.initialSearchTerm !== this.args.searchTerm) {\n        this.initialSearchTerm = undefined;\n      }\n      return this.args.searchTerm;\n    }\n    get searchEnabled() {\n      return this.args.searchType === _fullPageSearch.SEARCH_TYPE_DEFAULT && (0, _search.isValidSearchTerm)(this.searchTerm, this.siteSettings) && this.validSearchOrder;\n    }\n    get searchClass() {\n      if (!this.validSearchOrder) {\n        return \"unavailable\";\n      } else if (this.searching) {\n        return \"in-progress\";\n      } else if (this.noResults) {\n        return \"no-results\";\n      }\n    }\n    get tooltipText() {\n      return (0, _discourseI18n.i18n)(`discourse_ai.embeddings.semantic_search_tooltips.${this.validSearchOrder ? \"results_explanation\" : \"invalid_sort\"}`);\n    }\n    toggleAiResults() {\n      this.appEvents.trigger(AI_RESULTS_TOGGLED, {\n        enabled: !this.showingAiResults\n      });\n      if (this.showingAiResults) {\n        this.args.addSearchResults([], \"topic_id\");\n      } else {\n        this.args.addSearchResults(this.AiResults, \"topic_id\");\n      }\n      this.showingAiResults = !this.showingAiResults;\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"toggleAiResults\", [_object.action]))();\n    resetAiResults() {\n      this.AiResults = [];\n      this.showingAiResults = false;\n      this.args.addSearchResults([], \"topic_id\");\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"resetAiResults\", [_object.action]))();\n    performHyDESearch() {\n      this.resetAiResults();\n      (0, _ajax.ajax)(\"/discourse-ai/embeddings/semantic-search\", {\n        data: {\n          q: this.searchTerm\n        }\n      }).then(async results => {\n        const model = (await (0, _search.translateResults)(results)) || {};\n        if (model.posts?.length === 0) {\n          return;\n        }\n        model.posts.forEach(post => {\n          post.generatedByAi = true;\n        });\n        this.AiResults = model.posts;\n      }).catch(_ajaxError.popupAjaxError).finally(() => {\n        this.searching = false;\n      });\n    }\n    sortChanged() {\n      if (this.sortOrder !== this.args.sortOrder) {\n        this.sortOrder = this.args.sortOrder;\n        if (this.validSearchOrder) {\n          this.onSearch();\n        } else {\n          this.showingAiResults = false;\n          this.resetAiResults();\n        }\n      }\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"sortChanged\", [_object.action]))();\n    static #_13 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div\n          {{didUpdate this.sortChanged @sortOrder}}\n          class=\"semantic-search__container search-results\"\n          role=\"region\"\n        >\n          <div class=\"semantic-search__results\">\n            <div\n              class={{concatClass \"semantic-search__searching\" this.searchClass}}\n            >\n              <DToggleSwitch\n                disabled={{this.disableToggleSwitch}}\n                @state={{this.showingAiResults}}\n                class=\"semantic-search__results-toggle\"\n                {{on \"click\" this.toggleAiResults}}\n              />\n    \n              <div class=\"semantic-search__searching-text\">\n                {{icon \"discourse-sparkles\"}}\n                {{this.searchStateText}}\n              </div>\n    \n              {{#if this.validSearchOrder}}\n                <AiIndicatorWave @loading={{this.searching}} />\n              {{/if}}\n    \n              <DTooltip\n                @identifier=\"semantic-search-tooltip\"\n                class=\"semantic-search__tooltip\"\n              >\n                <:trigger>\n                  {{icon \"far-circle-question\"}}\n                </:trigger>\n                <:content>\n                  {{this.tooltipText}}\n                </:content>\n              </DTooltip>\n            </div>\n          </div>\n        </div>\n      \n    */\n    {\n      \"id\": \"XAcP21aU\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[11,0],[24,0,\\\"semantic-search__container search-results\\\"],[24,\\\"role\\\",\\\"region\\\"],[4,[32,0],[[30,0,[\\\"sortChanged\\\"]],[30,1]],null],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"semantic-search__results\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[28,[32,1],[\\\"semantic-search__searching\\\",[30,0,[\\\"searchClass\\\"]]],null]],[12],[1,\\\"\\\\n          \\\"],[8,[32,2],[[16,\\\"disabled\\\",[30,0,[\\\"disableToggleSwitch\\\"]]],[24,0,\\\"semantic-search__results-toggle\\\"],[4,[32,3],[\\\"click\\\",[30,0,[\\\"toggleAiResults\\\"]]],null]],[[\\\"@state\\\"],[[30,0,[\\\"showingAiResults\\\"]]]],null],[1,\\\"\\\\n\\\\n          \\\"],[10,0],[14,0,\\\"semantic-search__searching-text\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,4],[\\\"discourse-sparkles\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"searchStateText\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"validSearchOrder\\\"]],[[[1,\\\"            \\\"],[8,[32,5],null,[[\\\"@loading\\\"],[[30,0,[\\\"searching\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n          \\\"],[8,[32,6],[[24,0,\\\"semantic-search__tooltip\\\"]],[[\\\"@identifier\\\"],[\\\"semantic-search-tooltip\\\"]],[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[28,[32,4],[\\\"far-circle-question\\\"],null]],[1,\\\"\\\\n            \\\"]],[]],[[[1,\\\"\\\\n              \\\"],[1,[30,0,[\\\"tooltipText\\\"]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@sortOrder\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-full-page-search.js\",\n      \"scope\": () => [_didUpdate.default, _concatClass.default, _dToggleSwitch.default, _modifier.on, _dIcon.default, _aiIndicatorWave.default, _dTooltip.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiFullPageSearch;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-gist-toggle\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/object\", \"@ember/service\", \"truth-helpers\", \"discourse/components/d-button\", \"discourse/components/dropdown-menu\", \"discourse/helpers/body-class\", \"discourse/helpers/d-icon\", \"discourse-i18n\", \"float-kit/components/d-menu\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _object, _service, _truthHelpers, _dButton, _dropdownMenu, _bodyClass, _dIcon, _discourseI18n, _dMenu, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiGistToggle extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"gists\", [_service.service]))();\n    #gists = (() => (dt7948.i(this, \"gists\"), void 0))();\n    get buttons() {\n      return [{\n        id: \"table\",\n        label: \"discourse_ai.summarization.topic_list_layout.button.compact\",\n        icon: \"discourse-table\"\n      }, {\n        id: \"table-ai\",\n        label: \"discourse_ai.summarization.topic_list_layout.button.expanded\",\n        icon: \"discourse-table-sparkles\",\n        description: \"discourse_ai.summarization.topic_list_layout.button.expanded_description\"\n      }];\n    }\n    get selectedOptionId() {\n      return this.gists.get(\"preference\");\n    }\n    get currentButton() {\n      const buttonPreference = this.buttons.find(button => button.id === this.selectedOptionId);\n      return buttonPreference || this.buttons[0];\n    }\n    onRegisterApi(api) {\n      this.dMenu = api;\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"onRegisterApi\", [_object.action]))();\n    onSelect(optionId) {\n      this.gists.setPreference(optionId);\n      this.dMenu.close();\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"onSelect\", [_object.action]))();\n    static #_4 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.gists.shouldShow}}\n          {{bodyClass (concat \"topic-list-layout-\" this.gists.preference)}}\n          <DMenu\n            @modalForMobile={{true}}\n            @autofocus={{true}}\n            @identifier=\"topic-list-layout\"\n            @onRegisterApi={{this.onRegisterApi}}\n            @triggerClass=\"btn-default btn-icon\"\n          >\n            <:trigger>\n              {{icon this.currentButton.icon}}\n            </:trigger>\n            <:content>\n              <DropdownMenu as |dropdown|>\n                {{#each this.buttons as |button|}}\n                  <dropdown.item>\n                    <DButton\n                      @label={{button.label}}\n                      @icon={{button.icon}}\n                      class=\"btn-transparent\n                        {{if button.description '--with-description'}}\n                        {{if (eq this.currentButton.id button.id) '--active'}}\"\n                      @action={{fn this.onSelect button.id}}\n                    >\n                      {{#if button.description}}\n                        <div class=\"btn__description\">\n                          {{i18n button.description}}\n                        </div>\n                      {{/if}}\n                    </DButton>\n                  </dropdown.item>\n                {{/each}}\n              </DropdownMenu>\n            </:content>\n          </DMenu>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"WNCmZBDe\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"gists\\\",\\\"shouldShow\\\"]],[[[1,\\\"      \\\"],[1,[28,[32,0],[[28,[32,1],[\\\"topic-list-layout-\\\",[30,0,[\\\"gists\\\",\\\"preference\\\"]]],null]],null]],[1,\\\"\\\\n      \\\"],[8,[32,2],null,[[\\\"@modalForMobile\\\",\\\"@autofocus\\\",\\\"@identifier\\\",\\\"@onRegisterApi\\\",\\\"@triggerClass\\\"],[true,true,\\\"topic-list-layout\\\",[30,0,[\\\"onRegisterApi\\\"]],\\\"btn-default btn-icon\\\"]],[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[32,3],[[30,0,[\\\"currentButton\\\",\\\"icon\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]],[[[1,\\\"\\\\n          \\\"],[8,[32,4],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"buttons\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,1,[\\\"item\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[32,5],[[16,0,[29,[\\\"btn-transparent\\\\n                    \\\",[52,[30,2,[\\\"description\\\"]],\\\"--with-description\\\"],\\\"\\\\n                    \\\",[52,[28,[32,6],[[30,0,[\\\"currentButton\\\",\\\"id\\\"]],[30,2,[\\\"id\\\"]]],null],\\\"--active\\\"]]]]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[[30,2,[\\\"label\\\"]],[30,2,[\\\"icon\\\"]],[28,[32,7],[[30,0,[\\\"onSelect\\\"]],[30,2,[\\\"id\\\"]]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"description\\\"]],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"btn__description\\\"],[12],[1,\\\"\\\\n                      \\\"],[1,[28,[32,8],[[30,2,[\\\"description\\\"]]],null]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"]],[]]]]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"          \\\"]],[1]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"dropdown\\\",\\\"button\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-gist-toggle.js\",\n      \"scope\": () => [_bodyClass.default, _helper.concat, _dMenu.default, _dIcon.default, _dropdownMenu.default, _dButton.default, _truthHelpers.eq, _helper.fn, _discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiGistToggle;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-helper-custom-prompt\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"truth-helpers\", \"discourse/components/d-button\", \"discourse/helpers/with-event-value\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _modifier, _object, _truthHelpers, _dButton, _withEventValue, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiHelperCustomPrompt extends _component.default {\n    sendInput(event) {\n      if (event.key !== \"Enter\") {\n        return;\n      }\n      return this.args.submit(this.args.promptArgs);\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"sendInput\", [_object.action]))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-custom-prompt\">\n    \n          <input\n            {{on \"input\" (withEventValue (fn (mut @value)))}}\n            {{on \"keydown\" this.sendInput}}\n            value={{@value}}\n            placeholder={{i18n\n              \"discourse_ai.ai_helper.context_menu.custom_prompt.placeholder\"\n            }}\n            class=\"ai-custom-prompt__input\"\n            type=\"text\"\n            autofocus=\"autofocus\"\n          />\n    \n          <DButton\n            @icon=\"discourse-sparkles\"\n            @action={{fn @submit @promptArgs}}\n            @disabled={{not @value.length}}\n            class=\"ai-custom-prompt__submit btn-primary\"\n          />\n        </div>\n      \n    */\n    {\n      \"id\": \"P6muo3ex\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-custom-prompt\\\"],[12],[1,\\\"\\\\n\\\\n      \\\"],[11,\\\"input\\\"],[16,2,[30,1]],[16,\\\"placeholder\\\",[28,[32,0],[\\\"discourse_ai.ai_helper.context_menu.custom_prompt.placeholder\\\"],null]],[24,0,\\\"ai-custom-prompt__input\\\"],[24,\\\"autofocus\\\",\\\"autofocus\\\"],[24,4,\\\"text\\\"],[4,[32,1],[\\\"input\\\",[28,[32,2],[[28,[32,3],[[28,[31,0],[[30,1]],null]],null]],null]],null],[4,[32,1],[\\\"keydown\\\",[30,0,[\\\"sendInput\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\\n      \\\"],[8,[32,4],[[24,0,\\\"ai-custom-prompt__submit btn-primary\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@disabled\\\"],[\\\"discourse-sparkles\\\",[28,[32,3],[[30,2],[30,3]],null],[28,[32,5],[[30,1,[\\\"length\\\"]]],null]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@value\\\",\\\"@submit\\\",\\\"@promptArgs\\\"],false,[\\\"mut\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-helper-custom-prompt.js\",\n      \"scope\": () => [_discourseI18n.i18n, _modifier.on, _withEventValue.default, _helper.fn, _dButton.default, _truthHelpers.not],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiHelperCustomPrompt;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-helper-loading\", [\"exports\", \"discourse/components/d-button\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _dButton, _discourseI18n, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AiHelperLoading = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <div class=\"ai-helper-loading\">\n      <div class=\"dot-falling\"></div>\n      <span>\n        {{i18n \"discourse_ai.ai_helper.context_menu.loading\"}}\n      </span>\n      <DButton\n        @icon=\"xmark\"\n        @title=\"discourse_ai.ai_helper.context_menu.cancel\"\n        @action={{@cancel}}\n        class=\"btn-flat cancel-request\"\n      />\n    </div>\n  \n  */\n  {\n    \"id\": \"qC8lok7p\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"ai-helper-loading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"dot-falling\\\"],[12],[13],[1,\\\"\\\\n    \\\"],[10,1],[12],[1,\\\"\\\\n      \\\"],[1,[28,[32,0],[\\\"discourse_ai.ai_helper.context_menu.loading\\\"],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[8,[32,1],[[24,0,\\\"btn-flat cancel-request\\\"]],[[\\\"@icon\\\",\\\"@title\\\",\\\"@action\\\"],[\\\"xmark\\\",\\\"discourse_ai.ai_helper.context_menu.cancel\\\",[30,1]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@cancel\\\"],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-helper-loading.js\",\n    \"scope\": () => [_discourseI18n.i18n, _dButton.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-helper-loading:AiHelperLoading\"));\n  var _default = _exports.default = AiHelperLoading;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-helper-options-list\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/service\", \"truth-helpers\", \"discourse/components/d-button\", \"discourse/lib/keyboard-shortcuts\", \"discourse/lib/utilities\", \"discourse/plugins/discourse-ai/discourse/components/ai-helper-custom-prompt\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _service, _truthHelpers, _dButton, _keyboardShortcuts, _utilities, _aiHelperCustomPrompt, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiHelperOptionsList extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    get showShortcut() {\n      return this.site.desktopView && this.args.shortcutVisible;\n    }\n    get shortcut() {\n      return (0, _utilities.translateModKey)(`${_keyboardShortcuts.PLATFORM_KEY_MODIFIER}+alt+p`);\n    }\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <ul class=\"ai-helper-options\">\n          {{#each @options as |option|}}\n            {{#if (eq option.name \"custom_prompt\")}}\n              <AiHelperCustomPrompt\n                @value={{@customPromptValue}}\n                @promptArgs={{option}}\n                @submit={{@performAction}}\n              />\n            {{else}}\n              <li data-name={{option.translated_name}} data-value={{option.name}}>\n                <DButton\n                  @icon={{option.icon}}\n                  @translatedLabel={{option.translated_name}}\n                  @action={{fn @performAction option}}\n                  data-name={{option.name}}\n                  class=\"ai-helper-options__button\"\n                >\n                  {{#if (and (eq option.name \"proofread\") this.showShortcut)}}\n                    <kbd class=\"shortcut\">{{this.shortcut}}</kbd>\n                  {{/if}}\n                </DButton>\n              </li>\n            {{/if}}\n          {{/each}}\n        </ul>\n      \n    */\n    {\n      \"id\": \"s635M6zL\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,\\\"ul\\\"],[14,0,\\\"ai-helper-options\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,1]],null]],null],null,[[[41,[28,[32,0],[[30,2,[\\\"name\\\"]],\\\"custom_prompt\\\"],null],[[[1,\\\"          \\\"],[8,[32,1],null,[[\\\"@value\\\",\\\"@promptArgs\\\",\\\"@submit\\\"],[[30,3],[30,2],[30,4]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,\\\"li\\\"],[15,\\\"data-name\\\",[30,2,[\\\"translated_name\\\"]]],[15,\\\"data-value\\\",[30,2,[\\\"name\\\"]]],[12],[1,\\\"\\\\n            \\\"],[8,[32,2],[[16,\\\"data-name\\\",[30,2,[\\\"name\\\"]]],[24,0,\\\"ai-helper-options__button\\\"]],[[\\\"@icon\\\",\\\"@translatedLabel\\\",\\\"@action\\\"],[[30,2,[\\\"icon\\\"]],[30,2,[\\\"translated_name\\\"]],[28,[32,3],[[30,4],[30,2]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[32,4],[[28,[32,0],[[30,2,[\\\"name\\\"]],\\\"proofread\\\"],null],[30,0,[\\\"showShortcut\\\"]]],null],[[[1,\\\"                \\\"],[10,\\\"kbd\\\"],[14,0,\\\"shortcut\\\"],[12],[1,[30,0,[\\\"shortcut\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[2]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@options\\\",\\\"option\\\",\\\"@customPromptValue\\\",\\\"@performAction\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-helper-options-list.js\",\n      \"scope\": () => [_truthHelpers.eq, _aiHelperCustomPrompt.default, _dButton.default, _helper.fn, _truthHelpers.and],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiHelperOptionsList;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave\", [\"exports\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const indicatorDots = [\".\", \".\", \".\"];\n  const AiIndicatorWave = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    {{#if @loading}}\n      <span class=\"ai-indicator-wave\">\n        {{#each indicatorDots as |dot|}}\n          <span class=\"ai-indicator-wave__dot\">{{dot}}</span>\n        {{/each}}\n      </span>\n    {{/if}}\n  \n  */\n  {\n    \"id\": \"2VboNjAG\",\n    \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"    \\\"],[10,1],[14,0,\\\"ai-indicator-wave\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[32,0]],null]],null],null,[[[1,\\\"        \\\"],[10,1],[14,0,\\\"ai-indicator-wave__dot\\\"],[12],[1,[30,2]],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@loading\\\",\\\"dot\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave.js\",\n    \"scope\": () => [indicatorDots],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-indicator-wave:AiIndicatorWave\"));\n  var _default = _exports.default = AiIndicatorWave;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-llm-editor-form\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/routing\", \"@ember/runloop\", \"@ember/service\", \"truth-helpers\", \"discourse/components/conditional-loading-spinner\", \"discourse/components/form\", \"discourse/helpers/bound-avatar-template\", \"discourse/helpers/d-icon\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"admin/models/admin-user\", \"discourse/plugins/discourse-ai/discourse/components/ai-quota-duration-selector\", \"discourse/plugins/discourse-ai/discourse/components/modal/ai-llm-quota-modal\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _routing, _runloop, _service, _truthHelpers, _conditionalLoadingSpinner, _form, _boundAvatarTemplate, _dIcon, _ajaxError, _discourseI18n, _adminUser, _aiQuotaDurationSelector, _aiLlmQuotaModal, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiLlmEditorForm extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"dialog\", [_service.service]))();\n    #dialog = (() => (dt7948.i(this, \"dialog\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"isSaving\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isSaving = (() => (dt7948.i(this, \"isSaving\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"testRunning\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #testRunning = (() => (dt7948.i(this, \"testRunning\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"testResult\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #testResult = (() => (dt7948.i(this, \"testResult\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"testError\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #testError = (() => (dt7948.i(this, \"testError\"), void 0))();\n    get formData() {\n      if (this.args.llmTemplate) {\n        let [id, modelName] = this.args.llmTemplate.split(/-(.*)/);\n        if (id === \"none\") {\n          return {\n            provider_params: {}\n          };\n        }\n        const info = this.args.llms.resultSetMeta.presets.findBy(\"id\", id);\n        const modelInfo = info.models.findBy(\"name\", modelName);\n        return {\n          max_prompt_tokens: modelInfo.tokens,\n          max_output_tokens: modelInfo.max_output_tokens,\n          tokenizer: info.tokenizer,\n          url: modelInfo.endpoint || info.endpoint,\n          display_name: modelInfo.display_name,\n          name: modelInfo.name,\n          provider: info.provider,\n          provider_params: this.computeProviderParams(info.provider),\n          input_cost: modelInfo.input_cost,\n          output_cost: modelInfo.output_cost,\n          cached_input_cost: modelInfo.cached_input_cost\n        };\n      }\n      const {\n        model\n      } = this.args;\n      return {\n        max_prompt_tokens: model.max_prompt_tokens,\n        max_output_tokens: model.max_output_tokens,\n        api_key: model.api_key,\n        tokenizer: model.tokenizer,\n        url: model.url,\n        display_name: model.display_name,\n        name: model.name,\n        provider: model.provider,\n        enabled_chat_bot: model.enabled_chat_bot,\n        vision_enabled: model.vision_enabled,\n        input_cost: model.input_cost,\n        output_cost: model.output_cost,\n        cached_input_cost: model.cached_input_cost,\n        provider_params: this.computeProviderParams(model.provider, model.provider_params),\n        llm_quotas: model.llm_quotas\n      };\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"formData\", [_tracking.cached]))();\n    get selectedProviders() {\n      const t = provName => {\n        return (0, _discourseI18n.i18n)(`discourse_ai.llms.providers.${provName}`);\n      };\n      return this.args.llms.resultSetMeta.providers.map(prov => {\n        return {\n          id: prov,\n          name: t(prov)\n        };\n      }).sort((a, b) => a.name.localeCompare(b.name));\n    }\n    get tokenizers() {\n      return this.args.llms.resultSetMeta.tokenizers.sort((a, b) => a.name.localeCompare(b.name));\n    }\n    get adminUser() {\n      return _adminUser.default.create(this.args.model?.user);\n    }\n    get testErrorMessage() {\n      return (0, _discourseI18n.i18n)(\"discourse_ai.llms.tests.failure\", {\n        error: this.testError\n      });\n    }\n    get displayTestResult() {\n      return this.testRunning || this.testResult !== null;\n    }\n    get modulesUsingModel() {\n      const usedBy = this.args.model.used_by?.filter(m => m.type !== \"ai_bot\");\n      if (!usedBy || usedBy.length === 0) {\n        return null;\n      }\n      const localized = usedBy.map(m => {\n        return (0, _discourseI18n.i18n)(`discourse_ai.llms.usage.${m.type}`, {\n          persona: m.name\n        });\n      });\n      // TODO: this is not perfectly localized\n      return localized.join(\", \");\n    }\n    get inUseWarning() {\n      return (0, _discourseI18n.i18n)(\"discourse_ai.llms.in_use_warning\", {\n        settings: this.modulesUsingModel,\n        count: this.args.model.used_by.length\n      });\n    }\n    get showAddQuotaButton() {\n      return !this.args.model.isNew;\n    }\n    computeProviderParams(provider) {\n      let currentParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const params = this.args.llms.resultSetMeta.provider_params[provider] ?? {};\n      return Object.fromEntries(Object.entries(params).map(_ref => {\n        let [k, v] = _ref;\n        return [k, currentParams[k] ?? (v?.type === \"enum\" ? v.default : null)];\n      }));\n    }\n    canEditURL(provider) {\n      return provider !== \"aws_bedrock\";\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"canEditURL\", [_object.action]))();\n    openAddQuotaModal(addItemToCollection) {\n      this.modal.show(_aiLlmQuotaModal.default, {\n        model: {\n          llm: this.args.model,\n          addItemToCollection\n        }\n      });\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"openAddQuotaModal\", [_object.action]))();\n    metaProviderParams(provider) {\n      const params = this.args.llms.resultSetMeta.provider_params[provider] || {};\n      return Object.entries(params).reduce((acc, _ref2) => {\n        let [field, value] = _ref2;\n        if (typeof value === \"string\") {\n          acc[field] = {\n            type: value\n          };\n        } else if (typeof value === \"object\") {\n          if (value.values) {\n            value = {\n              ...value\n            };\n            value.values = value.values.map(v => ({\n              id: v,\n              name: v\n            }));\n          }\n          acc[field] = {\n            type: value.type || \"text\",\n            values: value.values || [],\n            default: value.default ?? undefined\n          };\n        } else {\n          acc[field] = {\n            type: \"text\"\n          }; // fallback\n        }\n        return acc;\n      }, {});\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"metaProviderParams\", [_object.action]))();\n    async save(data) {\n      this.isSaving = true;\n      const isNew = this.args.model.isNew;\n      const updatedData = {\n        ...data\n      };\n      // If max_prompt_tokens input is cleared,\n      // we want the db to store null\n      if (!data.max_output_tokens) {\n        updatedData.max_output_tokens = null;\n      }\n      try {\n        await this.args.model.save(updatedData);\n        if (isNew) {\n          this.args.llms.addObject(this.args.model);\n          await this.router.replaceWith(\"adminPlugins.show.discourse-ai-llms.edit\", this.args.model.id);\n        }\n        this.toasts.success({\n          data: {\n            message: (0, _discourseI18n.i18n)(\"discourse_ai.llms.saved\")\n          },\n          duration: \"short\"\n        });\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        (0, _runloop.later)(() => {\n          this.isSaving = false;\n        }, 1000);\n      }\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n    async test(data) {\n      this.testRunning = true;\n      try {\n        const configTestResult = await this.args.model.testConfig(data);\n        this.testResult = configTestResult.success;\n        if (this.testResult) {\n          this.testError = null;\n        } else {\n          this.testError = configTestResult.error;\n        }\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        (0, _runloop.later)(() => {\n          this.testRunning = false;\n        }, 1000);\n      }\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"test\", [_object.action]))();\n    setProvider(provider, _ref3) {\n      let {\n        set\n      } = _ref3;\n      set(\"provider_params\", this.computeProviderParams(provider));\n      set(\"provider\", provider);\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"setProvider\", [_object.action]))();\n    delete() {\n      return this.dialog.confirm({\n        message: (0, _discourseI18n.i18n)(\"discourse_ai.llms.confirm_delete\"),\n        didConfirm: () => {\n          return this.args.model.destroyRecord().then(() => {\n            this.args.llms.removeObject(this.args.model);\n            this.router.transitionTo(\"adminPlugins.show.discourse-ai-llms.index\");\n          }).catch(_ajaxError.popupAjaxError);\n        }\n      });\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"delete\", [_object.action]))();\n    providerParamsKeys(providerParams) {\n      return providerParams ? Object.keys(providerParams) : [];\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"providerParamsKeys\", [_object.action]))();\n    static #_18 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <Form\n          @onSubmit={{this.save}}\n          @data={{this.formData}}\n          class=\"ai-llm-editor\"\n          as |form data|\n        >\n          {{#if this.modulesUsingModel}}\n            <form.Alert @icon=\"circle-info\">\n              {{this.inUseWarning}}\n            </form.Alert>\n          {{/if}}\n    \n          <form.Field\n            @name=\"display_name\"\n            @title={{i18n \"discourse_ai.llms.display_name\"}}\n            @validation=\"required|length:1,100\"\n            @format=\"large\"\n            @tooltip={{i18n \"discourse_ai.llms.hints.display_name\"}}\n            as |field|\n          >\n            <field.Input />\n          </form.Field>\n    \n          <form.Field\n            @name=\"name\"\n            @title={{i18n \"discourse_ai.llms.name\"}}\n            @tooltip={{i18n \"discourse_ai.llms.hints.name\"}}\n            @validation=\"required\"\n            @format=\"large\"\n            as |field|\n          >\n            <field.Input />\n          </form.Field>\n    \n          <form.Field\n            @name=\"provider\"\n            @title={{i18n \"discourse_ai.llms.provider\"}}\n            @format=\"large\"\n            @validation=\"required\"\n            @onSet={{this.setProvider}}\n            as |field|\n          >\n            <field.Select as |select|>\n              {{#each this.selectedProviders as |provider|}}\n                <select.Option\n                  @value={{provider.id}}\n                >{{provider.name}}</select.Option>\n              {{/each}}\n            </field.Select>\n          </form.Field>\n    \n          {{#if (this.canEditURL data.provider)}}\n            <form.Field\n              @name=\"url\"\n              @title={{i18n \"discourse_ai.llms.url\"}}\n              @validation=\"required\"\n              @format=\"large\"\n              as |field|\n            >\n              <field.Input />\n            </form.Field>\n          {{/if}}\n    \n          <form.Field\n            @name=\"api_key\"\n            @title={{i18n \"discourse_ai.llms.api_key\"}}\n            @validation=\"required\"\n            @format=\"large\"\n            as |field|\n          >\n            <field.Password autocomplete=\"off\" data-1p-ignore />\n          </form.Field>\n    \n          <form.Object @name=\"provider_params\" as |object providerParamsData|>\n            {{#each (this.providerParamsKeys providerParamsData) as |name|}}\n              {{#let\n                (get (this.metaProviderParams data.provider) name)\n                as |params|\n              }}\n                <object.Field\n                  @name={{name}}\n                  @title={{i18n (concat \"discourse_ai.llms.provider_fields.\" name)}}\n                  @format=\"large\"\n                  as |field|\n                >\n                  {{#if (eq params.type \"enum\")}}\n                    <field.Select @includeNone={{false}} as |select|>\n                      {{#each params.values as |option|}}\n                        <select.Option\n                          @value={{option.id}}\n                        >{{option.name}}</select.Option>\n                      {{/each}}\n                    </field.Select>\n                  {{else if (eq params.type \"checkbox\")}}\n                    <field.Checkbox />\n                  {{else}}\n                    <field.Input @type={{params.type}} />\n                  {{/if}}\n                </object.Field>\n              {{/let}}\n            {{/each}}\n          </form.Object>\n    \n          <form.Field\n            @name=\"tokenizer\"\n            @title={{i18n \"discourse_ai.llms.tokenizer\"}}\n            @format=\"large\"\n            @validation=\"required\"\n            as |field|\n          >\n            <field.Select as |select|>\n              {{#each this.tokenizers as |tokenizer|}}\n                <select.Option\n                  @value={{tokenizer.id}}\n                >{{tokenizer.name}}</select.Option>\n              {{/each}}\n            </field.Select>\n          </form.Field>\n    \n          <form.Field\n            @name=\"max_prompt_tokens\"\n            @title={{i18n \"discourse_ai.llms.max_prompt_tokens\"}}\n            @tooltip={{i18n \"discourse_ai.llms.hints.max_prompt_tokens\"}}\n            @validation=\"required\"\n            @format=\"large\"\n            as |field|\n          >\n            <field.Input @type=\"number\" step=\"any\" min=\"0\" lang=\"en\" />\n          </form.Field>\n    \n          <form.InputGroup as |inputGroup|>\n            <inputGroup.Field\n              @name=\"input_cost\"\n              @title={{i18n \"discourse_ai.llms.cost_input\"}}\n              @tooltip={{i18n \"discourse_ai.llms.hints.cost_input\"}}\n              @helpText={{i18n \"discourse_ai.llms.hints.cost_measure\"}}\n              as |field|\n            >\n              <field.Input @type=\"number\" step=\"any\" min=\"0\" lang=\"en\" />\n            </inputGroup.Field>\n    \n            <inputGroup.Field\n              @name=\"cached_input_cost\"\n              @title={{i18n \"discourse_ai.llms.cost_cached_input\"}}\n              @tooltip={{i18n \"discourse_ai.llms.hints.cost_cached_input\"}}\n              @helpText={{i18n \"discourse_ai.llms.hints.cost_measure\"}}\n              as |field|\n            >\n              <field.Input @type=\"number\" step=\"any\" min=\"0\" lang=\"en\" />\n            </inputGroup.Field>\n    \n            <inputGroup.Field\n              @name=\"output_cost\"\n              @title={{i18n \"discourse_ai.llms.cost_output\"}}\n              @tooltip={{i18n \"discourse_ai.llms.hints.cost_output\"}}\n              @helpText={{i18n \"discourse_ai.llms.hints.cost_measure\"}}\n              as |field|\n            >\n              <field.Input @type=\"number\" step=\"any\" min=\"0\" lang=\"en\" />\n            </inputGroup.Field>\n          </form.InputGroup>\n    \n          <form.Field\n            @name=\"max_output_tokens\"\n            @title={{i18n \"discourse_ai.llms.max_output_tokens\"}}\n            @tooltip={{i18n \"discourse_ai.llms.hints.max_output_tokens\"}}\n            @format=\"large\"\n            as |field|\n          >\n            <field.Input @type=\"number\" step=\"any\" min=\"0\" lang=\"en\" />\n          </form.Field>\n    \n          <form.Field\n            @name=\"vision_enabled\"\n            @title={{i18n \"discourse_ai.llms.vision_enabled\"}}\n            @tooltip={{i18n \"discourse_ai.llms.hints.vision_enabled\"}}\n            @format=\"large\"\n            as |field|\n          >\n            <field.Checkbox />\n          </form.Field>\n    \n          <form.Field\n            @name=\"enabled_chat_bot\"\n            @title={{i18n \"discourse_ai.llms.enabled_chat_bot\"}}\n            @tooltip={{i18n \"discourse_ai.llms.hints.enabled_chat_bot\"}}\n            @format=\"large\"\n            as |field|\n          >\n            <field.Checkbox />\n          </form.Field>\n    \n          {{#if @model.user}}\n            <form.Container @title={{i18n \"discourse_ai.llms.ai_bot_user\"}}>\n              <a\n                class=\"avatar\"\n                href={{@model.user.path}}\n                data-user-card={{@model.user.username}}\n              >\n                {{Avatar @model.user.avatar_template \"small\"}}\n              </a>\n              <LinkTo @route=\"adminUser\" @model={{this.adminUser}}>\n                {{@model.user.username}}\n              </LinkTo>\n            </form.Container>\n          {{/if}}\n    \n          {{#if (gt data.llm_quotas.length 0)}}\n            <form.Container @title={{i18n \"discourse_ai.llms.quotas.title\"}}>\n              <table class=\"ai-llm-quotas__table\">\n                <thead class=\"ai-llm-quotas__table-head\">\n                  <tr class=\"ai-llm-quotas__header-row\">\n                    <th class=\"ai-llm-quotas__header\">{{i18n\n                        \"discourse_ai.llms.quotas.group\"\n                      }}</th>\n                    <th class=\"ai-llm-quotas__header\">{{i18n\n                        \"discourse_ai.llms.quotas.max_tokens\"\n                      }}</th>\n                    <th class=\"ai-llm-quotas__header\">{{i18n\n                        \"discourse_ai.llms.quotas.max_usages\"\n                      }}</th>\n                    <th class=\"ai-llm-quotas__header\">{{i18n\n                        \"discourse_ai.llms.quotas.duration\"\n                      }}</th>\n                    <th\n                      class=\"ai-llm-quotas__header ai-llm-quotas__header--actions\"\n                    ></th>\n                    <th></th>\n                  </tr>\n                </thead>\n                <tbody class=\"ai-llm-quotas__table-body\">\n                  <form.Collection\n                    @name=\"llm_quotas\"\n                    @tagName=\"tr\"\n                    class=\"ai-llm-quotas__row\"\n                    as |collection index collectionData|\n                  >\n                    <td\n                      class=\"ai-llm-quotas__cell\"\n                    >{{collectionData.group_name}}</td>\n                    <td class=\"ai-llm-quotas__cell\">\n                      <collection.Field\n                        @name=\"max_tokens\"\n                        @title=\"max_tokens\"\n                        @showTitle={{false}}\n                        as |field|\n                      >\n                        <field.Input\n                          @type=\"number\"\n                          class=\"ai-llm-quotas__input\"\n                          min=\"1\"\n                        />\n                      </collection.Field>\n                    </td>\n                    <td class=\"ai-llm-quotas__cell\">\n                      <collection.Field\n                        @name=\"max_usages\"\n                        @title=\"max_usages\"\n                        @showTitle={{false}}\n                        as |field|\n                      >\n                        <field.Input\n                          @type=\"number\"\n                          class=\"ai-llm-quotas__input\"\n                          min=\"1\"\n                        />\n                      </collection.Field>\n                    </td>\n                    <td class=\"ai-llm-quotas__cell\">\n                      <collection.Field\n                        @name=\"duration_seconds\"\n                        @title=\"duration_seconds\"\n                        @showTitle={{false}}\n                        as |field|\n                      >\n                        <field.Custom>\n                          <DurationSelector\n                            @value={{collectionData.duration_seconds}}\n                            @onChange={{field.set}}\n                          />\n                        </field.Custom>\n                      </collection.Field>\n                    </td>\n                    <td>\n                      <form.Button\n                        @icon=\"trash-can\"\n                        @action={{fn collection.remove index}}\n                        class=\"btn-danger ai-llm-quotas__delete-btn\"\n                      />\n                    </td>\n                  </form.Collection>\n                </tbody>\n              </table>\n            </form.Container>\n    \n            <form.Button\n              @action={{fn\n                this.openAddQuotaModal\n                (fn form.addItemToCollection \"llm_quotas\")\n              }}\n              @icon=\"plus\"\n              @label=\"discourse_ai.llms.quotas.add\"\n              class=\"ai-llm-editor__add-quota-btn\"\n            />\n          {{/if}}\n    \n          <form.Actions>\n            <form.Button\n              @action={{fn this.test data}}\n              @disabled={{this.testRunning}}\n              @label=\"discourse_ai.llms.tests.title\"\n            />\n    \n            <form.Submit />\n    \n            {{#if (eq data.llm_quotas.length 0)}}\n              <form.Button\n                @action={{fn\n                  this.openAddQuotaModal\n                  (fn form.addItemToCollection \"llm_quotas\")\n                }}\n                @label=\"discourse_ai.llms.quotas.add\"\n                class=\"ai-llm-editor__add-quota-btn\"\n              />\n            {{/if}}\n    \n            {{#unless @model.isNew}}\n              <form.Button\n                @action={{this.delete}}\n                @label=\"discourse_ai.llms.delete\"\n                class=\"btn-danger\"\n              />\n            {{/unless}}\n          </form.Actions>\n    \n          {{#if this.displayTestResult}}\n            <form.Container @format=\"full\">\n              <ConditionalLoadingSpinner\n                @size=\"small\"\n                @condition={{this.testRunning}}\n              >\n                {{#if this.testResult}}\n                  <div class=\"ai-llm-editor-tests__success\">\n                    {{icon \"check\"}}\n                    {{i18n \"discourse_ai.llms.tests.success\"}}\n                  </div>\n                {{else}}\n                  <div class=\"ai-llm-editor-tests__failure\">\n                    {{icon \"xmark\"}}\n                    {{this.testErrorMessage}}\n                  </div>\n                {{/if}}\n              </ConditionalLoadingSpinner>\n            </form.Container>\n          {{/if}}\n        </Form>\n      \n    */\n    {\n      \"id\": \"q+K6kmsR\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-llm-editor\\\"]],[[\\\"@onSubmit\\\",\\\"@data\\\"],[[30,0,[\\\"save\\\"]],[30,0,[\\\"formData\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"modulesUsingModel\\\"]],[[[1,\\\"        \\\"],[8,[30,1,[\\\"Alert\\\"]],null,[[\\\"@icon\\\"],[\\\"circle-info\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[30,0,[\\\"inUseWarning\\\"]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\",\\\"@tooltip\\\"],[\\\"display_name\\\",[28,[32,1],[\\\"discourse_ai.llms.display_name\\\"],null],\\\"required|length:1,100\\\",\\\"large\\\",[28,[32,1],[\\\"discourse_ai.llms.hints.display_name\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,3,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n      \\\"]],[3]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"name\\\",[28,[32,1],[\\\"discourse_ai.llms.name\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.name\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,4,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n      \\\"]],[4]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\",\\\"@validation\\\",\\\"@onSet\\\"],[\\\"provider\\\",[28,[32,1],[\\\"discourse_ai.llms.provider\\\"],null],\\\"large\\\",\\\"required\\\",[30,0,[\\\"setProvider\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,5,[\\\"Select\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"selectedProviders\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[8,[30,6,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,7,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,7,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[7]],null],[1,\\\"        \\\"]],[6]]]]],[1,\\\"\\\\n      \\\"]],[5]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[30,0,[\\\"canEditURL\\\"]],[[30,2,[\\\"provider\\\"]]],null],[[[1,\\\"        \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"url\\\",[28,[32,1],[\\\"discourse_ai.llms.url\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,8,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[8]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"api_key\\\",[28,[32,1],[\\\"discourse_ai.llms.api_key\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,9,[\\\"Password\\\"]],[[24,\\\"autocomplete\\\",\\\"off\\\"],[24,\\\"data-1p-ignore\\\",\\\"\\\"]],null,null],[1,\\\"\\\\n      \\\"]],[9]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"Object\\\"]],null,[[\\\"@name\\\"],[\\\"provider_params\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[28,[30,0,[\\\"providerParamsKeys\\\"]],[[30,11]],null]],null]],null],null,[[[44,[[28,[32,2],[[28,[30,0,[\\\"metaProviderParams\\\"]],[[30,2,[\\\"provider\\\"]]],null],[30,12]],null]],[[[1,\\\"            \\\"],[8,[30,10,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\"],[[30,12],[28,[32,1],[[28,[32,3],[\\\"discourse_ai.llms.provider_fields.\\\",[30,12]],null]],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[32,4],[[30,13,[\\\"type\\\"]],\\\"enum\\\"],null],[[[1,\\\"                \\\"],[8,[30,14,[\\\"Select\\\"]],null,[[\\\"@includeNone\\\"],[false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,13,[\\\"values\\\"]]],null]],null],null,[[[1,\\\"                    \\\"],[8,[30,15,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,16,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,16,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[16]],null],[1,\\\"                \\\"]],[15]]]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,4],[[30,13,[\\\"type\\\"]],\\\"checkbox\\\"],null],[[[1,\\\"                \\\"],[8,[30,14,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[8,[30,14,[\\\"Input\\\"]],null,[[\\\"@type\\\"],[[30,13,[\\\"type\\\"]]]],null],[1,\\\"\\\\n              \\\"]],[]]]],[]]],[1,\\\"            \\\"]],[14]]]]],[1,\\\"\\\\n\\\"]],[13]]]],[12]],null],[1,\\\"      \\\"]],[10,11]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\",\\\"@validation\\\"],[\\\"tokenizer\\\",[28,[32,1],[\\\"discourse_ai.llms.tokenizer\\\"],null],\\\"large\\\",\\\"required\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,17,[\\\"Select\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"tokenizers\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[8,[30,18,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,19,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,19,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[19]],null],[1,\\\"        \\\"]],[18]]]]],[1,\\\"\\\\n      \\\"]],[17]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"max_prompt_tokens\\\",[28,[32,1],[\\\"discourse_ai.llms.max_prompt_tokens\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.max_prompt_tokens\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,20,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n      \\\"]],[20]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"InputGroup\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,21,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@helpText\\\"],[\\\"input_cost\\\",[28,[32,1],[\\\"discourse_ai.llms.cost_input\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.cost_input\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.cost_measure\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,22,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n        \\\"]],[22]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,21,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@helpText\\\"],[\\\"cached_input_cost\\\",[28,[32,1],[\\\"discourse_ai.llms.cost_cached_input\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.cost_cached_input\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.cost_measure\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,23,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n        \\\"]],[23]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,21,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@helpText\\\"],[\\\"output_cost\\\",[28,[32,1],[\\\"discourse_ai.llms.cost_output\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.cost_output\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.cost_measure\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,24,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n        \\\"]],[24]]]]],[1,\\\"\\\\n      \\\"]],[21]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"max_output_tokens\\\",[28,[32,1],[\\\"discourse_ai.llms.max_output_tokens\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.max_output_tokens\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,25,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n      \\\"]],[25]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"vision_enabled\\\",[28,[32,1],[\\\"discourse_ai.llms.vision_enabled\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.vision_enabled\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,26,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n      \\\"]],[26]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"enabled_chat_bot\\\",[28,[32,1],[\\\"discourse_ai.llms.enabled_chat_bot\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.enabled_chat_bot\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,27,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n      \\\"]],[27]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,28,[\\\"user\\\"]],[[[1,\\\"        \\\"],[8,[30,1,[\\\"Container\\\"]],null,[[\\\"@title\\\"],[[28,[32,1],[\\\"discourse_ai.llms.ai_bot_user\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[10,3],[14,0,\\\"avatar\\\"],[15,6,[30,28,[\\\"user\\\",\\\"path\\\"]]],[15,\\\"data-user-card\\\",[30,28,[\\\"user\\\",\\\"username\\\"]]],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,5],[[30,28,[\\\"user\\\",\\\"avatar_template\\\"]],\\\"small\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[8,[32,6],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"adminUser\\\",[30,0,[\\\"adminUser\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,28,[\\\"user\\\",\\\"username\\\"]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[32,7],[[30,2,[\\\"llm_quotas\\\",\\\"length\\\"]],0],null],[[[1,\\\"        \\\"],[8,[30,1,[\\\"Container\\\"]],null,[[\\\"@title\\\"],[[28,[32,1],[\\\"discourse_ai.llms.quotas.title\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[10,\\\"table\\\"],[14,0,\\\"ai-llm-quotas__table\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"thead\\\"],[14,0,\\\"ai-llm-quotas__table-head\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"tr\\\"],[14,0,\\\"ai-llm-quotas__header-row\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[14,0,\\\"ai-llm-quotas__header\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.llms.quotas.group\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[14,0,\\\"ai-llm-quotas__header\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.llms.quotas.max_tokens\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[14,0,\\\"ai-llm-quotas__header\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.llms.quotas.max_usages\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[14,0,\\\"ai-llm-quotas__header\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.llms.quotas.duration\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[14,0,\\\"ai-llm-quotas__header ai-llm-quotas__header--actions\\\"],[12],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"tbody\\\"],[14,0,\\\"ai-llm-quotas__table-body\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[30,1,[\\\"Collection\\\"]],[[24,0,\\\"ai-llm-quotas__row\\\"]],[[\\\"@name\\\",\\\"@tagName\\\"],[\\\"llm_quotas\\\",\\\"tr\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-llm-quotas__cell\\\"],[12],[1,[30,31,[\\\"group_name\\\"]]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-llm-quotas__cell\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[30,29,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@showTitle\\\"],[\\\"max_tokens\\\",\\\"max_tokens\\\",false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,32,[\\\"Input\\\"]],[[24,0,\\\"ai-llm-quotas__input\\\"],[24,\\\"min\\\",\\\"1\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n                  \\\"]],[32]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-llm-quotas__cell\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[30,29,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@showTitle\\\"],[\\\"max_usages\\\",\\\"max_usages\\\",false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,33,[\\\"Input\\\"]],[[24,0,\\\"ai-llm-quotas__input\\\"],[24,\\\"min\\\",\\\"1\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n                  \\\"]],[33]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-llm-quotas__cell\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[30,29,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@showTitle\\\"],[\\\"duration_seconds\\\",\\\"duration_seconds\\\",false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,34,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[8,[32,8],null,[[\\\"@value\\\",\\\"@onChange\\\"],[[30,31,[\\\"duration_seconds\\\"]],[30,34,[\\\"set\\\"]]]],null],[1,\\\"\\\\n                    \\\"]],[]]]]],[1,\\\"\\\\n                  \\\"]],[34]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"btn-danger ai-llm-quotas__delete-btn\\\"]],[[\\\"@icon\\\",\\\"@action\\\"],[\\\"trash-can\\\",[28,[32,9],[[30,29,[\\\"remove\\\"]],[30,30]],null]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"]],[29,30,31]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"ai-llm-editor__add-quota-btn\\\"]],[[\\\"@action\\\",\\\"@icon\\\",\\\"@label\\\"],[[28,[32,9],[[30,0,[\\\"openAddQuotaModal\\\"]],[28,[32,9],[[30,1,[\\\"addItemToCollection\\\"]],\\\"llm_quotas\\\"],null]],null],\\\"plus\\\",\\\"discourse_ai.llms.quotas.add\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[8,[30,1,[\\\"Actions\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,1,[\\\"Button\\\"]],null,[[\\\"@action\\\",\\\"@disabled\\\",\\\"@label\\\"],[[28,[32,9],[[30,0,[\\\"test\\\"]],[30,2]],null],[30,0,[\\\"testRunning\\\"]],\\\"discourse_ai.llms.tests.title\\\"]],null],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,1,[\\\"Submit\\\"]],null,null,null],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[32,4],[[30,2,[\\\"llm_quotas\\\",\\\"length\\\"]],0],null],[[[1,\\\"          \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"ai-llm-editor__add-quota-btn\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[28,[32,9],[[30,0,[\\\"openAddQuotaModal\\\"]],[28,[32,9],[[30,1,[\\\"addItemToCollection\\\"]],\\\"llm_quotas\\\"],null]],null],\\\"discourse_ai.llms.quotas.add\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[51,[30,28,[\\\"isNew\\\"]]],[[[1,\\\"          \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"btn-danger\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"delete\\\"]],\\\"discourse_ai.llms.delete\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"displayTestResult\\\"]],[[[1,\\\"        \\\"],[8,[30,1,[\\\"Container\\\"]],null,[[\\\"@format\\\"],[\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[32,10],null,[[\\\"@size\\\",\\\"@condition\\\"],[\\\"small\\\",[30,0,[\\\"testRunning\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"testResult\\\"]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"ai-llm-editor-tests__success\\\"],[12],[1,\\\"\\\\n                \\\"],[1,[28,[32,11],[\\\"check\\\"],null]],[1,\\\"\\\\n                \\\"],[1,[28,[32,1],[\\\"discourse_ai.llms.tests.success\\\"],null]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"ai-llm-editor-tests__failure\\\"],[12],[1,\\\"\\\\n                \\\"],[1,[28,[32,11],[\\\"xmark\\\"],null]],[1,\\\"\\\\n                \\\"],[1,[30,0,[\\\"testErrorMessage\\\"]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"]],[1,2]]]]],[1,\\\"\\\\n  \\\"]],[\\\"form\\\",\\\"data\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"select\\\",\\\"provider\\\",\\\"field\\\",\\\"field\\\",\\\"object\\\",\\\"providerParamsData\\\",\\\"name\\\",\\\"params\\\",\\\"field\\\",\\\"select\\\",\\\"option\\\",\\\"field\\\",\\\"select\\\",\\\"tokenizer\\\",\\\"field\\\",\\\"inputGroup\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"@model\\\",\\\"collection\\\",\\\"index\\\",\\\"collectionData\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\",\\\"let\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-llm-editor-form.js\",\n      \"scope\": () => [_form.default, _discourseI18n.i18n, _helper.get, _helper.concat, _truthHelpers.eq, _boundAvatarTemplate.default, _routing.LinkTo, _truthHelpers.gt, _aiQuotaDurationSelector.default, _helper.fn, _conditionalLoadingSpinner.default, _dIcon.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiLlmEditorForm;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-llm-editor\", [\"exports\", \"discourse/components/back-button\", \"discourse/plugins/discourse-ai/discourse/components/ai-llm-editor-form\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _backButton, _aiLlmEditorForm, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AiLlmEditor = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <BackButton\n      @route=\"adminPlugins.show.discourse-ai-llms\"\n      @label=\"discourse_ai.llms.back\"\n    />\n    <AiLlmEditorForm\n      @model={{@model}}\n      @llmTemplate={{@llmTemplate}}\n      @llms={{@llms}}\n    />\n  \n  */\n  {\n    \"id\": \"Tv683ucY\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[8,[32,0],null,[[\\\"@route\\\",\\\"@label\\\"],[\\\"adminPlugins.show.discourse-ai-llms\\\",\\\"discourse_ai.llms.back\\\"]],null],[1,\\\"\\\\n  \\\"],[8,[32,1],null,[[\\\"@model\\\",\\\"@llmTemplate\\\",\\\"@llms\\\"],[[30,1],[30,2],[30,3]]],null],[1,\\\"\\\\n\\\"]],[\\\"@model\\\",\\\"@llmTemplate\\\",\\\"@llms\\\"],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-llm-editor.js\",\n    \"scope\": () => [_backButton.default, _aiLlmEditorForm.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-llm-editor:AiLlmEditor\"));\n  var _default = _exports.default = AiLlmEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-llm-selector\", [\"exports\", \"@ember/helper\", \"select-kit/components/combo-box\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _helper, _comboBox, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AiLlmSelector = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <ComboBox\n      @value={{@value}}\n      @content={{@llms}}\n      @onChange={{@onChange}}\n      @options={{hash\n        filterable=true\n        none=\"discourse_ai.ai_persona.no_llm_selected\"\n      }}\n      class={{@class}}\n    />\n  \n  */\n  {\n    \"id\": \"nJvrK5ml\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[8,[32,0],[[16,0,[30,1]]],[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\",\\\"@options\\\"],[[30,2],[30,3],[30,4],[28,[32,1],null,[[\\\"filterable\\\",\\\"none\\\"],[true,\\\"discourse_ai.ai_persona.no_llm_selected\\\"]]]]],null],[1,\\\"\\\\n\\\"]],[\\\"@class\\\",\\\"@value\\\",\\\"@llms\\\",\\\"@onChange\\\"],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-llm-selector.js\",\n    \"scope\": () => [_comboBox.default, _helper.hash],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-llm-selector:AiLlmSelector\"));\n  var _default = _exports.default = AiLlmSelector;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-llms-list-editor\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-breadcrumbs-item\", \"discourse/components/d-button\", \"discourse/components/d-page-subheader\", \"discourse-i18n\", \"admin/components/admin-section-landing-item\", \"admin/components/admin-section-landing-wrapper\", \"float-kit/components/d-tooltip\", \"discourse/plugins/discourse-ai/discourse/components/ai-default-llm-selector\", \"discourse/plugins/discourse-ai/discourse/components/ai-llm-editor\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _object, _service, _dBreadcrumbsItem, _dButton, _dPageSubheader, _discourseI18n, _adminSectionLandingItem, _adminSectionLandingWrapper, _dTooltip, _aiDefaultLlmSelector, _aiLlmEditor, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  function isPreseeded(llm) {\n    if (llm.id < 0) {\n      return true;\n    }\n  }\n  class AiLlmsListEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"adminPluginNavManager\", [_service.service]))();\n    #adminPluginNavManager = (() => (dt7948.i(this, \"adminPluginNavManager\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    modelDescription(llm) {\n      // this is a bit of an odd object, it can be an llm model or a preset model\n      // handle both flavors\n      // in the case of model\n      let key = \"\";\n      if (typeof llm.id === \"number\") {\n        key = `${llm.provider}-${llm.name}`;\n      } else {\n        // case of preset\n        key = llm.id.replace(/[.:\\/]/g, \"-\");\n      }\n      key = `discourse_ai.llms.model_description.${key}`;\n      if (_discourseI18n.default.lookup(key, {\n        ignoreMissing: true\n      })) {\n        return (0, _discourseI18n.i18n)(key);\n      }\n      return \"\";\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"modelDescription\", [_object.action]))();\n    preseededDescription(llm) {\n      if (isPreseeded(llm)) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.llms.preseeded_model_description\", {\n          model: llm.name\n        });\n      }\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"preseededDescription\", [_object.action]))();\n    sanitizedTranslationKey(id) {\n      return id.replace(/\\./g, \"-\");\n    }\n    get hasLlmElements() {\n      return this.args.llms.length !== 0;\n    }\n    get preconfiguredTitle() {\n      if (this.hasLlmElements) {\n        return \"discourse_ai.llms.preconfigured.title\";\n      } else {\n        return \"discourse_ai.llms.preconfigured.title_no_llms\";\n      }\n    }\n    get preConfiguredLlms() {\n      const options = [{\n        id: \"none\",\n        name: (0, _discourseI18n.i18n)(\"discourse_ai.llms.preconfigured.fake\"),\n        provider: \"fake\"\n      }];\n      const llmsContent = this.args.llms.content.map(llm => ({\n        provider: llm.provider,\n        name: llm.name\n      }));\n      this.args.llms.resultSetMeta.presets.forEach(llm => {\n        if (llm.models) {\n          llm.models.forEach(model => {\n            const id = `${llm.id}-${model.name}`;\n            const isConfigured = llmsContent.some(content => content.provider === llm.provider && content.name === model.name);\n            if (!isConfigured) {\n              options.push({\n                id,\n                name: model.display_name,\n                provider: llm.provider\n              });\n            }\n          });\n        }\n      });\n      return options;\n    }\n    transitionToLlmEditor(llmTemplate) {\n      this.router.transitionTo(\"adminPlugins.show.discourse-ai-llms.new\", {\n        queryParams: {\n          llmTemplate\n        }\n      });\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"transitionToLlmEditor\", [_object.action]))();\n    localizeUsage(usage) {\n      return (0, _discourseI18n.i18n)(`discourse_ai.llms.usage.${usage.type}`, {\n        persona: usage.name\n      });\n    }\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DBreadcrumbsItem\n          @path=\"/admin/plugins/{{this.adminPluginNavManager.currentPlugin.name}}/ai-llms\"\n          @label={{i18n \"discourse_ai.llms.short_title\"}}\n        />\n        <section class=\"ai-llm-list-editor admin-detail\">\n          {{#if @currentLlm}}\n            <AiLlmEditor\n              @model={{@currentLlm}}\n              @llms={{@llms}}\n              @llmTemplate={{@llmTemplate}}\n            />\n          {{else}}\n            <DPageSubheader\n              @titleLabel={{i18n \"discourse_ai.llms.short_title\"}}\n              @descriptionLabel={{i18n\n                \"discourse_ai.llms.preconfigured.description\"\n              }}\n              @learnMoreUrl=\"https://meta.discourse.org/t/discourse-ai-large-language-model-llm-settings-page/319903\"\n            />\n    \n            <AiDefaultLlmSelector />\n    \n            {{#if this.hasLlmElements}}\n              <section class=\"ai-llms-list-editor__configured\">\n                <DPageSubheader\n                  @titleLabel={{i18n \"discourse_ai.llms.configured.title\"}}\n                />\n                <table class=\"d-admin-table\">\n                  <thead>\n                    <tr>\n                      <th>{{i18n \"discourse_ai.llms.display_name\"}}</th>\n                      <th>{{i18n \"discourse_ai.llms.provider\"}}</th>\n                      <th></th>\n                    </tr>\n                  </thead>\n                  <tbody>\n                    {{#each @llms as |llm|}}\n                      <tr\n                        data-llm-id={{llm.name}}\n                        class=\"ai-llm-list__row d-admin-row__content\"\n                      >\n                        <td class=\"d-admin-row__overview\">\n    \n                          <div class=\"ai-llm-list__name\">\n                            <strong>\n                              {{llm.display_name}}\n                            </strong>\n                          </div>\n                          <div class=\"ai-llm-list__description\">\n                            {{this.modelDescription llm}}\n                            {{this.preseededDescription llm}}\n                          </div>\n                          {{#if llm.used_by}}\n                            <ul class=\"ai-llm-list-editor__usages\">\n                              {{#each llm.used_by as |usage|}}\n                                <li>{{this.localizeUsage usage}}</li>\n                              {{/each}}\n                            </ul>\n                          {{/if}}\n                        </td>\n                        <td class=\"d-admin-row__detail\">\n                          <div class=\"d-admin-row__mobile-label\">\n                            {{i18n \"discourse_ai.llms.provider\"}}\n                          </div>\n                          {{i18n\n                            (concat \"discourse_ai.llms.providers.\" llm.provider)\n                          }}\n                        </td>\n                        <td class=\"d-admin-row__controls\">\n                          {{#if (isPreseeded llm)}}\n                            <DTooltip class=\"ai-llm-list__edit-disabled-tooltip\">\n                              <:trigger>\n                                <DButton\n                                  class=\"btn btn-default btn-small disabled\"\n                                  @label=\"discourse_ai.llms.edit\"\n                                />\n                              </:trigger>\n                              <:content>\n                                {{i18n \"discourse_ai.llms.seeded_warning\"}}\n                              </:content>\n                            </DTooltip>\n                          {{else}}\n                            <DButton\n                              class=\"btn btn-default btn-small ai-llm-list__delete-button\"\n                              @label=\"discourse_ai.llms.edit\"\n                              @route=\"adminPlugins.show.discourse-ai-llms.edit\"\n                              @routeModels={{llm.id}}\n                            />\n                          {{/if}}\n                        </td>\n                      </tr>\n                    {{/each}}\n                  </tbody>\n                </table>\n              </section>\n            {{/if}}\n            <section class=\"ai-llms-list-editor__templates\">\n              <DPageSubheader @titleLabel={{i18n this.preconfiguredTitle}} />\n              <AdminSectionLandingWrapper\n                class=\"ai-llms-list-editor__templates-list\"\n              >\n                {{#each this.preConfiguredLlms as |llm|}}\n                  <AdminSectionLandingItem\n                    @titleLabelTranslated={{llm.name}}\n                    @descriptionLabelTranslated={{this.modelDescription llm}}\n                    @taglineLabel={{concat\n                      \"discourse_ai.llms.providers.\"\n                      llm.provider\n                    }}\n                    data-llm-id={{llm.id}}\n                    class=\"ai-llms-list-editor__templates-list-item\"\n                  >\n                    <:buttons as |buttons|>\n                      <buttons.Default\n                        @action={{fn this.transitionToLlmEditor llm.id}}\n                        @icon=\"gear\"\n                        @label=\"discourse_ai.llms.preconfigured.button\"\n                      />\n                    </:buttons>\n                  </AdminSectionLandingItem>\n                {{/each}}\n              </AdminSectionLandingWrapper>\n            </section>\n          {{/if}}\n        </section>\n      \n    */\n    {\n      \"id\": \"xuJzafVf\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@path\\\",\\\"@label\\\"],[[29,[\\\"/admin/plugins/\\\",[30,0,[\\\"adminPluginNavManager\\\",\\\"currentPlugin\\\",\\\"name\\\"]],\\\"/ai-llms\\\"]],[28,[32,1],[\\\"discourse_ai.llms.short_title\\\"],null]]],null],[1,\\\"\\\\n    \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-llm-list-editor admin-detail\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"        \\\"],[8,[32,2],null,[[\\\"@model\\\",\\\"@llms\\\",\\\"@llmTemplate\\\"],[[30,1],[30,2],[30,3]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[32,3],null,[[\\\"@titleLabel\\\",\\\"@descriptionLabel\\\",\\\"@learnMoreUrl\\\"],[[28,[32,1],[\\\"discourse_ai.llms.short_title\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.preconfigured.description\\\"],null],\\\"https://meta.discourse.org/t/discourse-ai-large-language-model-llm-settings-page/319903\\\"]],null],[1,\\\"\\\\n\\\\n        \\\"],[8,[32,4],null,null,null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"hasLlmElements\\\"]],[[[1,\\\"          \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-llms-list-editor__configured\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[32,3],null,[[\\\"@titleLabel\\\"],[[28,[32,1],[\\\"discourse_ai.llms.configured.title\\\"],null]]],null],[1,\\\"\\\\n            \\\"],[10,\\\"table\\\"],[14,0,\\\"d-admin-table\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.llms.display_name\\\"],null]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.llms.provider\\\"],null]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[12],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,2]],null]],null],null,[[[1,\\\"                  \\\"],[10,\\\"tr\\\"],[15,\\\"data-llm-id\\\",[30,4,[\\\"name\\\"]]],[14,0,\\\"ai-llm-list__row d-admin-row__content\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__overview\\\"],[12],[1,\\\"\\\\n\\\\n                      \\\"],[10,0],[14,0,\\\"ai-llm-list__name\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                          \\\"],[1,[30,4,[\\\"display_name\\\"]]],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"ai-llm-list__description\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[28,[30,0,[\\\"modelDescription\\\"]],[[30,4]],null]],[1,\\\"\\\\n                        \\\"],[1,[28,[30,0,[\\\"preseededDescription\\\"]],[[30,4]],null]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,4,[\\\"used_by\\\"]],[[[1,\\\"                        \\\"],[10,\\\"ul\\\"],[14,0,\\\"ai-llm-list-editor__usages\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,4,[\\\"used_by\\\"]]],null]],null],null,[[[1,\\\"                            \\\"],[10,\\\"li\\\"],[12],[1,[28,[30,0,[\\\"localizeUsage\\\"]],[[30,5]],null]],[13],[1,\\\"\\\\n\\\"]],[5]],null],[1,\\\"                        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__detail\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"d-admin-row__mobile-label\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[28,[32,1],[\\\"discourse_ai.llms.provider\\\"],null]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[1,[28,[32,1],[[28,[32,5],[\\\"discourse_ai.llms.providers.\\\",[30,4,[\\\"provider\\\"]]],null]],null]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__controls\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[32,6],[[30,4]],null],[[[1,\\\"                        \\\"],[8,[32,7],[[24,0,\\\"ai-llm-list__edit-disabled-tooltip\\\"]],null,[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n                            \\\"],[8,[32,8],[[24,0,\\\"btn btn-default btn-small disabled\\\"]],[[\\\"@label\\\"],[\\\"discourse_ai.llms.edit\\\"]],null],[1,\\\"\\\\n                          \\\"]],[]],[[[1,\\\"\\\\n                            \\\"],[1,[28,[32,1],[\\\"discourse_ai.llms.seeded_warning\\\"],null]],[1,\\\"\\\\n                          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                        \\\"],[8,[32,8],[[24,0,\\\"btn btn-default btn-small ai-llm-list__delete-button\\\"]],[[\\\"@label\\\",\\\"@route\\\",\\\"@routeModels\\\"],[\\\"discourse_ai.llms.edit\\\",\\\"adminPlugins.show.discourse-ai-llms.edit\\\",[30,4,[\\\"id\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-llms-list-editor__templates\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,3],null,[[\\\"@titleLabel\\\"],[[28,[32,1],[[30,0,[\\\"preconfiguredTitle\\\"]]],null]]],null],[1,\\\"\\\\n          \\\"],[8,[32,9],[[24,0,\\\"ai-llms-list-editor__templates-list\\\"]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"preConfiguredLlms\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[32,10],[[16,\\\"data-llm-id\\\",[30,6,[\\\"id\\\"]]],[24,0,\\\"ai-llms-list-editor__templates-list-item\\\"]],[[\\\"@titleLabelTranslated\\\",\\\"@descriptionLabelTranslated\\\",\\\"@taglineLabel\\\"],[[30,6,[\\\"name\\\"]],[28,[30,0,[\\\"modelDescription\\\"]],[[30,6]],null],[28,[32,5],[\\\"discourse_ai.llms.providers.\\\",[30,6,[\\\"provider\\\"]]],null]]],[[\\\"buttons\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[30,7,[\\\"Default\\\"]],null,[[\\\"@action\\\",\\\"@icon\\\",\\\"@label\\\"],[[28,[32,11],[[30,0,[\\\"transitionToLlmEditor\\\"]],[30,6,[\\\"id\\\"]]],null],\\\"gear\\\",\\\"discourse_ai.llms.preconfigured.button\\\"]],null],[1,\\\"\\\\n                \\\"]],[7]]]]],[1,\\\"\\\\n\\\"]],[6]],null],[1,\\\"          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@currentLlm\\\",\\\"@llms\\\",\\\"@llmTemplate\\\",\\\"llm\\\",\\\"usage\\\",\\\"llm\\\",\\\"buttons\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-llms-list-editor.js\",\n      \"scope\": () => [_dBreadcrumbsItem.default, _discourseI18n.i18n, _aiLlmEditor.default, _dPageSubheader.default, _aiDefaultLlmSelector.default, _helper.concat, isPreseeded, _dTooltip.default, _dButton.default, _adminSectionLandingWrapper.default, _adminSectionLandingItem.default, _helper.fn],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiLlmsListEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-persona-editor\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/routing\", \"@ember/runloop\", \"@ember/service\", \"truth-helpers\", \"discourse/components/back-button\", \"discourse/components/form\", \"discourse/helpers/bound-avatar-template\", \"discourse/lib/ajax-error\", \"discourse/lib/get-url\", \"discourse/models/group\", \"discourse-i18n\", \"admin/models/admin-user\", \"select-kit/components/group-chooser\", \"discourse/plugins/discourse-ai/discourse/components/modal/ai-persona-response-format-editor\", \"discourse/plugins/discourse-ai/discourse/components/ai-llm-selector\", \"discourse/plugins/discourse-ai/discourse/components/ai-persona-example\", \"discourse/plugins/discourse-ai/discourse/components/ai-persona-tool-options\", \"discourse/plugins/discourse-ai/discourse/components/ai-tool-selector\", \"discourse/plugins/discourse-ai/discourse/components/rag-options-fk\", \"discourse/plugins/discourse-ai/discourse/components/rag-uploader\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _didInsert, _routing, _runloop, _service, _truthHelpers, _backButton, _form, _boundAvatarTemplate, _ajaxError, _getUrl, _group, _discourseI18n, _adminUser, _groupChooser, _aiPersonaResponseFormatEditor, _aiLlmSelector, _aiPersonaExample, _aiPersonaToolOptions, _aiToolSelector, _ragOptionsFk, _ragUploader, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class PersonaEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"store\", [_service.service]))();\n    #store = (() => (dt7948.i(this, \"store\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"dialog\", [_service.service]))();\n    #dialog = (() => (dt7948.i(this, \"dialog\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"allGroups\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #allGroups = (() => (dt7948.i(this, \"allGroups\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"isSaving\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isSaving = (() => (dt7948.i(this, \"isSaving\"), void 0))();\n    dirtyFormData = null;\n    get formData() {\n      // This is to recover a dirty state after persisting a single form field.\n      // It's meant to be consumed only once.\n      if (this.dirtyFormData) {\n        const data = this.dirtyFormData;\n        this.dirtyFormData = null;\n        return data;\n      } else {\n        const data = this.args.model.toPOJO();\n        if (data.tools) {\n          data.toolOptions = this.mapToolOptions(data.toolOptions, data.tools);\n        }\n        return data;\n      }\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"formData\", [_tracking.cached]))();\n    get chatPluginEnabled() {\n      return this.siteSettings.chat_enabled;\n    }\n    get allTools() {\n      return this.args.personas.resultSetMeta.tools;\n    }\n    get maxPixelValues() {\n      const l = key => (0, _discourseI18n.i18n)(`discourse_ai.ai_persona.vision_max_pixel_sizes.${key}`);\n      return [{\n        name: l(\"low\"),\n        id: 65536\n      }, {\n        name: l(\"medium\"),\n        id: 262144\n      }, {\n        name: l(\"high\"),\n        id: 1048576\n      }];\n    }\n    get forcedToolStrategies() {\n      const content = [{\n        id: -1,\n        name: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.tool_strategies.all\")\n      }];\n      [1, 2, 5].forEach(i => {\n        content.push({\n          id: i,\n          name: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.tool_strategies.replies\", {\n            count: i\n          })\n        });\n      });\n      return content;\n    }\n    async updateAllGroups() {\n      const groups = await _group.default.findAll({\n        include_everyone: true\n      });\n      // Backwards-compatibility code. TODO(roman): Remove 01-09-2025\n      const hasEveryoneGroup = groups.find(g => g.id === 0);\n      if (!hasEveryoneGroup) {\n        const everyoneGroupName = \"everyone\";\n        groups.push({\n          id: 0,\n          name: everyoneGroupName\n        });\n      }\n      this.allGroups = groups;\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"updateAllGroups\", [_object.action]))();\n    async save(data) {\n      const isNew = this.args.model.isNew;\n      this.isSaving = true;\n      try {\n        const personaToSave = Object.assign(this.args.model, this.args.model.fromPOJO(data));\n        await personaToSave.save();\n        this.#sortPersonas();\n        if (isNew && this.args.model.rag_uploads.length === 0) {\n          this.args.personas.addObject(personaToSave);\n          await this.router.replaceWith(\"adminPlugins.show.discourse-ai-personas.edit\", personaToSave);\n        }\n        this.toasts.success({\n          data: {\n            message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.saved\")\n          },\n          duration: \"short\"\n        });\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        (0, _runloop.later)(() => {\n          this.isSaving = false;\n        }, 1000);\n      }\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n    get adminUser() {\n      // Work around user not being extensible.\n      const userClone = Object.assign({}, this.args.model?.user);\n      return _adminUser.default.create(userClone);\n    }\n    delete() {\n      return this.dialog.confirm({\n        message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.confirm_delete\"),\n        didConfirm: () => {\n          return this.args.model.destroyRecord().then(() => {\n            this.args.personas.removeObject(this.args.model);\n            this.router.transitionTo(\"adminPlugins.show.discourse-ai-personas.index\");\n          });\n        }\n      });\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"delete\", [_object.action]))();\n    async toggleEnabled(dirtyData, value, _ref) {\n      let {\n        set\n      } = _ref;\n      set(\"enabled\", value);\n      await this.persistField(dirtyData, \"enabled\", value);\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"toggleEnabled\", [_object.action]))();\n    async togglePriority(dirtyData, value, _ref2) {\n      let {\n        set\n      } = _ref2;\n      set(\"priority\", value);\n      await this.persistField(dirtyData, \"priority\", value, true);\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"togglePriority\", [_object.action]))();\n    async createUser(form) {\n      try {\n        let user = await this.args.model.createUser();\n        form.set(\"user\", user);\n        form.set(\"user_id\", user.id);\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      }\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"createUser\", [_object.action]))();\n    updateUploads(form, newUploads) {\n      form.set(\"rag_uploads\", newUploads);\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"updateUploads\", [_object.action]))();\n    async removeUpload(form, dirtyData, currentUploads, upload) {\n      const updatedUploads = currentUploads.filter(file => file.id !== upload.id);\n      form.set(\"rag_uploads\", updatedUploads);\n      if (!this.args.model.isNew) {\n        await this.persistField(dirtyData, \"rag_uploads\", updatedUploads);\n      }\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"removeUpload\", [_object.action]))();\n    updateToolNames(form, currentData, updatedTools) {\n      const removedTools = currentData?.tools?.filter(ct => !updatedTools.includes(ct)) || [];\n      const updatedOptions = this.mapToolOptions(currentData.toolOptions, updatedTools);\n      form.setProperties({\n        tools: updatedTools,\n        toolOptions: updatedOptions\n      });\n      if (currentData.forcedTools?.length > 0) {\n        const updatedForcedTools = currentData.forcedTools.filter(fct => !removedTools.includes(fct));\n        form.set(\"forcedTools\", updatedForcedTools);\n      }\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"updateToolNames\", [_object.action]))();\n    availableForcedTools(tools) {\n      return this.allTools.filter(tool => tools.includes(tool.id));\n    }\n    static #_18 = (() => dt7948.n(this.prototype, \"availableForcedTools\", [_object.action]))();\n    addExamplesPair(form, data) {\n      const newExamples = [...data.examples, [\"\", \"\"]];\n      form.set(\"examples\", newExamples);\n    }\n    static #_19 = (() => dt7948.n(this.prototype, \"addExamplesPair\", [_object.action]))();\n    mapToolOptions(currentOptions, toolNames) {\n      const updatedOptions = Object.assign({}, currentOptions);\n      toolNames.forEach(toolId => {\n        const tool = this.allTools.findBy(\"id\", toolId);\n        const toolOptions = tool?.options;\n        if (!toolOptions || updatedOptions[toolId]) {\n          return;\n        }\n        const mappedOptions = {};\n        Object.keys(toolOptions).forEach(key => {\n          mappedOptions[key] = null;\n        });\n        updatedOptions[toolId] = mappedOptions;\n      });\n      return updatedOptions;\n    }\n    async persistField(dirtyData, field, newValue, sortPersonas) {\n      if (!this.args.model.isNew) {\n        const updatedDirtyData = Object.assign({}, dirtyData);\n        updatedDirtyData[field] = newValue;\n        try {\n          const args = {};\n          args[field] = newValue;\n          this.dirtyFormData = updatedDirtyData;\n          await this.args.model.update(args);\n          if (sortPersonas) {\n            this.#sortPersonas();\n          }\n        } catch (e) {\n          (0, _ajaxError.popupAjaxError)(e);\n        }\n      }\n    }\n    #sortPersonas() {\n      const sorted = this.args.personas.toArray().sort((a, b) => {\n        if (a.priority && !b.priority) {\n          return -1;\n        } else if (!a.priority && b.priority) {\n          return 1;\n        } else {\n          return a.name.localeCompare(b.name);\n        }\n      });\n      this.args.personas.clear();\n      this.args.personas.setObjects(sorted);\n    }\n    exportPersona() {\n      const exportUrl = `/admin/plugins/discourse-ai/ai-personas/${this.args.model.id}/export.json`;\n      window.location.href = (0, _getUrl.default)(exportUrl);\n    }\n    static #_20 = (() => dt7948.n(this.prototype, \"exportPersona\", [_object.action]))();\n    static #_21 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <BackButton\n          @route=\"adminPlugins.show.discourse-ai-personas\"\n          @label=\"discourse_ai.ai_persona.back\"\n        />\n        <div class=\"ai-persona-editor\" {{didInsert this.updateAllGroups @model.id}}>\n          <Form @onSubmit={{this.save}} @data={{this.formData}} as |form data|>\n            <form.Field\n              @name=\"name\"\n              @title={{i18n \"discourse_ai.ai_persona.name\"}}\n              @validation=\"required|length:1,100\"\n              @disabled={{data.system}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Input />\n            </form.Field>\n    \n            <form.Field\n              @name=\"description\"\n              @title={{i18n \"discourse_ai.ai_persona.description\"}}\n              @validation=\"required|length:1,100\"\n              @disabled={{data.system}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Textarea />\n            </form.Field>\n    \n            <form.Field\n              @name=\"system_prompt\"\n              @title={{i18n \"discourse_ai.ai_persona.system_prompt\"}}\n              @validation=\"required|length:1,100000\"\n              @disabled={{data.system}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Textarea />\n            </form.Field>\n    \n            <AiPersonaResponseFormatEditor @form={{form}} @data={{data}} />\n    \n            <form.Field\n              @name=\"default_llm_id\"\n              @title={{i18n \"discourse_ai.ai_persona.default_llm\"}}\n              @tooltip={{i18n \"discourse_ai.ai_persona.default_llm_help\"}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Custom>\n                <AiLlmSelector\n                  @value={{field.value}}\n                  @llms={{@personas.resultSetMeta.llms}}\n                  @onChange={{field.set}}\n                  @class=\"ai-persona-editor__llms\"\n                />\n              </field.Custom>\n            </form.Field>\n    \n            <form.Field\n              @name=\"allowed_group_ids\"\n              @title={{i18n \"discourse_ai.ai_persona.allowed_groups\"}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Custom>\n                <GroupChooser\n                  @value={{data.allowed_group_ids}}\n                  @content={{this.allGroups}}\n                  @onChange={{field.set}}\n                />\n              </field.Custom>\n            </form.Field>\n    \n            <form.Field\n              @name=\"vision_enabled\"\n              @title={{i18n \"discourse_ai.ai_persona.vision_enabled\"}}\n              @tooltip={{i18n \"discourse_ai.ai_persona.vision_enabled_help\"}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Checkbox />\n            </form.Field>\n    \n            {{#if data.vision_enabled}}\n              <form.Field\n                @name=\"vision_max_pixels\"\n                @title={{i18n \"discourse_ai.ai_persona.vision_max_pixels\"}}\n                @onSet={{this.onChangeMaxPixels}}\n                @format=\"large\"\n                as |field|\n              >\n                <field.Select @includeNone={{false}} as |select|>\n                  {{#each this.maxPixelValues as |pixelValue|}}\n                    <select.Option\n                      @value={{pixelValue.id}}\n                    >{{pixelValue.name}}</select.Option>\n                  {{/each}}\n                </field.Select>\n              </form.Field>\n            {{/if}}\n    \n            <form.Field\n              @name=\"max_context_posts\"\n              @title={{i18n \"discourse_ai.ai_persona.max_context_posts\"}}\n              @tooltip={{i18n \"discourse_ai.ai_persona.max_context_posts_help\"}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Input @type=\"number\" lang=\"en\" />\n            </form.Field>\n    \n            {{#unless data.system}}\n              <form.Field\n                @name=\"temperature\"\n                @title={{i18n \"discourse_ai.ai_persona.temperature\"}}\n                @tooltip={{i18n \"discourse_ai.ai_persona.temperature_help\"}}\n                @disabled={{data.system}}\n                @format=\"large\"\n                as |field|\n              >\n                <field.Input @type=\"number\" step=\"any\" lang=\"en\" />\n              </form.Field>\n    \n              <form.Field\n                @name=\"top_p\"\n                @title={{i18n \"discourse_ai.ai_persona.top_p\"}}\n                @tooltip={{i18n \"discourse_ai.ai_persona.top_p_help\"}}\n                @disabled={{data.system}}\n                @format=\"large\"\n                as |field|\n              >\n                <field.Input @type=\"number\" step=\"any\" lang=\"en\" />\n              </form.Field>\n            {{/unless}}\n    \n            <form.Section\n              @title={{i18n \"discourse_ai.ai_persona.examples.title\"}}\n              @subtitle={{i18n \"discourse_ai.ai_persona.examples.examples_help\"}}\n            >\n              {{#unless data.system}}\n                <form.Container>\n                  <form.Button\n                    @action={{fn this.addExamplesPair form data}}\n                    @label=\"discourse_ai.ai_persona.examples.new\"\n                    class=\"ai-persona-editor__new_example\"\n                  />\n                </form.Container>\n              {{/unless}}\n    \n              {{#if (gt data.examples.length 0)}}\n                <form.Collection @name=\"examples\" as |exCollection exCollectionIdx|>\n                  <AiPersonaCollapsableExample\n                    @examplesCollection={{exCollection}}\n                    @exampleNumber={{exCollectionIdx}}\n                    @system={{data.system}}\n                    @form={{form}}\n                  />\n                </form.Collection>\n              {{/if}}\n            </form.Section>\n    \n            <form.Section @title={{i18n \"discourse_ai.ai_persona.ai_tools\"}}>\n              <form.Field\n                @name=\"tools\"\n                @title={{i18n \"discourse_ai.ai_persona.tools\"}}\n                @format=\"large\"\n                as |field|\n              >\n                <field.Custom>\n                  <AiToolSelector\n                    @value={{field.value}}\n                    @disabled={{data.system}}\n                    @onChange={{fn this.updateToolNames form data}}\n                    @content={{@personas.resultSetMeta.tools}}\n                  />\n                </field.Custom>\n              </form.Field>\n    \n              {{#if (gt data.tools.length 0)}}\n                <form.Field\n                  @name=\"forcedTools\"\n                  @title={{i18n \"discourse_ai.ai_persona.forced_tools\"}}\n                  @format=\"large\"\n                  as |field|\n                >\n                  <field.Custom>\n                    <AiToolSelector\n                      @value={{field.value}}\n                      @disabled={{data.system}}\n                      @onChange={{field.set}}\n                      @content={{this.availableForcedTools data.tools}}\n                    />\n                  </field.Custom>\n                </form.Field>\n              {{/if}}\n    \n              {{#if (gt data.forcedTools.length 0)}}\n                <form.Field\n                  @name=\"forced_tool_count\"\n                  @title={{i18n \"discourse_ai.ai_persona.forced_tool_strategy\"}}\n                  @format=\"large\"\n                  as |field|\n                >\n                  <field.Select @includeNone={{false}} as |select|>\n                    {{#each this.forcedToolStrategies as |fts|}}\n                      <select.Option @value={{fts.id}}>{{fts.name}}</select.Option>\n                    {{/each}}\n                  </field.Select>\n                </form.Field>\n              {{/if}}\n    \n              {{#if (gt data.tools.length 0)}}\n                <form.Field\n                  @name=\"tool_details\"\n                  @title={{i18n \"discourse_ai.ai_persona.tool_details\"}}\n                  @tooltip={{i18n \"discourse_ai.ai_persona.tool_details_help\"}}\n                  @format=\"large\"\n                  as |field|\n                >\n                  <field.Checkbox />\n                </form.Field>\n    \n                <AiPersonaToolOptions\n                  @form={{form}}\n                  @data={{data}}\n                  @llms={{@personas.resultSetMeta.llms}}\n                  @allTools={{@personas.resultSetMeta.tools}}\n                />\n              {{/if}}\n            </form.Section>\n    \n            {{#if this.siteSettings.ai_embeddings_enabled}}\n              <form.Section @title={{i18n \"discourse_ai.rag.title\"}}>\n                <form.Field\n                  @name=\"rag_uploads\"\n                  @title={{i18n \"discourse_ai.rag.uploads.title\"}}\n                  @format=\"full\"\n                  as |field|\n                >\n                  <field.Custom>\n                    <RagUploader\n                      @target={{data}}\n                      @targetName=\"AiPersona\"\n                      @updateUploads={{fn this.updateUploads form}}\n                      @onRemove={{fn this.removeUpload form data field.value}}\n                      @allowImages={{@personas.resultSetMeta.settings.rag_images_enabled}}\n                    />\n                  </field.Custom>\n                </form.Field>\n    \n                <RagOptionsFk\n                  @form={{form}}\n                  @data={{data}}\n                  @llms={{@personas.resultSetMeta.llms}}\n                  @allowImages={{@personas.resultSetMeta.settings.rag_images_enabled}}\n                >\n                  <form.Field\n                    @name=\"rag_conversation_chunks\"\n                    @title={{i18n\n                      \"discourse_ai.ai_persona.rag_conversation_chunks\"\n                    }}\n                    @tooltip={{i18n\n                      \"discourse_ai.ai_persona.rag_conversation_chunks_help\"\n                    }}\n                    @format=\"large\"\n                    as |field|\n                  >\n                    <field.Input @type=\"number\" step=\"any\" lang=\"en\" />\n                  </form.Field>\n    \n                  <form.Field\n                    @name=\"question_consolidator_llm_id\"\n                    @title={{i18n\n                      \"discourse_ai.ai_persona.question_consolidator_llm\"\n                    }}\n                    @tooltip={{i18n\n                      \"discourse_ai.ai_persona.question_consolidator_llm_help\"\n                    }}\n                    @format=\"large\"\n                    as |field|\n                  >\n                    <field.Custom>\n                      <AiLlmSelector\n                        @value={{field.value}}\n                        @llms={{@personas.resultSetMeta.llms}}\n                        @onChange={{field.set}}\n                        @class=\"ai-persona-editor__llms\"\n                      />\n                    </field.Custom>\n                  </form.Field>\n                </RagOptionsFk>\n              </form.Section>\n            {{/if}}\n    \n            <form.Section @title={{i18n \"discourse_ai.ai_persona.ai_bot.title\"}}>\n              <form.Field\n                @name=\"enabled\"\n                @title={{i18n \"discourse_ai.ai_persona.enabled\"}}\n                @onSet={{fn this.toggleEnabled data}}\n                as |field|\n              >\n                <field.Toggle />\n              </form.Field>\n    \n              <form.Field\n                @name=\"priority\"\n                @title={{i18n \"discourse_ai.ai_persona.priority\"}}\n                @onSet={{fn this.togglePriority data}}\n                @tooltip={{i18n \"discourse_ai.ai_persona.priority_help\"}}\n                as |field|\n              >\n                <field.Toggle />\n              </form.Field>\n    \n              {{#if @model.isNew}}\n                <div>{{i18n \"discourse_ai.ai_persona.ai_bot.save_first\"}}</div>\n              {{else}}\n                {{#if data.default_llm_id}}\n                  <form.Field\n                    @name=\"force_default_llm\"\n                    @title={{i18n \"discourse_ai.ai_persona.force_default_llm\"}}\n                    @format=\"large\"\n                    as |field|\n                  >\n                    <field.Checkbox />\n                  </form.Field>\n                {{/if}}\n    \n                <form.Container\n                  @title={{i18n \"discourse_ai.ai_persona.user\"}}\n                  @tooltip={{unless\n                    data.user\n                    (i18n \"discourse_ai.ai_persona.create_user_help\")\n                  }}\n                  class=\"ai-persona-editor__ai_bot_user\"\n                >\n                  {{#if data.user}}\n                    <a\n                      class=\"avatar\"\n                      href={{data.user.path}}\n                      data-user-card={{data.user.username}}\n                    >\n                      {{Avatar data.user.avatar_template \"small\"}}\n                    </a>\n                    <LinkTo @route=\"adminUser\" @model={{this.adminUser}}>\n                      {{data.user.username}}\n                    </LinkTo>\n                  {{else}}\n                    <form.Button\n                      @action={{fn this.createUser form}}\n                      @label=\"discourse_ai.ai_persona.create_user\"\n                      class=\"ai-persona-editor__create-user\"\n                    />\n                  {{/if}}\n                </form.Container>\n    \n                {{#if data.user}}\n                  <form.Field\n                    @name=\"allow_personal_messages\"\n                    @title={{i18n\n                      \"discourse_ai.ai_persona.allow_personal_messages\"\n                    }}\n                    @tooltip={{i18n\n                      \"discourse_ai.ai_persona.allow_personal_messages_help\"\n                    }}\n                    @format=\"large\"\n                    as |field|\n                  >\n                    <field.Checkbox />\n                  </form.Field>\n    \n                  <form.Field\n                    @name=\"allow_topic_mentions\"\n                    @title={{i18n \"discourse_ai.ai_persona.allow_topic_mentions\"}}\n                    @tooltip={{i18n\n                      \"discourse_ai.ai_persona.allow_topic_mentions_help\"\n                    }}\n                    @format=\"large\"\n                    as |field|\n                  >\n                    <field.Checkbox />\n                  </form.Field>\n    \n                  {{#if this.chatPluginEnabled}}\n                    <form.Field\n                      @name=\"allow_chat_direct_messages\"\n                      @title={{i18n\n                        \"discourse_ai.ai_persona.allow_chat_direct_messages\"\n                      }}\n                      @tooltip={{i18n\n                        \"discourse_ai.ai_persona.allow_chat_direct_messages_help\"\n                      }}\n                      @format=\"large\"\n                      as |field|\n                    >\n                      <field.Checkbox />\n                    </form.Field>\n    \n                    <form.Field\n                      @name=\"allow_chat_channel_mentions\"\n                      @title={{i18n\n                        \"discourse_ai.ai_persona.allow_chat_channel_mentions\"\n                      }}\n                      @tooltip={{i18n\n                        \"discourse_ai.ai_persona.allow_chat_channel_mentions_help\"\n                      }}\n                      @format=\"large\"\n                      as |field|\n                    >\n                      <field.Checkbox />\n                    </form.Field>\n                  {{/if}}\n                {{/if}}\n              {{/if}}\n            </form.Section>\n    \n            <form.Actions>\n              <form.Submit />\n    \n              {{#unless (or @model.isNew @model.system)}}\n                <form.Button\n                  @label=\"discourse_ai.ai_persona.export\"\n                  @action={{this.exportPersona}}\n                  class=\"ai-persona-editor__export\"\n                />\n                <form.Button\n                  @action={{this.delete}}\n                  @label=\"discourse_ai.ai_persona.delete\"\n                  class=\"btn-danger\"\n                />\n              {{/unless}}\n            </form.Actions>\n          </Form>\n        </div>\n      \n    */\n    {\n      \"id\": \"AkaXQyvI\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@route\\\",\\\"@label\\\"],[\\\"adminPlugins.show.discourse-ai-personas\\\",\\\"discourse_ai.ai_persona.back\\\"]],null],[1,\\\"\\\\n    \\\"],[11,0],[24,0,\\\"ai-persona-editor\\\"],[4,[32,1],[[30,0,[\\\"updateAllGroups\\\"]],[30,1,[\\\"id\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[8,[32,2],null,[[\\\"@onSubmit\\\",\\\"@data\\\"],[[30,0,[\\\"save\\\"]],[30,0,[\\\"formData\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@disabled\\\",\\\"@format\\\"],[\\\"name\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.name\\\"],null],\\\"required|length:1,100\\\",[30,3,[\\\"system\\\"]],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,4,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[4]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@disabled\\\",\\\"@format\\\"],[\\\"description\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.description\\\"],null],\\\"required|length:1,100\\\",[30,3,[\\\"system\\\"]],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,5,[\\\"Textarea\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[5]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@disabled\\\",\\\"@format\\\"],[\\\"system_prompt\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.system_prompt\\\"],null],\\\"required|length:1,100000\\\",[30,3,[\\\"system\\\"]],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,6,[\\\"Textarea\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[6]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[32,4],null,[[\\\"@form\\\",\\\"@data\\\"],[[30,2],[30,3]]],null],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"default_llm_id\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.default_llm\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.default_llm_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,7,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[32,5],null,[[\\\"@value\\\",\\\"@llms\\\",\\\"@onChange\\\",\\\"@class\\\"],[[30,7,[\\\"value\\\"]],[30,8,[\\\"resultSetMeta\\\",\\\"llms\\\"]],[30,7,[\\\"set\\\"]],\\\"ai-persona-editor__llms\\\"]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[7]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\"],[\\\"allowed_group_ids\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.allowed_groups\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,9,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[32,6],null,[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\"],[[30,3,[\\\"allowed_group_ids\\\"]],[30,0,[\\\"allGroups\\\"]],[30,9,[\\\"set\\\"]]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[9]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"vision_enabled\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.vision_enabled\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.vision_enabled_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,10,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[10]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,3,[\\\"vision_enabled\\\"]],[[[1,\\\"          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@onSet\\\",\\\"@format\\\"],[\\\"vision_max_pixels\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.vision_max_pixels\\\"],null],[30,0,[\\\"onChangeMaxPixels\\\"]],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,11,[\\\"Select\\\"]],null,[[\\\"@includeNone\\\"],[false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"maxPixelValues\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[8,[30,12,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,13,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,13,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[13]],null],[1,\\\"            \\\"]],[12]]]]],[1,\\\"\\\\n          \\\"]],[11]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"max_context_posts\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.max_context_posts\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.max_context_posts_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,14,[\\\"Input\\\"]],[[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n        \\\"]],[14]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,3,[\\\"system\\\"]]],[[[1,\\\"          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@disabled\\\",\\\"@format\\\"],[\\\"temperature\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.temperature\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.temperature_help\\\"],null],[30,3,[\\\"system\\\"]],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,15,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n          \\\"]],[15]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@disabled\\\",\\\"@format\\\"],[\\\"top_p\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.top_p\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.top_p_help\\\"],null],[30,3,[\\\"system\\\"]],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,16,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n          \\\"]],[16]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[8,[30,2,[\\\"Section\\\"]],null,[[\\\"@title\\\",\\\"@subtitle\\\"],[[28,[32,3],[\\\"discourse_ai.ai_persona.examples.title\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.examples.examples_help\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,3,[\\\"system\\\"]]],[[[1,\\\"            \\\"],[8,[30,2,[\\\"Container\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,2,[\\\"Button\\\"]],[[24,0,\\\"ai-persona-editor__new_example\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[28,[32,7],[[30,0,[\\\"addExamplesPair\\\"]],[30,2],[30,3]],null],\\\"discourse_ai.ai_persona.examples.new\\\"]],null],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[32,8],[[30,3,[\\\"examples\\\",\\\"length\\\"]],0],null],[[[1,\\\"            \\\"],[8,[30,2,[\\\"Collection\\\"]],null,[[\\\"@name\\\"],[\\\"examples\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[32,9],null,[[\\\"@examplesCollection\\\",\\\"@exampleNumber\\\",\\\"@system\\\",\\\"@form\\\"],[[30,17],[30,18],[30,3,[\\\"system\\\"]],[30,2]]],null],[1,\\\"\\\\n            \\\"]],[17,18]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,2,[\\\"Section\\\"]],null,[[\\\"@title\\\"],[[28,[32,3],[\\\"discourse_ai.ai_persona.ai_tools\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\"],[\\\"tools\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.tools\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,19,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[32,10],null,[[\\\"@value\\\",\\\"@disabled\\\",\\\"@onChange\\\",\\\"@content\\\"],[[30,19,[\\\"value\\\"]],[30,3,[\\\"system\\\"]],[28,[32,7],[[30,0,[\\\"updateToolNames\\\"]],[30,2],[30,3]],null],[30,8,[\\\"resultSetMeta\\\",\\\"tools\\\"]]]],null],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[19]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[32,8],[[30,3,[\\\"tools\\\",\\\"length\\\"]],0],null],[[[1,\\\"            \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\"],[\\\"forcedTools\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.forced_tools\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,20,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[32,10],null,[[\\\"@value\\\",\\\"@disabled\\\",\\\"@onChange\\\",\\\"@content\\\"],[[30,20,[\\\"value\\\"]],[30,3,[\\\"system\\\"]],[30,20,[\\\"set\\\"]],[28,[30,0,[\\\"availableForcedTools\\\"]],[[30,3,[\\\"tools\\\"]]],null]]],null],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"]],[20]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[32,8],[[30,3,[\\\"forcedTools\\\",\\\"length\\\"]],0],null],[[[1,\\\"            \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\"],[\\\"forced_tool_count\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.forced_tool_strategy\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,21,[\\\"Select\\\"]],null,[[\\\"@includeNone\\\"],[false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"forcedToolStrategies\\\"]]],null]],null],null,[[[1,\\\"                  \\\"],[8,[30,22,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,23,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,23,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[23]],null],[1,\\\"              \\\"]],[22]]]]],[1,\\\"\\\\n            \\\"]],[21]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[32,8],[[30,3,[\\\"tools\\\",\\\"length\\\"]],0],null],[[[1,\\\"            \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"tool_details\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.tool_details\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.tool_details_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,24,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n            \\\"]],[24]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[32,11],null,[[\\\"@form\\\",\\\"@data\\\",\\\"@llms\\\",\\\"@allTools\\\"],[[30,2],[30,3],[30,8,[\\\"resultSetMeta\\\",\\\"llms\\\"]],[30,8,[\\\"resultSetMeta\\\",\\\"tools\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"siteSettings\\\",\\\"ai_embeddings_enabled\\\"]],[[[1,\\\"          \\\"],[8,[30,2,[\\\"Section\\\"]],null,[[\\\"@title\\\"],[[28,[32,3],[\\\"discourse_ai.rag.title\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\"],[\\\"rag_uploads\\\",[28,[32,3],[\\\"discourse_ai.rag.uploads.title\\\"],null],\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,25,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[32,12],null,[[\\\"@target\\\",\\\"@targetName\\\",\\\"@updateUploads\\\",\\\"@onRemove\\\",\\\"@allowImages\\\"],[[30,3],\\\"AiPersona\\\",[28,[32,7],[[30,0,[\\\"updateUploads\\\"]],[30,2]],null],[28,[32,7],[[30,0,[\\\"removeUpload\\\"]],[30,2],[30,3],[30,25,[\\\"value\\\"]]],null],[30,8,[\\\"resultSetMeta\\\",\\\"settings\\\",\\\"rag_images_enabled\\\"]]]],null],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"]],[25]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[32,13],null,[[\\\"@form\\\",\\\"@data\\\",\\\"@llms\\\",\\\"@allowImages\\\"],[[30,2],[30,3],[30,8,[\\\"resultSetMeta\\\",\\\"llms\\\"]],[30,8,[\\\"resultSetMeta\\\",\\\"settings\\\",\\\"rag_images_enabled\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"rag_conversation_chunks\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.rag_conversation_chunks\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.rag_conversation_chunks_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,26,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n              \\\"]],[26]]]]],[1,\\\"\\\\n\\\\n              \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"question_consolidator_llm_id\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.question_consolidator_llm\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.question_consolidator_llm_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,27,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[32,5],null,[[\\\"@value\\\",\\\"@llms\\\",\\\"@onChange\\\",\\\"@class\\\"],[[30,27,[\\\"value\\\"]],[30,8,[\\\"resultSetMeta\\\",\\\"llms\\\"]],[30,27,[\\\"set\\\"]],\\\"ai-persona-editor__llms\\\"]],null],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n              \\\"]],[27]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[8,[30,2,[\\\"Section\\\"]],null,[[\\\"@title\\\"],[[28,[32,3],[\\\"discourse_ai.ai_persona.ai_bot.title\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@onSet\\\"],[\\\"enabled\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.enabled\\\"],null],[28,[32,7],[[30,0,[\\\"toggleEnabled\\\"]],[30,3]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,28,[\\\"Toggle\\\"]],null,null,null],[1,\\\"\\\\n          \\\"]],[28]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@onSet\\\",\\\"@tooltip\\\"],[\\\"priority\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.priority\\\"],null],[28,[32,7],[[30,0,[\\\"togglePriority\\\"]],[30,3]],null],[28,[32,3],[\\\"discourse_ai.ai_persona.priority_help\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,29,[\\\"Toggle\\\"]],null,null,null],[1,\\\"\\\\n          \\\"]],[29]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,1,[\\\"isNew\\\"]],[[[1,\\\"            \\\"],[10,0],[12],[1,[28,[32,3],[\\\"discourse_ai.ai_persona.ai_bot.save_first\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,3,[\\\"default_llm_id\\\"]],[[[1,\\\"              \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\"],[\\\"force_default_llm\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.force_default_llm\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,30,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n              \\\"]],[30]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n            \\\"],[8,[30,2,[\\\"Container\\\"]],[[24,0,\\\"ai-persona-editor__ai_bot_user\\\"]],[[\\\"@title\\\",\\\"@tooltip\\\"],[[28,[32,3],[\\\"discourse_ai.ai_persona.user\\\"],null],[52,[51,[30,3,[\\\"user\\\"]]],[28,[32,3],[\\\"discourse_ai.ai_persona.create_user_help\\\"],null]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,3,[\\\"user\\\"]],[[[1,\\\"                \\\"],[10,3],[14,0,\\\"avatar\\\"],[15,6,[30,3,[\\\"user\\\",\\\"path\\\"]]],[15,\\\"data-user-card\\\",[30,3,[\\\"user\\\",\\\"username\\\"]]],[12],[1,\\\"\\\\n                  \\\"],[1,[28,[32,14],[[30,3,[\\\"user\\\",\\\"avatar_template\\\"]],\\\"small\\\"],null]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[8,[32,15],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"adminUser\\\",[30,0,[\\\"adminUser\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[1,[30,3,[\\\"user\\\",\\\"username\\\"]]],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[8,[30,2,[\\\"Button\\\"]],[[24,0,\\\"ai-persona-editor__create-user\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[28,[32,7],[[30,0,[\\\"createUser\\\"]],[30,2]],null],\\\"discourse_ai.ai_persona.create_user\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"            \\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,3,[\\\"user\\\"]],[[[1,\\\"              \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"allow_personal_messages\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.allow_personal_messages\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.allow_personal_messages_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,31,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n              \\\"]],[31]]]]],[1,\\\"\\\\n\\\\n              \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"allow_topic_mentions\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.allow_topic_mentions\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.allow_topic_mentions_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,32,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n              \\\"]],[32]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"chatPluginEnabled\\\"]],[[[1,\\\"                \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"allow_chat_direct_messages\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.allow_chat_direct_messages\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.allow_chat_direct_messages_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[30,33,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n                \\\"]],[33]]]]],[1,\\\"\\\\n\\\\n                \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"allow_chat_channel_mentions\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.allow_chat_channel_mentions\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.allow_chat_channel_mentions_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[30,34,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n                \\\"]],[34]]]]],[1,\\\"\\\\n\\\"]],[]],null]],[]],null]],[]]],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,2,[\\\"Actions\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,2,[\\\"Submit\\\"]],null,null,null],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[28,[32,16],[[30,1,[\\\"isNew\\\"]],[30,1,[\\\"system\\\"]]],null]],[[[1,\\\"            \\\"],[8,[30,2,[\\\"Button\\\"]],[[24,0,\\\"ai-persona-editor__export\\\"]],[[\\\"@label\\\",\\\"@action\\\"],[\\\"discourse_ai.ai_persona.export\\\",[30,0,[\\\"exportPersona\\\"]]]],null],[1,\\\"\\\\n            \\\"],[8,[30,2,[\\\"Button\\\"]],[[24,0,\\\"btn-danger\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"delete\\\"]],\\\"discourse_ai.ai_persona.delete\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[2,3]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@model\\\",\\\"form\\\",\\\"data\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"@personas\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"select\\\",\\\"pixelValue\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"exCollection\\\",\\\"exCollectionIdx\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"select\\\",\\\"fts\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-persona-editor.js\",\n      \"scope\": () => [_backButton.default, _didInsert.default, _form.default, _discourseI18n.i18n, _aiPersonaResponseFormatEditor.default, _aiLlmSelector.default, _groupChooser.default, _helper.fn, _truthHelpers.gt, _aiPersonaExample.default, _aiToolSelector.default, _aiPersonaToolOptions.default, _ragUploader.default, _ragOptionsFk.default, _boundAvatarTemplate.default, _routing.LinkTo, _truthHelpers.or],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = PersonaEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-persona-example\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"truth-helpers\", \"discourse/helpers/d-icon\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _truthHelpers, _dIcon, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPersonaCollapsableExample extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"collapsed\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #collapsed = (() => (dt7948.i(this, \"collapsed\"), void 0))();\n    get caretIcon() {\n      return this.collapsed ? \"angle-right\" : \"angle-down\";\n    }\n    toggleExample() {\n      this.collapsed = !this.collapsed;\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"toggleExample\", [_object.action]))();\n    deletePair() {\n      this.collapsed = true;\n      this.args.examplesCollection.remove(this.args.exampleNumber);\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"deletePair\", [_object.action]))();\n    get exampleTitle() {\n      return (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.examples.collapsable_title\", {\n        number: this.args.exampleNumber + 1\n      });\n    }\n    static #_4 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div role=\"button\" {{on \"click\" this.toggleExample}}>\n          <span>{{icon this.caretIcon}}</span>\n          {{this.exampleTitle}}\n        </div>\n        {{#unless this.collapsed}}\n          <@examplesCollection.Collection as |exPair pairIdx|>\n            <exPair.Field\n              @title={{i18n\n                (concat\n                  \"discourse_ai.ai_persona.examples.\"\n                  (if (eq pairIdx 0) \"user\" \"model\")\n                )\n              }}\n              @validation=\"required|length:1,5000\"\n              @disabled={{@system}}\n              as |field|\n            >\n              <field.Textarea />\n            </exPair.Field>\n          </@examplesCollection.Collection>\n    \n          {{#unless @system}}\n            <@form.Container>\n              <@form.Button\n                @action={{this.deletePair}}\n                @label=\"discourse_ai.ai_persona.examples.remove\"\n                class=\"ai-persona-editor__delete_example btn-danger\"\n              />\n            </@form.Container>\n          {{/unless}}\n        {{/unless}}\n      \n    */\n    {\n      \"id\": \"VT1ymzpg\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[11,0],[24,\\\"role\\\",\\\"button\\\"],[4,[32,0],[\\\"click\\\",[30,0,[\\\"toggleExample\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[10,1],[12],[1,[28,[32,1],[[30,0,[\\\"caretIcon\\\"]]],null]],[13],[1,\\\"\\\\n      \\\"],[1,[30,0,[\\\"exampleTitle\\\"]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"collapsed\\\"]]],[[[1,\\\"      \\\"],[8,[30,1,[\\\"Collection\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@title\\\",\\\"@validation\\\",\\\"@disabled\\\"],[[28,[32,2],[[28,[32,3],[\\\"discourse_ai.ai_persona.examples.\\\",[52,[28,[32,4],[[30,3],0],null],\\\"user\\\",\\\"model\\\"]],null]],null],\\\"required|length:1,5000\\\",[30,4]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,5,[\\\"Textarea\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[5]]]]],[1,\\\"\\\\n      \\\"]],[2,3]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,4]],[[[1,\\\"        \\\"],[8,[30,6,[\\\"Container\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,6,[\\\"Button\\\"]],[[24,0,\\\"ai-persona-editor__delete_example btn-danger\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"deletePair\\\"]],\\\"discourse_ai.ai_persona.examples.remove\\\"]],null],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"  \\\"]],[\\\"@examplesCollection\\\",\\\"exPair\\\",\\\"pairIdx\\\",\\\"@system\\\",\\\"field\\\",\\\"@form\\\"],false,[\\\"unless\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-persona-example.js\",\n      \"scope\": () => [_modifier.on, _dIcon.default, _discourseI18n.i18n, _helper.concat, _truthHelpers.eq],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPersonaCollapsableExample;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-persona-list-editor\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/routing\", \"@ember/service\", \"truth-helpers\", \"discourse/components/d-breadcrumbs-item\", \"discourse/components/d-button\", \"discourse/components/d-page-subheader\", \"discourse/components/d-select\", \"discourse/components/dropdown-menu\", \"discourse/components/filter-input\", \"discourse/helpers/avatar\", \"discourse/helpers/concat-class\", \"discourse/helpers/d-icon\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"admin/components/admin-config-area-empty-list\", \"float-kit/components/d-menu\", \"discourse/plugins/discourse-ai/discourse/admin/models/ai-persona\", \"discourse/plugins/discourse-ai/discourse/components/ai-persona-editor\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _routing, _service, _truthHelpers, _dBreadcrumbsItem, _dButton, _dPageSubheader, _dSelect, _dropdownMenu, _filterInput, _avatar, _concatClass, _dIcon, _ajax, _ajaxError, _discourseI18n, _adminConfigAreaEmptyList, _dMenu, _aiPersona, _aiPersonaEditor, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const LAYOUT_BUTTONS = [{\n    id: \"table\",\n    label: \"discourse_ai.layout.table\",\n    icon: \"discourse-table\"\n  }, {\n    id: \"card\",\n    label: \"discourse_ai.layout.card\",\n    icon: \"table\"\n  }];\n  class AiPersonaListEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"adminPluginNavManager\", [_service.service]))();\n    #adminPluginNavManager = (() => (dt7948.i(this, \"adminPluginNavManager\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"keyValueStore\", [_service.service]))();\n    #keyValueStore = (() => (dt7948.i(this, \"keyValueStore\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"capabilities\", [_service.service]))();\n    #capabilities = (() => (dt7948.i(this, \"capabilities\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"dialog\", [_service.service]))();\n    #dialog = (() => (dt7948.i(this, \"dialog\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"filterValue\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #filterValue = (() => (dt7948.i(this, \"filterValue\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"featureFilter\", [_tracking.tracked], function () {\n      return \"all\";\n    }))();\n    #featureFilter = (() => (dt7948.i(this, \"featureFilter\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"currentLayout\", [_tracking.tracked], function () {\n      return LAYOUT_BUTTONS[0];\n    }))();\n    #currentLayout = (() => (dt7948.i(this, \"currentLayout\"), void 0))();\n    constructor() {\n      super(...arguments);\n      const savedLayoutId = this.keyValueStore.get(\"ai-persona-list-layout\");\n      if (savedLayoutId) {\n        const found = LAYOUT_BUTTONS.find(b => b.id === savedLayoutId);\n        if (found) {\n          this.currentLayout = found;\n        }\n      }\n    }\n    get filteredPersonas() {\n      let personas = this.args.personas || [];\n      // Filter by feature if not \"all\"\n      if (this.featureFilter !== \"all\") {\n        personas = personas.filter(persona => (persona.features || []).some(feature => feature.module_name === this.featureFilter));\n      }\n      // Filter by search term if present\n      if (this.filterValue) {\n        const term = this.filterValue.toLowerCase();\n        personas = personas.filter(persona => {\n          const textMatches = persona.name?.toLowerCase().includes(term) || persona.description?.toLowerCase().includes(term);\n          const featureMatches = (persona.features || []).some(feature => feature.module_name?.toLowerCase().includes(term));\n          const llmMatches = persona.default_llm?.display_name?.toLowerCase().includes(term);\n          return textMatches || featureMatches || llmMatches;\n        });\n      }\n      return personas;\n    }\n    get featureFilterOptions() {\n      let features = [];\n      (this.args.personas || []).forEach(persona => {\n        (persona.features || []).forEach(feature => {\n          if (feature?.module_name && !features.includes(feature.module_name)) {\n            features.push(feature.module_name);\n          }\n        });\n      });\n      features.sort();\n      return [{\n        value: \"all\",\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.filters.all_features\")\n      }, ...features.map(name => ({\n        value: name,\n        label: (0, _discourseI18n.i18n)(`discourse_ai.features.${name}.name`)\n      }))];\n    }\n    async toggleEnabled(persona) {\n      const oldValue = persona.enabled;\n      const newValue = !oldValue;\n      try {\n        persona.set(\"enabled\", newValue);\n        await persona.save();\n      } catch (err) {\n        persona.set(\"enabled\", oldValue);\n        (0, _ajaxError.popupAjaxError)(err);\n      }\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"toggleEnabled\", [_object.action]))();\n    onNameFilterChange(event) {\n      this.filterValue = event.target?.value || \"\";\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"onNameFilterChange\", [_object.action]))();\n    onFeatureFilterChange(value) {\n      this.featureFilter = value;\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"onFeatureFilterChange\", [_object.action]))();\n    resetAndFocus() {\n      this.filterValue = \"\";\n      this.featureFilter = \"all\";\n      document.querySelector(\".admin-filter__input\").focus();\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"resetAndFocus\", [_object.action]))();\n    onRegisterApi(api) {\n      this.dMenu = api;\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"onRegisterApi\", [_object.action]))();\n    onLayoutSelect(layoutId) {\n      const found = LAYOUT_BUTTONS.find(b => b.id === layoutId);\n      if (found) {\n        this.currentLayout = found;\n        this.keyValueStore.set({\n          key: \"ai-persona-list-layout\",\n          value: layoutId\n        });\n      }\n      this.dMenu.close();\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"onLayoutSelect\", [_object.action]))();\n    importPersona() {\n      const fileInput = document.createElement(\"input\");\n      fileInput.type = \"file\";\n      fileInput.accept = \".json\";\n      fileInput.style.display = \"none\";\n      fileInput.onchange = event => this.handleFileSelect(event);\n      document.body.appendChild(fileInput);\n      fileInput.click();\n      document.body.removeChild(fileInput);\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"importPersona\", [_object.action]))();\n    handleFileSelect(event) {\n      const file = event.target.files[0];\n      if (!file) {\n        return;\n      }\n      const reader = new FileReader();\n      reader.onload = e => {\n        try {\n          const json = JSON.parse(e.target.result);\n          this.uploadPersona(json);\n        } catch {\n          this.dialog.alert((0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.import_error_not_json\"));\n        }\n      };\n      reader.readAsText(file);\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"handleFileSelect\", [_object.action]))();\n    uploadPersona(personaData) {\n      let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      let url = `/admin/plugins/discourse-ai/ai-personas/import.json`;\n      const payload = personaData;\n      if (force) {\n        payload.force = true;\n      }\n      return (0, _ajax.ajax)(url, {\n        type: \"POST\",\n        data: JSON.stringify(payload),\n        contentType: \"application/json\"\n      }).then(result => {\n        let persona = _aiPersona.default.create(result);\n        let existingPersona = this.args.personas.findBy(\"id\", persona.id);\n        if (existingPersona) {\n          this.args.personas.removeObject(existingPersona);\n        }\n        this.args.personas.insertAt(0, persona);\n      }).catch(error => {\n        if (error.jqXHR?.status === 422) {\n          this.dialog.confirm({\n            message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.import_error_conflict\", {\n              name: personaData.persona.name\n            }) + \"\\n\" + error.jqXHR.responseJSON?.errors?.join(\"\\n\"),\n            confirmButtonLabel: \"discourse_ai.ai_persona.overwrite\",\n            didConfirm: () => this.uploadPersona(personaData, true)\n          });\n        } else {\n          (0, _ajaxError.popupAjaxError)(error);\n        }\n      });\n    }\n    static #_16 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DBreadcrumbsItem\n          @path=\"/admin/plugins/{{this.adminPluginNavManager.currentPlugin.name}}/ai-personas\"\n          @label={{i18n \"discourse_ai.ai_persona.short_title\"}}\n        />\n        <section class=\"ai-persona-list-editor__current admin-detail\">\n          {{#if @currentPersona}}\n            <AiPersonaEditor @model={{@currentPersona}} @personas={{@personas}} />\n          {{else}}\n            <DPageSubheader\n              @titleLabel={{i18n \"discourse_ai.ai_persona.short_title\"}}\n              @descriptionLabel={{i18n\n                \"discourse_ai.ai_persona.persona_description\"\n              }}\n              @learnMoreUrl=\"https://meta.discourse.org/t/ai-bot-personas/306099\"\n            >\n              <:actions as |actions|>\n                <actions.Default\n                  @label=\"discourse_ai.ai_persona.import\"\n                  @action={{this.importPersona}}\n                  @icon=\"upload\"\n                  class=\"ai-persona-list-editor__import-button\"\n                />\n                <actions.Primary\n                  @label=\"discourse_ai.ai_persona.new\"\n                  @route=\"adminPlugins.show.discourse-ai-personas.new\"\n                  @icon=\"plus\"\n                  class=\"ai-persona-list-editor__new-button\"\n                />\n              </:actions>\n            </DPageSubheader>\n    \n            {{#if @personas}}\n              <div class=\"ai-persona-list-editor__controls\">\n                <FilterInput\n                  placeholder={{i18n \"discourse_ai.ai_persona.filters.text\"}}\n                  @filterAction={{this.onNameFilterChange}}\n                  @value={{this.filterValue}}\n                  class=\"admin-filter__input\"\n                  @icons={{hash left=\"magnifying-glass\"}}\n                />\n                <DSelect\n                  @value={{this.featureFilter}}\n                  @includeNone={{false}}\n                  @onChange={{this.onFeatureFilterChange}}\n                  as |select|\n                >\n                  {{#each this.featureFilterOptions as |option|}}\n                    <select.Option @value={{option.value}}>\n                      {{option.label}}\n                    </select.Option>\n                  {{/each}}\n                </DSelect>\n                {{#if this.capabilities.viewport.md}}\n                  <DMenu\n                    @modalForMobile={{true}}\n                    @autofocus={{true}}\n                    @identifier=\"persona-list-layout\"\n                    @onRegisterApi={{this.onRegisterApi}}\n                    @triggerClass=\"btn-default btn-icon\"\n                  >\n                    <:trigger>\n                      {{icon this.currentLayout.icon}}\n                    </:trigger>\n                    <:content>\n                      <DropdownMenu as |dropdown|>\n                        {{#each LAYOUT_BUTTONS as |button|}}\n                          <dropdown.item>\n                            <DButton\n                              @label={{button.label}}\n                              @icon={{button.icon}}\n                              class=\"btn-transparent\"\n                              @action={{fn this.onLayoutSelect button.id}}\n                            />\n                          </dropdown.item>\n                        {{/each}}\n                      </DropdownMenu>\n                    </:content>\n                  </DMenu>\n                {{/if}}\n              </div>\n            {{else}}\n              <AdminConfigAreaEmptyList\n                @ctaLabel=\"discourse_ai.ai_persona.new\"\n                @ctaRoute=\"adminPlugins.show.discourse-ai-personas.new\"\n                @ctaClass=\"ai-persona-list-editor__empty-new-button\"\n                @emptyLabel=\"discourse_ai.ai_persona.no_personas\"\n              />\n            {{/if}}\n    \n            {{#if this.filteredPersonas}}\n              <table\n                class={{concatClass\n                  \"content-list ai-persona-list-editor d-admin-table\"\n                  (concat \"--layout-\" this.currentLayout.id)\n                }}\n              >\n                <thead>\n                  <tr>\n                    <th>{{i18n \"discourse_ai.ai_persona.name\"}}</th>\n                    <th>{{i18n \"discourse_ai.llms.short_title\"}}</th>\n                    <th>{{i18n \"discourse_ai.features.short_title\"}}</th>\n                  </tr>\n                </thead>\n                <tbody>\n                  {{#each this.filteredPersonas as |persona|}}\n                    <tr\n                      data-persona-id={{persona.id}}\n                      class={{concatClass\n                        \"ai-persona-list__row d-admin-row__content\"\n                        (if persona.priority \"--priority\")\n                        (if persona.enabled \"--enabled\")\n                      }}\n                    >\n                      <td class=\"d-admin-row__overview\">\n                        <div class=\"ai-persona-list__name-with-description\">\n                          <h3 class=\"ai-persona-list__name\">\n                            {{#if persona.user}}\n                              {{avatar persona.user imageSize=\"tiny\"}}\n                            {{/if}}\n                            {{persona.name}}\n                          </h3>\n                          <div class=\"ai-persona-list__description\">\n                            {{persona.description}}\n                          </div>\n                        </div>\n                      </td>\n                      <td class=\"d-admin-row__llms\">\n                        {{#if persona.default_llm}}\n                          <span class=\"--card-label\">\n                            {{i18n \"discourse_ai.ai_persona.llms_list\"}}\n                          </span>\n                          <DButton\n                            class=\"btn-flat btn-small ai-persona-list__row-item-feature\"\n                            @translatedLabel={{persona.default_llm.display_name}}\n                            @route=\"adminPlugins.show.discourse-ai-llms.edit\"\n                            @routeModels={{persona.default_llm.id}}\n                          />\n                        {{/if}}\n                      </td>\n                      <td class=\"d-admin-row__features\">\n                        {{#if persona.features.length}}\n                          <span class=\"--card-label\">\n                            {{i18n\n                              \"discourse_ai.ai_persona.features_list\"\n                              count=persona.features.length\n                            }}\n                          </span>\n                          {{#each persona.features as |feature index|}}\n                            <span class=\"d-admin-row__row-feature-list\">\n                              {{#if (gt index 0)}}, {{/if}}\n                              <DButton\n                                class=\"btn-flat btn-small ai-persona-list__row-item-feature\"\n                                @translatedLabel={{i18n\n                                  (concat\n                                    \"discourse_ai.features.\"\n                                    feature.module_name\n                                    \".name\"\n                                  )\n                                }}\n                                @route=\"adminPlugins.show.discourse-ai-features.edit\"\n                                @routeModels={{feature.id}}\n                              />\n                            </span>\n                          {{/each}}\n                        {{/if}}\n                      </td>\n                      <td class=\"d-admin-row__controls\">\n                        <LinkTo\n                          @route=\"adminPlugins.show.discourse-ai-personas.edit\"\n                          @model={{persona}}\n                          class=\"btn btn-text btn-small\"\n                        >{{i18n \"discourse_ai.ai_persona.edit\"}} </LinkTo>\n                      </td>\n                    </tr>\n                  {{/each}}\n                </tbody>\n              </table>\n            {{else}}\n              <div class=\"ai-persona-list-editor__no-results\">\n    \n                <h3>{{i18n \"discourse_ai.ai_persona.filters.no_results\"}}</h3>\n    \n                <DButton\n                  @icon=\"arrow-rotate-left\"\n                  @label=\"discourse_ai.ai_persona.filters.reset\"\n                  @action={{this.resetAndFocus}}\n                  class=\"btn-default\"\n                />\n              </div>\n            {{/if}}\n          {{/if}}\n        </section>\n      \n    */\n    {\n      \"id\": \"YumSRZqm\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@path\\\",\\\"@label\\\"],[[29,[\\\"/admin/plugins/\\\",[30,0,[\\\"adminPluginNavManager\\\",\\\"currentPlugin\\\",\\\"name\\\"]],\\\"/ai-personas\\\"]],[28,[32,1],[\\\"discourse_ai.ai_persona.short_title\\\"],null]]],null],[1,\\\"\\\\n    \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-persona-list-editor__current admin-detail\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"        \\\"],[8,[32,2],null,[[\\\"@model\\\",\\\"@personas\\\"],[[30,1],[30,2]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[32,3],null,[[\\\"@titleLabel\\\",\\\"@descriptionLabel\\\",\\\"@learnMoreUrl\\\"],[[28,[32,1],[\\\"discourse_ai.ai_persona.short_title\\\"],null],[28,[32,1],[\\\"discourse_ai.ai_persona.persona_description\\\"],null],\\\"https://meta.discourse.org/t/ai-bot-personas/306099\\\"]],[[\\\"actions\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,3,[\\\"Default\\\"]],[[24,0,\\\"ai-persona-list-editor__import-button\\\"]],[[\\\"@label\\\",\\\"@action\\\",\\\"@icon\\\"],[\\\"discourse_ai.ai_persona.import\\\",[30,0,[\\\"importPersona\\\"]],\\\"upload\\\"]],null],[1,\\\"\\\\n            \\\"],[8,[30,3,[\\\"Primary\\\"]],[[24,0,\\\"ai-persona-list-editor__new-button\\\"]],[[\\\"@label\\\",\\\"@route\\\",\\\"@icon\\\"],[\\\"discourse_ai.ai_persona.new\\\",\\\"adminPlugins.show.discourse-ai-personas.new\\\",\\\"plus\\\"]],null],[1,\\\"\\\\n          \\\"]],[3]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,2],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"ai-persona-list-editor__controls\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[32,4],[[16,\\\"placeholder\\\",[28,[32,1],[\\\"discourse_ai.ai_persona.filters.text\\\"],null]],[24,0,\\\"admin-filter__input\\\"]],[[\\\"@filterAction\\\",\\\"@value\\\",\\\"@icons\\\"],[[30,0,[\\\"onNameFilterChange\\\"]],[30,0,[\\\"filterValue\\\"]],[28,[32,5],null,[[\\\"left\\\"],[\\\"magnifying-glass\\\"]]]]],null],[1,\\\"\\\\n            \\\"],[8,[32,6],null,[[\\\"@value\\\",\\\"@includeNone\\\",\\\"@onChange\\\"],[[30,0,[\\\"featureFilter\\\"]],false,[30,0,[\\\"onFeatureFilterChange\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"featureFilterOptions\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[8,[30,4,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,5,[\\\"value\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[1,[30,5,[\\\"label\\\"]]],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[5]],null],[1,\\\"            \\\"]],[4]]]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"capabilities\\\",\\\"viewport\\\",\\\"md\\\"]],[[[1,\\\"              \\\"],[8,[32,7],null,[[\\\"@modalForMobile\\\",\\\"@autofocus\\\",\\\"@identifier\\\",\\\"@onRegisterApi\\\",\\\"@triggerClass\\\"],[true,true,\\\"persona-list-layout\\\",[30,0,[\\\"onRegisterApi\\\"]],\\\"btn-default btn-icon\\\"]],[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n                  \\\"],[1,[28,[32,8],[[30,0,[\\\"currentLayout\\\",\\\"icon\\\"]]],null]],[1,\\\"\\\\n                \\\"]],[]],[[[1,\\\"\\\\n                  \\\"],[8,[32,9],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[32,10]],null]],null],null,[[[1,\\\"                      \\\"],[8,[30,6,[\\\"item\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[8,[32,11],[[24,0,\\\"btn-transparent\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[[30,7,[\\\"label\\\"]],[30,7,[\\\"icon\\\"]],[28,[32,12],[[30,0,[\\\"onLayoutSelect\\\"]],[30,7,[\\\"id\\\"]]],null]]],null],[1,\\\"\\\\n                      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[7]],null],[1,\\\"                  \\\"]],[6]]]]],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[32,13],null,[[\\\"@ctaLabel\\\",\\\"@ctaRoute\\\",\\\"@ctaClass\\\",\\\"@emptyLabel\\\"],[\\\"discourse_ai.ai_persona.new\\\",\\\"adminPlugins.show.discourse-ai-personas.new\\\",\\\"ai-persona-list-editor__empty-new-button\\\",\\\"discourse_ai.ai_persona.no_personas\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"filteredPersonas\\\"]],[[[1,\\\"          \\\"],[10,\\\"table\\\"],[15,0,[28,[32,14],[\\\"content-list ai-persona-list-editor d-admin-table\\\",[28,[32,15],[\\\"--layout-\\\",[30,0,[\\\"currentLayout\\\",\\\"id\\\"]]],null]],null]],[12],[1,\\\"\\\\n            \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.ai_persona.name\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.llms.short_title\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.features.short_title\\\"],null]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"filteredPersonas\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[10,\\\"tr\\\"],[15,\\\"data-persona-id\\\",[30,8,[\\\"id\\\"]]],[15,0,[28,[32,14],[\\\"ai-persona-list__row d-admin-row__content\\\",[52,[30,8,[\\\"priority\\\"]],\\\"--priority\\\"],[52,[30,8,[\\\"enabled\\\"]],\\\"--enabled\\\"]],null]],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__overview\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"ai-persona-list__name-with-description\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"h3\\\"],[14,0,\\\"ai-persona-list__name\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,8,[\\\"user\\\"]],[[[1,\\\"                          \\\"],[1,[28,[32,16],[[30,8,[\\\"user\\\"]]],[[\\\"imageSize\\\"],[\\\"tiny\\\"]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                        \\\"],[1,[30,8,[\\\"name\\\"]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"ai-persona-list__description\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[30,8,[\\\"description\\\"]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__llms\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,8,[\\\"default_llm\\\"]],[[[1,\\\"                      \\\"],[10,1],[14,0,\\\"--card-label\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_persona.llms_list\\\"],null]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[8,[32,11],[[24,0,\\\"btn-flat btn-small ai-persona-list__row-item-feature\\\"]],[[\\\"@translatedLabel\\\",\\\"@route\\\",\\\"@routeModels\\\"],[[30,8,[\\\"default_llm\\\",\\\"display_name\\\"]],\\\"adminPlugins.show.discourse-ai-llms.edit\\\",[30,8,[\\\"default_llm\\\",\\\"id\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__features\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,8,[\\\"features\\\",\\\"length\\\"]],[[[1,\\\"                      \\\"],[10,1],[14,0,\\\"--card-label\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_persona.features_list\\\"],[[\\\"count\\\"],[[30,8,[\\\"features\\\",\\\"length\\\"]]]]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,8,[\\\"features\\\"]]],null]],null],null,[[[1,\\\"                        \\\"],[10,1],[14,0,\\\"d-admin-row__row-feature-list\\\"],[12],[1,\\\"\\\\n                          \\\"],[41,[28,[32,17],[[30,10],0],null],[[[1,\\\", \\\"]],[]],null],[1,\\\"\\\\n                          \\\"],[8,[32,11],[[24,0,\\\"btn-flat btn-small ai-persona-list__row-item-feature\\\"]],[[\\\"@translatedLabel\\\",\\\"@route\\\",\\\"@routeModels\\\"],[[28,[32,1],[[28,[32,15],[\\\"discourse_ai.features.\\\",[30,9,[\\\"module_name\\\"]],\\\".name\\\"],null]],null],\\\"adminPlugins.show.discourse-ai-features.edit\\\",[30,9,[\\\"id\\\"]]]],null],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[9,10]],null]],[]],null],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__controls\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[32,18],[[24,0,\\\"btn btn-text btn-small\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"adminPlugins.show.discourse-ai-personas.edit\\\",[30,8]]],[[\\\"default\\\"],[[[[1,[28,[32,1],[\\\"discourse_ai.ai_persona.edit\\\"],null]],[1,\\\" \\\"]],[]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[8]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"ai-persona-list-editor__no-results\\\"],[12],[1,\\\"\\\\n\\\\n            \\\"],[10,\\\"h3\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.ai_persona.filters.no_results\\\"],null]],[13],[1,\\\"\\\\n\\\\n            \\\"],[8,[32,11],[[24,0,\\\"btn-default\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"arrow-rotate-left\\\",\\\"discourse_ai.ai_persona.filters.reset\\\",[30,0,[\\\"resetAndFocus\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@currentPersona\\\",\\\"@personas\\\",\\\"actions\\\",\\\"select\\\",\\\"option\\\",\\\"dropdown\\\",\\\"button\\\",\\\"persona\\\",\\\"feature\\\",\\\"index\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-persona-list-editor.js\",\n      \"scope\": () => [_dBreadcrumbsItem.default, _discourseI18n.i18n, _aiPersonaEditor.default, _dPageSubheader.default, _filterInput.default, _helper.hash, _dSelect.default, _dMenu.default, _dIcon.default, _dropdownMenu.default, LAYOUT_BUTTONS, _dButton.default, _helper.fn, _adminConfigAreaEmptyList.default, _concatClass.default, _helper.concat, _avatar.default, _truthHelpers.gt, _routing.LinkTo],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPersonaListEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-persona-llm-selector\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/runloop\", \"@ember/service\", \"discourse-i18n\", \"select-kit/components/dropdown-select-box\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _runloop, _service, _discourseI18n, _dropdownSelectBox, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const PERSONA_SELECTOR_KEY = \"ai_persona_selector_id\";\n  const LLM_SELECTOR_KEY = \"ai_llm_selector_id\";\n  class AiPersonaLlmSelector extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"keyValueStore\", [_service.service]))();\n    #keyValueStore = (() => (dt7948.i(this, \"keyValueStore\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"llm\", [_tracking.tracked]))();\n    #llm = (() => (dt7948.i(this, \"llm\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"allowLLMSelector\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #allowLLMSelector = (() => (dt7948.i(this, \"allowLLMSelector\"), void 0))();\n    constructor() {\n      super(...arguments);\n      if (this.botOptions?.length) {\n        this.#loadStoredPersona();\n        this.#loadStoredLlm();\n        (0, _runloop.next)(() => {\n          this.resetTargetRecipients();\n        });\n      }\n    }\n    get composer() {\n      return this.args?.outletArgs?.model;\n    }\n    get hasLlmSelector() {\n      return this.currentUser.ai_enabled_chat_bots.any(bot => !bot.is_persona);\n    }\n    get botOptions() {\n      if (!this.currentUser.ai_enabled_personas) {\n        return;\n      }\n      let enabledPersonas = this.currentUser.ai_enabled_personas;\n      enabledPersonas = enabledPersonas.filter(persona => persona.allow_personal_messages);\n      if (!this.hasLlmSelector) {\n        enabledPersonas = enabledPersonas.filter(persona => persona.username);\n      }\n      return enabledPersonas.map(persona => {\n        return {\n          id: persona.id,\n          name: persona.name,\n          description: persona.description\n        };\n      });\n    }\n    get filterable() {\n      return this.botOptions.length > 8;\n    }\n    get value() {\n      return this._value;\n    }\n    set value(newValue) {\n      this._value = newValue;\n      this.keyValueStore.setItem(PERSONA_SELECTOR_KEY, newValue);\n      this.args.setPersonaId(newValue);\n      this.setAllowLLMSelector();\n      this.resetTargetRecipients();\n    }\n    setAllowLLMSelector() {\n      if (!this.hasLlmSelector) {\n        this.allowLLMSelector = false;\n        return;\n      }\n      const persona = this.currentUser.ai_enabled_personas.find(innerPersona => innerPersona.id === this._value);\n      this.allowLLMSelector = !persona?.force_default_llm;\n    }\n    get currentLlm() {\n      return this.llm;\n    }\n    set currentLlm(newValue) {\n      this.llm = newValue;\n      this.keyValueStore.setItem(LLM_SELECTOR_KEY, newValue);\n      this.resetTargetRecipients();\n    }\n    resetTargetRecipients() {\n      if (this.allowLLMSelector) {\n        const botUsername = this.currentUser.ai_enabled_chat_bots.find(bot => bot.id === this.llm).username;\n        this.args.setTargetRecipient(botUsername);\n      } else {\n        const persona = this.currentUser.ai_enabled_personas.find(innerPersona => innerPersona.id === this._value);\n        this.args.setTargetRecipient(persona.username || \"\");\n      }\n    }\n    get llmOptions() {\n      const availableBots = this.currentUser.ai_enabled_chat_bots.filter(bot => !bot.is_persona).filter(Boolean);\n      return availableBots.map(bot => {\n        return {\n          id: bot.id,\n          name: bot.display_name\n        };\n      }).sort((a, b) => a.name.localeCompare(b.name));\n    }\n    get showLLMSelector() {\n      return this.allowLLMSelector && this.llmOptions.length > 1;\n    }\n    #getPersonaIdFromAttrs() {\n      const personaName = this.args?.personaName;\n      if (personaName) {\n        const persona = this.botOptions.find(p => p.name === personaName);\n        if (persona) {\n          return persona.id;\n        }\n      }\n    }\n    #getLlmIdFromAttrs() {\n      const llmName = this.args?.llmName;\n      if (llmName) {\n        const llm = this.llmOptions.find(l => l.name === llmName);\n        if (llm) {\n          return llm.id;\n        }\n      }\n    }\n    #loadStoredPersona() {\n      let personaId = this.#getPersonaIdFromAttrs() || this.keyValueStore.getItem(PERSONA_SELECTOR_KEY);\n      this._value = this.botOptions[0].id;\n      if (personaId) {\n        personaId = parseInt(personaId, 10);\n        if (this.botOptions.any(bot => bot.id === personaId)) {\n          this._value = personaId;\n        }\n      }\n      this.args.setPersonaId(this._value);\n    }\n    #loadStoredLlm() {\n      this.setAllowLLMSelector();\n      if (this.hasLlmSelector) {\n        let llmId = this.#getLlmIdFromAttrs() || this.keyValueStore.getItem(LLM_SELECTOR_KEY);\n        if (llmId) {\n          llmId = parseInt(llmId, 10);\n        }\n        const llmOption = this.llmOptions.find(innerLlmOption => innerLlmOption.id === llmId) || this.llmOptions[0];\n        if (llmOption) {\n          llmId = llmOption.id;\n        } else {\n          llmId = \"\";\n        }\n        if (llmId) {\n          (0, _runloop.next)(() => {\n            this.currentLlm = llmId;\n          });\n        }\n      }\n    }\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"persona-llm-selector\">\n          <div class=\"persona-llm-selector__selection-wrapper gpt-persona\">\n            {{#if @showLabels}}\n              <label>{{i18n \"discourse_ai.ai_bot.persona\"}}</label>\n            {{/if}}\n            <DropdownSelectBox\n              class=\"persona-llm-selector__persona-dropdown\"\n              @value={{this.value}}\n              @content={{this.botOptions}}\n              @options={{hash\n                icon=(if @showLabels \"angle-down\" \"robot\")\n                filterable=this.filterable\n              }}\n            />\n          </div>\n          {{#if this.showLLMSelector}}\n            <div class=\"persona-llm-selector__selection-wrapper llm-selector\">\n              {{#if @showLabels}}\n                <label>{{i18n \"discourse_ai.ai_bot.llm\"}}</label>\n              {{/if}}\n              <DropdownSelectBox\n                class=\"persona-llm-selector__llm-dropdown\"\n                @value={{this.currentLlm}}\n                @content={{this.llmOptions}}\n                @options={{hash icon=(if @showLabels \"angle-down\" \"globe\")}}\n              />\n            </div>\n          {{/if}}\n        </div>\n      \n    */\n    {\n      \"id\": \"38qykDxh\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"persona-llm-selector\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"persona-llm-selector__selection-wrapper gpt-persona\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,0],[\\\"discourse_ai.ai_bot.persona\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[8,[32,1],[[24,0,\\\"persona-llm-selector__persona-dropdown\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@options\\\"],[[30,0,[\\\"value\\\"]],[30,0,[\\\"botOptions\\\"]],[28,[32,2],null,[[\\\"icon\\\",\\\"filterable\\\"],[[52,[30,1],\\\"angle-down\\\",\\\"robot\\\"],[30,0,[\\\"filterable\\\"]]]]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showLLMSelector\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"persona-llm-selector__selection-wrapper llm-selector\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"            \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,0],[\\\"discourse_ai.ai_bot.llm\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[8,[32,1],[[24,0,\\\"persona-llm-selector__llm-dropdown\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@options\\\"],[[30,0,[\\\"currentLlm\\\"]],[30,0,[\\\"llmOptions\\\"]],[28,[32,2],null,[[\\\"icon\\\"],[[52,[30,1],\\\"angle-down\\\",\\\"globe\\\"]]]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@showLabels\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-persona-llm-selector.js\",\n      \"scope\": () => [_discourseI18n.i18n, _dropdownSelectBox.default, _helper.hash],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPersonaLlmSelector;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-persona-tool-options\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"truth-helpers\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-llm-selector\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _truthHelpers, _discourseI18n, _aiLlmSelector, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPersonaToolOptions extends _component.default {\n    get showToolOptions() {\n      const allTools = this.args.allTools;\n      if (!allTools || !this.args.data.tools) {\n        return false;\n      }\n      return this.args.data?.tools.any(tool => allTools.findBy(\"id\", tool)?.options);\n    }\n    get toolsMetadata() {\n      const metadata = {};\n      this.args.allTools.map(t => {\n        metadata[t.id] = {\n          name: t.name,\n          ...t?.options\n        };\n      });\n      return metadata;\n    }\n    formObjectKeys(toolOptions) {\n      return toolOptions ? Object.keys(toolOptions) : [];\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"formObjectKeys\", [_object.action]))();\n    toolOptionKeys(toolId) {\n      // this is important, some tools may not have all options defined (for example if a tool option is added)\n      const metadata = this.toolsMetadata[toolId];\n      if (!metadata) {\n        return [];\n      }\n      // a bit more verbose for clarity of our selection\n      const availableOptions = Object.keys(metadata).filter(k => k !== \"name\");\n      return availableOptions;\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"toolOptionKeys\", [_object.action]))();\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showToolOptions}}\n          <@form.Container\n            @title={{i18n \"discourse_ai.ai_persona.tool_options\"}}\n            @direction=\"column\"\n            @format=\"full\"\n          >\n            <@form.Object\n              @name=\"toolOptions\"\n              @title={{i18n \"discourse_ai.ai_persona.tool_options\"}}\n              as |toolObj optsPerTool|\n            >\n              {{#each (this.formObjectKeys optsPerTool) as |toolId|}}\n                <div class=\"ai-persona-editor__tool-options\">\n                  {{#let (get this.toolsMetadata toolId) as |toolMeta|}}\n                    <div class=\"ai-persona-editor__tool-options-name\">\n                      {{toolMeta.name}}\n                    </div>\n                    <toolObj.Object @name={{toolId}} as |optionsObj|>\n                      {{#each (this.toolOptionKeys toolId) as |optionName|}}\n                        {{#let (get toolMeta optionName) as |optionMeta|}}\n                          <optionsObj.Field\n                            @name={{optionName}}\n                            @title={{optionMeta.name}}\n                            @helpText={{optionMeta.description}}\n                            @format=\"full\"\n                            as |field|\n                          >\n                            {{#if (eq optionMeta.type \"enum\")}}\n                              <field.Select @includeNone={{false}} as |select|>\n                                {{#each optionMeta.values as |v|}}\n                                  <select.Option @value={{v}}>{{v}}</select.Option>\n                                {{/each}}\n                              </field.Select>\n                            {{else if (eq optionMeta.type \"llm\")}}\n                              <field.Custom>\n                                <AiLlmSelector\n                                  @value={{field.value}}\n                                  @llms={{@llms}}\n                                  @onChange={{field.set}}\n                                  @class=\"ai-persona-tool-option-editor__llms\"\n                                />\n                              </field.Custom>\n                            {{else if (eq optionMeta.type \"boolean\")}}\n                              <field.Checkbox />\n                            {{else}}\n                              <field.Input />\n                            {{/if}}\n                          </optionsObj.Field>\n                        {{/let}}\n                      {{/each}}\n                    </toolObj.Object>\n                  {{/let}}\n                </div>\n              {{/each}}\n            </@form.Object>\n          </@form.Container>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"FyUiSBtg\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showToolOptions\\\"]],[[[1,\\\"      \\\"],[8,[30,1,[\\\"Container\\\"]],null,[[\\\"@title\\\",\\\"@direction\\\",\\\"@format\\\"],[[28,[32,0],[\\\"discourse_ai.ai_persona.tool_options\\\"],null],\\\"column\\\",\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,1,[\\\"Object\\\"]],null,[[\\\"@name\\\",\\\"@title\\\"],[\\\"toolOptions\\\",[28,[32,0],[\\\"discourse_ai.ai_persona.tool_options\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[28,[30,0,[\\\"formObjectKeys\\\"]],[[30,3]],null]],null]],null],null,[[[1,\\\"            \\\"],[10,0],[14,0,\\\"ai-persona-editor__tool-options\\\"],[12],[1,\\\"\\\\n\\\"],[44,[[28,[32,1],[[30,0,[\\\"toolsMetadata\\\"]],[30,4]],null]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"ai-persona-editor__tool-options-name\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[30,5,[\\\"name\\\"]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[8,[30,2,[\\\"Object\\\"]],null,[[\\\"@name\\\"],[[30,4]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[28,[30,0,[\\\"toolOptionKeys\\\"]],[[30,4]],null]],null]],null],null,[[[44,[[28,[32,1],[[30,5],[30,7]],null]],[[[1,\\\"                      \\\"],[8,[30,6,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@helpText\\\",\\\"@format\\\"],[[30,7],[30,8,[\\\"name\\\"]],[30,8,[\\\"description\\\"]],\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[32,2],[[30,8,[\\\"type\\\"]],\\\"enum\\\"],null],[[[1,\\\"                          \\\"],[8,[30,9,[\\\"Select\\\"]],null,[[\\\"@includeNone\\\"],[false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,8,[\\\"values\\\"]]],null]],null],null,[[[1,\\\"                              \\\"],[8,[30,10,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,11]]],[[\\\"default\\\"],[[[[1,[30,11]]],[]]]]],[1,\\\"\\\\n\\\"]],[11]],null],[1,\\\"                          \\\"]],[10]]]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,2],[[30,8,[\\\"type\\\"]],\\\"llm\\\"],null],[[[1,\\\"                          \\\"],[8,[30,9,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                            \\\"],[8,[32,3],null,[[\\\"@value\\\",\\\"@llms\\\",\\\"@onChange\\\",\\\"@class\\\"],[[30,9,[\\\"value\\\"]],[30,12],[30,9,[\\\"set\\\"]],\\\"ai-persona-tool-option-editor__llms\\\"]],null],[1,\\\"\\\\n                          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,2],[[30,8,[\\\"type\\\"]],\\\"boolean\\\"],null],[[[1,\\\"                          \\\"],[8,[30,9,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                          \\\"],[8,[30,9,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n                        \\\"]],[]]]],[]]]],[]]],[1,\\\"                      \\\"]],[9]]]]],[1,\\\"\\\\n\\\"]],[8]]]],[7]],null],[1,\\\"                \\\"]],[6]]]]],[1,\\\"\\\\n\\\"]],[5]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"        \\\"]],[2,3]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@form\\\",\\\"toolObj\\\",\\\"optsPerTool\\\",\\\"toolId\\\",\\\"toolMeta\\\",\\\"optionsObj\\\",\\\"optionName\\\",\\\"optionMeta\\\",\\\"field\\\",\\\"select\\\",\\\"v\\\",\\\"@llms\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\",\\\"let\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-persona-tool-options.js\",\n      \"scope\": () => [_discourseI18n.i18n, _object.get, _truthHelpers.eq, _aiLlmSelector.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPersonaToolOptions;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-post-helper-menu\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/render-modifiers/modifiers/will-destroy\", \"@ember/service\", \"ember-modifier\", \"truth-helpers\", \"discourse/components/cook-text\", \"discourse/components/d-button\", \"discourse/components/fast-edit\", \"discourse/components/modal/fast-edit\", \"discourse/helpers/concat-class\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/decorators\", \"discourse/lib/text\", \"discourse/lib/utilities\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-helper-loading\", \"discourse/plugins/discourse-ai/discourse/components/ai-helper-options-list\", \"discourse/plugins/discourse-ai/discourse/lib/smooth-streamer\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _willDestroy, _service, _emberModifier, _truthHelpers, _cookText, _dButton, _fastEdit, _fastEdit2, _concatClass, _ajax, _ajaxError, _decorators, _text, _utilities, _discourseI18n, _aiHelperLoading, _aiHelperOptionsList, _smoothStreamer3, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPostHelperMenu extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"messageBus\", [_service.service]))();\n    #messageBus = (() => (dt7948.i(this, \"messageBus\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"menu\", [_service.service]))();\n    #menu = (() => (dt7948.i(this, \"menu\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"tooltip\", [_service.service]))();\n    #tooltip = (() => (dt7948.i(this, \"tooltip\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"menuState\", [_tracking.tracked], function () {\n      return this.MENU_STATES.options;\n    }))();\n    #menuState = (() => (dt7948.i(this, \"menuState\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"suggestion\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #suggestion = (() => (dt7948.i(this, \"suggestion\"), void 0))();\n    static #_11 = (() => dt7948.g(this.prototype, \"customPromptValue\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #customPromptValue = (() => (dt7948.i(this, \"customPromptValue\"), void 0))();\n    static #_12 = (() => dt7948.g(this.prototype, \"copyButtonIcon\", [_tracking.tracked], function () {\n      return \"copy\";\n    }))();\n    #copyButtonIcon = (() => (dt7948.i(this, \"copyButtonIcon\"), void 0))();\n    static #_13 = (() => dt7948.g(this.prototype, \"copyButtonLabel\", [_tracking.tracked], function () {\n      return \"discourse_ai.ai_helper.post_options_menu.copy\";\n    }))();\n    #copyButtonLabel = (() => (dt7948.i(this, \"copyButtonLabel\"), void 0))();\n    static #_14 = (() => dt7948.g(this.prototype, \"showFastEdit\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showFastEdit = (() => (dt7948.i(this, \"showFastEdit\"), void 0))();\n    static #_15 = (() => dt7948.g(this.prototype, \"showAiButtons\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #showAiButtons = (() => (dt7948.i(this, \"showAiButtons\"), void 0))();\n    static #_16 = (() => dt7948.g(this.prototype, \"streaming\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #streaming = (() => (dt7948.i(this, \"streaming\"), void 0))();\n    static #_17 = (() => dt7948.g(this.prototype, \"lastSelectedOption\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #lastSelectedOption = (() => (dt7948.i(this, \"lastSelectedOption\"), void 0))();\n    static #_18 = (() => dt7948.g(this.prototype, \"isSavingFootnote\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isSavingFootnote = (() => (dt7948.i(this, \"isSavingFootnote\"), void 0))();\n    static #_19 = (() => dt7948.g(this.prototype, \"supportsAddFootnote\", [_tracking.tracked], function () {\n      return this.args.data.supportsFastEdit;\n    }))();\n    #supportsAddFootnote = (() => (dt7948.i(this, \"supportsAddFootnote\"), void 0))();\n    static #_20 = (() => dt7948.g(this.prototype, \"smoothStreamer\", [_tracking.tracked], function () {\n      return new _smoothStreamer3.default(() => this.suggestion, newValue => this.suggestion = newValue);\n    }))();\n    #smoothStreamer = (() => (dt7948.i(this, \"smoothStreamer\"), void 0))();\n    MENU_STATES = {\n      options: \"OPTIONS\",\n      loading: \"LOADING\",\n      result: \"RESULT\"\n    };\n    showFootnoteTooltip = (() => (0, _emberModifier.modifier)(element => {\n      if (this.supportsAddFootnote || this.streaming) {\n        return;\n      }\n      const instance = this.tooltip.register(element, {\n        identifier: \"cannot-add-footnote-tooltip\",\n        content: (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.post_options_menu.footnote_disabled\"),\n        placement: \"top\",\n        triggers: \"hover\"\n      });\n      return () => {\n        instance.destroy();\n      };\n    }))();\n    static #_21 = (() => dt7948.g(this.prototype, \"_activeAiRequest\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #_activeAiRequest = (() => (dt7948.i(this, \"_activeAiRequest\"), void 0))();\n    get footnoteDisabled() {\n      return this.streaming || !this.supportsAddFootnote;\n    }\n    get helperOptions() {\n      let prompts = this.currentUser?.ai_helper_prompts;\n      prompts = prompts.filter(item => item.location.includes(\"post\"));\n      // Find the custom_prompt object and move it to the beginning of the array\n      const customPromptIndex = prompts.findIndex(p => p.name === \"custom_prompt\");\n      if (customPromptIndex !== -1) {\n        const customPrompt = prompts.splice(customPromptIndex, 1)[0];\n        prompts.unshift(customPrompt);\n      }\n      if (!this._showUserCustomPrompts()) {\n        prompts = prompts.filter(p => p.name !== \"custom_prompt\");\n      }\n      if (!this.args.data.canEditPost) {\n        prompts = prompts.filter(p => p.name !== \"proofread\");\n      }\n      return prompts;\n    }\n    get highlightedTextToggleIcon() {\n      if (this.showHighlightedText) {\n        return \"angle-double-left\";\n      } else {\n        return \"angle-double-right\";\n      }\n    }\n    get allowInsertFootnote() {\n      const siteSettings = this.siteSettings;\n      const canEditPost = this.args.data.canEditPost;\n      if (!siteSettings?.enable_markdown_footnotes || !siteSettings?.display_footnotes_inline || !canEditPost) {\n        return false;\n      }\n      return this.lastSelectedOption?.name === \"explain\";\n    }\n    _showUserCustomPrompts() {\n      return this.currentUser?.can_use_custom_prompts;\n    }\n    _sanitizeForFootnote(text) {\n      // Remove line breaks (line-breaks breaks the inline footnote display)\n      text = text.replace(/[\\r\\n]+/g, \" \");\n      // Remove headings (headings don't work in inline footnotes)\n      text = text.replace(/^(#+)\\s+/gm, \"\");\n      // Trim excess space\n      text = text.trim();\n      return (0, _text.sanitize)(text);\n    }\n    set progressChannel(value) {\n      if (this._progressChannel) {\n        this.unsubscribe();\n      }\n      this._progressChannel = value;\n      this.subscribe();\n    }\n    subscribe() {\n      this.messageBus.subscribe(this._progressChannel, this._updateResult, 0);\n    }\n    unsubscribe() {\n      if (!this._progressChannel) {\n        return;\n      }\n      this.messageBus.unsubscribe(this._progressChannel, this._updateResult);\n      this._progressChannel = null;\n    }\n    static #_22 = (() => dt7948.n(this.prototype, \"unsubscribe\", [_decorators.bind]))();\n    async _updateResult(result) {\n      this.streaming = !result.done;\n      await this.smoothStreamer.updateResult(result, \"result\");\n    }\n    static #_23 = (() => dt7948.n(this.prototype, \"_updateResult\", [_decorators.bind]))();\n    toggleHighlightedTextPreview() {\n      this.showHighlightedText = !this.showHighlightedText;\n    }\n    static #_24 = (() => dt7948.n(this.prototype, \"toggleHighlightedTextPreview\", [_object.action]))();\n    async performAiSuggestion(option) {\n      this.menuState = this.MENU_STATES.loading;\n      this.lastSelectedOption = option;\n      const streamableOptions = [\"explain\", \"translate\", \"custom_prompt\"];\n      try {\n        if (streamableOptions.includes(option.name)) {\n          const streamedResult = await this._handleStreamedResult(option);\n          this.progressChannel = streamedResult.progress_channel;\n          return;\n        } else {\n          this._activeAiRequest = (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest\", {\n            method: \"POST\",\n            data: {\n              mode: option.name,\n              text: this.args.data.quoteState.buffer,\n              custom_prompt: this.customPromptValue\n            }\n          });\n        }\n        this._activeAiRequest.then(_ref => {\n          let {\n            suggestions\n          } = _ref;\n          this.suggestion = suggestions[0].trim();\n          if (option.name === \"proofread\") {\n            return this._handleProofreadOption();\n          }\n        }).finally(() => {\n          this.loading = false;\n          this.menuState = this.MENU_STATES.result;\n        });\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      }\n      return this._activeAiRequest;\n    }\n    static #_25 = (() => dt7948.n(this.prototype, \"performAiSuggestion\", [_object.action]))();\n    _handleStreamedResult(option) {\n      this.menuState = this.MENU_STATES.result;\n      const menu = this.menu.getByIdentifier(\"post-text-selection-toolbar\");\n      if (menu) {\n        menu.options.placement = \"bottom\";\n      }\n      const fetchUrl = `/discourse-ai/ai-helper/stream_suggestion`;\n      this._activeAiRequest = (0, _ajax.ajax)(fetchUrl, {\n        method: \"POST\",\n        data: {\n          location: \"post\",\n          mode: option.name,\n          text: this.args.data.quoteState.buffer,\n          post_id: this.args.data.quoteState.postId,\n          custom_prompt: this.customPromptValue,\n          client_id: this.messageBus.clientId\n        }\n      });\n      return this._activeAiRequest;\n    }\n    _handleProofreadOption() {\n      this.showAiButtons = false;\n      if (this.site.desktopView) {\n        this.showFastEdit = true;\n        return;\n      } else {\n        return this.modal.show(_fastEdit2.default, {\n          model: {\n            initialValue: this.args.data.quoteState.buffer,\n            newValue: this.suggestion,\n            post: this.args.data.post,\n            close: this.closeFastEdit\n          }\n        });\n      }\n    }\n    cancelAiAction() {\n      if (this._activeAiRequest) {\n        this._activeAiRequest.abort();\n        this._activeAiRequest = null;\n        this.loading = false;\n        this.menuState = this.MENU_STATES.options;\n      }\n    }\n    static #_26 = (() => dt7948.n(this.prototype, \"cancelAiAction\", [_object.action]))();\n    copySuggestion() {\n      if (this.suggestion?.length > 0) {\n        (0, _utilities.clipboardCopy)(this.suggestion);\n        this.copyButtonIcon = \"check\";\n        this.copyButtonLabel = \"discourse_ai.ai_helper.post_options_menu.copied\";\n        setTimeout(() => {\n          this.copyButtonIcon = \"copy\";\n          this.copyButtonLabel = \"discourse_ai.ai_helper.post_options_menu.copy\";\n        }, 3500);\n      }\n    }\n    static #_27 = (() => dt7948.n(this.prototype, \"copySuggestion\", [_object.action]))();\n    closeMenu() {\n      // reset state and close\n      this.suggestion = \"\";\n      this.customPromptValue = \"\";\n      return this.args.close();\n    }\n    static #_28 = (() => dt7948.n(this.prototype, \"closeMenu\", [_object.action]))();\n    async closeFastEdit() {\n      this.showFastEdit = false;\n      await this.args.data.hideToolbar();\n    }\n    static #_29 = (() => dt7948.n(this.prototype, \"closeFastEdit\", [_object.action]))();\n    async insertFootnote() {\n      this.isSavingFootnote = true;\n      if (this.allowInsertFootnote) {\n        try {\n          const result = await (0, _ajax.ajax)(`/posts/${this.args.data.post.id}`);\n          const sanitizedSuggestion = this._sanitizeForFootnote(this.suggestion);\n          const credits = (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.post_options_menu.footnote_credits\");\n          const withFootnote = `${this.args.data.quoteState.buffer} ^[${sanitizedSuggestion} (${credits})]`;\n          const newRaw = result.raw.replace(this.args.data.quoteState.buffer, withFootnote);\n          await this.args.data.post.save({\n            raw: newRaw\n          });\n        } catch (error) {\n          (0, _ajaxError.popupAjaxError)(error);\n        } finally {\n          this.isSavingFootnote = false;\n          await this.closeMenu();\n        }\n      }\n    }\n    static #_30 = (() => dt7948.n(this.prototype, \"insertFootnote\", [_object.action]))();\n    static #_31 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if\n          (and this.site.mobileView (eq this.menuState this.MENU_STATES.options))\n        }}\n          <div class=\"ai-post-helper-menu__selected-text\">\n            {{@data.quoteState.buffer}}\n          </div>\n        {{/if}}\n    \n        {{#if this.showAiButtons}}\n          <div class=\"ai-post-helper\">\n            {{#if (eq this.menuState this.MENU_STATES.options)}}\n              <AiHelperOptionsList\n                @options={{this.helperOptions}}\n                @customPromptValue={{this.customPromptValue}}\n                @performAction={{this.performAiSuggestion}}\n                @shortcutVisible={{false}}\n              />\n            {{else if (eq this.menuState this.MENU_STATES.loading)}}\n              <AiHelperLoading @cancel={{this.cancelAiAction}} />\n            {{else if (eq this.menuState this.MENU_STATES.result)}}\n              <div\n                class=\"ai-post-helper__suggestion\"\n                {{willDestroy this.unsubscribe}}\n              >\n                {{#if this.suggestion}}\n                  <div\n                    class={{concatClass\n                      (if this.smoothStreamer.isStreaming \"streaming\")\n                      \"streamable-content\"\n                      \"ai-post-helper__suggestion__text\"\n                    }}\n                    dir=\"auto\"\n                  >\n                    <CookText\n                      @rawText={{this.smoothStreamer.renderedText}}\n                      class=\"cooked\"\n                    />\n                  </div>\n                  <div class=\"ai-post-helper__suggestion__buttons\">\n                    <DButton\n                      @icon=\"xmark\"\n                      @label=\"discourse_ai.ai_helper.post_options_menu.cancel\"\n                      @action={{this.cancelAiAction}}\n                      class=\"btn-flat ai-post-helper__suggestion__cancel\"\n                    />\n                    <DButton\n                      @icon={{this.copyButtonIcon}}\n                      @label={{this.copyButtonLabel}}\n                      @action={{this.copySuggestion}}\n                      @disabled={{this.streaming}}\n                      class=\"btn-flat ai-post-helper__suggestion__copy\"\n                    />\n                    {{#if this.allowInsertFootnote}}\n                      <DButton\n                        @icon=\"asterisk\"\n                        @label=\"discourse_ai.ai_helper.post_options_menu.insert_footnote\"\n                        @action={{this.insertFootnote}}\n                        @isLoading={{this.isSavingFootnote}}\n                        @disabled={{this.footnoteDisabled}}\n                        class=\"btn-flat ai-post-helper__suggestion__insert-footnote\"\n                        {{this.showFootnoteTooltip}}\n                      />\n                    {{/if}}\n                  </div>\n                {{else}}\n                  <AiHelperLoading @cancel={{this.cancelAiAction}} />\n                {{/if}}\n              </div>\n            {{/if}}\n          </div>\n        {{/if}}\n    \n        {{#if this.showFastEdit}}\n          <div class=\"ai-post-helper__fast-edit\">\n            <FastEdit\n              @initialValue={{@data.quoteState.buffer}}\n              @newValue={{this.suggestion}}\n              @post={{@data.post}}\n              @close={{this.closeFastEdit}}\n            />\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"uIh/QidT\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[28,[32,0],[[30,0,[\\\"site\\\",\\\"mobileView\\\"]],[28,[32,1],[[30,0,[\\\"menuState\\\"]],[30,0,[\\\"MENU_STATES\\\",\\\"options\\\"]]],null]],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-post-helper-menu__selected-text\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[30,1,[\\\"quoteState\\\",\\\"buffer\\\"]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showAiButtons\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-post-helper\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[32,1],[[30,0,[\\\"menuState\\\"]],[30,0,[\\\"MENU_STATES\\\",\\\"options\\\"]]],null],[[[1,\\\"          \\\"],[8,[32,2],null,[[\\\"@options\\\",\\\"@customPromptValue\\\",\\\"@performAction\\\",\\\"@shortcutVisible\\\"],[[30,0,[\\\"helperOptions\\\"]],[30,0,[\\\"customPromptValue\\\"]],[30,0,[\\\"performAiSuggestion\\\"]],false]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,1],[[30,0,[\\\"menuState\\\"]],[30,0,[\\\"MENU_STATES\\\",\\\"loading\\\"]]],null],[[[1,\\\"          \\\"],[8,[32,3],null,[[\\\"@cancel\\\"],[[30,0,[\\\"cancelAiAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,1],[[30,0,[\\\"menuState\\\"]],[30,0,[\\\"MENU_STATES\\\",\\\"result\\\"]]],null],[[[1,\\\"          \\\"],[11,0],[24,0,\\\"ai-post-helper__suggestion\\\"],[4,[32,4],[[30,0,[\\\"unsubscribe\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"suggestion\\\"]],[[[1,\\\"              \\\"],[10,0],[15,0,[28,[32,5],[[52,[30,0,[\\\"smoothStreamer\\\",\\\"isStreaming\\\"]],\\\"streaming\\\"],\\\"streamable-content\\\",\\\"ai-post-helper__suggestion__text\\\"],null]],[14,\\\"dir\\\",\\\"auto\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[32,6],[[24,0,\\\"cooked\\\"]],[[\\\"@rawText\\\"],[[30,0,[\\\"smoothStreamer\\\",\\\"renderedText\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"ai-post-helper__suggestion__buttons\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[32,7],[[24,0,\\\"btn-flat ai-post-helper__suggestion__cancel\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"xmark\\\",\\\"discourse_ai.ai_helper.post_options_menu.cancel\\\",[30,0,[\\\"cancelAiAction\\\"]]]],null],[1,\\\"\\\\n                \\\"],[8,[32,7],[[24,0,\\\"btn-flat ai-post-helper__suggestion__copy\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\",\\\"@disabled\\\"],[[30,0,[\\\"copyButtonIcon\\\"]],[30,0,[\\\"copyButtonLabel\\\"]],[30,0,[\\\"copySuggestion\\\"]],[30,0,[\\\"streaming\\\"]]]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"allowInsertFootnote\\\"]],[[[1,\\\"                  \\\"],[8,[32,7],[[24,0,\\\"btn-flat ai-post-helper__suggestion__insert-footnote\\\"],[4,[30,0,[\\\"showFootnoteTooltip\\\"]],null,null]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\",\\\"@isLoading\\\",\\\"@disabled\\\"],[\\\"asterisk\\\",\\\"discourse_ai.ai_helper.post_options_menu.insert_footnote\\\",[30,0,[\\\"insertFootnote\\\"]],[30,0,[\\\"isSavingFootnote\\\"]],[30,0,[\\\"footnoteDisabled\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[8,[32,3],null,[[\\\"@cancel\\\"],[[30,0,[\\\"cancelAiAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]],null]],[]]]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showFastEdit\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-post-helper__fast-edit\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,8],null,[[\\\"@initialValue\\\",\\\"@newValue\\\",\\\"@post\\\",\\\"@close\\\"],[[30,1,[\\\"quoteState\\\",\\\"buffer\\\"]],[30,0,[\\\"suggestion\\\"]],[30,1,[\\\"post\\\"]],[30,0,[\\\"closeFastEdit\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@data\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-post-helper-menu.js\",\n      \"scope\": () => [_truthHelpers.and, _truthHelpers.eq, _aiHelperOptionsList.default, _aiHelperLoading.default, _willDestroy.default, _concatClass.default, _cookText.default, _dButton.default, _fastEdit.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPostHelperMenu;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-quota-duration-selector\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/modifier\", \"@ember/object\", \"discourse-i18n\", \"select-kit/components/combo-box\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _modifier, _object, _discourseI18n, _comboBox, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DURATION_PRESETS = [{\n    id: \"3600\",\n    seconds: 3600,\n    nameKey: \"discourse_ai.llms.quotas.durations.hour\"\n  }, {\n    id: \"21600\",\n    seconds: 21600,\n    nameKey: \"discourse_ai.llms.quotas.durations.six_hours\"\n  }, {\n    id: \"86400\",\n    seconds: 86400,\n    nameKey: \"discourse_ai.llms.quotas.durations.day\"\n  }, {\n    id: \"604800\",\n    seconds: 604800,\n    nameKey: \"discourse_ai.llms.quotas.durations.week\"\n  }, {\n    id: \"custom\",\n    nameKey: \"discourse_ai.llms.quotas.durations.custom\"\n  }];\n  class DurationSelector extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"selectedPresetId\", [_tracking.tracked], function () {\n      return \"86400\";\n    }))();\n    #selectedPresetId = (() => (dt7948.i(this, \"selectedPresetId\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"customHours\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #customHours = (() => (dt7948.i(this, \"customHours\"), void 0))();\n    constructor() {\n      super(...arguments);\n      const seconds = this.args.value;\n      const preset = DURATION_PRESETS.find(p => p.seconds === seconds);\n      if (preset) {\n        this.selectedPresetId = preset.id;\n      } else {\n        this.selectedPresetId = \"custom\";\n        this.customHours = Math.round(seconds / 3600);\n      }\n    }\n    get presetOptions() {\n      return DURATION_PRESETS.map(preset => ({\n        id: preset.id,\n        name: (0, _discourseI18n.i18n)(preset.nameKey),\n        seconds: preset.seconds\n      }));\n    }\n    get isCustom() {\n      return this.selectedPresetId === \"custom\";\n    }\n    get currentDurationSeconds() {\n      if (this.isCustom) {\n        return this.customHours ? this.customHours * 3600 : 0;\n      } else {\n        return parseInt(this.selectedPresetId, 10);\n      }\n    }\n    onPresetChange(value) {\n      this.selectedPresetId = value;\n      this.updateValue();\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"onPresetChange\", [_object.action]))();\n    onCustomHoursChange(event) {\n      this.customHours = parseInt(event.target.value, 10);\n      this.updateValue();\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"onCustomHoursChange\", [_object.action]))();\n    updateValue() {\n      if (this.args.onChange) {\n        this.args.onChange(this.currentDurationSeconds);\n      }\n    }\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"duration-selector\">\n          <ComboBox\n            @content={{this.presetOptions}}\n            @value={{this.selectedPresetId}}\n            @onChange={{this.onPresetChange}}\n            class=\"duration-selector__preset\"\n          />\n    \n          {{#if this.isCustom}}\n            <div class=\"duration-selector__custom\">\n              <input\n                type=\"number\"\n                value={{this.customHours}}\n                class=\"duration-selector__hours-input\"\n                min=\"1\"\n                {{on \"input\" this.onCustomHoursChange}}\n              />\n              <span class=\"duration-selector__hours-label\">\n                {{i18n \"discourse_ai.llms.quotas.hours\"}}\n              </span>\n            </div>\n          {{/if}}\n        </div>\n      \n    */\n    {\n      \"id\": \"qzu/tJzR\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"duration-selector\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],[[24,0,\\\"duration-selector__preset\\\"]],[[\\\"@content\\\",\\\"@value\\\",\\\"@onChange\\\"],[[30,0,[\\\"presetOptions\\\"]],[30,0,[\\\"selectedPresetId\\\"]],[30,0,[\\\"onPresetChange\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isCustom\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"duration-selector__custom\\\"],[12],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[16,2,[30,0,[\\\"customHours\\\"]]],[24,0,\\\"duration-selector__hours-input\\\"],[24,\\\"min\\\",\\\"1\\\"],[24,4,\\\"number\\\"],[4,[32,1],[\\\"input\\\",[30,0,[\\\"onCustomHoursChange\\\"]]],null],[12],[13],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"duration-selector__hours-label\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,2],[\\\"discourse_ai.llms.quotas.hours\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-quota-duration-selector.js\",\n      \"scope\": () => [_comboBox.default, _modifier.on, _discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = DurationSelector;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-search-discoveries-tooltip\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/helpers/d-icon\", \"discourse-i18n\", \"float-kit/components/d-tooltip\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _dButton, _dIcon, _discourseI18n, _dTooltip, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiSearchDiscoveriesTooltip extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"discobotDiscoveries\", [_service.service]))();\n    #discobotDiscoveries = (() => (dt7948.i(this, \"discobotDiscoveries\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <span class=\"ai-search-discoveries-tooltip\">\n          <DTooltip @placement=\"top-end\" @interactive={{true}}>\n            <:trigger>\n              {{icon \"circle-info\"}}\n            </:trigger>\n            <:content>\n              <div class=\"ai-search-discoveries-tooltip__content\">\n                <div class=\"ai-search-discoveries-tooltip__header\">\n                  {{i18n \"discourse_ai.discobot_discoveries.tooltip.header\"}}\n                </div>\n    \n                <div class=\"ai-search-discoveries-tooltip__description\">\n                  {{#if this.discobotDiscoveries.modelUsed}}\n                    {{i18n\n                      \"discourse_ai.discobot_discoveries.tooltip.content\"\n                      model=this.discobotDiscoveries.modelUsed\n                    }}\n                  {{/if}}\n                </div>\n    \n                <div class=\"ai-search-discoveries-tooltip__actions\">\n                  <DButton\n                    class=\"btn-transparent btn-primary\"\n                    @label=\"discourse_ai.discobot_discoveries.tooltip.actions.info\"\n                    @href=\"https://meta.discourse.org/t/conversational-ai-search-coming-to-discourse-ai/355939\"\n                  />\n                  <DButton\n                    class=\"btn-transparent btn-danger\"\n                    @label=\"discourse_ai.discobot_discoveries.tooltip.actions.disable\"\n                    @action={{this.discobotDiscoveries.disableDiscoveries}}\n                  />\n                </div>\n              </div>\n            </:content>\n          </DTooltip>\n        </span>\n      \n    */\n    {\n      \"id\": \"0UF2Kv3u\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"ai-search-discoveries-tooltip\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],null,[[\\\"@placement\\\",\\\"@interactive\\\"],[\\\"top-end\\\",true]],[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[32,1],[\\\"circle-info\\\"],null]],[1,\\\"\\\\n        \\\"]],[]],[[[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"ai-search-discoveries-tooltip__content\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"ai-search-discoveries-tooltip__header\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,2],[\\\"discourse_ai.discobot_discoveries.tooltip.header\\\"],null]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"ai-search-discoveries-tooltip__description\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"discobotDiscoveries\\\",\\\"modelUsed\\\"]],[[[1,\\\"                \\\"],[1,[28,[32,2],[\\\"discourse_ai.discobot_discoveries.tooltip.content\\\"],[[\\\"model\\\"],[[30,0,[\\\"discobotDiscoveries\\\",\\\"modelUsed\\\"]]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"ai-search-discoveries-tooltip__actions\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[32,3],[[24,0,\\\"btn-transparent btn-primary\\\"]],[[\\\"@label\\\",\\\"@href\\\"],[\\\"discourse_ai.discobot_discoveries.tooltip.actions.info\\\",\\\"https://meta.discourse.org/t/conversational-ai-search-coming-to-discourse-ai/355939\\\"]],null],[1,\\\"\\\\n              \\\"],[8,[32,3],[[24,0,\\\"btn-transparent btn-danger\\\"]],[[\\\"@label\\\",\\\"@action\\\"],[\\\"discourse_ai.discobot_discoveries.tooltip.actions.disable\\\",[30,0,[\\\"discobotDiscoveries\\\",\\\"disableDiscoveries\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-search-discoveries-tooltip.js\",\n      \"scope\": () => [_dTooltip.default, _dIcon.default, _discourseI18n.i18n, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiSearchDiscoveriesTooltip;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-search-discoveries\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/render-modifiers/modifiers/did-update\", \"@ember/render-modifiers/modifiers/will-destroy\", \"@ember/runloop\", \"@ember/service\", \"discourse/components/cook-text\", \"discourse/components/d-button\", \"discourse/helpers/concat-class\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/decorators\", \"discourse/lib/plugin-api\", \"discourse/lib/url\", \"discourse/models/topic\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/lib/smooth-streamer\", \"discourse/plugins/discourse-ai/discourse/components/ai-blinking-animation\", \"discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _didInsert, _didUpdate, _willDestroy, _runloop, _service, _cookText, _dButton, _concatClass, _ajax, _ajaxError, _decorators, _pluginApi, _url, _topic, _discourseI18n, _smoothStreamer3, _aiBlinkingAnimation, _aiIndicatorWave, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DISCOVERY_TIMEOUT_MS = 10000;\n  class AiSearchDiscoveries extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"search\", [_service.service]))();\n    #search = (() => (dt7948.i(this, \"search\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"messageBus\", [_service.service]))();\n    #messageBus = (() => (dt7948.i(this, \"messageBus\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"discobotDiscoveries\", [_service.service]))();\n    #discobotDiscoveries = (() => (dt7948.i(this, \"discobotDiscoveries\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"appEvents\", [_service.service]))();\n    #appEvents = (() => (dt7948.i(this, \"appEvents\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"composer\", [_service.service]))();\n    #composer = (() => (dt7948.i(this, \"composer\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"loadingConversationTopic\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loadingConversationTopic = (() => (dt7948.i(this, \"loadingConversationTopic\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"hideDiscoveries\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #hideDiscoveries = (() => (dt7948.i(this, \"hideDiscoveries\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"fullDiscoveryToggled\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #fullDiscoveryToggled = (() => (dt7948.i(this, \"fullDiscoveryToggled\"), void 0))();\n    static #_11 = (() => dt7948.g(this.prototype, \"discoveryPreviewLength\", [_tracking.tracked], function () {\n      return this.args.discoveryPreviewLength || 150;\n    }))();\n    #discoveryPreviewLength = (() => (dt7948.i(this, \"discoveryPreviewLength\"), void 0))();\n    static #_12 = (() => dt7948.g(this.prototype, \"smoothStreamer\", [_tracking.tracked], function () {\n      return new _smoothStreamer3.default(() => this.discobotDiscoveries.discovery, newValue => this.discobotDiscoveries.discovery = newValue);\n    }))();\n    #smoothStreamer = (() => (dt7948.i(this, \"smoothStreamer\"), void 0))();\n    discoveryTimeout = null;\n    constructor() {\n      super(...arguments);\n      this.appEvents.on(\"full-page-search:trigger-search\", this, this.triggerDiscovery);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.appEvents.off(\"full-page-search:trigger-search\", this, this.triggerDiscovery);\n    }\n    detectSearch() {\n      if (this.query?.length === 0 && this.discobotDiscoveries.discovery?.length > 0) {\n        this.discobotDiscoveries.resetDiscovery();\n        this.smoothStreamer.resetStreaming();\n      }\n      (0, _pluginApi.withPluginApi)(api => {\n        api.addSearchMenuOnKeyDownCallback((searchMenu, event) => {\n          if (!searchMenu) {\n            return;\n          }\n          if (this.discobotDiscoveries.lastQuery === this.query) {\n            return true;\n          }\n          if (event.key === \"Enter\" && this.query) {\n            this.triggerDiscovery();\n          }\n          return true;\n        });\n      });\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"detectSearch\", [_decorators.bind]))();\n    async _updateDiscovery(update) {\n      if (this.query === update.query) {\n        if (this.discoveryTimeout) {\n          (0, _runloop.cancel)(this.discoveryTimeout);\n        }\n        if (!this.discobotDiscoveries.discovery) {\n          this.discobotDiscoveries.discovery = \"\";\n        }\n        this.discobotDiscoveries.modelUsed = update.model_used;\n        this.discobotDiscoveries.loadingDiscoveries = false;\n        this.smoothStreamer.updateResult(update, \"ai_discover_reply\");\n      }\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"_updateDiscovery\", [_decorators.bind]))();\n    unsubscribe() {\n      this.messageBus.unsubscribe(\"/discourse-ai/ai-bot/discover\", this._updateDiscovery);\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"unsubscribe\", [_decorators.bind]))();\n    subscribe() {\n      this.messageBus.subscribe(\"/discourse-ai/ai-bot/discover\", this._updateDiscovery);\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"subscribe\", [_decorators.bind]))();\n    get query() {\n      return this.args?.searchTerm || this.search.activeGlobalSearchTerm;\n    }\n    get toggleLabel() {\n      if (this.fullDiscoveryToggled) {\n        return \"discourse_ai.discobot_discoveries.collapse\";\n      } else {\n        return \"discourse_ai.discobot_discoveries.tell_me_more\";\n      }\n    }\n    get toggleIcon() {\n      if (this.fullDiscoveryToggled) {\n        return \"chevron-up\";\n      } else {\n        return \"\";\n      }\n    }\n    get canShowExpandtoggle() {\n      return !this.discobotDiscoveries.loadingDiscoveries && this.smoothStreamer.renderedText.length > this.discoveryPreviewLength;\n    }\n    get renderPreviewOnly() {\n      return !this.fullDiscoveryToggled && this.canShowExpandtoggle;\n    }\n    get canContinueConversation() {\n      const personas = this.currentUser?.ai_enabled_personas;\n      if (!personas) {\n        return false;\n      }\n      if (this.discobotDiscoveries.discoveryTimedOut) {\n        return false;\n      }\n      const discoverPersona = personas.find(persona => persona.id === parseInt(this.siteSettings?.ai_bot_discover_persona, 10));\n      const discoverPersonaHasBot = discoverPersona?.username;\n      return this.discobotDiscoveries.discovery?.length > 0 && !this.smoothStreamer.isStreaming && discoverPersonaHasBot;\n    }\n    get continueConvoBtnLabel() {\n      if (this.loadingConversationTopic) {\n        return \"discourse_ai.discobot_discoveries.loading_convo\";\n      }\n      return \"discourse_ai.discobot_discoveries.continue_convo\";\n    }\n    async triggerDiscovery() {\n      if (this.query?.length === 0) {\n        this.discobotDiscoveries.resetDiscovery();\n        this.smoothStreamer.resetStreaming();\n        return;\n      }\n      if (this.discobotDiscoveries.lastQuery === this.query) {\n        this.hideDiscoveries = false;\n        return;\n      } else {\n        this.smoothStreamer.resetStreaming();\n        this.discobotDiscoveries.resetDiscovery();\n      }\n      this.hideDiscoveries = false;\n      this.discobotDiscoveries.loadingDiscoveries = true;\n      this.discoveryTimeout = (0, _runloop.later)(this, this.timeoutDiscovery, DISCOVERY_TIMEOUT_MS);\n      try {\n        this.discobotDiscoveries.lastQuery = this.query;\n        await (0, _ajax.ajax)(\"/discourse-ai/ai-bot/discover\", {\n          data: {\n            query: this.query\n          }\n        });\n      } catch {\n        this.hideDiscoveries = true;\n      }\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"triggerDiscovery\", [_object.action]))();\n    toggleDiscovery() {\n      this.fullDiscoveryToggled = !this.fullDiscoveryToggled;\n    }\n    static #_18 = (() => dt7948.n(this.prototype, \"toggleDiscovery\", [_object.action]))();\n    async continueConversation() {\n      const data = {\n        user_id: this.currentUser.id,\n        query: this.query,\n        context: this.discobotDiscoveries.discovery\n      };\n      try {\n        this.loadingConversationTopic = true;\n        const continueRequest = await (0, _ajax.ajax)(`/discourse-ai/ai-bot/discover/continue-convo`, {\n          type: \"POST\",\n          data\n        });\n        const topicJSON = await _topic.default.find(continueRequest.topic_id, {});\n        const topic = _topic.default.create(topicJSON);\n        _url.default.routeTo(`/t/${continueRequest.topic_id}`, {\n          afterRouteComplete: () => {\n            if (this.args.closeSearchMenu) {\n              this.args.closeSearchMenu();\n            }\n            this.composer.focusComposer({\n              topic\n            });\n          }\n        });\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        this.loadingConversationTopic = false;\n      }\n    }\n    static #_19 = (() => dt7948.n(this.prototype, \"continueConversation\", [_object.action]))();\n    timeoutDiscovery() {\n      if (this.discobotDiscoveries.discovery?.length > 0) {\n        return;\n      }\n      this.discobotDiscoveries.loadingDiscoveries = false;\n      this.discobotDiscoveries.discovery = \"\";\n      this.discobotDiscoveries.discoveryTimedOut = true;\n    }\n    static #_20 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div\n          class=\"ai-search-discoveries\"\n          {{didInsert this.subscribe this.query}}\n          {{didUpdate this.subscribe this.query}}\n          {{didUpdate this.detectSearch this.query}}\n          {{didInsert this.triggerDiscovery this.query}}\n          {{willDestroy this.unsubscribe}}\n        >\n          <div class=\"ai-search-discoveries__completion\">\n            {{#if this.discobotDiscoveries.loadingDiscoveries}}\n              <AiBlinkingAnimation />\n            {{else if this.discobotDiscoveries.discoveryTimedOut}}\n              {{i18n \"discourse_ai.discobot_discoveries.timed_out\"}}\n            {{else}}\n              <article\n                class={{concatClass\n                  \"ai-search-discoveries__discovery\"\n                  (if this.renderPreviewOnly \"preview\")\n                  (if this.smoothStreamer.isStreaming \"streaming\")\n                  \"streamable-content\"\n                }}\n              >\n                <CookText\n                  @rawText={{this.smoothStreamer.renderedText}}\n                  class=\"cooked\"\n                />\n              </article>\n    \n              {{#if this.canShowExpandtoggle}}\n                <DButton\n                  class=\"btn-flat btn-text ai-search-discoveries__toggle\"\n                  @label={{this.toggleLabel}}\n                  @icon={{this.toggleIcon}}\n                  @action={{this.toggleDiscovery}}\n                />\n              {{/if}}\n            {{/if}}\n          </div>\n    \n          {{#if this.canContinueConversation}}\n            <div class=\"ai-search-discoveries__continue-conversation\">\n              <DButton\n                @action={{this.continueConversation}}\n                @label={{this.continueConvoBtnLabel}}\n                class=\"btn-small\"\n              >\n                <AiIndicatorWave @loading={{this.loadingConversationTopic}} />\n              </DButton>\n            </div>\n          {{/if}}\n        </div>\n      \n    */\n    {\n      \"id\": \"beVZ2Biz\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[11,0],[24,0,\\\"ai-search-discoveries\\\"],[4,[32,0],[[30,0,[\\\"subscribe\\\"]],[30,0,[\\\"query\\\"]]],null],[4,[32,1],[[30,0,[\\\"subscribe\\\"]],[30,0,[\\\"query\\\"]]],null],[4,[32,1],[[30,0,[\\\"detectSearch\\\"]],[30,0,[\\\"query\\\"]]],null],[4,[32,0],[[30,0,[\\\"triggerDiscovery\\\"]],[30,0,[\\\"query\\\"]]],null],[4,[32,2],[[30,0,[\\\"unsubscribe\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"ai-search-discoveries__completion\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"discobotDiscoveries\\\",\\\"loadingDiscoveries\\\"]],[[[1,\\\"          \\\"],[8,[32,3],null,null,null],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"discobotDiscoveries\\\",\\\"discoveryTimedOut\\\"]],[[[1,\\\"          \\\"],[1,[28,[32,4],[\\\"discourse_ai.discobot_discoveries.timed_out\\\"],null]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,\\\"article\\\"],[15,0,[28,[32,5],[\\\"ai-search-discoveries__discovery\\\",[52,[30,0,[\\\"renderPreviewOnly\\\"]],\\\"preview\\\"],[52,[30,0,[\\\"smoothStreamer\\\",\\\"isStreaming\\\"]],\\\"streaming\\\"],\\\"streamable-content\\\"],null]],[12],[1,\\\"\\\\n            \\\"],[8,[32,6],[[24,0,\\\"cooked\\\"]],[[\\\"@rawText\\\"],[[30,0,[\\\"smoothStreamer\\\",\\\"renderedText\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"canShowExpandtoggle\\\"]],[[[1,\\\"            \\\"],[8,[32,7],[[24,0,\\\"btn-flat btn-text ai-search-discoveries__toggle\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[[30,0,[\\\"toggleLabel\\\"]],[30,0,[\\\"toggleIcon\\\"]],[30,0,[\\\"toggleDiscovery\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"canContinueConversation\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"ai-search-discoveries__continue-conversation\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,7],[[24,0,\\\"btn-small\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"continueConversation\\\"]],[30,0,[\\\"continueConvoBtnLabel\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[32,8],null,[[\\\"@loading\\\"],[[30,0,[\\\"loadingConversationTopic\\\"]]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-search-discoveries.js\",\n      \"scope\": () => [_didInsert.default, _didUpdate.default, _willDestroy.default, _aiBlinkingAnimation.default, _discourseI18n.i18n, _concatClass.default, _cookText.default, _dButton.default, _aiIndicatorWave.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiSearchDiscoveries;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-sentiment-horizontal-bar\", [\"exports\", \"@ember/helper\", \"@ember/template\", \"truth-helpers\", \"discourse-i18n\", \"float-kit/components/d-tooltip\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _helper, _template, _truthHelpers, _discourseI18n, _dTooltip, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AiSentimentHorizontalBar = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    {{#if (gt @score 0)}}\n      <DTooltip\n        class={{concat \"sentiment-horizontal-bar__\" @type}}\n        style={{htmlSafe (concat \"width: \" @width \"%\")}}\n      >\n        <:trigger>\n          <span class=\"sentiment-horizontal-bar__count\">\n            {{@score}}\n          </span>\n        </:trigger>\n        <:content>\n          {{i18n\n            (concat\n              \"discourse_ai.sentiments.sentiment_analysis.filter_types.\" @type\n            )\n          }}:\n          {{@score}}\n        </:content>\n      </DTooltip>\n    {{/if}}\n  \n  */\n  {\n    \"id\": \"RxLInASj\",\n    \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[28,[32,0],[[30,1],0],null],[[[1,\\\"    \\\"],[8,[32,1],[[16,0,[28,[32,2],[\\\"sentiment-horizontal-bar__\\\",[30,2]],null]],[16,5,[28,[32,3],[[28,[32,2],[\\\"width: \\\",[30,3],\\\"%\\\"],null]],null]]],null,[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"sentiment-horizontal-bar__count\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[30,1]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[1,[28,[32,4],[[28,[32,2],[\\\"discourse_ai.sentiments.sentiment_analysis.filter_types.\\\",[30,2]],null]],null]],[1,\\\":\\\\n        \\\"],[1,[30,1]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@score\\\",\\\"@type\\\",\\\"@width\\\"],false,[\\\"if\\\"]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-sentiment-horizontal-bar.js\",\n    \"scope\": () => [_truthHelpers.gt, _dTooltip.default, _helper.concat, _template.htmlSafe, _discourseI18n.i18n],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-sentiment-horizontal-bar:AiSentimentHorizontalBar\"));\n  var _default = _exports.default = AiSentimentHorizontalBar;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-spam\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/routing\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/components/d-page-subheader\", \"discourse/components/d-stat-tiles\", \"discourse/components/d-toggle-switch\", \"discourse/components/d-tooltip\", \"discourse/helpers/d-icon\", \"discourse/helpers/with-event-value\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/get-url\", \"discourse-i18n\", \"admin/components/admin-config-area-card\", \"select-kit/components/combo-box\", \"discourse/plugins/discourse-ai/discourse/components/modal/spam-test-modal\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _routing, _service, _dButton, _dPageSubheader, _dStatTiles, _dToggleSwitch, _dTooltip, _dIcon, _withEventValue, _ajax, _ajaxError, _getUrl, _discourseI18n, _adminConfigAreaCard, _comboBox, _spamTestModal, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiSpam extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"stats\", [_tracking.tracked], function () {\n      return {\n        scanned_count: 0,\n        spam_detected: 0,\n        false_positives: 0,\n        false_negatives: 0,\n        daily_data: []\n      };\n    }))();\n    #stats = (() => (dt7948.i(this, \"stats\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"isEnabled\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isEnabled = (() => (dt7948.i(this, \"isEnabled\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"selectedLLM\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #selectedLLM = (() => (dt7948.i(this, \"selectedLLM\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"selectedPersonaId\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #selectedPersonaId = (() => (dt7948.i(this, \"selectedPersonaId\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"customInstructions\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #customInstructions = (() => (dt7948.i(this, \"customInstructions\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"errors\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #errors = (() => (dt7948.i(this, \"errors\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.initializeFromModel();\n      if (this.args.model?.spam_scanning_user?.admin === false) {\n        this.errors.push({\n          message: (0, _discourseI18n.i18n)(\"discourse_ai.spam.errors.scan_not_admin.message\"),\n          button: {\n            label: (0, _discourseI18n.i18n)(\"discourse_ai.spam.errors.scan_not_admin.action\"),\n            action: this.fixScanUserNotAdmin\n          }\n        });\n      }\n    }\n    async fixScanUserNotAdmin() {\n      const spamScanningUser = this.args.model.spam_scanning_user;\n      if (!spamScanningUser || spamScanningUser.admin) {\n        return;\n      }\n      try {\n        const response = await (0, _ajax.ajax)(`/admin/plugins/discourse-ai/ai-spam/fix-errors`, {\n          type: \"POST\",\n          data: {\n            error: \"spam_scanner_not_admin\"\n          }\n        });\n        if (response.success) {\n          this.toasts.success({\n            data: {\n              message: (0, _discourseI18n.i18n)(\"discourse_ai.spam.errors.resolved\")\n            },\n            duration: \"short\"\n          });\n        }\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        window.location.reload();\n      }\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"fixScanUserNotAdmin\", [_object.action]))();\n    initializeFromModel() {\n      const model = this.args.model;\n      this.isEnabled = model.is_enabled;\n      if (model.llm_id) {\n        this.selectedLLM = model.llm_id;\n      } else {\n        if (this.availableLLMs.length) {\n          this.selectedLLM = this.availableLLMs[0].id;\n          this.autoSelectedLLM = true;\n        }\n      }\n      this.customInstructions = model.custom_instructions;\n      this.stats = model.stats;\n      this.selectedPersonaId = model.ai_persona_id;\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"initializeFromModel\", [_object.action]))();\n    get availableLLMs() {\n      return this.args.model?.available_llms || [];\n    }\n    async toggleEnabled() {\n      this.isEnabled = !this.isEnabled;\n      const data = {\n        is_enabled: this.isEnabled\n      };\n      if (this.autoSelectedLLM) {\n        data.llm_model_id = this.llmId;\n      }\n      try {\n        const response = await (0, _ajax.ajax)(\"/admin/plugins/discourse-ai/ai-spam.json\", {\n          type: \"PUT\",\n          data\n        });\n        this.autoSelectedLLM = false;\n        this.isEnabled = response.is_enabled;\n      } catch (error) {\n        this.isEnabled = !this.isEnabled;\n        (0, _ajaxError.popupAjaxError)(error);\n      }\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"toggleEnabled\", [_object.action]))();\n    get llmId() {\n      return this.selectedLLM;\n    }\n    async updateLLM(value) {\n      this.selectedLLM = value;\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"updateLLM\", [_object.action]))();\n    async updatePersona(value) {\n      this.selectedPersonaId = value;\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"updatePersona\", [_object.action]))();\n    async save() {\n      try {\n        await (0, _ajax.ajax)(\"/admin/plugins/discourse-ai/ai-spam.json\", {\n          type: \"PUT\",\n          data: {\n            llm_model_id: this.llmId,\n            custom_instructions: this.customInstructions,\n            ai_persona_id: this.selectedPersonaId\n          }\n        });\n        this.toasts.success({\n          data: {\n            message: (0, _discourseI18n.i18n)(\"discourse_ai.spam.settings_saved\")\n          },\n          duration: \"short\"\n        });\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      }\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n    showTestModal() {\n      this.modal.show(_spamTestModal.default, {\n        model: {\n          customInstructions: this.customInstructions,\n          llmId: this.llmId\n        }\n      });\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"showTestModal\", [_object.action]))();\n    get metrics() {\n      const detected = {\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.spam.spam_detected\"),\n        value: this.stats.spam_detected\n      };\n      const falsePositives = {\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.spam.false_positives\"),\n        value: this.stats.false_positives,\n        tooltip: (0, _discourseI18n.i18n)(\"discourse_ai.spam.stat_tooltips.incorrectly_flagged\")\n      };\n      const falseNegatives = {\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.spam.false_negatives\"),\n        value: this.stats.false_negatives,\n        tooltip: (0, _discourseI18n.i18n)(\"discourse_ai.spam.stat_tooltips.missed_spam\")\n      };\n      if (this.args.model.flagging_username) {\n        detected.href = (0, _getUrl.default)(`/review?flagged_by=${this.args.model.flagging_username}&status=all&sort_order=created_at`);\n        falsePositives.href = (0, _getUrl.default)(`/review?flagged_by=${this.args.model.flagging_username}&status=rejected&sort_order=created_at`);\n        falseNegatives.href = (0, _getUrl.default)(`/review?status=approved&sort_order=created_at&additional_filters={\"ai_spam_false_negative\":true}&order=created&score_type=${this.args.model.spam_score_type}`);\n      }\n      return [{\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.spam.scanned_count\"),\n        value: this.stats.scanned_count\n      }, detected, falsePositives, falseNegatives];\n    }\n    static #_17 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-spam\">\n          <section class=\"ai-spam__settings\">\n            <div class=\"ai-spam__errors\">\n              {{#each this.errors as |e|}}\n                <div class=\"alert alert-error\">\n                  {{icon \"triangle-exclamation\"}}\n                  <p>{{e.message}}</p>\n                  <DButton\n                    @action={{e.button.action}}\n                    @translatedLabel={{e.button.label}}\n                  />\n                </div>\n              {{/each}}\n            </div>\n            <DPageSubheader\n              @titleLabel={{i18n \"discourse_ai.spam.title\"}}\n              @descriptionLabel={{i18n \"discourse_ai.spam.spam_description\"}}\n            />\n            <div class=\"control-group ai-spam__enabled\">\n              <DToggleSwitch\n                class=\"ai-spam__toggle\"\n                @state={{this.isEnabled}}\n                @label=\"discourse_ai.spam.enable\"\n                {{on \"click\" this.toggleEnabled}}\n              />\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n \"discourse_ai.spam.spam_tip\"}}\n              />\n            </div>\n    \n            <div class=\"ai-spam__llm\">\n              <label class=\"ai-spam__llm-label\">{{i18n\n                  \"discourse_ai.spam.select_llm\"\n                }}</label>\n              {{#if this.availableLLMs.length}}\n                <ComboBox\n                  @value={{this.selectedLLM}}\n                  @content={{this.availableLLMs}}\n                  @onChange={{this.updateLLM}}\n                  class=\"ai-spam__llm-selector\"\n                />\n              {{else}}\n                <span class=\"ai-spam__llm-placeholder\">\n                  <LinkTo @route=\"adminPlugins.show.discourse-ai-llms.index\">\n                    {{i18n \"discourse_ai.spam.no_llms\"}}\n                  </LinkTo>\n                </span>\n              {{/if}}\n            </div>\n    \n            <div class=\"ai-spam__persona\">\n              <label class=\"ai-spam__persona-label\">{{i18n\n                  \"discourse_ai.spam.select_persona\"\n                }}</label>\n              <ComboBox\n                @value={{this.selectedPersonaId}}\n                @content={{@model.available_personas}}\n                @onChange={{this.updatePersona}}\n                class=\"ai-spam__persona-selector\"\n              />\n            </div>\n    \n            <div class=\"ai-spam__instructions\">\n              <label class=\"ai-spam__instructions-label\">\n                {{i18n \"discourse_ai.spam.custom_instructions\"}}\n                <DTooltip\n                  @icon=\"circle-question\"\n                  @content={{i18n \"discourse_ai.spam.custom_instructions_help\"}}\n                />\n              </label>\n              <textarea\n                class=\"ai-spam__instructions-input\"\n                placeholder={{i18n\n                  \"discourse_ai.spam.custom_instructions_placeholder\"\n                }}\n                {{on \"input\" (withEventValue (fn (mut this.customInstructions)))}}\n              >{{this.customInstructions}}</textarea>\n              <DButton\n                @action={{this.save}}\n                @label=\"discourse_ai.spam.save_button\"\n                class=\"ai-spam__instructions-save btn-primary\"\n              />\n              <DButton\n                @action={{this.showTestModal}}\n                @label=\"discourse_ai.spam.test_button\"\n                class=\"btn-default\"\n              />\n            </div>\n          </section>\n    \n          <AdminConfigAreaCard\n            @heading=\"discourse_ai.spam.last_seven_days\"\n            class=\"ai-spam__stats\"\n          >\n            <:content>\n              <DStatTiles as |tiles|>\n                {{#each this.metrics as |metric|}}\n                  <tiles.Tile\n                    @label={{metric.label}}\n                    @url={{metric.href}}\n                    @value={{metric.value}}\n                    @tooltip={{metric.tooltip}}\n                  />\n                {{/each}}\n              </DStatTiles>\n            </:content>\n          </AdminConfigAreaCard>\n        </div>\n      \n    */\n    {\n      \"id\": \"ezZxWZ3g\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-spam\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-spam__settings\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-spam__errors\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"errors\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,0],[14,0,\\\"alert alert-error\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,0],[\\\"triangle-exclamation\\\"],null]],[1,\\\"\\\\n              \\\"],[10,2],[12],[1,[30,1,[\\\"message\\\"]]],[13],[1,\\\"\\\\n              \\\"],[8,[32,1],null,[[\\\"@action\\\",\\\"@translatedLabel\\\"],[[30,1,[\\\"button\\\",\\\"action\\\"]],[30,1,[\\\"button\\\",\\\"label\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[32,2],null,[[\\\"@titleLabel\\\",\\\"@descriptionLabel\\\"],[[28,[32,3],[\\\"discourse_ai.spam.title\\\"],null],[28,[32,3],[\\\"discourse_ai.spam.spam_description\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"control-group ai-spam__enabled\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,4],[[24,0,\\\"ai-spam__toggle\\\"],[4,[32,5],[\\\"click\\\",[30,0,[\\\"toggleEnabled\\\"]]],null]],[[\\\"@state\\\",\\\"@label\\\"],[[30,0,[\\\"isEnabled\\\"]],\\\"discourse_ai.spam.enable\\\"]],null],[1,\\\"\\\\n          \\\"],[8,[32,6],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,3],[\\\"discourse_ai.spam.spam_tip\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"ai-spam__llm\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"ai-spam__llm-label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.spam.select_llm\\\"],null]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"availableLLMs\\\",\\\"length\\\"]],[[[1,\\\"            \\\"],[8,[32,7],[[24,0,\\\"ai-spam__llm-selector\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\"],[[30,0,[\\\"selectedLLM\\\"]],[30,0,[\\\"availableLLMs\\\"]],[30,0,[\\\"updateLLM\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,1],[14,0,\\\"ai-spam__llm-placeholder\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[32,8],null,[[\\\"@route\\\"],[\\\"adminPlugins.show.discourse-ai-llms.index\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[28,[32,3],[\\\"discourse_ai.spam.no_llms\\\"],null]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"ai-spam__persona\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"ai-spam__persona-label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.spam.select_persona\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,7],[[24,0,\\\"ai-spam__persona-selector\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\"],[[30,0,[\\\"selectedPersonaId\\\"]],[30,2,[\\\"available_personas\\\"]],[30,0,[\\\"updatePersona\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"ai-spam__instructions\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"ai-spam__instructions-label\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,3],[\\\"discourse_ai.spam.custom_instructions\\\"],null]],[1,\\\"\\\\n            \\\"],[8,[32,6],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,3],[\\\"discourse_ai.spam.custom_instructions_help\\\"],null]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[11,\\\"textarea\\\"],[24,0,\\\"ai-spam__instructions-input\\\"],[16,\\\"placeholder\\\",[28,[32,3],[\\\"discourse_ai.spam.custom_instructions_placeholder\\\"],null]],[4,[32,5],[\\\"input\\\",[28,[32,9],[[28,[32,10],[[28,[31,3],[[30,0,[\\\"customInstructions\\\"]]],null]],null]],null]],null],[12],[1,[30,0,[\\\"customInstructions\\\"]]],[13],[1,\\\"\\\\n          \\\"],[8,[32,1],[[24,0,\\\"ai-spam__instructions-save btn-primary\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"save\\\"]],\\\"discourse_ai.spam.save_button\\\"]],null],[1,\\\"\\\\n          \\\"],[8,[32,1],[[24,0,\\\"btn-default\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"showTestModal\\\"]],\\\"discourse_ai.spam.test_button\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[8,[32,11],[[24,0,\\\"ai-spam__stats\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.spam.last_seven_days\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[32,12],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"metrics\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,3,[\\\"Tile\\\"]],null,[[\\\"@label\\\",\\\"@url\\\",\\\"@value\\\",\\\"@tooltip\\\"],[[30,4,[\\\"label\\\"]],[30,4,[\\\"href\\\"]],[30,4,[\\\"value\\\"]],[30,4,[\\\"tooltip\\\"]]]],null],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"          \\\"]],[3]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"e\\\",\\\"@model\\\",\\\"tiles\\\",\\\"metric\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\",\\\"mut\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-spam.js\",\n      \"scope\": () => [_dIcon.default, _dButton.default, _dPageSubheader.default, _discourseI18n.i18n, _dToggleSwitch.default, _modifier.on, _dTooltip.default, _comboBox.default, _routing.LinkTo, _withEventValue.default, _helper.fn, _adminConfigAreaCard.default, _dStatTiles.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiSpam;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-split-topic-suggester\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/service\", \"truth-helpers\", \"discourse/components/d-button\", \"discourse/helpers/category-badge\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"float-kit/components/d-menu\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _service, _truthHelpers, _dButton, _categoryBadge, _ajax, _ajaxError, _dMenu, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiSplitTopicSuggester extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"menu\", [_service.service]))();\n    #menu = (() => (dt7948.i(this, \"menu\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"suggestions\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #suggestions = (() => (dt7948.i(this, \"suggestions\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"icon\", [_tracking.tracked], function () {\n      return \"discourse-sparkles\";\n    }))();\n    #icon = (() => (dt7948.i(this, \"icon\"), void 0))();\n    SUGGESTION_TYPES = {\n      title: \"suggest_title\",\n      category: \"suggest_category\",\n      tag: \"suggest_tags\"\n    };\n    get input() {\n      return this.args.selectedPosts.map(item => item.cooked).join(\"\\n\");\n    }\n    get disabled() {\n      return this.loading || this.suggestions.length > 0;\n    }\n    loadSuggestions() {\n      if (this.loading || this.suggestions.length > 0) {\n        return;\n      }\n      this.loading = true;\n      (0, _ajax.ajax)(`/discourse-ai/ai-helper/${this.args.mode}`, {\n        method: \"POST\",\n        data: {\n          text: this.input\n        }\n      }).then(result => {\n        if (this.args.mode === this.SUGGESTION_TYPES.title) {\n          this.suggestions = result.suggestions;\n        } else if (this.args.mode === this.SUGGESTION_TYPES.category) {\n          const suggestionIds = result.assistant.map(s => s.id);\n          const suggestedCategories = this.site.categories.filter(category => suggestionIds.includes(category.id));\n          this.suggestions = suggestedCategories;\n        } else if (this.args.mode === this.SUGGESTION_TYPES.tag) {\n          this.suggestions = result.assistant.map(s => {\n            return {\n              name: s.name,\n              count: s.count\n            };\n          });\n        }\n      }).catch(_ajaxError.popupAjaxError).finally(() => {\n        this.loading = false;\n      });\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"loadSuggestions\", [_object.action]))();\n    applySuggestion(suggestion, menu) {\n      if (!this.args.mode) {\n        return;\n      }\n      if (this.args.mode === this.SUGGESTION_TYPES.title) {\n        this.args.updateAction(suggestion);\n        return menu.close();\n      }\n      if (this.args.mode === this.SUGGESTION_TYPES.category) {\n        this.args.updateAction(suggestion.id);\n        return menu.close();\n      }\n      if (this.args.mode === this.SUGGESTION_TYPES.tag) {\n        if (this.args.currentValue) {\n          if (Array.isArray(this.args.currentValue)) {\n            const updatedTags = [...this.args.currentValue, suggestion];\n            this.args.updateAction([...new Set(updatedTags)]);\n          } else {\n            const updatedTags = [this.args.currentValue, suggestion];\n            this.args.updateAction([...new Set(updatedTags)]);\n          }\n        } else {\n          if (Array.isArray(suggestion)) {\n            this.args.updateAction([...suggestion]);\n          } else {\n            this.args.updateAction([suggestion]);\n          }\n        }\n        return menu.close();\n      }\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"applySuggestion\", [_object.action]))();\n    static #_8 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.loading}}\n          {{!\n            Dynamically changing @icon of DMenu\n            causes it to rerender after load and\n            close the menu once data is loaded.\n            This workaround mimics an icon change of\n            the button by adding an overlapping\n            disabled button while loading}}\n          <DButton\n            class=\"ai-split-topic-loading-placeholder\"\n            @disabled={{true}}\n            @icon=\"spinner\"\n          />\n        {{/if}}\n        <DMenu\n          @icon=\"discourse-sparkles\"\n          @interactive={{true}}\n          @identifier=\"ai-split-topic-suggestion-menu\"\n          class=\"ai-split-topic-suggestion-button\"\n          data-suggestion-mode={{@mode}}\n          {{on \"click\" this.loadSuggestions}}\n          as |menu|\n        >\n          <ul class=\"ai-split-topic-suggestion__results\">\n            {{#unless this.loading}}\n              {{#each this.suggestions as |suggestion index|}}\n                {{#if (eq @mode \"suggest_category\")}}\n                  <li\n                    data-name={{suggestion.name}}\n                    data-value={{suggestion.id}}\n                    class=\"ai-split-topic-suggestion__category-result\"\n                    role=\"button\"\n                    {{on \"click\" (fn this.applySuggestion suggestion menu)}}\n                  >\n                    {{categoryBadge suggestion}}\n                    <span class=\"topic-count\">x\n                      {{suggestion.totalTopicCount}}</span>\n                  </li>\n                {{else if (eq @mode \"suggest_tags\")}}\n                  <li data-name={{suggestion.name}} data-value={{index}}>\n                    <DButton\n                      @translatedLabel={{suggestion.name}}\n                      @action={{fn this.applySuggestion suggestion.name menu}}\n                    >\n                      <span class=\"topic-count\">x{{suggestion.count}}</span>\n                    </DButton>\n                  </li>\n                {{else}}\n                  <li data-name={{suggestion}} data-value={{index}}>\n                    <DButton\n                      @translatedLabel={{suggestion}}\n                      @action={{fn this.applySuggestion suggestion menu}}\n                    />\n                  </li>\n                {{/if}}\n              {{/each}}\n            {{/unless}}\n          </ul>\n        </DMenu>\n      \n    */\n    {\n      \"id\": \"4ZszHd3J\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loading\\\"]],[[[1,\\\"      \\\"],[8,[32,0],[[24,0,\\\"ai-split-topic-loading-placeholder\\\"]],[[\\\"@disabled\\\",\\\"@icon\\\"],[true,\\\"spinner\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[8,[32,1],[[24,0,\\\"ai-split-topic-suggestion-button\\\"],[16,\\\"data-suggestion-mode\\\",[30,1]],[4,[32,2],[\\\"click\\\",[30,0,[\\\"loadSuggestions\\\"]]],null]],[[\\\"@icon\\\",\\\"@interactive\\\",\\\"@identifier\\\"],[\\\"discourse-sparkles\\\",true,\\\"ai-split-topic-suggestion-menu\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[10,\\\"ul\\\"],[14,0,\\\"ai-split-topic-suggestion__results\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"loading\\\"]]],[[[42,[28,[31,3],[[28,[31,3],[[30,0,[\\\"suggestions\\\"]]],null]],null],null,[[[41,[28,[32,3],[[30,1],\\\"suggest_category\\\"],null],[[[1,\\\"              \\\"],[11,\\\"li\\\"],[16,\\\"data-name\\\",[30,3,[\\\"name\\\"]]],[16,\\\"data-value\\\",[30,3,[\\\"id\\\"]]],[24,0,\\\"ai-split-topic-suggestion__category-result\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[32,2],[\\\"click\\\",[28,[32,4],[[30,0,[\\\"applySuggestion\\\"]],[30,3],[30,2]],null]],null],[12],[1,\\\"\\\\n                \\\"],[1,[28,[32,5],[[30,3]],null]],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"topic-count\\\"],[12],[1,\\\"x\\\\n                  \\\"],[1,[30,3,[\\\"totalTopicCount\\\"]]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,3],[[30,1],\\\"suggest_tags\\\"],null],[[[1,\\\"              \\\"],[10,\\\"li\\\"],[15,\\\"data-name\\\",[30,3,[\\\"name\\\"]]],[15,\\\"data-value\\\",[30,4]],[12],[1,\\\"\\\\n                \\\"],[8,[32,0],null,[[\\\"@translatedLabel\\\",\\\"@action\\\"],[[30,3,[\\\"name\\\"]],[28,[32,4],[[30,0,[\\\"applySuggestion\\\"]],[30,3,[\\\"name\\\"]],[30,2]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[10,1],[14,0,\\\"topic-count\\\"],[12],[1,\\\"x\\\"],[1,[30,3,[\\\"count\\\"]]],[13],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[10,\\\"li\\\"],[15,\\\"data-name\\\",[30,3]],[15,\\\"data-value\\\",[30,4]],[12],[1,\\\"\\\\n                \\\"],[8,[32,0],null,[[\\\"@translatedLabel\\\",\\\"@action\\\"],[[30,3],[28,[32,4],[[30,0,[\\\"applySuggestion\\\"]],[30,3],[30,2]],null]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"]],[]]]],[]]]],[3,4]],null]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"]],[2]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@mode\\\",\\\"menu\\\",\\\"suggestion\\\",\\\"index\\\"],false,[\\\"if\\\",\\\"unless\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-split-topic-suggester.js\",\n      \"scope\": () => [_dButton.default, _dMenu.default, _modifier.on, _truthHelpers.eq, _helper.fn, _categoryBadge.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiSplitTopicSuggester;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-summary-skeleton\", [\"exports\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-blinking-animation\", \"discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _discourseI18n, _aiBlinkingAnimation, _aiIndicatorWave, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AiSummarySkeleton = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <div class=\"ai-summary__container\">\n      <AiBlinkingAnimation />\n  \n      <span>\n        <div class=\"ai-summary__generating-text\">\n          {{i18n \"summary.in_progress\"}}\n        </div>\n        <AiIndicatorWave @loading={{true}} />\n      </span>\n    </div>\n  \n  */\n  {\n    \"id\": \"ndQrZh9f\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"ai-summary__container\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[32,0],null,null,null],[1,\\\"\\\\n\\\\n    \\\"],[10,1],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"ai-summary__generating-text\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[28,[32,1],[\\\"summary.in_progress\\\"],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[8,[32,2],null,[[\\\"@loading\\\"],[true]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-summary-skeleton.js\",\n    \"scope\": () => [_aiBlinkingAnimation.default, _discourseI18n.i18n, _aiIndicatorWave.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-summary-skeleton:AiSummarySkeleton\"));\n  var _default = _exports.default = AiSummarySkeleton;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-tool-editor-form\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/service\", \"truth-helpers\", \"discourse/components/form\", \"discourse/lib/ajax-error\", \"discourse/lib/get-url\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/modal/ai-tool-test-modal\", \"discourse/plugins/discourse-ai/discourse/components/rag-options-fk\", \"discourse/plugins/discourse-ai/discourse/components/rag-uploader\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _service, _truthHelpers, _form, _ajaxError, _getUrl, _discourseI18n, _aiToolTestModal, _ragOptionsFk, _ragUploader, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiToolEditorForm extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"dialog\", [_service.service]))();\n    #dialog = (() => (dt7948.i(this, \"dialog\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"uploadedFiles\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #uploadedFiles = (() => (dt7948.i(this, \"uploadedFiles\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"isSaving\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isSaving = (() => (dt7948.i(this, \"isSaving\"), void 0))();\n    PARAMETER_TYPES = [{\n      name: \"string\",\n      id: \"string\"\n    }, {\n      name: \"number\",\n      id: \"number\"\n    }, {\n      name: \"boolean\",\n      id: \"boolean\"\n    }, {\n      name: \"array\",\n      id: \"array\"\n    }];\n    get formData() {\n      const parameters = (this.args.editingModel.parameters ?? []).map(parameter => {\n        const mappedParameter = {\n          ...parameter\n        };\n        mappedParameter.isEnum = parameter.enum && parameter.enum.length > 0;\n        if (!mappedParameter.isEnum) {\n          delete mappedParameter.enum;\n        }\n        return mappedParameter;\n      });\n      return {\n        name: this.args.editingModel.name || \"\",\n        tool_name: this.args.editingModel.tool_name || \"\",\n        description: this.args.editingModel.description || \"\",\n        summary: this.args.editingModel.summary || \"\",\n        parameters,\n        script: this.args.editingModel.script || \"\",\n        rag_uploads: this.args.editingModel.rag_uploads || []\n      };\n    }\n    toggleIsEnum(value, _ref) {\n      let {\n        name,\n        parentName,\n        set\n      } = _ref;\n      if (value) {\n        set(`${parentName}.enum`, [\"\"]);\n      } else {\n        set(`${parentName}.enum`, []);\n      }\n      set(name, value);\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"toggleIsEnum\", [_object.action]))();\n    async save(data) {\n      this.isSaving = true;\n      // we injected a isEnum thing, we need to clean it up\n      const copiedData = JSON.parse(JSON.stringify(data));\n      if (copiedData.parameters) {\n        copiedData.parameters.forEach(parameter => {\n          if (!parameter.isEnum) {\n            delete parameter.enum;\n          }\n          delete parameter.isEnum;\n        });\n      }\n      try {\n        await this.args.model.save(copiedData);\n        this.toasts.success({\n          data: {\n            message: (0, _discourseI18n.i18n)(\"discourse_ai.tools.saved\")\n          },\n          duration: \"short\"\n        });\n        if (!this.args.tools.any(tool => tool.id === this.args.model.id)) {\n          this.args.tools.pushObject(this.args.model);\n        }\n        await this.router.replaceWith(\"adminPlugins.show.discourse-ai-tools.edit\", this.args.model);\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        this.isSaving = false;\n      }\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n    delete() {\n      return this.dialog.confirm({\n        message: (0, _discourseI18n.i18n)(\"discourse_ai.tools.confirm_delete\"),\n        didConfirm: async () => {\n          await this.args.model.destroyRecord();\n          this.args.tools.removeObject(this.args.model);\n          this.router.transitionTo(\"adminPlugins.show.discourse-ai-tools.index\");\n        }\n      });\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"delete\", [_object.action]))();\n    updateUploads(addItemToCollection, uploads) {\n      const uniqueUploads = uploads.filter(upload => !this.uploadedFiles.some(file => file.id === upload.id));\n      addItemToCollection(\"rag_uploads\", uniqueUploads);\n      this.uploadedFiles = [...this.uploadedFiles, ...uniqueUploads];\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"updateUploads\", [_object.action]))();\n    removeUpload(form, upload) {\n      this.uploadedFiles = this.uploadedFiles.filter(file => file.id !== upload.id);\n      form.set(\"rag_uploads\", this.uploadedFiles);\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"removeUpload\", [_object.action]))();\n    openTestModal() {\n      this.modal.show(_aiToolTestModal.default, {\n        model: {\n          tool: this.args.editingModel\n        }\n      });\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"openTestModal\", [_object.action]))();\n    currentParameterSelection(data, index) {\n      return data.parameters[index].type;\n    }\n    get ragUploadsDescription() {\n      return this.siteSettings.rag_images_enabled ? (0, _discourseI18n.i18n)(\"discourse_ai.rag.uploads.description_with_images\") : (0, _discourseI18n.i18n)(\"discourse_ai.rag.uploads.description\");\n    }\n    exportTool() {\n      const exportUrl = `/admin/plugins/discourse-ai/ai-tools/${this.args.model.id}/export.json`;\n      window.location.href = (0, _getUrl.default)(exportUrl);\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"exportTool\", [_object.action]))();\n    static #_15 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <Form\n          @onSubmit={{this.save}}\n          @data={{this.formData}}\n          class=\"ai-tool-editor\"\n          as |form data|\n        >\n          {{! NAME }}\n          <form.Field\n            @name=\"name\"\n            @title={{i18n \"discourse_ai.tools.name\"}}\n            @validation=\"required|length:1,100\"\n            @format=\"large\"\n            @tooltip={{i18n \"discourse_ai.tools.name_help\"}}\n            as |field|\n          >\n            <field.Input class=\"ai-tool-editor__name\" />\n          </form.Field>\n    \n          {{! TOOL NAME }}\n          <form.Field\n            @name=\"tool_name\"\n            @title={{i18n \"discourse_ai.tools.tool_name\"}}\n            @validation=\"required|length:1,100\"\n            @format=\"large\"\n            @tooltip={{i18n \"discourse_ai.tools.tool_name_help\"}}\n            as |field|\n          >\n            <field.Input class=\"ai-tool-editor__tool_name\" />\n          </form.Field>\n    \n          {{! DESCRIPTION }}\n          <form.Field\n            @name=\"description\"\n            @title={{i18n \"discourse_ai.tools.description\"}}\n            @validation=\"required|length:1,1000\"\n            @format=\"full\"\n            @tooltip={{i18n \"discourse_ai.tools.description_help\"}}\n            as |field|\n          >\n            <field.Textarea\n              @height={{60}}\n              class=\"ai-tool-editor__description\"\n              placeholder={{i18n \"discourse_ai.tools.description_help\"}}\n            />\n          </form.Field>\n    \n          {{! SUMMARY }}\n          <form.Field\n            @name=\"summary\"\n            @title={{i18n \"discourse_ai.tools.summary\"}}\n            @validation=\"required|length:1,255\"\n            @format=\"large\"\n            @tooltip={{i18n \"discourse_ai.tools.summary_help\"}}\n            as |field|\n          >\n            <field.Input class=\"ai-tool-editor__summary\" />\n          </form.Field>\n    \n          {{! PARAMETERS }}\n          <form.Collection @name=\"parameters\" as |collection index collectionData|>\n            <form.Container class=\"ai-tool-parameter\">\n              <form.Row as |row|>\n                <row.Col @size={{6}}>\n                  <collection.Field\n                    @name=\"name\"\n                    @title={{i18n \"discourse_ai.tools.parameter_name\"}}\n                    @validation=\"required|length:1,100\"\n                    @format=\"full\"\n                    as |field|\n                  >\n                    <field.Input />\n                  </collection.Field>\n                </row.Col>\n    \n                <row.Col @size={{6}}>\n                  <collection.Field\n                    @name=\"type\"\n                    @title={{i18n \"discourse_ai.tools.parameter_type\"}}\n                    @validation=\"required\"\n                    @format=\"full\"\n                    as |field|\n                  >\n                    <field.Select as |select|>\n                      {{#each this.PARAMETER_TYPES as |type|}}\n                        <select.Option\n                          @value={{type.id}}\n                        >{{type.name}}</select.Option>\n                      {{/each}}\n                    </field.Select>\n                  </collection.Field>\n                </row.Col>\n              </form.Row>\n    \n              <form.Row as |row|>\n                <row.Col @size={{12}}>\n                  <collection.Field\n                    @name=\"description\"\n                    @title={{i18n \"discourse_ai.tools.parameter_description\"}}\n                    @validation=\"required|length:1,1000\"\n                    @format=\"full\"\n                    as |field|\n                  >\n                    <field.Input class=\"ai-tool-editor__parameter-description\" />\n                  </collection.Field>\n                </row.Col>\n              </form.Row>\n    \n              <form.Row as |row|>\n                <row.Col>\n                  <collection.Field @name=\"required\" @title=\"Required\" as |field|>\n                    <field.Checkbox />\n                  </collection.Field>\n                </row.Col>\n    \n                <row.Col>\n                  <collection.Field\n                    @name=\"isEnum\"\n                    @title=\"Enum\"\n                    @onSet={{this.toggleIsEnum}}\n                    as |field|\n                  >\n                    <field.Checkbox />\n                  </collection.Field>\n                </row.Col>\n    \n                {{#if collectionData.isEnum}}\n                  <row.Col @size={{8}}>\n                    <collection.Collection @name=\"enum\" as |child childIndex|>\n                      <form.Container class=\"ai-tool-parameter__enum-values\">\n                        <child.Field\n                          @title={{i18n \"discourse_ai.tools.enum_value\"}}\n                          @validation=\"required\"\n                          as |field|\n                        >\n                          <field.Input />\n    \n                          {{#if\n                            (and\n                              (gt collectionData.enum.length 1) (gt childIndex 0)\n                            )\n                          }}\n                            <form.Button\n                              class=\"btn-danger\"\n                              @icon=\"trash-can\"\n                              @action={{fn child.remove childIndex}}\n                            />\n                          {{/if}}\n                        </child.Field>\n                      </form.Container>\n                    </collection.Collection>\n                  </row.Col>\n    \n                  <row.Col @size={{8}}>\n                    <form.Button\n                      @icon=\"plus\"\n                      @label=\"discourse_ai.tools.add_enum_value\"\n                      @action={{fn\n                        form.addItemToCollection\n                        (concat \"parameters.\" index \".enum\")\n                        \"\"\n                      }}\n                    />\n                  </row.Col>\n                {{/if}}\n              </form.Row>\n              <form.Row as |row|>\n                <row.Col class=\"ai-tool-parameter-actions\">\n                  <form.Button\n                    @label=\"discourse_ai.tools.remove_parameter\"\n                    @icon=\"trash-can\"\n                    @action={{fn collection.remove index}}\n                    class=\"btn-danger\"\n                  />\n                </row.Col>\n              </form.Row>\n            </form.Container>\n          </form.Collection>\n    \n          <form.Button\n            @icon=\"plus\"\n            @label=\"discourse_ai.tools.add_parameter\"\n            @action={{fn\n              form.addItemToCollection\n              \"parameters\"\n              (hash\n                name=\"\" type=\"string\" description=\"\" required=false isEnum=false\n              )\n            }}\n          />\n    \n          {{! SCRIPT }}\n          <form.Field\n            @name=\"script\"\n            @title={{i18n \"discourse_ai.tools.script\"}}\n            @validation=\"required|length:1,100000\"\n            @format=\"full\"\n            as |field|\n          >\n            <field.Code @lang=\"javascript\" @height={{600}} />\n          </form.Field>\n    \n          {{! UPLOADS }}\n          {{#if this.siteSettings.ai_embeddings_enabled}}\n            <form.Field\n              @name=\"rag_uploads\"\n              @title={{i18n \"discourse_ai.rag.uploads.title\"}}\n              @tooltip={{this.ragUploadsDescription}}\n              @format=\"full\"\n              as |field|\n            >\n              <field.Custom>\n                <RagUploader\n                  @target={{@editingModel}}\n                  @updateUploads={{fn this.updateUploads form.addItemToCollection}}\n                  @onRemove={{fn this.removeUpload form}}\n                  @allowImages={{@settings.rag_images_enabled}}\n                />\n                <RagOptionsFk\n                  @form={{form}}\n                  @data={{data}}\n                  @llms={{@llms}}\n                  @allowImages={{@settings.rag_images_enabled}}\n                />\n              </field.Custom>\n            </form.Field>\n          {{/if}}\n    \n          <form.Actions>\n            {{#unless @isNew}}\n              <form.Button\n                @label=\"discourse_ai.tools.test\"\n                @action={{this.openTestModal}}\n                class=\"ai-tool-editor__test-button\"\n              />\n              <form.Button\n                @label=\"discourse_ai.tools.export\"\n                @action={{this.exportTool}}\n                class=\"ai-tool-editor__export\"\n              />\n              <form.Button\n                @label=\"discourse_ai.tools.delete\"\n                @icon=\"trash-can\"\n                @action={{this.delete}}\n                class=\"btn-danger ai-tool-editor__delete\"\n              />\n            {{/unless}}\n    \n            <form.Submit\n              @label=\"discourse_ai.tools.save\"\n              class=\"ai-tool-editor__save\"\n            />\n          </form.Actions>\n        </Form>\n      \n    */\n    {\n      \"id\": \"kA857xo2\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-tool-editor\\\"]],[[\\\"@onSubmit\\\",\\\"@data\\\"],[[30,0,[\\\"save\\\"]],[30,0,[\\\"formData\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[1,\\\"      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\",\\\"@tooltip\\\"],[\\\"name\\\",[28,[32,1],[\\\"discourse_ai.tools.name\\\"],null],\\\"required|length:1,100\\\",\\\"large\\\",[28,[32,1],[\\\"discourse_ai.tools.name_help\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,3,[\\\"Input\\\"]],[[24,0,\\\"ai-tool-editor__name\\\"]],null,null],[1,\\\"\\\\n      \\\"]],[3]]]]],[1,\\\"\\\\n\\\\n\\\"],[1,\\\"      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\",\\\"@tooltip\\\"],[\\\"tool_name\\\",[28,[32,1],[\\\"discourse_ai.tools.tool_name\\\"],null],\\\"required|length:1,100\\\",\\\"large\\\",[28,[32,1],[\\\"discourse_ai.tools.tool_name_help\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,4,[\\\"Input\\\"]],[[24,0,\\\"ai-tool-editor__tool_name\\\"]],null,null],[1,\\\"\\\\n      \\\"]],[4]]]]],[1,\\\"\\\\n\\\\n\\\"],[1,\\\"      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\",\\\"@tooltip\\\"],[\\\"description\\\",[28,[32,1],[\\\"discourse_ai.tools.description\\\"],null],\\\"required|length:1,1000\\\",\\\"full\\\",[28,[32,1],[\\\"discourse_ai.tools.description_help\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,5,[\\\"Textarea\\\"]],[[24,0,\\\"ai-tool-editor__description\\\"],[16,\\\"placeholder\\\",[28,[32,1],[\\\"discourse_ai.tools.description_help\\\"],null]]],[[\\\"@height\\\"],[60]],null],[1,\\\"\\\\n      \\\"]],[5]]]]],[1,\\\"\\\\n\\\\n\\\"],[1,\\\"      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\",\\\"@tooltip\\\"],[\\\"summary\\\",[28,[32,1],[\\\"discourse_ai.tools.summary\\\"],null],\\\"required|length:1,255\\\",\\\"large\\\",[28,[32,1],[\\\"discourse_ai.tools.summary_help\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,6,[\\\"Input\\\"]],[[24,0,\\\"ai-tool-editor__summary\\\"]],null,null],[1,\\\"\\\\n      \\\"]],[6]]]]],[1,\\\"\\\\n\\\\n\\\"],[1,\\\"      \\\"],[8,[30,1,[\\\"Collection\\\"]],null,[[\\\"@name\\\"],[\\\"parameters\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,1,[\\\"Container\\\"]],[[24,0,\\\"ai-tool-parameter\\\"]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,1,[\\\"Row\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,10,[\\\"Col\\\"]],null,[[\\\"@size\\\"],[6]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,7,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"name\\\",[28,[32,1],[\\\"discourse_ai.tools.parameter_name\\\"],null],\\\"required|length:1,100\\\",\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,11,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n              \\\"]],[11]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,10,[\\\"Col\\\"]],null,[[\\\"@size\\\"],[6]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,7,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"type\\\",[28,[32,1],[\\\"discourse_ai.tools.parameter_type\\\"],null],\\\"required\\\",\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,12,[\\\"Select\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"PARAMETER_TYPES\\\"]]],null]],null],null,[[[1,\\\"                    \\\"],[8,[30,13,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,14,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,14,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[14]],null],[1,\\\"                \\\"]],[13]]]]],[1,\\\"\\\\n              \\\"]],[12]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[10]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,1,[\\\"Row\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,15,[\\\"Col\\\"]],null,[[\\\"@size\\\"],[12]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,7,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"description\\\",[28,[32,1],[\\\"discourse_ai.tools.parameter_description\\\"],null],\\\"required|length:1,1000\\\",\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,16,[\\\"Input\\\"]],[[24,0,\\\"ai-tool-editor__parameter-description\\\"]],null,null],[1,\\\"\\\\n              \\\"]],[16]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[15]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,1,[\\\"Row\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,17,[\\\"Col\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,7,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\"],[\\\"required\\\",\\\"Required\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,18,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n              \\\"]],[18]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,17,[\\\"Col\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,7,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@onSet\\\"],[\\\"isEnum\\\",\\\"Enum\\\",[30,0,[\\\"toggleIsEnum\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,19,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n              \\\"]],[19]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,9,[\\\"isEnum\\\"]],[[[1,\\\"              \\\"],[8,[30,17,[\\\"Col\\\"]],null,[[\\\"@size\\\"],[8]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,7,[\\\"Collection\\\"]],null,[[\\\"@name\\\"],[\\\"enum\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[30,1,[\\\"Container\\\"]],[[24,0,\\\"ai-tool-parameter__enum-values\\\"]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,20,[\\\"Field\\\"]],null,[[\\\"@title\\\",\\\"@validation\\\"],[[28,[32,1],[\\\"discourse_ai.tools.enum_value\\\"],null],\\\"required\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[8,[30,22,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[32,2],[[28,[32,3],[[30,9,[\\\"enum\\\",\\\"length\\\"]],1],null],[28,[32,3],[[30,21],0],null]],null],[[[1,\\\"                        \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"btn-danger\\\"]],[[\\\"@icon\\\",\\\"@action\\\"],[\\\"trash-can\\\",[28,[32,4],[[30,20,[\\\"remove\\\"]],[30,21]],null]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                    \\\"]],[22]]]]],[1,\\\"\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n                \\\"]],[20,21]]]]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n              \\\"],[8,[30,17,[\\\"Col\\\"]],null,[[\\\"@size\\\"],[8]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,1,[\\\"Button\\\"]],null,[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"plus\\\",\\\"discourse_ai.tools.add_enum_value\\\",[28,[32,4],[[30,1,[\\\"addItemToCollection\\\"]],[28,[32,5],[\\\"parameters.\\\",[30,8],\\\".enum\\\"],null],\\\"\\\"],null]]],null],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"]],[17]]]]],[1,\\\"\\\\n          \\\"],[8,[30,1,[\\\"Row\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,23,[\\\"Col\\\"]],[[24,0,\\\"ai-tool-parameter-actions\\\"]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"btn-danger\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[\\\"discourse_ai.tools.remove_parameter\\\",\\\"trash-can\\\",[28,[32,4],[[30,7,[\\\"remove\\\"]],[30,8]],null]]],null],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[23]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[7,8,9]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"Button\\\"]],null,[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"plus\\\",\\\"discourse_ai.tools.add_parameter\\\",[28,[32,4],[[30,1,[\\\"addItemToCollection\\\"]],\\\"parameters\\\",[28,[32,6],null,[[\\\"name\\\",\\\"type\\\",\\\"description\\\",\\\"required\\\",\\\"isEnum\\\"],[\\\"\\\",\\\"string\\\",\\\"\\\",false,false]]]],null]]],null],[1,\\\"\\\\n\\\\n\\\"],[1,\\\"      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"script\\\",[28,[32,1],[\\\"discourse_ai.tools.script\\\"],null],\\\"required|length:1,100000\\\",\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,24,[\\\"Code\\\"]],null,[[\\\"@lang\\\",\\\"@height\\\"],[\\\"javascript\\\",600]],null],[1,\\\"\\\\n      \\\"]],[24]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"siteSettings\\\",\\\"ai_embeddings_enabled\\\"]],[[[1,\\\"        \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"rag_uploads\\\",[28,[32,1],[\\\"discourse_ai.rag.uploads.title\\\"],null],[30,0,[\\\"ragUploadsDescription\\\"]],\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,25,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[32,7],null,[[\\\"@target\\\",\\\"@updateUploads\\\",\\\"@onRemove\\\",\\\"@allowImages\\\"],[[30,26],[28,[32,4],[[30,0,[\\\"updateUploads\\\"]],[30,1,[\\\"addItemToCollection\\\"]]],null],[28,[32,4],[[30,0,[\\\"removeUpload\\\"]],[30,1]],null],[30,27,[\\\"rag_images_enabled\\\"]]]],null],[1,\\\"\\\\n            \\\"],[8,[32,8],null,[[\\\"@form\\\",\\\"@data\\\",\\\"@llms\\\",\\\"@allowImages\\\"],[[30,1],[30,2],[30,28],[30,27,[\\\"rag_images_enabled\\\"]]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[25]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[8,[30,1,[\\\"Actions\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,29]],[[[1,\\\"          \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"ai-tool-editor__test-button\\\"]],[[\\\"@label\\\",\\\"@action\\\"],[\\\"discourse_ai.tools.test\\\",[30,0,[\\\"openTestModal\\\"]]]],null],[1,\\\"\\\\n          \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"ai-tool-editor__export\\\"]],[[\\\"@label\\\",\\\"@action\\\"],[\\\"discourse_ai.tools.export\\\",[30,0,[\\\"exportTool\\\"]]]],null],[1,\\\"\\\\n          \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"btn-danger ai-tool-editor__delete\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[\\\"discourse_ai.tools.delete\\\",\\\"trash-can\\\",[30,0,[\\\"delete\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[8,[30,1,[\\\"Submit\\\"]],[[24,0,\\\"ai-tool-editor__save\\\"]],[[\\\"@label\\\"],[\\\"discourse_ai.tools.save\\\"]],null],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n    \\\"]],[1,2]]]]],[1,\\\"\\\\n  \\\"]],[\\\"form\\\",\\\"data\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"collection\\\",\\\"index\\\",\\\"collectionData\\\",\\\"row\\\",\\\"field\\\",\\\"field\\\",\\\"select\\\",\\\"type\\\",\\\"row\\\",\\\"field\\\",\\\"row\\\",\\\"field\\\",\\\"field\\\",\\\"child\\\",\\\"childIndex\\\",\\\"field\\\",\\\"row\\\",\\\"field\\\",\\\"field\\\",\\\"@editingModel\\\",\\\"@settings\\\",\\\"@llms\\\",\\\"@isNew\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-tool-editor-form.js\",\n      \"scope\": () => [_form.default, _discourseI18n.i18n, _truthHelpers.and, _truthHelpers.gt, _helper.fn, _helper.concat, _helper.hash, _ragUploader.default, _ragOptionsFk.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiToolEditorForm;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-tool-editor\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/components/back-button\", \"discourse/plugins/discourse-ai/discourse/components/ai-tool-editor-form\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _backButton, _aiToolEditorForm, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiToolEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"store\", [_service.service]))();\n    #store = (() => (dt7948.i(this, \"store\"), void 0))();\n    get selectedPreset() {\n      if (!this.args.selectedPreset) {\n        return this.args.presets.findBy(\"preset_id\", \"empty_tool\");\n      }\n      return this.args.presets.findBy(\"preset_id\", this.args.selectedPreset);\n    }\n    get editingModel() {\n      if (this.args.model.isNew) {\n        return this.store.createRecord(\"ai-tool\", this.selectedPreset);\n      } else {\n        return this.args.model;\n      }\n    }\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <BackButton\n          @route=\"adminPlugins.show.discourse-ai-tools\"\n          @label=\"discourse_ai.tools.back\"\n        />\n    \n        <AiToolEditorForm\n          @model={{@model}}\n          @tools={{@tools}}\n          @editingModel={{this.editingModel}}\n          @isNew={{@model.isNew}}\n          @selectedPreset={{this.selectedPreset}}\n        />\n      \n    */\n    {\n      \"id\": \"+YeIg+yc\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@route\\\",\\\"@label\\\"],[\\\"adminPlugins.show.discourse-ai-tools\\\",\\\"discourse_ai.tools.back\\\"]],null],[1,\\\"\\\\n\\\\n    \\\"],[8,[32,1],null,[[\\\"@model\\\",\\\"@tools\\\",\\\"@editingModel\\\",\\\"@isNew\\\",\\\"@selectedPreset\\\"],[[30,1],[30,2],[30,0,[\\\"editingModel\\\"]],[30,1,[\\\"isNew\\\"]],[30,0,[\\\"selectedPreset\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[\\\"@model\\\",\\\"@tools\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-tool-editor.js\",\n      \"scope\": () => [_backButton.default, _aiToolEditorForm.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiToolEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-tool-list-editor\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/object\", \"@ember/routing\", \"@ember/service\", \"truth-helpers\", \"discourse/components/d-breadcrumbs-item\", \"discourse/components/d-button\", \"discourse/components/d-page-subheader\", \"discourse/components/dropdown-menu\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"admin/components/admin-config-area-empty-list\", \"float-kit/components/d-menu\", \"discourse/plugins/discourse-ai/discourse/admin/models/ai-tool\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _object, _routing, _service, _truthHelpers, _dBreadcrumbsItem, _dButton, _dPageSubheader, _dropdownMenu, _ajax, _ajaxError, _discourseI18n, _adminConfigAreaEmptyList, _dMenu, _aiTool, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiToolListEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"adminPluginNavManager\", [_service.service]))();\n    #adminPluginNavManager = (() => (dt7948.i(this, \"adminPluginNavManager\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"dialog\", [_service.service]))();\n    #dialog = (() => (dt7948.i(this, \"dialog\"), void 0))();\n    get lastIndexOfPresets() {\n      return this.args.tools.resultSetMeta.presets.length - 1;\n    }\n    routeToNewTool(preset) {\n      return this.router.transitionTo(\"adminPlugins.show.discourse-ai-tools.new\", {\n        queryParams: {\n          presetId: preset.preset_id\n        }\n      });\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"routeToNewTool\", [_object.action]))();\n    importTool() {\n      // Create a hidden file input and click it\n      const fileInput = document.createElement(\"input\");\n      fileInput.type = \"file\";\n      fileInput.accept = \".json\";\n      fileInput.style.display = \"none\";\n      fileInput.onchange = event => this.handleFileSelect(event);\n      document.body.appendChild(fileInput);\n      fileInput.click();\n      document.body.removeChild(fileInput);\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"importTool\", [_object.action]))();\n    handleFileSelect(event) {\n      const file = event.target.files[0];\n      if (!file) {\n        return;\n      }\n      const reader = new FileReader();\n      reader.onload = e => {\n        try {\n          const json = JSON.parse(e.target.result);\n          this.uploadTool(json.ai_tool);\n        } catch {\n          this.dialog.alert((0, _discourseI18n.i18n)(\"discourse_ai.tools.import_error_not_json\"));\n        }\n      };\n      reader.readAsText(file);\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"handleFileSelect\", [_object.action]))();\n    uploadTool(toolData) {\n      let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      let url = `/admin/plugins/discourse-ai/ai-tools/import.json`;\n      const payload = {\n        ai_tool: toolData\n      };\n      if (force) {\n        payload.force = true;\n      }\n      return (0, _ajax.ajax)(url, {\n        type: \"POST\",\n        data: JSON.stringify(payload),\n        contentType: \"application/json\"\n      }).then(result => {\n        let tool = _aiTool.default.create(result.ai_tool);\n        let existingTool = this.args.tools.findBy(\"id\", tool.id);\n        if (existingTool) {\n          this.args.tools.removeObject(existingTool);\n        }\n        this.args.tools.insertAt(0, tool);\n      }).catch(error => {\n        if (error.jqXHR?.status === 409) {\n          this.dialog.confirm({\n            message: (0, _discourseI18n.i18n)(\"discourse_ai.tools.import_error_conflict\", {\n              name: toolData.tool_name\n            }),\n            confirmButtonLabel: \"discourse_ai.tools.overwrite\",\n            didConfirm: () => this.uploadTool(toolData, true)\n          });\n        } else {\n          (0, _ajaxError.popupAjaxError)(error);\n        }\n      });\n    }\n    static #_7 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DBreadcrumbsItem\n          @path=\"/admin/plugins/{{this.adminPluginNavManager.currentPlugin.name}}/ai-tools\"\n          @label={{i18n \"discourse_ai.tools.short_title\"}}\n        />\n        <section class=\"ai-tool-list-editor__current admin-detail pull-left\">\n          <DPageSubheader\n            @titleLabel={{i18n \"discourse_ai.tools.short_title\"}}\n            @learnMoreUrl=\"https://meta.discourse.org/t/ai-bot-custom-tools/314103\"\n            @descriptionLabel={{i18n \"discourse_ai.tools.subheader_description\"}}\n          >\n            <:actions>\n              <DButton\n                @translatedLabel={{i18n \"discourse_ai.tools.import\"}}\n                @icon=\"upload\"\n                class=\"btn btn-small ai-tool-list-editor__import-button\"\n                @action={{this.importTool}}\n              />\n              <DMenu\n                @triggerClass=\"btn-primary btn-small ai-tool-list-editor__new-button\"\n                @label={{i18n \"discourse_ai.tools.new\"}}\n                @icon=\"plus\"\n                @placement=\"bottom-end\"\n              >\n                <:content>\n                  <DropdownMenu as |dropdown|>\n                    {{#each @tools.resultSetMeta.presets as |preset index|}}\n                      {{#if (eq index this.lastIndexOfPresets)}}\n                        <dropdown.divider />\n                      {{/if}}\n    \n                      <dropdown.item>\n                        <DButton\n                          @translatedLabel={{preset.preset_name}}\n                          @action={{fn this.routeToNewTool preset}}\n                          class=\"btn-transparent\"\n                          data-option={{preset.preset_id}}\n                        />\n                      </dropdown.item>\n                    {{/each}}\n                  </DropdownMenu>\n    \n                </:content>\n              </DMenu>\n            </:actions>\n          </DPageSubheader>\n    \n          {{#if @tools}}\n            <table class=\"d-admin-table ai-tool-list-editor\">\n              <thead>\n                <th>{{i18n \"discourse_ai.tools.name\"}}</th>\n                <th></th>\n              </thead>\n              <tbody>\n                {{#each @tools as |tool|}}\n                  <tr\n                    data-tool-id={{tool.id}}\n                    class=\"ai-tool-list__row d-admin-row__content\"\n                  >\n                    <td class=\"d-admin-row__overview\">\n                      <div class=\"ai-tool-list__name-with-description\">\n                        <div class=\"ai-tool-list__name\">\n                          <strong>\n                            {{tool.name}}\n                          </strong>\n                        </div>\n                        <div class=\"ai-tool-list__description\">\n                          {{tool.description}}\n                        </div>\n                      </div>\n                    </td>\n                    <td class=\"d-admin-row__controls\">\n                      <LinkTo\n                        @route=\"adminPlugins.show.discourse-ai-tools.edit\"\n                        @model={{tool}}\n                        class=\"btn btn-text btn-small\"\n                      >{{i18n \"discourse_ai.tools.edit\"}}</LinkTo>\n                    </td>\n                  </tr>\n                {{/each}}\n              </tbody>\n            </table>\n          {{else}}\n            <AdminConfigAreaEmptyList\n              @ctaLabel=\"discourse_ai.tools.new\"\n              @ctaRoute=\"adminPlugins.show.discourse-ai-tools.new\"\n              @ctaClass=\"ai-tool-list-editor__empty-new-button\"\n              @emptyLabel=\"discourse_ai.tools.no_tools\"\n            />\n          {{/if}}\n        </section>\n      \n    */\n    {\n      \"id\": \"JdJLSec5\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@path\\\",\\\"@label\\\"],[[29,[\\\"/admin/plugins/\\\",[30,0,[\\\"adminPluginNavManager\\\",\\\"currentPlugin\\\",\\\"name\\\"]],\\\"/ai-tools\\\"]],[28,[32,1],[\\\"discourse_ai.tools.short_title\\\"],null]]],null],[1,\\\"\\\\n    \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-tool-list-editor__current admin-detail pull-left\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,2],null,[[\\\"@titleLabel\\\",\\\"@learnMoreUrl\\\",\\\"@descriptionLabel\\\"],[[28,[32,1],[\\\"discourse_ai.tools.short_title\\\"],null],\\\"https://meta.discourse.org/t/ai-bot-custom-tools/314103\\\",[28,[32,1],[\\\"discourse_ai.tools.subheader_description\\\"],null]]],[[\\\"actions\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[32,3],[[24,0,\\\"btn btn-small ai-tool-list-editor__import-button\\\"]],[[\\\"@translatedLabel\\\",\\\"@icon\\\",\\\"@action\\\"],[[28,[32,1],[\\\"discourse_ai.tools.import\\\"],null],\\\"upload\\\",[30,0,[\\\"importTool\\\"]]]],null],[1,\\\"\\\\n          \\\"],[8,[32,4],null,[[\\\"@triggerClass\\\",\\\"@label\\\",\\\"@icon\\\",\\\"@placement\\\"],[\\\"btn-primary btn-small ai-tool-list-editor__new-button\\\",[28,[32,1],[\\\"discourse_ai.tools.new\\\"],null],\\\"plus\\\",\\\"bottom-end\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[32,5],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,2,[\\\"resultSetMeta\\\",\\\"presets\\\"]]],null]],null],null,[[[41,[28,[32,6],[[30,4],[30,0,[\\\"lastIndexOfPresets\\\"]]],null],[[[1,\\\"                    \\\"],[8,[30,1,[\\\"divider\\\"]],null,null,null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n                  \\\"],[8,[30,1,[\\\"item\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[32,3],[[24,0,\\\"btn-transparent\\\"],[16,\\\"data-option\\\",[30,3,[\\\"preset_id\\\"]]]],[[\\\"@translatedLabel\\\",\\\"@action\\\"],[[30,3,[\\\"preset_name\\\"]],[28,[32,7],[[30,0,[\\\"routeToNewTool\\\"]],[30,3]],null]]],null],[1,\\\"\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[3,4]],null],[1,\\\"              \\\"]],[1]]]]],[1,\\\"\\\\n\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,2],[[[1,\\\"        \\\"],[10,\\\"table\\\"],[14,0,\\\"d-admin-table ai-tool-list-editor\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.tools.name\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,2]],null]],null],null,[[[1,\\\"              \\\"],[10,\\\"tr\\\"],[15,\\\"data-tool-id\\\",[30,5,[\\\"id\\\"]]],[14,0,\\\"ai-tool-list__row d-admin-row__content\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__overview\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"ai-tool-list__name-with-description\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"ai-tool-list__name\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[30,5,[\\\"name\\\"]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"ai-tool-list__description\\\"],[12],[1,\\\"\\\\n                      \\\"],[1,[30,5,[\\\"description\\\"]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__controls\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[32,8],[[24,0,\\\"btn btn-text btn-small\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"adminPlugins.show.discourse-ai-tools.edit\\\",[30,5]]],[[\\\"default\\\"],[[[[1,[28,[32,1],[\\\"discourse_ai.tools.edit\\\"],null]]],[]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[5]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[32,9],null,[[\\\"@ctaLabel\\\",\\\"@ctaRoute\\\",\\\"@ctaClass\\\",\\\"@emptyLabel\\\"],[\\\"discourse_ai.tools.new\\\",\\\"adminPlugins.show.discourse-ai-tools.new\\\",\\\"ai-tool-list-editor__empty-new-button\\\",\\\"discourse_ai.tools.no_tools\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"dropdown\\\",\\\"@tools\\\",\\\"preset\\\",\\\"index\\\",\\\"tool\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-tool-list-editor.js\",\n      \"scope\": () => [_dBreadcrumbsItem.default, _discourseI18n.i18n, _dPageSubheader.default, _dButton.default, _dMenu.default, _dropdownMenu.default, _truthHelpers.eq, _helper.fn, _routing.LinkTo, _adminConfigAreaEmptyList.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiToolListEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-tool-selector\", [\"exports\", \"@ember/helper\", \"select-kit/components/multi-select\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _helper, _multiSelect, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AiToolSelector = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <MultiSelect\n      @value={{@value}}\n      @onChange={{@onChange}}\n      @content={{@content}}\n      @options={{hash filterable=true allowAny=false disabled=@disabled}}\n    />\n  \n  */\n  {\n    \"id\": \"gsEPc7NG\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[8,[32,0],null,[[\\\"@value\\\",\\\"@onChange\\\",\\\"@content\\\",\\\"@options\\\"],[[30,1],[30,2],[30,3],[28,[32,1],null,[[\\\"filterable\\\",\\\"allowAny\\\",\\\"disabled\\\"],[true,false,[30,4]]]]]],null],[1,\\\"\\\\n\\\"]],[\\\"@value\\\",\\\"@onChange\\\",\\\"@content\\\",\\\"@disabled\\\"],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-tool-selector.js\",\n    \"scope\": () => [_multiSelect.default, _helper.hash],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-tool-selector:AiToolSelector\"));\n  var _default = _exports.default = AiToolSelector;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-topic-gist\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"@ember/template\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _template, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTopicGist extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"gists\", [_service.service]))();\n    #gists = (() => (dt7948.i(this, \"gists\"), void 0))();\n    get shouldShow() {\n      return this.gists.preference === \"table-ai\" && this.gists.shouldShow;\n    }\n    get hasGist() {\n      return !!this.gist;\n    }\n    get gist() {\n      return this.args.topic.get(\"ai_topic_gist\");\n    }\n    get escapedExcerpt() {\n      return this.args.topic.get(\"escapedExcerpt\");\n    }\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.shouldShow}}\n          {{#if this.hasGist}}\n            <a href={{@topic.lastUnreadUrl}} class=\"excerpt\">\n              <div class=\"excerpt__contents\">{{this.gist}}</div>\n            </a>\n          {{else}}\n            {{#if this.escapedExcerpt}}\n              <a href={{@topic.lastUnreadUrl}} class=\"excerpt\">\n                <div class=\"excerpt__contents\">\n                  {{htmlSafe this.escapedExcerpt}}\n                </div>\n              </a>\n            {{/if}}\n          {{/if}}\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"Jq5DO/FZ\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"shouldShow\\\"]],[[[41,[30,0,[\\\"hasGist\\\"]],[[[1,\\\"        \\\"],[10,3],[15,6,[30,1,[\\\"lastUnreadUrl\\\"]]],[14,0,\\\"excerpt\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"excerpt__contents\\\"],[12],[1,[30,0,[\\\"gist\\\"]]],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"escapedExcerpt\\\"]],[[[1,\\\"          \\\"],[10,3],[15,6,[30,1,[\\\"lastUnreadUrl\\\"]]],[14,0,\\\"excerpt\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"excerpt__contents\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,0],[[30,0,[\\\"escapedExcerpt\\\"]]],null]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]]]],[]],null],[1,\\\"  \\\"]],[\\\"@topic\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-topic-gist.js\",\n      \"scope\": () => [_template.htmlSafe],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTopicGist;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-usage\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/render-modifiers/modifiers/did-update\", \"@ember/routing\", \"@ember/service\", \"truth-helpers\", \"discourse/components/conditional-loading-spinner\", \"discourse/components/d-button\", \"discourse/components/d-page-subheader\", \"discourse/components/d-stat-tiles\", \"discourse/components/date-time-input-range\", \"discourse/helpers/avatar\", \"discourse/helpers/concat-class\", \"discourse/lib/ajax\", \"discourse/lib/decorators\", \"discourse/lib/formatter\", \"discourse-i18n\", \"admin/components/admin-config-area-card\", \"admin/components/admin-config-area-empty-list\", \"admin/components/chart\", \"select-kit/components/combo-box\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _didInsert, _didUpdate, _routing, _service, _truthHelpers, _conditionalLoadingSpinner, _dButton, _dPageSubheader, _dStatTiles, _dateTimeInputRange, _avatar, _concatClass, _ajax, _decorators, _formatter, _discourseI18n, _adminConfigAreaCard, _adminConfigAreaEmptyList, _chart, _comboBox, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiUsage extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"store\", [_service.service]))();\n    #store = (() => (dt7948.i(this, \"store\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"startDate\", [_tracking.tracked], function () {\n      return moment().subtract(30, \"days\").toDate();\n    }))();\n    #startDate = (() => (dt7948.i(this, \"startDate\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"endDate\", [_tracking.tracked], function () {\n      return new Date();\n    }))();\n    #endDate = (() => (dt7948.i(this, \"endDate\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"data\", [_tracking.tracked], function () {\n      return this.args.model;\n    }))();\n    #data = (() => (dt7948.i(this, \"data\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"selectedFeature\", [_tracking.tracked]))();\n    #selectedFeature = (() => (dt7948.i(this, \"selectedFeature\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"selectedModel\", [_tracking.tracked]))();\n    #selectedModel = (() => (dt7948.i(this, \"selectedModel\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"selectedPeriod\", [_tracking.tracked], function () {\n      return \"month\";\n    }))();\n    #selectedPeriod = (() => (dt7948.i(this, \"selectedPeriod\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"isCustomDateActive\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isCustomDateActive = (() => (dt7948.i(this, \"isCustomDateActive\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"loadingData\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #loadingData = (() => (dt7948.i(this, \"loadingData\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.fetchData();\n    }\n    async fetchData() {\n      const response = await (0, _ajax.ajax)(\"/admin/plugins/discourse-ai/ai-usage-report.json\", {\n        data: {\n          start_date: moment(this.startDate).format(\"YYYY-MM-DD\"),\n          end_date: moment(this.endDate).format(\"YYYY-MM-DD\"),\n          feature: this.selectedFeature,\n          model: this.selectedModel\n        }\n      });\n      this.data = response;\n      this.loadingData = false;\n      this._cachedFeatures = null;\n      this._cachedModels = null;\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"fetchData\", [_object.action]))();\n    async onFilterChange() {\n      await this.fetchData();\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"onFilterChange\", [_object.action]))();\n    onFeatureChanged(value) {\n      this.selectedFeature = value;\n      this.onFilterChange();\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"onFeatureChanged\", [_object.action]))();\n    onModelChanged(value) {\n      this.selectedModel = value;\n      this.onFilterChange();\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"onModelChanged\", [_object.action]))();\n    addCurrencyChar(element) {\n      element.querySelectorAll(\".d-stat-tile__label\").forEach(label => {\n        if (label.innerText.trim() === (0, _discourseI18n.i18n)(\"discourse_ai.usage.total_spending\")) {\n          const valueElement = label.closest(\".d-stat-tile\")?.querySelector(\".d-stat-tile__value\");\n          if (valueElement) {\n            valueElement.innerText = `$${valueElement.innerText}`;\n          }\n        }\n      });\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"addCurrencyChar\", [_object.action]))();\n    takeUsers(start, end) {\n      return this.data.users.slice(start, end);\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"takeUsers\", [_decorators.bind]))();\n    normalizeTimeSeriesData(data) {\n      if (!data?.length) {\n        return [];\n      }\n      const startDate = moment(this.startDate);\n      const endDate = moment(this.endDate);\n      const normalized = [];\n      let interval;\n      let format;\n      if (this.data.period === \"hour\") {\n        interval = \"hour\";\n        format = \"YYYY-MM-DD HH:00:00\";\n      } else if (this.data.period === \"day\") {\n        interval = \"day\";\n        format = \"YYYY-MM-DD\";\n      } else {\n        interval = \"month\";\n        format = \"YYYY-MM\";\n      }\n      const dataMap = new Map(data.map(d => [moment(d.period).format(format), d]));\n      for (let currentMoment = moment(startDate); currentMoment.isSameOrBefore(endDate); currentMoment.add(1, interval)) {\n        const dateKey = currentMoment.format(format);\n        const existingData = dataMap.get(dateKey);\n        normalized.push(existingData || {\n          period: currentMoment.format(),\n          total_tokens: 0,\n          total_cached_tokens: 0,\n          total_request_tokens: 0,\n          total_response_tokens: 0\n        });\n      }\n      return normalized;\n    }\n    get metrics() {\n      return [{\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.usage.total_requests\"),\n        value: this.data.summary.total_requests,\n        tooltip: (0, _discourseI18n.i18n)(\"discourse_ai.usage.stat_tooltips.total_requests\")\n      }, {\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.usage.total_tokens\"),\n        value: this.data.summary.total_tokens,\n        tooltip: (0, _discourseI18n.i18n)(\"discourse_ai.usage.stat_tooltips.total_tokens\")\n      }, {\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.usage.request_tokens\"),\n        value: this.data.summary.total_request_tokens,\n        tooltip: (0, _discourseI18n.i18n)(\"discourse_ai.usage.stat_tooltips.request_tokens\")\n      }, {\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.usage.response_tokens\"),\n        value: this.data.summary.total_response_tokens,\n        tooltip: (0, _discourseI18n.i18n)(\"discourse_ai.usage.stat_tooltips.response_tokens\")\n      }, {\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.usage.cached_tokens\"),\n        value: this.data.summary.total_cached_tokens,\n        tooltip: (0, _discourseI18n.i18n)(\"discourse_ai.usage.stat_tooltips.cached_tokens\")\n      }, {\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.usage.total_spending\"),\n        value: this.data.summary.total_spending,\n        tooltip: (0, _discourseI18n.i18n)(\"discourse_ai.usage.stat_tooltips.total_spending\")\n      }];\n    }\n    get chartConfig() {\n      if (!this.data?.data) {\n        return;\n      }\n      const normalizedData = this.normalizeTimeSeriesData(this.data.data);\n      const chartEl = document.querySelector(\".ai-usage__chart\");\n      const computedStyle = getComputedStyle(chartEl);\n      const colors = {\n        response: computedStyle.getPropertyValue(\"--chart-response-color\").trim(),\n        request: computedStyle.getPropertyValue(\"--chart-request-color\").trim(),\n        cached: computedStyle.getPropertyValue(\"--chart-cached-color\").trim()\n      };\n      return {\n        type: \"bar\",\n        data: {\n          labels: normalizedData.map(row => {\n            const date = moment(row.period);\n            if (this.data.period === \"hour\") {\n              return date.format(\"HH:00\");\n            } else if (this.data.period === \"day\") {\n              return date.format(\"DD-MMM\");\n            } else {\n              return date.format(\"MMM-YY\");\n            }\n          }),\n          datasets: [{\n            label: (0, _discourseI18n.i18n)(\"discourse_ai.usage.response_tokens\"),\n            data: normalizedData.map(row => row.total_response_tokens),\n            backgroundColor: colors.response\n          }, {\n            label: (0, _discourseI18n.i18n)(\"discourse_ai.usage.net_request_tokens\"),\n            data: normalizedData.map(row => row.total_request_tokens - row.total_cached_tokens),\n            backgroundColor: colors.request\n          }, {\n            label: (0, _discourseI18n.i18n)(\"discourse_ai.usage.cached_request_tokens\"),\n            data: normalizedData.map(row => row.total_cached_tokens),\n            backgroundColor: colors.cached\n          }]\n        },\n        options: {\n          responsive: true,\n          scales: {\n            x: {\n              stacked: true\n            },\n            y: {\n              stacked: true,\n              beginAtZero: true\n            }\n          }\n        }\n      };\n    }\n    get availableFeatures() {\n      // when you switch we don't want the list to change\n      // only when you switch durations\n      this._cachedFeatures = this._cachedFeatures || (this.data?.features || []).map(f => ({\n        id: f.feature_name,\n        name: f.feature_name\n      }));\n      return this._cachedFeatures;\n    }\n    get availableModels() {\n      this._cachedModels = this._cachedModels || (this.data?.models || []).map(m => ({\n        id: m.llm,\n        name: m.llm\n      }));\n      return this._cachedModels;\n    }\n    get periodOptions() {\n      return [{\n        id: \"day\",\n        name: (0, _discourseI18n.i18n)(\"discourse_ai.usage.periods.last_day\")\n      }, {\n        id: \"week\",\n        name: (0, _discourseI18n.i18n)(\"discourse_ai.usage.periods.last_week\")\n      }, {\n        id: \"month\",\n        name: (0, _discourseI18n.i18n)(\"discourse_ai.usage.periods.last_month\")\n      }];\n    }\n    setPeriodDates(period) {\n      const now = moment();\n      switch (period) {\n        case \"day\":\n          this.startDate = now.clone().subtract(1, \"day\").toDate();\n          this.endDate = now.toDate();\n          break;\n        case \"week\":\n          this.startDate = now.clone().subtract(7, \"days\").toDate();\n          this.endDate = now.toDate();\n          break;\n        case \"month\":\n          this.startDate = now.clone().subtract(30, \"days\").toDate();\n          this.endDate = now.toDate();\n          break;\n      }\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"setPeriodDates\", [_object.action]))();\n    onPeriodSelect(period) {\n      this.selectedPeriod = period;\n      this.isCustomDateActive = false;\n      this.setPeriodDates(period);\n      this.fetchData();\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"onPeriodSelect\", [_object.action]))();\n    onCustomDateClick() {\n      this.isCustomDateActive = !this.isCustomDateActive;\n      if (this.isCustomDateActive) {\n        this.selectedPeriod = null;\n      }\n    }\n    static #_18 = (() => dt7948.n(this.prototype, \"onCustomDateClick\", [_object.action]))();\n    onDateChange() {\n      this.isCustomDateActive = true;\n      this.selectedPeriod = null;\n      this.fetchData();\n    }\n    static #_19 = (() => dt7948.n(this.prototype, \"onDateChange\", [_object.action]))();\n    onChangeDateRange(_ref) {\n      let {\n        from,\n        to\n      } = _ref;\n      this._startDate = from;\n      this._endDate = to;\n    }\n    static #_20 = (() => dt7948.n(this.prototype, \"onChangeDateRange\", [_object.action]))();\n    onRefreshDateRange() {\n      this.startDate = this._startDate;\n      this.endDate = this._endDate;\n      this.fetchData();\n    }\n    static #_21 = (() => dt7948.n(this.prototype, \"onRefreshDateRange\", [_object.action]))();\n    totalSpending(inputSpending, cachedSpending, outputSpending) {\n      const total = inputSpending + cachedSpending + outputSpending;\n      return `$${total.toFixed(2)}`;\n    }\n    static #_22 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-usage admin-detail\">\n          <DPageSubheader\n            @titleLabel={{i18n \"discourse_ai.usage.short_title\"}}\n            @learnMoreUrl=\"https://meta.discourse.org/t/-/348677\"\n            @descriptionLabel={{i18n \"discourse_ai.usage.subheader_description\"}}\n          />\n          <div class=\"ai-usage__filters\">\n            <div class=\"ai-usage__filters-dates\">\n              <div class=\"ai-usage__period-buttons\">\n                {{#each this.periodOptions as |option|}}\n                  <DButton\n                    class={{if\n                      (eq this.selectedPeriod option.id)\n                      \"btn-primary\"\n                      \"btn-default\"\n                    }}\n                    @action={{fn this.onPeriodSelect option.id}}\n                    @translatedLabel={{option.name}}\n                  />\n                {{/each}}\n                <DButton\n                  class={{if this.isCustomDateActive \"btn-primary\" \"btn-default\"}}\n                  @action={{this.onCustomDateClick}}\n                  @label=\"discourse_ai.usage.periods.custom\"\n                />\n              </div>\n    \n              {{#if this.isCustomDateActive}}\n                <div class=\"ai-usage__custom-date-pickers\">\n    \n                  <DateTimeInputRange\n                    @from={{this.startDate}}\n                    @to={{this.endDate}}\n                    @onChange={{this.onChangeDateRange}}\n                    @showFromTime={{false}}\n                    @showToTime={{false}}\n                  />\n    \n                  <DButton @action={{this.onRefreshDateRange}} @label=\"refresh\" />\n                </div>\n              {{/if}}\n            </div>\n    \n            <div class=\"ai-usage__filters-row\">\n              <ComboBox\n                @value={{this.selectedFeature}}\n                @content={{this.availableFeatures}}\n                @onChange={{this.onFeatureChanged}}\n                @options={{hash none=\"discourse_ai.usage.all_features\"}}\n                class=\"ai-usage__feature-selector\"\n              />\n    \n              <ComboBox\n                @value={{this.selectedModel}}\n                @content={{this.availableModels}}\n                @onChange={{this.onModelChanged}}\n                @options={{hash none=\"discourse_ai.usage.all_models\"}}\n                class=\"ai-usage__model-selector\"\n              />\n            </div>\n    \n            <ConditionalLoadingSpinner @condition={{this.loadingData}}>\n              <AdminConfigAreaCard\n                @heading=\"discourse_ai.usage.summary\"\n                class=\"ai-usage__summary\"\n              >\n                <:content>\n                  <DStatTiles\n                    {{didInsert this.addCurrencyChar this.metrics}}\n                    {{didUpdate this.addCurrencyChar this.metrics}}\n                    as |tiles|\n                  >\n    \n                    {{#each this.metrics as |metric|}}\n                      <tiles.Tile\n                        class=\"bar\"\n                        @label={{metric.label}}\n                        @href={{metric.href}}\n                        @value={{metric.value}}\n                        @tooltip={{metric.tooltip}}\n                      />\n                    {{/each}}\n                  </DStatTiles>\n                </:content>\n              </AdminConfigAreaCard>\n    \n              <AdminConfigAreaCard\n                class=\"ai-usage__charts\"\n                @heading=\"discourse_ai.usage.tokens_over_time\"\n              >\n                <:content>\n                  <div class=\"ai-usage__chart-container\">\n                    <Chart\n                      @chartConfig={{this.chartConfig}}\n                      class=\"ai-usage__chart\"\n                    />\n                  </div>\n                </:content>\n              </AdminConfigAreaCard>\n    \n              <div class=\"ai-usage__breakdowns\">\n                <AdminConfigAreaCard\n                  class=\"ai-usage__features\"\n                  @heading=\"discourse_ai.usage.features_breakdown\"\n                >\n                  <:content>\n                    {{#unless this.data.features.length}}\n                      <AdminConfigAreaEmptyList\n                        @emptyLabel=\"discourse_ai.usage.no_features\"\n                      />\n                    {{/unless}}\n    \n                    {{#if this.data.features.length}}\n                      <table class=\"ai-usage__features-table\">\n                        <thead>\n                          <tr>\n                            <th>{{i18n \"discourse_ai.usage.feature\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.usage_count\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.total_tokens\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.total_spending\"}}</th>\n                          </tr>\n                        </thead>\n                        <tbody>\n                          {{#each this.data.features as |feature|}}\n                            <tr class=\"ai-usage__features-row\">\n                              <td\n                                class=\"ai-usage__features-cell\"\n                              >{{feature.feature_name}}</td>\n                              <td\n                                class=\"ai-usage__features-cell\"\n                                title={{feature.usage_count}}\n                              >{{number feature.usage_count}}</td>\n                              <td\n                                class=\"ai-usage__features-cell\"\n                                title={{feature.total_tokens}}\n                              >{{number feature.total_tokens}}</td>\n                              <td>\n                                {{this.totalSpending\n                                  feature.input_spending\n                                  feature.cached_input_spending\n                                  feature.output_spending\n                                }}\n                              </td>\n                            </tr>\n                          {{/each}}\n                        </tbody>\n                      </table>\n                    {{/if}}\n                  </:content>\n                </AdminConfigAreaCard>\n    \n                <AdminConfigAreaCard\n                  class=\"ai-usage__models\"\n                  @heading=\"discourse_ai.usage.models_breakdown\"\n                >\n                  <:content>\n                    {{#unless this.data.models.length}}\n                      <AdminConfigAreaEmptyList\n                        @emptyLabel=\"discourse_ai.usage.no_models\"\n                      />\n                    {{/unless}}\n    \n                    {{#if this.data.models.length}}\n                      <table class=\"ai-usage__models-table\">\n                        <thead>\n                          <tr>\n                            <th>{{i18n \"discourse_ai.usage.model\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.usage_count\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.total_tokens\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.total_spending\"}}</th>\n    \n                          </tr>\n                        </thead>\n                        <tbody>\n                          {{#each this.data.models as |model|}}\n                            <tr class=\"ai-usage__models-row\">\n                              <td class=\"ai-usage__models-cell\">{{model.llm}}</td>\n                              <td\n                                class=\"ai-usage__models-cell\"\n                                title={{model.usage_count}}\n                              >{{number model.usage_count}}</td>\n                              <td\n                                class=\"ai-usage__models-cell\"\n                                title={{model.total_tokens}}\n                              >{{number model.total_tokens}}</td>\n                              <td>\n                                {{this.totalSpending\n                                  model.input_spending\n                                  model.cached_input_spending\n                                  model.output_spending\n                                }}\n                              </td>\n                            </tr>\n                          {{/each}}\n                        </tbody>\n                      </table>\n                    {{/if}}\n                  </:content>\n                </AdminConfigAreaCard>\n    \n                <AdminConfigAreaCard\n                  class=\"ai-usage__users\"\n                  @heading=\"discourse_ai.usage.users_breakdown\"\n                >\n                  <:content>\n                    {{#unless this.data.users.length}}\n                      <AdminConfigAreaEmptyList\n                        @emptyLabel=\"discourse_ai.usage.no_users\"\n                      />\n                    {{/unless}}\n    \n                    {{#if this.data.users.length}}\n                      <table\n                        class={{concatClass\n                          \"ai-usage__users-table\"\n                          (if (lt this.data.users.length 25) \"-double-width\")\n                        }}\n                      >\n                        <thead>\n                          <tr>\n                            <th class=\"ai-usage__users-username\">{{i18n\n                                \"discourse_ai.usage.username\"\n                              }}</th>\n                            <th>{{i18n \"discourse_ai.usage.usage_count\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.total_tokens\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.total_spending\"}}</th>\n                          </tr>\n                        </thead>\n                        <tbody>\n                          {{#each (this.takeUsers 0 24) as |user|}}\n                            <tr class=\"ai-usage__users-row\">\n                              <td class=\"ai-usage__users-cell\">\n                                <div class=\"user-info\">\n                                  <LinkTo\n                                    @route=\"user\"\n                                    @model={{user.username}}\n                                    class=\"username\"\n                                  >\n                                    {{avatar user imageSize=\"tiny\"}}\n                                    {{user.username}}\n                                  </LinkTo>\n                                </div></td>\n                              <td\n                                class=\"ai-usage__users-cell\"\n                                title={{user.usage_count}}\n                              >{{number user.usage_count}}</td>\n                              <td\n                                class=\"ai-usage__users-cell\"\n                                title={{user.total_tokens}}\n                              >{{number user.total_tokens}}</td>\n                              <td>\n                                {{this.totalSpending\n                                  user.input_spending\n                                  user.cached_input_spending\n                                  user.output_spending\n                                }}\n                              </td>\n                            </tr>\n                          {{/each}}\n                        </tbody>\n                      </table>\n    \n                      {{#if (gt this.data.users.length 25)}}\n                        <table class=\"ai-usage__users-table\">\n                          <thead>\n                            <tr>\n                              <th class=\"ai-usage__users-username\">{{i18n\n                                  \"discourse_ai.usage.username\"\n                                }}</th>\n                              <th>{{i18n \"discourse_ai.usage.usage_count\"}}</th>\n                              <th>{{i18n \"discourse_ai.usage.total_tokens\"}}</th>\n                            </tr>\n                          </thead>\n                          <tbody>\n                            {{#each (this.takeUsers 25 49) as |user|}}\n                              <tr class=\"ai-usage__users-row\">\n                                <td class=\"ai-usage__users-cell\">\n                                  <div class=\"user-info\">\n                                    <LinkTo\n                                      @route=\"user\"\n                                      @model={{user.username}}\n                                      class=\"username\"\n                                    >\n                                      {{avatar user imageSize=\"tiny\"}}\n                                      {{user.username}}\n                                    </LinkTo>\n                                  </div></td>\n                                <td\n                                  class=\"ai-usage__users-cell\"\n                                  title={{user.usage_count}}\n                                >{{number user.usage_count}}</td>\n                                <td\n                                  class=\"ai-usage__users-cell\"\n                                  title={{user.total_tokens}}\n                                >{{number user.total_tokens}}</td>\n                              </tr>\n                            {{/each}}\n                          </tbody>\n                        </table>\n                      {{/if}}\n                    {{/if}}\n                  </:content>\n                </AdminConfigAreaCard>\n              </div>\n            </ConditionalLoadingSpinner>\n          </div>\n        </div>\n      \n    */\n    {\n      \"id\": \"hX10WeQL\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-usage admin-detail\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],null,[[\\\"@titleLabel\\\",\\\"@learnMoreUrl\\\",\\\"@descriptionLabel\\\"],[[28,[32,1],[\\\"discourse_ai.usage.short_title\\\"],null],\\\"https://meta.discourse.org/t/-/348677\\\",[28,[32,1],[\\\"discourse_ai.usage.subheader_description\\\"],null]]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"ai-usage__filters\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-usage__filters-dates\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"ai-usage__period-buttons\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"periodOptions\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[32,2],[[16,0,[52,[28,[32,3],[[30,0,[\\\"selectedPeriod\\\"]],[30,1,[\\\"id\\\"]]],null],\\\"btn-primary\\\",\\\"btn-default\\\"]]],[[\\\"@action\\\",\\\"@translatedLabel\\\"],[[28,[32,4],[[30,0,[\\\"onPeriodSelect\\\"]],[30,1,[\\\"id\\\"]]],null],[30,1,[\\\"name\\\"]]]],null],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"            \\\"],[8,[32,2],[[16,0,[52,[30,0,[\\\"isCustomDateActive\\\"]],\\\"btn-primary\\\",\\\"btn-default\\\"]]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"onCustomDateClick\\\"]],\\\"discourse_ai.usage.periods.custom\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isCustomDateActive\\\"]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"ai-usage__custom-date-pickers\\\"],[12],[1,\\\"\\\\n\\\\n              \\\"],[8,[32,5],null,[[\\\"@from\\\",\\\"@to\\\",\\\"@onChange\\\",\\\"@showFromTime\\\",\\\"@showToTime\\\"],[[30,0,[\\\"startDate\\\"]],[30,0,[\\\"endDate\\\"]],[30,0,[\\\"onChangeDateRange\\\"]],false,false]],null],[1,\\\"\\\\n\\\\n              \\\"],[8,[32,2],null,[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"onRefreshDateRange\\\"]],\\\"refresh\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"ai-usage__filters-row\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,6],[[24,0,\\\"ai-usage__feature-selector\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\",\\\"@options\\\"],[[30,0,[\\\"selectedFeature\\\"]],[30,0,[\\\"availableFeatures\\\"]],[30,0,[\\\"onFeatureChanged\\\"]],[28,[32,7],null,[[\\\"none\\\"],[\\\"discourse_ai.usage.all_features\\\"]]]]],null],[1,\\\"\\\\n\\\\n          \\\"],[8,[32,6],[[24,0,\\\"ai-usage__model-selector\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\",\\\"@options\\\"],[[30,0,[\\\"selectedModel\\\"]],[30,0,[\\\"availableModels\\\"]],[30,0,[\\\"onModelChanged\\\"]],[28,[32,7],null,[[\\\"none\\\"],[\\\"discourse_ai.usage.all_models\\\"]]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[8,[32,8],null,[[\\\"@condition\\\"],[[30,0,[\\\"loadingData\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[32,9],[[24,0,\\\"ai-usage__summary\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.usage.summary\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[32,10],[[4,[32,11],[[30,0,[\\\"addCurrencyChar\\\"]],[30,0,[\\\"metrics\\\"]]],null],[4,[32,12],[[30,0,[\\\"addCurrencyChar\\\"]],[30,0,[\\\"metrics\\\"]]],null]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"metrics\\\"]]],null]],null],null,[[[1,\\\"                  \\\"],[8,[30,2,[\\\"Tile\\\"]],[[24,0,\\\"bar\\\"]],[[\\\"@label\\\",\\\"@href\\\",\\\"@value\\\",\\\"@tooltip\\\"],[[30,3,[\\\"label\\\"]],[30,3,[\\\"href\\\"]],[30,3,[\\\"value\\\"]],[30,3,[\\\"tooltip\\\"]]]],null],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"              \\\"]],[2]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[32,9],[[24,0,\\\"ai-usage__charts\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.usage.tokens_over_time\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"ai-usage__chart-container\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[32,13],[[24,0,\\\"ai-usage__chart\\\"]],[[\\\"@chartConfig\\\"],[[30,0,[\\\"chartConfig\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\\n          \\\"],[10,0],[14,0,\\\"ai-usage__breakdowns\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[32,9],[[24,0,\\\"ai-usage__features\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.usage.features_breakdown\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"data\\\",\\\"features\\\",\\\"length\\\"]]],[[[1,\\\"                  \\\"],[8,[32,14],null,[[\\\"@emptyLabel\\\"],[\\\"discourse_ai.usage.no_features\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"data\\\",\\\"features\\\",\\\"length\\\"]],[[[1,\\\"                  \\\"],[10,\\\"table\\\"],[14,0,\\\"ai-usage__features-table\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.feature\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.usage_count\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_tokens\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_spending\\\"],null]],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"data\\\",\\\"features\\\"]]],null]],null],null,[[[1,\\\"                        \\\"],[10,\\\"tr\\\"],[14,0,\\\"ai-usage__features-row\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__features-cell\\\"],[12],[1,[30,4,[\\\"feature_name\\\"]]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__features-cell\\\"],[15,\\\"title\\\",[30,4,[\\\"usage_count\\\"]]],[12],[1,[28,[32,15],[[30,4,[\\\"usage_count\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__features-cell\\\"],[15,\\\"title\\\",[30,4,[\\\"total_tokens\\\"]]],[12],[1,[28,[32,15],[[30,4,[\\\"total_tokens\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                            \\\"],[1,[28,[30,0,[\\\"totalSpending\\\"]],[[30,4,[\\\"input_spending\\\"]],[30,4,[\\\"cached_input_spending\\\"]],[30,4,[\\\"output_spending\\\"]]],null]],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[32,9],[[24,0,\\\"ai-usage__models\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.usage.models_breakdown\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"data\\\",\\\"models\\\",\\\"length\\\"]]],[[[1,\\\"                  \\\"],[8,[32,14],null,[[\\\"@emptyLabel\\\"],[\\\"discourse_ai.usage.no_models\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"data\\\",\\\"models\\\",\\\"length\\\"]],[[[1,\\\"                  \\\"],[10,\\\"table\\\"],[14,0,\\\"ai-usage__models-table\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.model\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.usage_count\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_tokens\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_spending\\\"],null]],[13],[1,\\\"\\\\n\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"data\\\",\\\"models\\\"]]],null]],null],null,[[[1,\\\"                        \\\"],[10,\\\"tr\\\"],[14,0,\\\"ai-usage__models-row\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__models-cell\\\"],[12],[1,[30,5,[\\\"llm\\\"]]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__models-cell\\\"],[15,\\\"title\\\",[30,5,[\\\"usage_count\\\"]]],[12],[1,[28,[32,15],[[30,5,[\\\"usage_count\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__models-cell\\\"],[15,\\\"title\\\",[30,5,[\\\"total_tokens\\\"]]],[12],[1,[28,[32,15],[[30,5,[\\\"total_tokens\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                            \\\"],[1,[28,[30,0,[\\\"totalSpending\\\"]],[[30,5,[\\\"input_spending\\\"]],[30,5,[\\\"cached_input_spending\\\"]],[30,5,[\\\"output_spending\\\"]]],null]],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[5]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[32,9],[[24,0,\\\"ai-usage__users\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.usage.users_breakdown\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"data\\\",\\\"users\\\",\\\"length\\\"]]],[[[1,\\\"                  \\\"],[8,[32,14],null,[[\\\"@emptyLabel\\\"],[\\\"discourse_ai.usage.no_users\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"data\\\",\\\"users\\\",\\\"length\\\"]],[[[1,\\\"                  \\\"],[10,\\\"table\\\"],[15,0,[28,[32,16],[\\\"ai-usage__users-table\\\",[52,[28,[32,17],[[30,0,[\\\"data\\\",\\\"users\\\",\\\"length\\\"]],25],null],\\\"-double-width\\\"]],null]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[14,0,\\\"ai-usage__users-username\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.username\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.usage_count\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_tokens\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_spending\\\"],null]],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[28,[30,0,[\\\"takeUsers\\\"]],[0,24],null]],null]],null],null,[[[1,\\\"                        \\\"],[10,\\\"tr\\\"],[14,0,\\\"ai-usage__users-row\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[12],[1,\\\"\\\\n                            \\\"],[10,0],[14,0,\\\"user-info\\\"],[12],[1,\\\"\\\\n                              \\\"],[8,[32,18],[[24,0,\\\"username\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"user\\\",[30,6,[\\\"username\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                                \\\"],[1,[28,[32,19],[[30,6]],[[\\\"imageSize\\\"],[\\\"tiny\\\"]]]],[1,\\\"\\\\n                                \\\"],[1,[30,6,[\\\"username\\\"]]],[1,\\\"\\\\n                              \\\"]],[]]]]],[1,\\\"\\\\n                            \\\"],[13],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[15,\\\"title\\\",[30,6,[\\\"usage_count\\\"]]],[12],[1,[28,[32,15],[[30,6,[\\\"usage_count\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[15,\\\"title\\\",[30,6,[\\\"total_tokens\\\"]]],[12],[1,[28,[32,15],[[30,6,[\\\"total_tokens\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                            \\\"],[1,[28,[30,0,[\\\"totalSpending\\\"]],[[30,6,[\\\"input_spending\\\"]],[30,6,[\\\"cached_input_spending\\\"]],[30,6,[\\\"output_spending\\\"]]],null]],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[6]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[32,20],[[30,0,[\\\"data\\\",\\\"users\\\",\\\"length\\\"]],25],null],[[[1,\\\"                    \\\"],[10,\\\"table\\\"],[14,0,\\\"ai-usage__users-table\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"th\\\"],[14,0,\\\"ai-usage__users-username\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.username\\\"],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.usage_count\\\"],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_tokens\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[28,[30,0,[\\\"takeUsers\\\"]],[25,49],null]],null]],null],null,[[[1,\\\"                          \\\"],[10,\\\"tr\\\"],[14,0,\\\"ai-usage__users-row\\\"],[12],[1,\\\"\\\\n                            \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[12],[1,\\\"\\\\n                              \\\"],[10,0],[14,0,\\\"user-info\\\"],[12],[1,\\\"\\\\n                                \\\"],[8,[32,18],[[24,0,\\\"username\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"user\\\",[30,7,[\\\"username\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                                  \\\"],[1,[28,[32,19],[[30,7]],[[\\\"imageSize\\\"],[\\\"tiny\\\"]]]],[1,\\\"\\\\n                                  \\\"],[1,[30,7,[\\\"username\\\"]]],[1,\\\"\\\\n                                \\\"]],[]]]]],[1,\\\"\\\\n                              \\\"],[13],[13],[1,\\\"\\\\n                            \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[15,\\\"title\\\",[30,7,[\\\"usage_count\\\"]]],[12],[1,[28,[32,15],[[30,7,[\\\"usage_count\\\"]]],null]],[13],[1,\\\"\\\\n                            \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[15,\\\"title\\\",[30,7,[\\\"total_tokens\\\"]]],[12],[1,[28,[32,15],[[30,7,[\\\"total_tokens\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n\\\"]],[7]],null],[1,\\\"                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"              \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"option\\\",\\\"tiles\\\",\\\"metric\\\",\\\"feature\\\",\\\"model\\\",\\\"user\\\",\\\"user\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-usage.js\",\n      \"scope\": () => [_dPageSubheader.default, _discourseI18n.i18n, _dButton.default, _truthHelpers.eq, _helper.fn, _dateTimeInputRange.default, _comboBox.default, _helper.hash, _conditionalLoadingSpinner.default, _adminConfigAreaCard.default, _dStatTiles.default, _didInsert.default, _didUpdate.default, _chart.default, _adminConfigAreaEmptyList.default, _formatter.number, _concatClass.default, _truthHelpers.lt, _routing.LinkTo, _avatar.default, _truthHelpers.gt],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiUsage;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/doughnut-chart\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"admin/components/chart\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _chart, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class DoughnutChart extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"canvasSize\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #canvasSize = (() => (dt7948.i(this, \"canvasSize\"), void 0))();\n    get config() {\n      const totalScore = this.args.totalScore || \"\";\n      return {\n        type: \"doughnut\",\n        data: {\n          labels: this.args.labels,\n          datasets: [{\n            data: this.args.data,\n            backgroundColor: this.args.colors,\n            cutout: \"50%\",\n            radius: 100\n          }]\n        },\n        options: {\n          responsive: true,\n          maintainAspectRatio: false,\n          plugins: {\n            legend: {\n              display: this.args.displayLegend || false,\n              position: \"bottom\"\n            }\n          }\n        },\n        plugins: [{\n          id: \"centerText\",\n          afterDraw: function (chart) {\n            const cssVarColor = getComputedStyle(document.documentElement).getPropertyValue(\"--primary-high\") || \"#000\";\n            const cssFontSize = getComputedStyle(document.documentElement).getPropertyValue(\"--font-up-4\") || \"1.3em\";\n            const cssFontFamily = getComputedStyle(document.documentElement).getPropertyValue(\"--font-family\") || \"sans-serif\";\n            const {\n              ctx,\n              chartArea\n            } = chart;\n            const centerX = (chartArea.left + chartArea.right) / 2;\n            const centerY = (chartArea.top + chartArea.bottom) / 2;\n            ctx.restore();\n            ctx.textAlign = \"center\";\n            ctx.textBaseline = \"middle\";\n            ctx.fillStyle = cssVarColor.trim();\n            ctx.font = `bold ${cssFontSize.trim()} ${cssFontFamily.trim()}`;\n            ctx.fillText(totalScore, centerX, centerY);\n            ctx.save();\n          }\n        }, {\n          // Custom plugin to draw labels inside the doughnut chart\n          id: \"doughnutLabels\",\n          afterDraw(chart) {\n            const ctx = chart.ctx;\n            const dataset = chart.data.datasets[0];\n            const meta = chart.getDatasetMeta(0);\n            const cssFontSize = getComputedStyle(document.documentElement).getPropertyValue(\"--font-down-2\") || \"1.3em\";\n            const cssFontFamily = getComputedStyle(document.documentElement).getPropertyValue(\"--font-family\") || \"sans-serif\";\n            ctx.font = `${cssFontSize.trim()} ${cssFontFamily.trim()}`;\n            ctx.fillStyle = \"#fafafa\";\n            ctx.textAlign = \"center\";\n            ctx.textBaseline = \"middle\";\n            meta.data.forEach((element, index) => {\n              const {\n                x,\n                y\n              } = element.tooltipPosition();\n              const value = dataset.data[index];\n              const nonZeroCount = dataset.data.filter(v => v > 0).length;\n              if (value === 0 || nonZeroCount === 1) {\n                return;\n              }\n              ctx.fillText(value, x, y);\n            });\n          }\n        }]\n      };\n    }\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.config}}\n          <h3 class=\"doughnut-chart-title\">{{@doughnutTitle}}</h3>\n          <Chart @chartConfig={{this.config}} class=\"admin-report-doughnut\" />\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"HiYQwgXb\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"config\\\"]],[[[1,\\\"      \\\"],[10,\\\"h3\\\"],[14,0,\\\"doughnut-chart-title\\\"],[12],[1,[30,1]],[13],[1,\\\"\\\\n      \\\"],[8,[32,0],[[24,0,\\\"admin-report-doughnut\\\"]],[[\\\"@chartConfig\\\"],[[30,0,[\\\"config\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@doughnutTitle\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/doughnut-chart.js\",\n      \"scope\": () => [_chart.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = DoughnutChart;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/ai-llm-quota-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-modal\", \"discourse/components/form\", \"discourse-i18n\", \"select-kit/components/group-chooser\", \"discourse/plugins/discourse-ai/discourse/components/ai-quota-duration-selector\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _service, _dModal, _form, _discourseI18n, _groupChooser, _aiQuotaDurationSelector, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiLlmQuotaModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    save(data) {\n      const quota = {\n        ...data\n      };\n      quota.group_name = this.site.groups.findBy(\"id\", data.group_id).name;\n      quota.llm_model_id = this.args.model.id;\n      this.args.model.addItemToCollection(quota);\n      this.args.closeModal();\n      if (this.args.model.onSave) {\n        this.args.model.onSave();\n      }\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n    get availableGroups() {\n      const existingQuotaGroupIds = this.args.model.llm.llm_quotas.map(q => q.group_id) || [];\n      return this.site.groups.filter(group => !existingQuotaGroupIds.includes(group.id) && group.id !== 0);\n    }\n    get quota() {\n      return {\n        group_id: null,\n        llm_model_id: null,\n        max_tokens: null,\n        max_usages: null,\n        duration_seconds: moment.duration(1, \"day\").asSeconds()\n      };\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"quota\", [_tracking.cached]))();\n    setGroupId(field, groups) {\n      field.set(groups[0]);\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"setGroupId\", [_object.action]))();\n    validateForm(data, _ref) {\n      let {\n        addError,\n        removeError\n      } = _ref;\n      if (!data.max_tokens && !data.max_usages) {\n        addError(\"max_tokens\", {\n          title: (0, _discourseI18n.i18n)(\"discourse_ai.llms.quotas.max_tokens\"),\n          message: (0, _discourseI18n.i18n)(\"discourse_ai.llms.quotas.max_tokens_required\")\n        });\n        addError(\"max_usages\", {\n          title: (0, _discourseI18n.i18n)(\"discourse_ai.llms.quotas.max_usages\"),\n          message: (0, _discourseI18n.i18n)(\"discourse_ai.llms.quotas.max_usages_required\")\n        });\n      } else {\n        removeError(\"max_tokens\");\n        removeError(\"max_usages\");\n      }\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"validateForm\", [_object.action]))();\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          @title={{i18n \"discourse_ai.llms.quotas.add_title\"}}\n          @closeModal={{@closeModal}}\n          class=\"ai-llm-quota-modal\"\n        >\n          <:body>\n            <Form\n              @validate={{this.validateForm}}\n              @onSubmit={{this.save}}\n              @data={{this.quota}}\n              as |form data|\n            >\n              <form.Field\n                @name=\"group_id\"\n                @title={{i18n \"discourse_ai.llms.quotas.group\"}}\n                @validation=\"required\"\n                @format=\"large\"\n                as |field|\n              >\n                <field.Custom>\n                  <GroupChooser\n                    @value={{data.group_id}}\n                    @content={{this.availableGroups}}\n                    @onChange={{fn this.setGroupId field}}\n                    @options={{hash maximum=1}}\n                  />\n                </field.Custom>\n              </form.Field>\n    \n              <form.Field\n                @name=\"max_tokens\"\n                @title={{i18n \"discourse_ai.llms.quotas.max_tokens\"}}\n                @tooltip={{i18n \"discourse_ai.llms.quotas.max_tokens_help\"}}\n                @format=\"large\"\n                as |field|\n              >\n                <field.Input @type=\"number\" min=\"1\" />\n              </form.Field>\n    \n              <form.Field\n                @name=\"max_usages\"\n                @title={{i18n \"discourse_ai.llms.quotas.max_usages\"}}\n                @tooltip={{i18n \"discourse_ai.llms.quotas.max_usages_help\"}}\n                @format=\"large\"\n                as |field|\n              >\n                <field.Input @type=\"number\" min=\"1\" />\n              </form.Field>\n    \n              <form.Field\n                @name=\"duration_seconds\"\n                @title={{i18n \"discourse_ai.llms.quotas.duration\"}}\n                @validation=\"required\"\n                @format=\"large\"\n                as |field|\n              >\n                <field.Custom>\n                  <DurationSelector\n                    @value={{data.duration_seconds}}\n                    @onChange={{field.set}}\n                  />\n                </field.Custom>\n              </form.Field>\n    \n              <form.Submit\n                @label=\"discourse_ai.llms.quotas.add\"\n                class=\"btn-primary\"\n              />\n            </Form>\n          </:body>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"MLB+nwD5\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-llm-quota-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\"],[[28,[32,1],[\\\"discourse_ai.llms.quotas.add_title\\\"],null],[30,1]]],[[\\\"body\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[32,2],null,[[\\\"@validate\\\",\\\"@onSubmit\\\",\\\"@data\\\"],[[30,0,[\\\"validateForm\\\"]],[30,0,[\\\"save\\\"]],[30,0,[\\\"quota\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"group_id\\\",[28,[32,1],[\\\"discourse_ai.llms.quotas.group\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,4,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[32,3],null,[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\",\\\"@options\\\"],[[30,3,[\\\"group_id\\\"]],[30,0,[\\\"availableGroups\\\"]],[28,[32,4],[[30,0,[\\\"setGroupId\\\"]],[30,4]],null],[28,[32,5],null,[[\\\"maximum\\\"],[1]]]]],null],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[4]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"max_tokens\\\",[28,[32,1],[\\\"discourse_ai.llms.quotas.max_tokens\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.quotas.max_tokens_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,5,[\\\"Input\\\"]],[[24,\\\"min\\\",\\\"1\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n          \\\"]],[5]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"max_usages\\\",[28,[32,1],[\\\"discourse_ai.llms.quotas.max_usages\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.quotas.max_usages_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,6,[\\\"Input\\\"]],[[24,\\\"min\\\",\\\"1\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n          \\\"]],[6]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"duration_seconds\\\",[28,[32,1],[\\\"discourse_ai.llms.quotas.duration\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,7,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[32,6],null,[[\\\"@value\\\",\\\"@onChange\\\"],[[30,3,[\\\"duration_seconds\\\"]],[30,7,[\\\"set\\\"]]]],null],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[7]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,2,[\\\"Submit\\\"]],[[24,0,\\\"btn-primary\\\"]],[[\\\"@label\\\"],[\\\"discourse_ai.llms.quotas.add\\\"]],null],[1,\\\"\\\\n        \\\"]],[2,3]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\",\\\"form\\\",\\\"data\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/ai-llm-quota-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _form.default, _groupChooser.default, _helper.fn, _helper.hash, _aiQuotaDurationSelector.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiLlmQuotaModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/ai-persona-response-format-editor\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"truth-helpers\", \"discourse/components/modal/json-schema-editor\", \"discourse/lib/formatter\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _truthHelpers, _jsonSchemaEditor, _formatter, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPersonaResponseFormatEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"showJsonEditorModal\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showJsonEditorModal = (() => (dt7948.i(this, \"showJsonEditorModal\"), void 0))();\n    jsonSchema = (() => ({\n      type: \"array\",\n      uniqueItems: true,\n      title: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.response_format.modal.root_title\"),\n      items: {\n        type: \"object\",\n        title: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.response_format.modal.key_title\"),\n        properties: {\n          key: {\n            type: \"string\"\n          },\n          type: {\n            type: \"string\",\n            enum: [\"string\", \"integer\", \"boolean\", \"array\"]\n          },\n          array_type: {\n            type: \"string\",\n            enum: [\"string\", \"integer\", \"boolean\"],\n            options: {\n              dependencies: {\n                type: \"array\"\n              }\n            }\n          }\n        },\n        required: [\"key\", \"type\"]\n      }\n    }))();\n    get editorTitle() {\n      return (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.response_format.title\");\n    }\n    get responseFormatAsJSON() {\n      return JSON.stringify(this.args.data.response_format);\n    }\n    get displayJSON() {\n      const toDisplay = {};\n      this.args.data.response_format.forEach(keyDesc => {\n        if (keyDesc.type === \"array\") {\n          toDisplay[keyDesc.key] = `[${keyDesc.array_type}]`;\n        } else {\n          toDisplay[keyDesc.key] = keyDesc.type;\n        }\n      });\n      return (0, _formatter.prettyJSON)(toDisplay);\n    }\n    openModal() {\n      this.showJsonEditorModal = true;\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"openModal\", [_object.action]))();\n    closeModal() {\n      this.showJsonEditorModal = false;\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"closeModal\", [_object.action]))();\n    updateResponseFormat(form, value) {\n      form.set(\"response_format\", JSON.parse(value));\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"updateResponseFormat\", [_object.action]))();\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <@form.Container @title={{this.editorTitle}} @format=\"large\">\n          <div class=\"ai-persona-editor__response-format\">\n            {{#if (gt @data.response_format.length 0)}}\n              <pre class=\"ai-persona-editor__response-format-pre\">\n                <code\n                >{{this.displayJSON}}</code>\n              </pre>\n            {{else}}\n              <div class=\"ai-persona-editor__response-format-none\">\n                {{i18n \"discourse_ai.ai_persona.response_format.no_format\"}}\n              </div>\n            {{/if}}\n    \n            <@form.Button\n              @action={{this.openModal}}\n              @label=\"discourse_ai.ai_persona.response_format.open_modal\"\n              @disabled={{@data.system}}\n            />\n          </div>\n        </@form.Container>\n    \n        {{#if this.showJsonEditorModal}}\n          <ModalJsonSchemaEditor\n            @model={{hash\n              value=this.responseFormatAsJSON\n              updateValue=(fn this.updateResponseFormat @form)\n              settingName=this.editorTitle\n              jsonSchema=this.jsonSchema\n            }}\n            @closeModal={{this.closeModal}}\n          />\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"TiBnMIeT\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[30,1,[\\\"Container\\\"]],null,[[\\\"@title\\\",\\\"@format\\\"],[[30,0,[\\\"editorTitle\\\"]],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"ai-persona-editor__response-format\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[32,0],[[30,2,[\\\"response_format\\\",\\\"length\\\"]],0],null],[[[1,\\\"          \\\"],[10,\\\"pre\\\"],[14,0,\\\"ai-persona-editor__response-format-pre\\\"],[12],[1,\\\"            \\\"],[10,\\\"code\\\"],[12],[1,[30,0,[\\\"displayJSON\\\"]]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"ai-persona-editor__response-format-none\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_persona.response_format.no_format\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n        \\\"],[8,[30,1,[\\\"Button\\\"]],null,[[\\\"@action\\\",\\\"@label\\\",\\\"@disabled\\\"],[[30,0,[\\\"openModal\\\"]],\\\"discourse_ai.ai_persona.response_format.open_modal\\\",[30,2,[\\\"system\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showJsonEditorModal\\\"]],[[[1,\\\"      \\\"],[8,[32,2],null,[[\\\"@model\\\",\\\"@closeModal\\\"],[[28,[32,3],null,[[\\\"value\\\",\\\"updateValue\\\",\\\"settingName\\\",\\\"jsonSchema\\\"],[[30,0,[\\\"responseFormatAsJSON\\\"]],[28,[32,4],[[30,0,[\\\"updateResponseFormat\\\"]],[30,1]],null],[30,0,[\\\"editorTitle\\\"]],[30,0,[\\\"jsonSchema\\\"]]]]],[30,0,[\\\"closeModal\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@form\\\",\\\"@data\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/ai-persona-response-format-editor.js\",\n      \"scope\": () => [_truthHelpers.gt, _discourseI18n.i18n, _jsonSchemaEditor.default, _helper.hash, _helper.fn],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPersonaResponseFormatEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/ai-summary-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/render-modifiers/modifiers/did-update\", \"@ember/render-modifiers/modifiers/will-destroy\", \"@ember/service\", \"truth-helpers\", \"discourse/components/cook-text\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/helpers/concat-class\", \"discourse/helpers/d-icon\", \"discourse/helpers/html-class\", \"discourse/lib/ajax\", \"discourse/lib/decorators\", \"discourse/lib/formatter\", \"discourse-i18n\", \"float-kit/components/d-tooltip\", \"discourse/plugins/discourse-ai/discourse/components/ai-summary-skeleton\", \"discourse/plugins/discourse-ai/discourse/lib/smooth-streamer\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _didInsert, _didUpdate, _willDestroy, _service, _truthHelpers, _cookText, _dButton, _dModal, _concatClass, _dIcon, _htmlClass, _ajax, _decorators, _formatter, _discourseI18n, _dTooltip, _aiSummarySkeleton, _smoothStreamer3, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiSummaryModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"messageBus\", [_service.service]))();\n    #messageBus = (() => (dt7948.i(this, \"messageBus\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"text\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #text = (() => (dt7948.i(this, \"text\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"summarizedOn\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #summarizedOn = (() => (dt7948.i(this, \"summarizedOn\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"summarizedBy\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #summarizedBy = (() => (dt7948.i(this, \"summarizedBy\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"newPostsSinceSummary\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #newPostsSinceSummary = (() => (dt7948.i(this, \"newPostsSinceSummary\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"outdated\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #outdated = (() => (dt7948.i(this, \"outdated\"), void 0))();\n    static #_11 = (() => dt7948.g(this.prototype, \"canRegenerate\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #canRegenerate = (() => (dt7948.i(this, \"canRegenerate\"), void 0))();\n    static #_12 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_13 = (() => dt7948.g(this.prototype, \"currentIndex\", [_tracking.tracked], function () {\n      return 0;\n    }))();\n    #currentIndex = (() => (dt7948.i(this, \"currentIndex\"), void 0))();\n    static #_14 = (() => dt7948.g(this.prototype, \"smoothStreamer\", [_tracking.tracked], function () {\n      return new _smoothStreamer3.default(() => this.text, newValue => this.text = newValue);\n    }))();\n    #smoothStreamer = (() => (dt7948.i(this, \"smoothStreamer\"), void 0))();\n    get outdatedSummaryWarningText() {\n      let outdatedText = (0, _discourseI18n.i18n)(\"summary.outdated\");\n      if (!this.topRepliesSummaryEnabled && this.newPostsSinceSummary > 0) {\n        outdatedText += \" \";\n        outdatedText += (0, _discourseI18n.i18n)(\"summary.outdated_posts\", {\n          count: this.newPostsSinceSummary\n        });\n      }\n      return outdatedText;\n    }\n    resetSummary() {\n      this.smoothStreamer.resetStreaming();\n      this.currentIndex = 0;\n      this.text = \"\";\n      this.summarizedOn = null;\n      this.summarizedBy = null;\n      this.newPostsSinceSummary = null;\n      this.outdated = false;\n      this.canRegenerate = false;\n      this.loading = false;\n      this._channel = null;\n    }\n    get topRepliesSummaryEnabled() {\n      return this.args.model.postStream.summary;\n    }\n    get topicId() {\n      return this.args.model.topic.id;\n    }\n    get baseSummarizationURL() {\n      return `/discourse-ai/summarization/t/${this.topicId}`;\n    }\n    subscribe() {\n      const channel = `/discourse-ai/summaries/topic/${this.args.model.topic.id}`;\n      this._channel = channel;\n      this.messageBus.subscribe(channel, this._updateSummary);\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"subscribe\", [_decorators.bind]))();\n    unsubscribe() {\n      this.messageBus.unsubscribe(\"/discourse-ai/summaries/topic/*\", this._updateSummary);\n      this.resetSummary();\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"unsubscribe\", [_decorators.bind]))();\n    generateSummary() {\n      let fetchURL = this.baseSummarizationURL;\n      if (this.currentUser) {\n        fetchURL += `?stream=true`;\n      }\n      return this._requestSummary(fetchURL);\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"generateSummary\", [_object.action]))();\n    regenerateSummary() {\n      let fetchURL = this.baseSummarizationURL;\n      if (this.currentUser) {\n        fetchURL += `?stream=true`;\n        if (this.canRegenerate) {\n          fetchURL += \"&skip_age_check=true\";\n        }\n      }\n      // ensure summary is reset before requesting a new one:\n      this.resetSummary();\n      return this._requestSummary(fetchURL);\n    }\n    static #_18 = (() => dt7948.n(this.prototype, \"regenerateSummary\", [_object.action]))();\n    _requestSummary(url) {\n      if (this.loading || this.text && !this.canRegenerate) {\n        return;\n      }\n      this.loading = true;\n      this.summarizedOn = null;\n      return (0, _ajax.ajax)(url).then(data => {\n        if (data?.ai_topic_summary?.summarized_text) {\n          data.done = true;\n          this._updateSummary(data);\n        }\n      });\n    }\n    static #_19 = (() => dt7948.n(this.prototype, \"_requestSummary\", [_object.action]))();\n    async _updateSummary(update) {\n      const topicSummary = {\n        done: update.done,\n        raw: update.ai_topic_summary?.summarized_text,\n        ...update.ai_topic_summary\n      };\n      this.loading = false;\n      this.smoothStreamer.updateResult(topicSummary, \"raw\");\n      if (update.done) {\n        this.summarizedOn = (0, _formatter.shortDateNoYear)(moment(topicSummary.updated_at, \"YYYY-MM-DD HH:mm:ss Z\"));\n        this.summarizedBy = topicSummary.algorithm;\n        this.newPostsSinceSummary = topicSummary.new_posts_since_summary;\n        this.outdated = topicSummary.outdated;\n        this.canRegenerate = topicSummary.outdated && topicSummary.can_regenerate;\n      }\n    }\n    static #_20 = (() => dt7948.n(this.prototype, \"_updateSummary\", [_decorators.bind]))();\n    onRegisterApi(api) {\n      this.dMenu = api;\n    }\n    static #_21 = (() => dt7948.n(this.prototype, \"onRegisterApi\", [_object.action]))();\n    handleClose() {\n      this.modal.triggerElement = null; // prevent refocus of trigger, which changes scroll position\n      this.args.closeModal();\n    }\n    static #_22 = (() => dt7948.n(this.prototype, \"handleClose\", [_object.action]))();\n    static #_23 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          @title={{i18n \"discourse_ai.summarization.topic.title\"}}\n          @closeModal={{this.handleClose}}\n          @bodyClass=\"ai-summary-modal__body\"\n          class=\"ai-summary-modal\"\n          {{didInsert this.subscribe @model.topic.id}}\n          {{didUpdate this.subscribe @model.topic.id}}\n          {{willDestroy this.unsubscribe}}\n          @hideFooter={{not this.summarizedOn}}\n        >\n          <:body>\n            {{htmlClass \"scrollable-modal\"}}\n            <div class=\"ai-summary-container\" {{didInsert this.generateSummary}}>\n              <article\n                class={{concatClass\n                  \"ai-summary-box\"\n                  \"streamable-content\"\n                  (if this.smoothStreamer.isStreaming \"streaming\")\n                }}\n              >\n                {{#if this.loading}}\n                  <AiSummarySkeleton />\n                {{else}}\n                  <div class=\"generated-summary cooked\">\n                    <CookText @rawText={{this.smoothStreamer.renderedText}} />\n                  </div>\n                {{/if}}\n              </article>\n            </div>\n          </:body>\n          <:footer>\n            <p class=\"summarized-on\">\n              {{i18n \"summary.summarized_on\" date=this.summarizedOn}}\n              <DTooltip @placements={{array \"top-end\"}}>\n                <:trigger>\n                  {{icon \"circle-info\"}}\n                </:trigger>\n                <:content>\n                  {{i18n \"summary.model_used\" model=this.summarizedBy}}\n                </:content>\n              </DTooltip>\n            </p>\n            {{#if this.outdated}}\n              <p class=\"summary-outdated\">{{this.outdatedSummaryWarningText}}</p>\n            {{/if}}\n            {{#if this.canRegenerate}}\n              <DButton\n                @label=\"summary.buttons.regenerate\"\n                @title=\"summary.buttons.regenerate\"\n                @action={{this.regenerateSummary}}\n                @icon=\"arrows-rotate\"\n              />\n            {{/if}}\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"hwMiUKLt\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-summary-modal\\\"],[4,[32,3],[[30,0,[\\\"subscribe\\\"]],[30,1,[\\\"topic\\\",\\\"id\\\"]]],null],[4,[32,4],[[30,0,[\\\"subscribe\\\"]],[30,1,[\\\"topic\\\",\\\"id\\\"]]],null],[4,[32,5],[[30,0,[\\\"unsubscribe\\\"]]],null]],[[\\\"@title\\\",\\\"@closeModal\\\",\\\"@bodyClass\\\",\\\"@hideFooter\\\"],[[28,[32,1],[\\\"discourse_ai.summarization.topic.title\\\"],null],[30,0,[\\\"handleClose\\\"]],\\\"ai-summary-modal__body\\\",[28,[32,2],[[30,0,[\\\"summarizedOn\\\"]]],null]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[32,6],[\\\"scrollable-modal\\\"],null]],[1,\\\"\\\\n        \\\"],[11,0],[24,0,\\\"ai-summary-container\\\"],[4,[32,3],[[30,0,[\\\"generateSummary\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[10,\\\"article\\\"],[15,0,[28,[32,7],[\\\"ai-summary-box\\\",\\\"streamable-content\\\",[52,[30,0,[\\\"smoothStreamer\\\",\\\"isStreaming\\\"]],\\\"streaming\\\"]],null]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loading\\\"]],[[[1,\\\"              \\\"],[8,[32,8],null,null,null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"generated-summary cooked\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[32,9],null,[[\\\"@rawText\\\"],[[30,0,[\\\"smoothStreamer\\\",\\\"renderedText\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[10,2],[14,0,\\\"summarized-on\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[28,[32,1],[\\\"summary.summarized_on\\\"],[[\\\"date\\\"],[[30,0,[\\\"summarizedOn\\\"]]]]]],[1,\\\"\\\\n          \\\"],[8,[32,10],null,[[\\\"@placements\\\"],[[28,[32,11],[\\\"top-end\\\"],null]]],[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[28,[32,12],[\\\"circle-info\\\"],null]],[1,\\\"\\\\n            \\\"]],[]],[[[1,\\\"\\\\n              \\\"],[1,[28,[32,1],[\\\"summary.model_used\\\"],[[\\\"model\\\"],[[30,0,[\\\"summarizedBy\\\"]]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"outdated\\\"]],[[[1,\\\"          \\\"],[10,2],[14,0,\\\"summary-outdated\\\"],[12],[1,[30,0,[\\\"outdatedSummaryWarningText\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"canRegenerate\\\"]],[[[1,\\\"          \\\"],[8,[32,13],null,[[\\\"@label\\\",\\\"@title\\\",\\\"@action\\\",\\\"@icon\\\"],[\\\"summary.buttons.regenerate\\\",\\\"summary.buttons.regenerate\\\",[30,0,[\\\"regenerateSummary\\\"]],\\\"arrows-rotate\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@model\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/ai-summary-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _truthHelpers.not, _didInsert.default, _didUpdate.default, _willDestroy.default, _htmlClass.default, _concatClass.default, _aiSummarySkeleton.default, _cookText.default, _dTooltip.default, _helper.array, _dIcon.default, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiSummaryModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/ai-tool-test-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/lib/utilities\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _dButton, _dModal, _ajax, _ajaxError, _discourseI18n, _utilities, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiToolTestModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"testResult\", [_tracking.tracked]))();\n    #testResult = (() => (dt7948.i(this, \"testResult\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"isLoading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isLoading = (() => (dt7948.i(this, \"isLoading\"), void 0))();\n    parameterValues = {};\n    updateParameter(name, event) {\n      this.parameterValues[name] = event.target.value;\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"updateParameter\", [_object.action]))();\n    async runTest() {\n      this.isLoading = true;\n      try {\n        const response = await (0, _ajax.ajax)(`/admin/plugins/discourse-ai/ai-tools/${this.args.model.tool.id}/test.json`, {\n          type: \"POST\",\n          data: JSON.stringify({\n            ai_tool: this.args.model.tool,\n            parameters: this.parameterValues\n          }),\n          contentType: \"application/json\"\n        });\n        this.testResult = (0, _utilities.jsonToHtml)(response.output);\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        this.isLoading = false;\n      }\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"runTest\", [_object.action]))();\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          @title={{i18n \"discourse_ai.tools.test_modal.title\"}}\n          @closeModal={{@closeModal}}\n          @bodyClass=\"ai-tool-test-modal__body\"\n          class=\"ai-tool-test-modal\"\n        >\n          <:body>\n            {{#each @model.tool.parameters as |param|}}\n              <div class=\"control-group\">\n                <label>{{param.name}}</label>\n                <input\n                  {{on \"input\" (fn this.updateParameter param.name)}}\n                  name={{param.name}}\n                  type=\"text\"\n                />\n              </div>\n            {{/each}}\n    \n            {{#if this.testResult}}\n              <div class=\"ai-tool-test-modal__test-result\">\n                <h3>{{i18n \"discourse_ai.tools.test_modal.result\"}}</h3>\n                <div>{{this.testResult}}</div>\n              </div>\n            {{/if}}\n          </:body>\n    \n          <:footer>\n            <DButton\n              @action={{this.runTest}}\n              @label=\"discourse_ai.tools.test_modal.run\"\n              @disabled={{this.isLoading}}\n              class=\"btn-primary ai-tool-test-modal__run-button\"\n            />\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"LJMGtGI7\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-tool-test-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\",\\\"@bodyClass\\\"],[[28,[32,1],[\\\"discourse_ai.tools.test_modal.title\\\"],null],[30,1],\\\"ai-tool-test-modal__body\\\"]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,2,[\\\"tool\\\",\\\"parameters\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[12],[1,[30,3,[\\\"name\\\"]]],[13],[1,\\\"\\\\n            \\\"],[11,\\\"input\\\"],[16,3,[30,3,[\\\"name\\\"]]],[24,4,\\\"text\\\"],[4,[32,2],[\\\"input\\\",[28,[32,3],[[30,0,[\\\"updateParameter\\\"]],[30,3,[\\\"name\\\"]]],null]],null],[12],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"testResult\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"ai-tool-test-modal__test-result\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"h3\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.tools.test_modal.result\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[10,0],[12],[1,[30,0,[\\\"testResult\\\"]]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,4],[[24,0,\\\"btn-primary ai-tool-test-modal__run-button\\\"]],[[\\\"@action\\\",\\\"@label\\\",\\\"@disabled\\\"],[[30,0,[\\\"runTest\\\"]],\\\"discourse_ai.tools.test_modal.run\\\",[30,0,[\\\"isLoading\\\"]]]],null],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\",\\\"@model\\\",\\\"param\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/ai-tool-test-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _modifier.on, _helper.fn, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiToolTestModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/chat-modal-channel-summary\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"discourse/components/conditional-loading-section\", \"discourse/components/d-modal\", \"discourse/components/d-modal-cancel\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"select-kit/components/combo-box\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _service, _conditionalLoadingSection, _dModal, _dModalCancel, _ajax, _ajaxError, _discourseI18n, _comboBox, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ChatModalChannelSummary extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"chatApi\", [_service.service]))();\n    #chatApi = (() => (dt7948.i(this, \"chatApi\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"sinceHours\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #sinceHours = (() => (dt7948.i(this, \"sinceHours\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"summary\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #summary = (() => (dt7948.i(this, \"summary\"), void 0))();\n    availableSummaries = {};\n    sinceOptions = [1, 3, 6, 12, 24, 72, 168].map(hours => {\n      return {\n        name: (0, _discourseI18n.i18n)(\"discourse_ai.summarization.chat.since\", {\n          count: hours\n        }),\n        value: hours\n      };\n    });\n    get channelId() {\n      return this.args.model.channelId;\n    }\n    summarize(since) {\n      this.sinceHours = since;\n      this.loading = true;\n      if (this.availableSummaries[since]) {\n        this.summary = this.availableSummaries[since];\n        this.loading = false;\n        return;\n      }\n      return (0, _ajax.ajax)(`/discourse-ai/summarization/channels/${this.channelId}.json`, {\n        type: \"GET\",\n        data: {\n          since\n        }\n      }).then(data => {\n        this.availableSummaries[this.sinceHours] = data.summary;\n        this.summary = this.availableSummaries[this.sinceHours];\n      }).catch(_ajaxError.popupAjaxError).finally(() => this.loading = false);\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"summarize\", [_object.action]))();\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          @closeModal={{@closeModal}}\n          class=\"chat-modal-channel-summary\"\n          @title={{i18n \"discourse_ai.summarization.chat.title\"}}\n        >\n          <:body>\n            <span>{{i18n \"discourse_ai.summarization.chat.description\"}}</span>\n            <ComboBox\n              @value={{this.sinceHours}}\n              @content={{this.sinceOptions}}\n              @onChange={{this.summarize}}\n              @valueProperty=\"value\"\n              class=\"summarization-since\"\n            />\n            <ConditionalLoadingSection @isLoading={{this.loading}}>\n              <p class=\"summary-area\">{{this.summary}}</p>\n            </ConditionalLoadingSection>\n          </:body>\n          <:footer>\n            <DModalCancel @close={{@closeModal}} />\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"ye9ZWC9O\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"chat-modal-channel-summary\\\"]],[[\\\"@closeModal\\\",\\\"@title\\\"],[[30,1],[28,[32,1],[\\\"discourse_ai.summarization.chat.title\\\"],null]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[10,1],[12],[1,[28,[32,1],[\\\"discourse_ai.summarization.chat.description\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,2],[[24,0,\\\"summarization-since\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\",\\\"@valueProperty\\\"],[[30,0,[\\\"sinceHours\\\"]],[30,0,[\\\"sinceOptions\\\"]],[30,0,[\\\"summarize\\\"]],\\\"value\\\"]],null],[1,\\\"\\\\n        \\\"],[8,[32,3],null,[[\\\"@isLoading\\\"],[[30,0,[\\\"loading\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[10,2],[14,0,\\\"summary-area\\\"],[12],[1,[30,0,[\\\"summary\\\"]]],[13],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,4],null,[[\\\"@close\\\"],[[30,1]]],null],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/chat-modal-channel-summary.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _comboBox.default, _conditionalLoadingSection.default, _dModalCancel.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ChatModalChannelSummary;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/debug-ai-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/modifier\", \"@ember/object\", \"@ember/runloop\", \"@ember/template\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/later\", \"discourse/lib/utilities\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/lib/utilities\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _modifier, _object, _runloop, _template, _dButton, _dModal, _ajax, _ajaxError, _later, _utilities, _discourseI18n, _utilities2, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class DebugAiModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"info\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #info = (() => (dt7948.i(this, \"info\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"justCopiedText\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #justCopiedText = (() => (dt7948.i(this, \"justCopiedText\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"activeTab\", [_tracking.tracked], function () {\n      return \"request\";\n    }))();\n    #activeTab = (() => (dt7948.i(this, \"activeTab\"), void 0))();\n    constructor() {\n      super(...arguments);\n      (0, _runloop.next)(() => {\n        this.loadApiRequestInfo();\n      });\n    }\n    get htmlContext() {\n      if (!this.info) {\n        return \"\";\n      }\n      let parsed;\n      try {\n        if (this.activeTab === \"request\") {\n          parsed = JSON.parse(this.info.raw_request_payload);\n        } else {\n          return this.formattedResponse(this.info.raw_response_payload);\n        }\n      } catch {\n        return this.info.raw_request_payload;\n      }\n      return (0, _utilities2.jsonToHtml)(parsed);\n    }\n    formattedResponse(response) {\n      // we need to replace the new lines with <br> to make it look good\n      const split = response.split(\"\\n\");\n      const safe = split.map(line => (0, _utilities.escapeExpression)(line)).join(\"<br>\");\n      return (0, _template.htmlSafe)(safe);\n    }\n    copyRequest() {\n      this.copy(this.info.raw_request_payload);\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"copyRequest\", [_object.action]))();\n    copyResponse() {\n      this.copy(this.info.raw_response_payload);\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"copyResponse\", [_object.action]))();\n    async loadLog(logId) {\n      try {\n        await (0, _ajax.ajax)(`/discourse-ai/ai-bot/show-debug-info/${logId}.json`).then(result => {\n          this.info = result;\n        });\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      }\n    }\n    prevLog() {\n      this.loadLog(this.info.prev_log_id);\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"prevLog\", [_object.action]))();\n    nextLog() {\n      this.loadLog(this.info.next_log_id);\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"nextLog\", [_object.action]))();\n    copy(text) {\n      (0, _utilities.clipboardCopy)(text);\n      this.justCopiedText = (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversation_shared\");\n      (0, _later.default)(() => {\n        this.justCopiedText = \"\";\n      }, 2000);\n    }\n    loadApiRequestInfo() {\n      (0, _ajax.ajax)(`/discourse-ai/ai-bot/post/${this.args.model.id}/show-debug-info.json`).then(result => {\n        this.info = result;\n      }).catch(e => {\n        (0, _ajaxError.popupAjaxError)(e);\n      });\n    }\n    get requestActive() {\n      return this.activeTab === \"request\" ? \"active\" : \"\";\n    }\n    get responseActive() {\n      return this.activeTab === \"response\" ? \"active\" : \"\";\n    }\n    requestClicked(e) {\n      this.activeTab = \"request\";\n      e.preventDefault();\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"requestClicked\", [_object.action]))();\n    responseClicked(e) {\n      this.activeTab = \"response\";\n      e.preventDefault();\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"responseClicked\", [_object.action]))();\n    static #_10 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          class=\"ai-debug-modal\"\n          @title={{i18n \"discourse_ai.ai_bot.debug_ai_modal.title\"}}\n          @closeModal={{@closeModal}}\n        >\n          <:body>\n            <ul class=\"nav nav-pills ai-debug-modal__nav\">\n              <li><a\n                  href=\"\"\n                  class={{this.requestActive}}\n                  {{on \"click\" this.requestClicked}}\n                >{{i18n \"discourse_ai.ai_bot.debug_ai_modal.request\"}}</a></li>\n              <li><a\n                  href=\"\"\n                  class={{this.responseActive}}\n                  {{on \"click\" this.responseClicked}}\n                >{{i18n \"discourse_ai.ai_bot.debug_ai_modal.response\"}}</a></li>\n            </ul>\n            <div class=\"ai-debug-modal__tokens\">\n              <span class=\"ai-debug-modal__tokens__count\">\n                {{i18n \"discourse_ai.ai_bot.debug_ai_modal.request_tokens\"}}\n                {{this.info.request_tokens}}\n              </span>\n              <span class=\"ai-debug-modal__tokens__count\">\n                {{i18n \"discourse_ai.ai_bot.debug_ai_modal.response_tokens\"}}\n                {{this.info.response_tokens}}\n              </span>\n            </div>\n            <div class=\"debug-ai-modal__preview\">\n              {{this.htmlContext}}\n            </div>\n          </:body>\n    \n          <:footer>\n            <DButton\n              class=\"btn confirm\"\n              @icon=\"copy\"\n              @action={{this.copyRequest}}\n              @label=\"discourse_ai.ai_bot.debug_ai_modal.copy_request\"\n            />\n            <DButton\n              class=\"btn confirm\"\n              @icon=\"copy\"\n              @action={{this.copyResponse}}\n              @label=\"discourse_ai.ai_bot.debug_ai_modal.copy_response\"\n            />\n            {{#if this.info.prev_log_id}}\n              <DButton\n                class=\"btn\"\n                @icon=\"angles-left\"\n                @action={{this.prevLog}}\n                @label=\"discourse_ai.ai_bot.debug_ai_modal.previous_log\"\n              />\n            {{/if}}\n            {{#if this.info.next_log_id}}\n              <DButton\n                class=\"btn\"\n                @icon=\"angles-right\"\n                @action={{this.nextLog}}\n                @label=\"discourse_ai.ai_bot.debug_ai_modal.next_log\"\n              />\n            {{/if}}\n            <span class=\"ai-debut-modal__just-copied\">{{this.justCopiedText}}</span>\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"/0GMjCML\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-debug-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\"],[[28,[32,1],[\\\"discourse_ai.ai_bot.debug_ai_modal.title\\\"],null],[30,1]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[10,\\\"ul\\\"],[14,0,\\\"nav nav-pills ai-debug-modal__nav\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[11,3],[24,6,\\\"\\\"],[16,0,[30,0,[\\\"requestActive\\\"]]],[4,[32,2],[\\\"click\\\",[30,0,[\\\"requestClicked\\\"]]],null],[12],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.debug_ai_modal.request\\\"],null]],[13],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[11,3],[24,6,\\\"\\\"],[16,0,[30,0,[\\\"responseActive\\\"]]],[4,[32,2],[\\\"click\\\",[30,0,[\\\"responseClicked\\\"]]],null],[12],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.debug_ai_modal.response\\\"],null]],[13],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-debug-modal__tokens\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"ai-debug-modal__tokens__count\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.debug_ai_modal.request_tokens\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"info\\\",\\\"request_tokens\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"ai-debug-modal__tokens__count\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.debug_ai_modal.response_tokens\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"info\\\",\\\"response_tokens\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"debug-ai-modal__preview\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[30,0,[\\\"htmlContext\\\"]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,3],[[24,0,\\\"btn confirm\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"copy\\\",[30,0,[\\\"copyRequest\\\"]],\\\"discourse_ai.ai_bot.debug_ai_modal.copy_request\\\"]],null],[1,\\\"\\\\n        \\\"],[8,[32,3],[[24,0,\\\"btn confirm\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"copy\\\",[30,0,[\\\"copyResponse\\\"]],\\\"discourse_ai.ai_bot.debug_ai_modal.copy_response\\\"]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"info\\\",\\\"prev_log_id\\\"]],[[[1,\\\"          \\\"],[8,[32,3],[[24,0,\\\"btn\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"angles-left\\\",[30,0,[\\\"prevLog\\\"]],\\\"discourse_ai.ai_bot.debug_ai_modal.previous_log\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"info\\\",\\\"next_log_id\\\"]],[[[1,\\\"          \\\"],[8,[32,3],[[24,0,\\\"btn\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"angles-right\\\",[30,0,[\\\"nextLog\\\"]],\\\"discourse_ai.ai_bot.debug_ai_modal.next_log\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,1],[14,0,\\\"ai-debut-modal__just-copied\\\"],[12],[1,[30,0,[\\\"justCopiedText\\\"]]],[13],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/debug-ai-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _modifier.on, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = DebugAiModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/diff-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/render-modifiers/modifiers/will-destroy\", \"@ember/service\", \"@ember/template\", \"truth-helpers\", \"discourse/components/cook-text\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/helpers/concat-class\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/decorators\", \"discourse/lib/utilities\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/lib/diff-streamer\", \"discourse/plugins/discourse-ai/discourse/lib/smooth-streamer\", \"discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _willDestroy, _service, _template, _truthHelpers, _cookText, _dButton, _dModal, _concatClass, _ajax, _ajaxError, _decorators, _utilities, _discourseI18n, _diffStreamer3, _smoothStreamer3, _aiIndicatorWave, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ModalDiffModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"messageBus\", [_service.service]))();\n    #messageBus = (() => (dt7948.i(this, \"messageBus\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"finalResult\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #finalResult = (() => (dt7948.i(this, \"finalResult\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"escapedSelectedText\", [_tracking.tracked], function () {\n      return (0, _utilities.escapeExpression)(this.args.model.selectedText);\n    }))();\n    #escapedSelectedText = (() => (dt7948.i(this, \"escapedSelectedText\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"diffStreamer\", [_tracking.tracked], function () {\n      return new _diffStreamer3.default(this.args.model.selectedText);\n    }))();\n    #diffStreamer = (() => (dt7948.i(this, \"diffStreamer\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"suggestion\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #suggestion = (() => (dt7948.i(this, \"suggestion\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"smoothStreamer\", [_tracking.tracked], function () {\n      return new _smoothStreamer3.default(() => this.suggestion, newValue => this.suggestion = newValue);\n    }))();\n    #smoothStreamer = (() => (dt7948.i(this, \"smoothStreamer\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.suggestChanges();\n    }\n    get diffResult() {\n      if (this.loading) {\n        return this.escapedSelectedText;\n      }\n      if (this.diffStreamer.diff?.length > 0) {\n        return this.diffStreamer.diff;\n      }\n      // Prevents flash by showing the\n      // original text when the diff is empty\n      return this.escapedSelectedText;\n    }\n    get smoothStreamerResult() {\n      if (this.loading) {\n        return this.escapedSelectedText;\n      }\n      return this.smoothStreamer.renderedText;\n    }\n    get isStreaming() {\n      // diffStreamer stops Streaming when it is finished with a chunk, looking at isDone is safe\n      // it starts off not done\n      if (this.args.model.showResultAsDiff) {\n        return !this.diffStreamer.isDone;\n      }\n      return this.smoothStreamer.isStreaming;\n    }\n    get primaryBtnLabel() {\n      return this.loading ? (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.context_menu.loading\") : (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.context_menu.confirm\");\n    }\n    get primaryBtnDisabled() {\n      return this.loading || this.isStreaming;\n    }\n    set progressChannel(value) {\n      if (this._progressChannel) {\n        this.messageBus.unsubscribe(this._progressChannel, this.updateResult);\n      }\n      this._progressChannel = value;\n      this.subscribe();\n    }\n    subscribe() {\n      // we have 1 channel per operation so we can safely subscribe at head\n      this.messageBus.subscribe(this._progressChannel, this.updateResult, 0);\n    }\n    cleanup() {\n      // stop all callbacks so it does not end up streaming pointlessly\n      this.#resetState();\n      if (this._progressChannel) {\n        this.messageBus.unsubscribe(this._progressChannel, this.updateResult);\n      }\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"cleanup\", [_decorators.bind]))();\n    updateResult(result) {\n      this.loading = false;\n      if (result.done) {\n        this.finalResult = result.result;\n        this.loading = false;\n      }\n      if (this.args.model.showResultAsDiff) {\n        this.diffStreamer.updateResult(result, \"result\");\n      } else {\n        this.smoothStreamer.updateResult(result, \"result\");\n      }\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"updateResult\", [_object.action]))();\n    async suggestChanges() {\n      this.#resetState();\n      try {\n        this.loading = true;\n        const result = await (0, _ajax.ajax)(\"/discourse-ai/ai-helper/stream_suggestion\", {\n          method: \"POST\",\n          data: {\n            location: \"composer\",\n            mode: this.args.model.mode,\n            text: this.args.model.selectedText,\n            custom_prompt: this.args.model.customPromptValue,\n            force_default_locale: true,\n            client_id: this.messageBus.clientId\n          }\n        });\n        this.progressChannel = result.progress_channel;\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      }\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"suggestChanges\", [_object.action]))();\n    triggerConfirmChanges() {\n      this.args.closeModal();\n      if (this.suggestion) {\n        this.args.model.toolbarEvent.replaceText(this.args.model.selectedText, this.suggestion);\n      }\n      const finalResult = this.finalResult?.length > 0 ? this.finalResult : this.diffStreamer.suggestion;\n      if (this.args.model.showResultAsDiff && finalResult) {\n        this.args.model.toolbarEvent.replaceText(this.args.model.selectedText, finalResult);\n      }\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"triggerConfirmChanges\", [_object.action]))();\n    cleanupAndClose() {\n      this.#resetState();\n      this.loading = false;\n      this.args.closeModal();\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"cleanupAndClose\", [_object.action]))();\n    #resetState() {\n      this.suggestion = \"\";\n      this.finalResult = \"\";\n      this.smoothStreamer.resetStreaming();\n      this.diffStreamer.reset();\n    }\n    static #_14 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          class=\"composer-ai-helper-modal\"\n          @title={{i18n \"discourse_ai.ai_helper.context_menu.changes\"}}\n          @closeModal={{this.cleanupAndClose}}\n        >\n          <:body>\n            <div {{willDestroy this.cleanup}} class=\"text-preview\">\n              <div\n                class={{concatClass\n                  \"composer-ai-helper-modal__suggestion\"\n                  \"streamable-content\"\n                  (if this.isStreaming \"streaming\")\n                  (if @model.showResultAsDiff \"inline-diff\")\n                  (if this.diffStreamer.isThinking \"thinking\")\n                  (if this.loading \"composer-ai-helper-modal__loading\")\n                }}\n              >\n                {{~#if @model.showResultAsDiff~}}\n                  <span class=\"diff-inner\">{{htmlSafe this.diffResult}}</span>\n                {{else}}\n                  {{#if (or this.loading this.smoothStreamer.isStreaming)}}\n                    <CookText\n                      @rawText={{this.smoothStreamerResult}}\n                      class=\"cooked\"\n                    />\n                  {{else}}\n                    <div class=\"composer-ai-helper-modal__old-value\">\n                      {{~this.escapedSelectedText~}}\n                    </div>\n                    <div class=\"composer-ai-helper-modal__new-value\">\n                      <CookText\n                        @rawText={{this.smoothStreamerResult}}\n                        class=\"cooked\"\n                      />\n                    </div>\n                  {{/if}}\n                {{/if}}\n              </div>\n            </div>\n          </:body>\n    \n          <:footer>\n            <DButton\n              class=\"btn-primary confirm\"\n              @disabled={{this.primaryBtnDisabled}}\n              @action={{this.triggerConfirmChanges}}\n              @translatedLabel={{this.primaryBtnLabel}}\n            >\n              {{#if this.loading}}\n                <AiIndicatorWave @loading={{this.loading}} />\n              {{/if}}\n            </DButton>\n            <DButton\n              class=\"btn-flat discard\"\n              @action={{this.cleanupAndClose}}\n              @label=\"discourse_ai.ai_helper.context_menu.discard\"\n            />\n            <DButton\n              class=\"regenerate\"\n              @icon=\"arrows-rotate\"\n              @action={{this.suggestChanges}}\n              @label=\"discourse_ai.ai_helper.context_menu.regen\"\n            />\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"BZ80Ev5M\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"composer-ai-helper-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\"],[[28,[32,1],[\\\"discourse_ai.ai_helper.context_menu.changes\\\"],null],[30,0,[\\\"cleanupAndClose\\\"]]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[11,0],[24,0,\\\"text-preview\\\"],[4,[32,2],[[30,0,[\\\"cleanup\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[28,[32,3],[\\\"composer-ai-helper-modal__suggestion\\\",\\\"streamable-content\\\",[52,[30,0,[\\\"isStreaming\\\"]],\\\"streaming\\\"],[52,[30,1,[\\\"showResultAsDiff\\\"]],\\\"inline-diff\\\"],[52,[30,0,[\\\"diffStreamer\\\",\\\"isThinking\\\"]],\\\"thinking\\\"],[52,[30,0,[\\\"loading\\\"]],\\\"composer-ai-helper-modal__loading\\\"]],null]],[12],[41,[30,1,[\\\"showResultAsDiff\\\"]],[[[10,1],[14,0,\\\"diff-inner\\\"],[12],[1,[28,[32,4],[[30,0,[\\\"diffResult\\\"]]],null]],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,5],[[30,0,[\\\"loading\\\"]],[30,0,[\\\"smoothStreamer\\\",\\\"isStreaming\\\"]]],null],[[[1,\\\"                \\\"],[8,[32,6],[[24,0,\\\"cooked\\\"]],[[\\\"@rawText\\\"],[[30,0,[\\\"smoothStreamerResult\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"composer-ai-helper-modal__old-value\\\"],[12],[1,[30,0,[\\\"escapedSelectedText\\\"]]],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"composer-ai-helper-modal__new-value\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[32,6],[[24,0,\\\"cooked\\\"]],[[\\\"@rawText\\\"],[[30,0,[\\\"smoothStreamerResult\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,7],[[24,0,\\\"btn-primary confirm\\\"]],[[\\\"@disabled\\\",\\\"@action\\\",\\\"@translatedLabel\\\"],[[30,0,[\\\"primaryBtnDisabled\\\"]],[30,0,[\\\"triggerConfirmChanges\\\"]],[30,0,[\\\"primaryBtnLabel\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loading\\\"]],[[[1,\\\"            \\\"],[8,[32,8],null,[[\\\"@loading\\\"],[[30,0,[\\\"loading\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[32,7],[[24,0,\\\"btn-flat discard\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"cleanupAndClose\\\"]],\\\"discourse_ai.ai_helper.context_menu.discard\\\"]],null],[1,\\\"\\\\n        \\\"],[8,[32,7],[[24,0,\\\"regenerate\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"arrows-rotate\\\",[30,0,[\\\"suggestChanges\\\"]],\\\"discourse_ai.ai_helper.context_menu.regen\\\"]],null],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@model\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/diff-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _willDestroy.default, _concatClass.default, _template.htmlSafe, _truthHelpers.or, _cookText.default, _dButton.default, _aiIndicatorWave.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ModalDiffModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/share-full-topic-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/modifier\", \"@ember/object\", \"@ember/service\", \"@ember/template\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/get-url\", \"discourse/lib/utilities\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _modifier, _object, _service, _template, _dButton, _dModal, _ajax, _ajaxError, _getUrl, _utilities, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ShareModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"shareKey\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #shareKey = (() => (dt7948.i(this, \"shareKey\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.shareKey = this.args.model.share_key;\n    }\n    get htmlContext() {\n      let context = [];\n      this.args.model.context.forEach(post => {\n        context.push(`<p><b>${post.username}:</b></p>`);\n        context.push(post.cooked);\n      });\n      return (0, _template.htmlSafe)(context.join(\"\\n\"));\n    }\n    async generateShareURL() {\n      try {\n        const response = await (0, _ajax.ajax)(\"/discourse-ai/ai-bot/shared-ai-conversations\", {\n          type: \"POST\",\n          data: {\n            topic_id: this.args.model.topic_id\n          }\n        });\n        const url = (0, _getUrl.getAbsoluteURL)(`/discourse-ai/ai-bot/shared-ai-conversations/${response.share_key}`);\n        this.shareKey = response.share_key;\n        return new Blob([url], {\n          type: \"text/plain\"\n        });\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n        return;\n      }\n    }\n    get primaryLabel() {\n      return this.shareKey ? \"discourse_ai.ai_bot.share_full_topic_modal.update\" : \"discourse_ai.ai_bot.share_full_topic_modal.share\";\n    }\n    async deleteLink() {\n      try {\n        await (0, _ajax.ajax)(`/discourse-ai/ai-bot/shared-ai-conversations/${this.shareKey}.json`, {\n          type: \"DELETE\"\n        });\n        this.shareKey = null;\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      }\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"deleteLink\", [_object.action]))();\n    async share() {\n      await (0, _utilities.clipboardCopyAsync)(this.generateShareURL.bind(this));\n      this.toasts.success({\n        duration: \"short\",\n        data: {\n          message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversation_shared\")\n        }\n      });\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"share\", [_object.action]))();\n    async maybeCopyEmbed(event) {\n      if (!event.target.classList.contains(\"copy-embed\")) {\n        return true;\n      }\n      event.stopPropagation();\n      event.preventDefault();\n      let version = \"\";\n      if (event.target.dataset.artifactVersion) {\n        version = `data-ai-artifact-version=\"${event.target.dataset.artifactVersion}\"`;\n      }\n      const artifactEmbed = `<div class=\"ai-artifact\" ${version} data-ai-artifact-id=\"${event.target.dataset.artifactId}\"></div>`;\n      const promise = new Promise(resolve => {\n        resolve(artifactEmbed);\n      });\n      await (0, _utilities.clipboardCopyAsync)(() => promise);\n      this.toasts.success({\n        duration: \"short\",\n        data: {\n          message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.embed_copied\")\n        }\n      });\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"maybeCopyEmbed\", [_object.action]))();\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          class=\"ai-share-full-topic-modal\"\n          @title={{i18n \"discourse_ai.ai_bot.share_full_topic_modal.title\"}}\n          @closeModal={{@closeModal}}\n        >\n          <:body>\n            {{! template-lint-disable no-invalid-interactive }}\n            <div\n              class=\"ai-share-full-topic-modal__body\"\n              {{on \"click\" this.maybeCopyEmbed}}\n            >\n              {{this.htmlContext}}\n            </div>\n            {{! template-lint-enable}}\n          </:body>\n    \n          <:footer>\n            <DButton\n              class=\"btn-primary confirm\"\n              @icon=\"copy\"\n              @action={{this.share}}\n              @label={{this.primaryLabel}}\n            />\n            {{#if this.shareKey}}\n              <DButton\n                class=\"btn-danger\"\n                @icon=\"far-trash-can\"\n                @action={{this.deleteLink}}\n                @label=\"discourse_ai.ai_bot.share_full_topic_modal.delete\"\n              />\n            {{/if}}\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"usffRdOP\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-share-full-topic-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\"],[[28,[32,1],[\\\"discourse_ai.ai_bot.share_full_topic_modal.title\\\"],null],[30,1]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n\\\"],[1,\\\"        \\\"],[11,0],[24,0,\\\"ai-share-full-topic-modal__body\\\"],[4,[32,2],[\\\"click\\\",[30,0,[\\\"maybeCopyEmbed\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[1,[30,0,[\\\"htmlContext\\\"]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\"      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,3],[[24,0,\\\"btn-primary confirm\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"copy\\\",[30,0,[\\\"share\\\"]],[30,0,[\\\"primaryLabel\\\"]]]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"shareKey\\\"]],[[[1,\\\"          \\\"],[8,[32,3],[[24,0,\\\"btn-danger\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"far-trash-can\\\",[30,0,[\\\"deleteLink\\\"]],\\\"discourse_ai.ai_bot.share_full_topic_modal.delete\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/share-full-topic-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _modifier.on, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ShareModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/share-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/component\", \"@ember/modifier\", \"@ember/object\", \"@ember/service\", \"@ember/template\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/lib/later\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", \"discourse/plugins/discourse-ai/discourse/lib/copy-conversation\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _component2, _modifier, _object, _service, _template, _dButton, _dModal, _later, _discourseI18n, _aiBotHelper, _copyConversation, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ShareModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"contextValue\", [_tracking.tracked], function () {\n      return 1;\n    }))();\n    #contextValue = (() => (dt7948.i(this, \"contextValue\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"htmlContext\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #htmlContext = (() => (dt7948.i(this, \"htmlContext\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"maxContext\", [_tracking.tracked], function () {\n      return 0;\n    }))();\n    #maxContext = (() => (dt7948.i(this, \"maxContext\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"allPosts\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #allPosts = (() => (dt7948.i(this, \"allPosts\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"justCopiedText\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #justCopiedText = (() => (dt7948.i(this, \"justCopiedText\"), void 0))();\n    constructor() {\n      super(...arguments);\n      const postStream = this.args.model.topic.get(\"postStream\");\n      let postNumbers = [];\n      // simpler to understand than Array.from\n      for (let i = 1; i <= this.args.model.post_number; i++) {\n        postNumbers.push(i);\n      }\n      this.allPosts = postNumbers.map(postNumber => {\n        let postId = postStream.findPostIdForPostNumber(postNumber);\n        if (postId) {\n          return postStream.findLoadedPost(postId);\n        }\n      }).filter(post => post);\n      this.maxContext = this.allPosts.length / 2;\n      this.contextValue = 1;\n      this.updateHtmlContext();\n    }\n    updateHtmlContext() {\n      let context = [];\n      const start = this.allPosts.length - this.contextValue * 2;\n      for (let i = start; i < this.allPosts.length; i++) {\n        const post = this.allPosts[i];\n        context.push(`<p><b>${post.username}:</b></p>`);\n        context.push(post.cooked);\n      }\n      this.htmlContext = (0, _template.htmlSafe)(context.join(\"\\n\"));\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"updateHtmlContext\", [_object.action]))();\n    async copyContext() {\n      const from = this.allPosts[this.allPosts.length - this.contextValue * 2].post_number;\n      const to = this.args.model.post_number;\n      await (0, _copyConversation.default)(this.args.model.topic, from, to);\n      this.justCopiedText = (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversation_shared\");\n      (0, _later.default)(() => {\n        this.justCopiedText = \"\";\n      }, 2000);\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"copyContext\", [_object.action]))();\n    shareConversationModal(event) {\n      event?.preventDefault();\n      this.args.closeModal();\n      (0, _aiBotHelper.showShareConversationModal)(this.modal, this.args.model.topic_id);\n      return false;\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"shareConversationModal\", [_object.action]))();\n    static #_12 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          class=\"ai-share-modal\"\n          @title={{i18n \"discourse_ai.ai_bot.share_modal.title\"}}\n          @closeModal={{@closeModal}}\n        >\n          <:body>\n            <div class=\"ai-share-modal__preview\">\n              {{this.htmlContext}}\n            </div>\n          </:body>\n    \n          <:footer>\n            <div class=\"ai-share-modal__slider\">\n              <Input\n                @type=\"range\"\n                min=\"1\"\n                max={{this.maxContext}}\n                @value={{this.contextValue}}\n                {{on \"change\" this.updateHtmlContext}}\n              />\n              <div class=\"ai-share-modal__context\">\n                {{i18n \"discourse_ai.ai_bot.share_modal.context\"}}\n                {{this.contextValue}}\n              </div>\n            </div>\n            <DButton\n              class=\"btn-primary confirm\"\n              @icon=\"copy\"\n              @action={{this.copyContext}}\n              @label=\"discourse_ai.ai_bot.share_modal.copy\"\n            />\n            <span class=\"ai-share-modal__just-copied\">{{this.justCopiedText}}</span>\n            {{#if this.currentUser.can_share_ai_bot_conversations}}\n              <a href {{on \"click\" this.shareConversationModal}}>\n                <span class=\"ai-share-modal__share-tip\">\n                  {{i18n \"discourse_ai.ai_bot.share_modal.share_tip\"}}\n                </span>\n              </a>\n            {{/if}}\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"Ccsc9yzh\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-share-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\"],[[28,[32,1],[\\\"discourse_ai.ai_bot.share_modal.title\\\"],null],[30,1]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-share-modal__preview\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[30,0,[\\\"htmlContext\\\"]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-share-modal__slider\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,2],[[24,\\\"min\\\",\\\"1\\\"],[16,\\\"max\\\",[30,0,[\\\"maxContext\\\"]]],[4,[32,3],[\\\"change\\\",[30,0,[\\\"updateHtmlContext\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"range\\\",[30,0,[\\\"contextValue\\\"]]]],null],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"ai-share-modal__context\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.share_modal.context\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"contextValue\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[32,4],[[24,0,\\\"btn-primary confirm\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"copy\\\",[30,0,[\\\"copyContext\\\"]],\\\"discourse_ai.ai_bot.share_modal.copy\\\"]],null],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"ai-share-modal__just-copied\\\"],[12],[1,[30,0,[\\\"justCopiedText\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"currentUser\\\",\\\"can_share_ai_bot_conversations\\\"]],[[[1,\\\"          \\\"],[11,3],[24,6,\\\"\\\"],[4,[32,3],[\\\"click\\\",[30,0,[\\\"shareConversationModal\\\"]]],null],[12],[1,\\\"\\\\n            \\\"],[10,1],[14,0,\\\"ai-share-modal__share-tip\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.share_modal.share_tip\\\"],null]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/share-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _component2.Input, _modifier.on, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ShareModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/spam-test-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/helpers/with-event-value\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _dButton, _dModal, _withEventValue, _ajax, _ajaxError, _discourseI18n, _aiIndicatorWave, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class SpamTestModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"testResult\", [_tracking.tracked]))();\n    #testResult = (() => (dt7948.i(this, \"testResult\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"isLoading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isLoading = (() => (dt7948.i(this, \"isLoading\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"postUrl\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #postUrl = (() => (dt7948.i(this, \"postUrl\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"scanLog\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #scanLog = (() => (dt7948.i(this, \"scanLog\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"isSpam\", [_tracking.tracked]))();\n    #isSpam = (() => (dt7948.i(this, \"isSpam\"), void 0))();\n    async runTest() {\n      this.isLoading = true;\n      try {\n        const response = await (0, _ajax.ajax)(`/admin/plugins/discourse-ai/ai-spam/test.json`, {\n          type: \"POST\",\n          data: {\n            post_url: this.postUrl,\n            custom_instructions: this.args.model.customInstructions,\n            llm_id: this.args.model.llmId\n          }\n        });\n        this.isSpam = response.is_spam;\n        this.testResult = response.is_spam ? (0, _discourseI18n.i18n)(\"discourse_ai.spam.test_modal.spam\") : (0, _discourseI18n.i18n)(\"discourse_ai.spam.test_modal.not_spam\");\n        this.scanLog = response.log;\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        this.isLoading = false;\n      }\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"runTest\", [_object.action]))();\n    static #_7 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          @title={{i18n \"discourse_ai.spam.test_modal.title\"}}\n          @closeModal={{@closeModal}}\n          @bodyClass=\"spam-test-modal__body\"\n          class=\"spam-test-modal\"\n        >\n          <:body>\n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.spam.test_modal.post_url_label\"}}</label>\n              <input\n                {{on \"input\" (withEventValue (fn (mut this.postUrl)))}}\n                type=\"text\"\n                placeholder={{i18n\n                  \"discourse_ai.spam.test_modal.post_url_placeholder\"\n                }}\n              />\n            </div>\n    \n            {{#if this.testResult}}\n              <div class=\"spam-test-modal__test-result\">\n                <h3>{{i18n \"discourse_ai.spam.test_modal.result\"}}</h3>\n                <div\n                  class=\"spam-test-modal__verdict\n                    {{if this.isSpam 'is-spam' 'not-spam'}}\"\n                >\n                  {{this.testResult}}\n                </div>\n                {{#if this.scanLog}}\n                  <div class=\"spam-test-modal__log\">\n                    <h4>{{i18n \"discourse_ai.spam.test_modal.scan_log\"}}</h4>\n                    <pre>{{this.scanLog}}</pre>\n                  </div>\n                {{/if}}\n              </div>\n            {{/if}}\n          </:body>\n    \n          <:footer>\n            <DButton\n              @action={{this.runTest}}\n              @label=\"discourse_ai.spam.test_modal.run\"\n              @disabled={{this.isLoading}}\n              class=\"btn-primary spam-test-modal__run-button\"\n            >\n              <AiIndicatorWave @loading={{this.isLoading}} />\n            </DButton>\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"34+xPAxG\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"spam-test-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\",\\\"@bodyClass\\\"],[[28,[32,1],[\\\"discourse_ai.spam.test_modal.title\\\"],null],[30,1],\\\"spam-test-modal__body\\\"]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.spam.test_modal.post_url_label\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[16,\\\"placeholder\\\",[28,[32,1],[\\\"discourse_ai.spam.test_modal.post_url_placeholder\\\"],null]],[24,4,\\\"text\\\"],[4,[32,2],[\\\"input\\\",[28,[32,3],[[28,[32,4],[[28,[31,0],[[30,0,[\\\"postUrl\\\"]]],null]],null]],null]],null],[12],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"testResult\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"spam-test-modal__test-result\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"h3\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.spam.test_modal.result\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[\\\"spam-test-modal__verdict\\\\n                \\\",[52,[30,0,[\\\"isSpam\\\"]],\\\"is-spam\\\",\\\"not-spam\\\"]]]],[12],[1,\\\"\\\\n              \\\"],[1,[30,0,[\\\"testResult\\\"]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"scanLog\\\"]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"spam-test-modal__log\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"h4\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.spam.test_modal.scan_log\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"pre\\\"],[12],[1,[30,0,[\\\"scanLog\\\"]]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,5],[[24,0,\\\"btn-primary spam-test-modal__run-button\\\"]],[[\\\"@action\\\",\\\"@label\\\",\\\"@disabled\\\"],[[30,0,[\\\"runTest\\\"]],\\\"discourse_ai.spam.test_modal.run\\\",[30,0,[\\\"isLoading\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[32,6],null,[[\\\"@loading\\\"],[[30,0,[\\\"isLoading\\\"]]]],null],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\"],false,[\\\"mut\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/spam-test-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _modifier.on, _withEventValue.default, _helper.fn, _dButton.default, _aiIndicatorWave.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = SpamTestModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/thumbnail-suggestions\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"discourse/components/conditional-loading-spinner\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/components/d-modal-cancel\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/thumbnail-suggestion-item\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _conditionalLoadingSpinner, _dButton, _dModal, _dModalCancel, _ajax, _ajaxError, _discourseI18n, _thumbnailSuggestionItem, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ThumbnailSuggestions extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"selectedImages\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #selectedImages = (() => (dt7948.i(this, \"selectedImages\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"thumbnails\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #thumbnails = (() => (dt7948.i(this, \"thumbnails\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.findThumbnails();\n    }\n    get isDisabled() {\n      return this.selectedImages.length === 0;\n    }\n    async findThumbnails() {\n      this.loading = true;\n      try {\n        const thumbnails = await (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest\", {\n          method: \"POST\",\n          data: {\n            mode: this.args.model.mode,\n            text: this.args.model.selectedText,\n            force_default_locale: true\n          }\n        });\n        this.thumbnails = thumbnails.thumbnails;\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        this.loading = false;\n      }\n    }\n    addSelection(selection) {\n      const thumbnailMarkdown = `![${selection.original_filename}|${selection.width}x${selection.height}](${selection.short_url})`;\n      this.selectedImages = [...this.selectedImages, thumbnailMarkdown];\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"addSelection\", [_object.action]))();\n    removeSelection(selection) {\n      const thumbnailMarkdown = `![${selection.original_filename}|${selection.width}x${selection.height}](${selection.short_url})`;\n      this.selectedImages = this.selectedImages.filter(thumbnail => {\n        if (thumbnail !== thumbnailMarkdown) {\n          return thumbnail;\n        }\n      });\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"removeSelection\", [_object.action]))();\n    appendSelectedImages() {\n      const imageMarkdown = \"\\n\\n\" + this.selectedImages.join(\"\\n\");\n      const dEditorInput = document.querySelector(\".d-editor-input\");\n      dEditorInput.setSelectionRange(dEditorInput.value.length, dEditorInput.value.length);\n      dEditorInput.focus();\n      document.execCommand(\"insertText\", false, imageMarkdown);\n      this.args.closeModal();\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"appendSelectedImages\", [_object.action]))();\n    static #_7 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          class=\"thumbnail-suggestions-modal\"\n          @title={{i18n \"discourse_ai.ai_helper.thumbnail_suggestions.title\"}}\n          @closeModal={{@closeModal}}\n        >\n          <:body>\n            <ConditionalLoadingSpinner @condition={{this.loading}}>\n              <div class=\"ai-thumbnail-suggestions\">\n                {{#each this.thumbnails as |thumbnail|}}\n                  <ThumbnailSuggestionItem\n                    @thumbnail={{thumbnail}}\n                    @addSelection={{this.addSelection}}\n                    @removeSelection={{this.removeSelection}}\n                  />\n                {{/each}}\n              </div>\n            </ConditionalLoadingSpinner>\n          </:body>\n    \n          <:footer>\n            <DButton\n              @action={{this.appendSelectedImages}}\n              @label=\"save\"\n              @disabled={{this.isDisabled}}\n              class=\"btn-primary create\"\n            />\n            <DModalCancel @close={{@closeModal}} />\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"NK1Pg0q5\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"thumbnail-suggestions-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\"],[[28,[32,1],[\\\"discourse_ai.ai_helper.thumbnail_suggestions.title\\\"],null],[30,1]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[32,2],null,[[\\\"@condition\\\"],[[30,0,[\\\"loading\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"ai-thumbnail-suggestions\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"thumbnails\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[32,3],null,[[\\\"@thumbnail\\\",\\\"@addSelection\\\",\\\"@removeSelection\\\"],[[30,2],[30,0,[\\\"addSelection\\\"]],[30,0,[\\\"removeSelection\\\"]]]],null],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,4],[[24,0,\\\"btn-primary create\\\"]],[[\\\"@action\\\",\\\"@label\\\",\\\"@disabled\\\"],[[30,0,[\\\"appendSelectedImages\\\"]],\\\"save\\\",[30,0,[\\\"isDisabled\\\"]]]],null],[1,\\\"\\\\n        \\\"],[8,[32,5],null,[[\\\"@close\\\"],[[30,1]]],null],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\",\\\"thumbnail\\\"],false,[\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/thumbnail-suggestions.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _conditionalLoadingSpinner.default, _thumbnailSuggestionItem.default, _dButton.default, _dModalCancel.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ThumbnailSuggestions;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/model-accuracies\", [\"exports\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _discourseI18n, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ModelAccuracies = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    {{#if @accuracies}}\n      <table class=\"reviewable-scores\">\n        <tbody>\n          {{#each-in @accuracies as |model acc|}}\n            <tr>\n              <td colspan=\"4\">{{i18n \"discourse_ai.reviewables.model_used\"}}</td>\n              <td colspan=\"3\">{{model}}</td>\n              <td colspan=\"4\">{{i18n \"discourse_ai.reviewables.accuracy\"}}</td>\n              <td colspan=\"3\">{{acc}}%</td>\n            </tr>\n          {{/each-in}}\n        </tbody>\n      </table>\n    {{/if}}\n  \n  */\n  {\n    \"id\": \"+cgPW/Ry\",\n    \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"    \\\"],[10,\\\"table\\\"],[14,0,\\\"reviewable-scores\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[30,1]],null],null,[[[1,\\\"          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"4\\\"],[12],[1,[28,[32,0],[\\\"discourse_ai.reviewables.model_used\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"3\\\"],[12],[1,[30,3]],[13],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"4\\\"],[12],[1,[28,[32,0],[\\\"discourse_ai.reviewables.accuracy\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"3\\\"],[12],[1,[30,2]],[1,\\\"%\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[2,3]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@accuracies\\\",\\\"acc\\\",\\\"model\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-each-in\\\"]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/model-accuracies.js\",\n    \"scope\": () => [_discourseI18n.i18n],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"model-accuracies:ModelAccuracies\"));\n  var _default = _exports.default = ModelAccuracies;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/post-menu/ai-cancel-streaming-button\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"discourse/components/d-button\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _dButton, _ajax, _ajaxError, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiCancelStreamingButton extends _component.default {\n    async cancelStreaming() {\n      const post = this.args.post;\n      try {\n        await (0, _ajax.ajax)(`/discourse-ai/ai-bot/post/${post.id}/stop-streaming`, {\n          type: \"POST\"\n        });\n        document.querySelector(`#post_${post.post_number}`).classList.remove(\"streaming\");\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      }\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"cancelStreaming\", [_object.action]))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DButton\n          class=\"post-action-menu__ai-cancel-streaming cancel-streaming\"\n          ...attributes\n          @action={{this.cancelStreaming}}\n          @icon=\"pause\"\n          @title=\"discourse_ai.ai_bot.cancel_streaming\"\n        />\n      \n    */\n    {\n      \"id\": \"eS4Xq4iv\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"post-action-menu__ai-cancel-streaming cancel-streaming\\\"],[17,1]],[[\\\"@action\\\",\\\"@icon\\\",\\\"@title\\\"],[[30,0,[\\\"cancelStreaming\\\"]],\\\"pause\\\",\\\"discourse_ai.ai_bot.cancel_streaming\\\"]],null],[1,\\\"\\\\n  \\\"]],[\\\"&attrs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/post-menu/ai-cancel-streaming-button.js\",\n      \"scope\": () => [_dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiCancelStreamingButton;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/post-menu/ai-debug-button\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", \"discourse/plugins/discourse-ai/discourse/components/modal/debug-ai-modal\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _dButton, _aiBotHelper, _debugAiModal, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiDebugButton extends _component.default {\n    static shouldRender(args) {\n      return (0, _aiBotHelper.isPostFromAiBot)(args.post, args.state.currentUser);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    debugAiResponse() {\n      this.modal.show(_debugAiModal.default, {\n        model: this.args.post\n      });\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"debugAiResponse\", [_object.action]))();\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DButton\n          class=\"post-action-menu__debug-ai\"\n          ...attributes\n          @action={{this.debugAiResponse}}\n          @icon=\"info\"\n          @title=\"discourse_ai.ai_bot.debug_ai\"\n        />\n      \n    */\n    {\n      \"id\": \"a7gp58E/\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"post-action-menu__debug-ai\\\"],[17,1]],[[\\\"@action\\\",\\\"@icon\\\",\\\"@title\\\"],[[30,0,[\\\"debugAiResponse\\\"]],\\\"info\\\",\\\"discourse_ai.ai_bot.debug_ai\\\"]],null],[1,\\\"\\\\n  \\\"]],[\\\"&attrs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/post-menu/ai-debug-button.js\",\n      \"scope\": () => [_dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiDebugButton;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/post-menu/ai-share-button\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", \"discourse/plugins/discourse-ai/discourse/lib/copy-conversation\", \"discourse/plugins/discourse-ai/discourse/components/modal/share-modal\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _dButton, _aiBotHelper, _copyConversation, _shareModal, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AUTO_COPY_THRESHOLD = 4;\n  class AiDebugButton extends _component.default {\n    static shouldRender(args) {\n      return (0, _aiBotHelper.isPostFromAiBot)(args.post, args.state.currentUser);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    async shareAiResponse() {\n      const post = this.args.post;\n      if (post.post_number <= AUTO_COPY_THRESHOLD) {\n        await (0, _copyConversation.default)(post.topic, 1, post.post_number);\n        this.args.showFeedback(\"discourse_ai.ai_bot.conversation_shared\");\n      } else {\n        this.modal.show(_shareModal.default, {\n          model: post\n        });\n      }\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"shareAiResponse\", [_object.action]))();\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DButton\n          class=\"post-action-menu__share-ai\"\n          ...attributes\n          @action={{this.shareAiResponse}}\n          @icon=\"far-copy\"\n          @title=\"discourse_ai.ai_bot.share\"\n        />\n      \n    */\n    {\n      \"id\": \"GGDSzGUM\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"post-action-menu__share-ai\\\"],[17,1]],[[\\\"@action\\\",\\\"@icon\\\",\\\"@title\\\"],[[30,0,[\\\"shareAiResponse\\\"]],\\\"far-copy\\\",\\\"discourse_ai.ai_bot.share\\\"]],null],[1,\\\"\\\\n  \\\"]],[\\\"&attrs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/post-menu/ai-share-button.js\",\n      \"scope\": () => [_dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiDebugButton;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/post/ai-persona-flair\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiBotHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPersonaFlair extends _component.default {\n    static shouldRender(args) {\n      return (0, _aiBotHelper.isGPTBot)(args.post.user);\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <span class=\"persona-flair\">\n          {{@outletArgs.post.topic.ai_persona_name}}\n        </span>\n      \n    */\n    {\n      \"id\": \"g/xynBPl\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"persona-flair\\\"],[12],[1,\\\"\\\\n      \\\"],[1,[30,1,[\\\"post\\\",\\\"topic\\\",\\\"ai_persona_name\\\"]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/post/ai-persona-flair.js\",\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPersonaFlair;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/rag-options-fk\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/modifier\", \"@ember/object\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-llm-selector\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _modifier, _object, _discourseI18n, _aiLlmSelector, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class RagOptionsFk extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"showIndexingOptions\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showIndexingOptions = (() => (dt7948.i(this, \"showIndexingOptions\"), void 0))();\n    toggleIndexingOptions(event) {\n      this.showIndexingOptions = !this.showIndexingOptions;\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"toggleIndexingOptions\", [_object.action]))();\n    get indexingOptionsText() {\n      return this.showIndexingOptions ? (0, _discourseI18n.i18n)(\"discourse_ai.rag.options.hide_indexing_options\") : (0, _discourseI18n.i18n)(\"discourse_ai.rag.options.show_indexing_options\");\n    }\n    get visionLlms() {\n      return this.args.llms.filter(llm => llm.vision_enabled);\n    }\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if @data.rag_uploads}}\n          <a\n            href=\"#\"\n            class=\"rag-options__indexing-options\"\n            {{on \"click\" this.toggleIndexingOptions}}\n          >{{this.indexingOptionsText}}</a>\n        {{/if}}\n    \n        {{#if this.showIndexingOptions}}\n          <@form.Field\n            @name=\"rag_chunk_tokens\"\n            @title={{i18n \"discourse_ai.rag.options.rag_chunk_tokens\"}}\n            @tooltip={{i18n \"discourse_ai.rag.options.rag_chunk_tokens_help\"}}\n            @format=\"large\"\n            as |field|\n          >\n            <field.Input @type=\"number\" step=\"any\" lang=\"en\" />\n          </@form.Field>\n    \n          <@form.Field\n            @name=\"rag_chunk_overlap_tokens\"\n            @title={{i18n \"discourse_ai.rag.options.rag_chunk_tokens\"}}\n            @tooltip={{i18n\n              \"discourse_ai.rag.options.rag_chunk_overlap_tokens_help\"\n            }}\n            @format=\"large\"\n            as |field|\n          >\n            <field.Input @type=\"number\" step=\"any\" lang=\"en\" />\n          </@form.Field>\n    \n          {{#if @allowImages}}\n            <@form.Field\n              @name=\"rag_llm_model_id\"\n              @title={{i18n \"discourse_ai.rag.options.rag_llm_model\"}}\n              @tooltip={{i18n \"discourse_ai.rag.options.rag_llm_model_help\"}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Custom>\n                <AiLlmSelector\n                  @value={{field.value}}\n                  @llms={{this.visionLlms}}\n                  @onChange={{field.set}}\n                  @class=\"ai-persona-editor__llms\"\n                />\n              </field.Custom>\n            </@form.Field>\n          {{/if}}\n          {{yield}}\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"aJfOKu/I\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"rag_uploads\\\"]],[[[1,\\\"      \\\"],[11,3],[24,6,\\\"#\\\"],[24,0,\\\"rag-options__indexing-options\\\"],[4,[32,0],[\\\"click\\\",[30,0,[\\\"toggleIndexingOptions\\\"]]],null],[12],[1,[30,0,[\\\"indexingOptionsText\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showIndexingOptions\\\"]],[[[1,\\\"      \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"rag_chunk_tokens\\\",[28,[32,1],[\\\"discourse_ai.rag.options.rag_chunk_tokens\\\"],null],[28,[32,1],[\\\"discourse_ai.rag.options.rag_chunk_tokens_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,3,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n      \\\"]],[3]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"rag_chunk_overlap_tokens\\\",[28,[32,1],[\\\"discourse_ai.rag.options.rag_chunk_tokens\\\"],null],[28,[32,1],[\\\"discourse_ai.rag.options.rag_chunk_overlap_tokens_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,4,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n      \\\"]],[4]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,5],[[[1,\\\"        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"rag_llm_model_id\\\",[28,[32,1],[\\\"discourse_ai.rag.options.rag_llm_model\\\"],null],[28,[32,1],[\\\"discourse_ai.rag.options.rag_llm_model_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,6,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[32,2],null,[[\\\"@value\\\",\\\"@llms\\\",\\\"@onChange\\\",\\\"@class\\\"],[[30,6,[\\\"value\\\"]],[30,0,[\\\"visionLlms\\\"]],[30,6,[\\\"set\\\"]],\\\"ai-persona-editor__llms\\\"]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[6]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[18,7,null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@data\\\",\\\"@form\\\",\\\"field\\\",\\\"field\\\",\\\"@allowImages\\\",\\\"field\\\",\\\"&default\\\"],false,[\\\"if\\\",\\\"yield\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/rag-options-fk.js\",\n      \"scope\": () => [_modifier.on, _discourseI18n.i18n, _aiLlmSelector.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = RagOptionsFk;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/rag-upload-progress\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/service\", \"discourse/helpers/d-icon\", \"discourse/lib/decorators\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _didInsert, _service, _dIcon, _decorators, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class RagUploadProgress extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"messageBus\", [_service.service]))();\n    #messageBus = (() => (dt7948.i(this, \"messageBus\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"updatedProgress\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #updatedProgress = (() => (dt7948.i(this, \"updatedProgress\"), void 0))();\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.messageBus.unsubscribe(`/discourse-ai/rag/${this.args.upload.id}`);\n    }\n    trackProgress() {\n      this.messageBus.subscribe(`/discourse-ai/rag/${this.args.upload.id}`, this.onIndexingUpdate);\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"trackProgress\", [_object.action]))();\n    onIndexingUpdate(data) {\n      // Order not guaranteed. Discard old updates.\n      if (!this.updatedProgress || this.updatedProgress.left === 0 || this.updatedProgress.left > data.left || data.total === data.indexed) {\n        this.updatedProgress = data;\n      }\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"onIndexingUpdate\", [_decorators.bind]))();\n    get calculateProgress() {\n      if (this.progress.total === 0) {\n        return 0;\n      }\n      return Math.ceil(this.progress.indexed * 100 / this.progress.total);\n    }\n    get fullyIndexed() {\n      return this.progress && this.progress.total !== 0 && this.progress.left === 0;\n    }\n    get progress() {\n      if (this.updatedProgress) {\n        return this.updatedProgress;\n      } else if (this.args.ragIndexingStatuses) {\n        return this.args.ragIndexingStatuses[this.args.upload.id];\n      } else {\n        return [];\n      }\n    }\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <td class=\"rag-uploader__upload-status\" {{didInsert this.trackProgress}}>\n          {{#if this.progress}}\n            {{#if this.fullyIndexed}}\n              <span class=\"indexed\">\n                {{icon \"check\"}}\n                {{i18n \"discourse_ai.rag.uploads.indexed\"}}\n              </span>\n            {{else}}\n              <span class=\"indexing\">\n                {{icon \"robot\"}}\n                {{i18n \"discourse_ai.rag.uploads.indexing\"}}\n                {{this.calculateProgress}}%\n              </span>\n            {{/if}}\n          {{else}}\n            <span class=\"uploaded\">{{i18n\n                \"discourse_ai.rag.uploads.uploaded\"\n              }}</span>\n          {{/if}}\n        </td>\n      \n    */\n    {\n      \"id\": \"AyWODt7W\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[11,\\\"td\\\"],[24,0,\\\"rag-uploader__upload-status\\\"],[4,[32,0],[[30,0,[\\\"trackProgress\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"progress\\\"]],[[[41,[30,0,[\\\"fullyIndexed\\\"]],[[[1,\\\"          \\\"],[10,1],[14,0,\\\"indexed\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"check\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[28,[32,2],[\\\"discourse_ai.rag.uploads.indexed\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,1],[14,0,\\\"indexing\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"robot\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[28,[32,2],[\\\"discourse_ai.rag.uploads.indexing\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"calculateProgress\\\"]]],[1,\\\"%\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],[[[1,\\\"        \\\"],[10,1],[14,0,\\\"uploaded\\\"],[12],[1,[28,[32,2],[\\\"discourse_ai.rag.uploads.uploaded\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/rag-upload-progress.js\",\n      \"scope\": () => [_didInsert.default, _dIcon.default, _discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = RagUploadProgress;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/rag-uploader\", [\"exports\", \"@glimmer/tracking\", \"@ember/component\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/owner\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/helpers/d-icon\", \"discourse/lib/ajax\", \"discourse/lib/debounce\", \"discourse/lib/uppy/uppy-upload\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/rag-upload-progress\", \"@ember/template-factory\"], function (_exports, _tracking, _component, _helper, _modifier, _object, _owner, _didInsert, _service, _dButton, _dIcon, _ajax, _debounce, _uppyUpload, _discourseI18n, _ragUploadProgress, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class RagUploader extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"appEvents\", [_service.service]))();\n    #appEvents = (() => (dt7948.i(this, \"appEvents\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"term\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #term = (() => (dt7948.i(this, \"term\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"filteredUploads\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #filteredUploads = (() => (dt7948.i(this, \"filteredUploads\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"ragIndexingStatuses\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #ragIndexingStatuses = (() => (dt7948.i(this, \"ragIndexingStatuses\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"ragUploads\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #ragUploads = (() => (dt7948.i(this, \"ragUploads\"), void 0))();\n    uppyUpload = (() => new _uppyUpload.default((0, _owner.getOwner)(this), {\n      id: \"discourse-ai-rag-uploader\",\n      maxFiles: 20,\n      type: \"discourse_ai_rag_upload\",\n      uploadUrl: \"/admin/plugins/discourse-ai/rag-document-fragments/files/upload\",\n      preventDirectS3Uploads: true,\n      uploadDone: uploadedFile => {\n        const newUpload = uploadedFile.upload;\n        newUpload.status = \"uploaded\";\n        newUpload.statusText = (0, _discourseI18n.i18n)(\"discourse_ai.rag.uploads.uploaded\");\n        this.ragUploads.pushObject(newUpload);\n        this.debouncedSearch();\n      }\n    }))();\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.appEvents.off(`upload-mixin:${this.uppyUpload.config}:all-uploads-complete`, this, \"_updateTargetWithUploads\");\n    }\n    didReceiveAttrs() {\n      super.didReceiveAttrs(...arguments);\n      if (this.uppyUpload.inProgressUploads?.length > 0) {\n        this.uppyUpload.cancelAllUploads();\n      }\n      this.ragUploads = this.target?.rag_uploads?.slice() || [];\n      this.filteredUploads = this.ragUploads;\n      const targetName = this.targetName || this.target?.constructor?.name;\n      if (this.ragUploads?.length && this.target?.id) {\n        (0, _ajax.ajax)(`/admin/plugins/discourse-ai/rag-document-fragments/files/status.json?target_type=${targetName}&target_id=${this.target.id}`).then(statuses => {\n          this.set(\"ragIndexingStatuses\", statuses);\n        });\n      }\n      this.appEvents.on(`upload-mixin:${this.uppyUpload.config.id}:all-uploads-complete`, this, \"_updateTargetWithUploads\");\n    }\n    _updateTargetWithUploads() {\n      this.updateUploads(this.ragUploads);\n    }\n    get acceptedFileTypes() {\n      if (this.args?.allowImages) {\n        return \".txt,.md,.png,.jpg,.jpeg\";\n      } else {\n        return \".txt,.md,.pdf\";\n      }\n    }\n    submitFiles() {\n      this.uppyUpload.openPicker();\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"submitFiles\", [_object.action]))();\n    cancelUploading(upload) {\n      this.uppyUpload.cancelSingleUpload({\n        fileId: upload.id\n      });\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"cancelUploading\", [_object.action]))();\n    search() {\n      if (this.term) {\n        this.filteredUploads = this.ragUploads.filter(u => {\n          return u.original_filename.toUpperCase().indexOf(this.term.toUpperCase()) > -1;\n        });\n      } else {\n        this.filteredUploads = this.ragUploads;\n      }\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"search\", [_object.action]))();\n    debouncedSearch() {\n      (0, _debounce.default)(this, this.search, 100);\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"debouncedSearch\", [_object.action]))();\n    removeUpload(upload) {\n      this.ragUploads.removeObject(upload);\n      this.onRemove(upload);\n      this.debouncedSearch();\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"removeUpload\", [_object.action]))();\n    static #_11 = (() => (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"rag-uploader\">\n          {{#if @allowImages}}\n            <p>{{i18n \"discourse_ai.rag.uploads.description_with_images\"}}</p>\n          {{else}}\n            <p>{{i18n \"discourse_ai.rag.uploads.description\"}}</p>\n          {{/if}}\n    \n          {{#if this.ragUploads}}\n            <div class=\"rag-uploader__search-input-container\">\n              <div class=\"rag-uploader__search-input\">\n                {{icon\n                  \"magnifying-glass\"\n                  class=\"rag-uploader__search-input__search-icon\"\n                }}\n                <Input\n                  class=\"rag-uploader__search-input__input\"\n                  placeholder={{i18n \"discourse_ai.rag.uploads.filter\"}}\n                  @value={{this.term}}\n                  {{on \"keyup\" this.debouncedSearch}}\n                />\n              </div>\n            </div>\n          {{/if}}\n    \n          <table class=\"rag-uploader__uploads-list\">\n            <tbody>\n              {{#each this.filteredUploads as |upload|}}\n                <tr>\n                  <td>\n                    <span class=\"rag-uploader__rag-file-icon\">{{icon \"file\"}}</span>\n                    {{upload.original_filename}}\n                  </td>\n                  <RagUploadProgress\n                    @upload={{upload}}\n                    @ragIndexingStatuses={{this.ragIndexingStatuses}}\n                  />\n                  <td class=\"rag-uploader__remove-file\">\n                    <DButton\n                      @icon=\"xmark\"\n                      @title=\"discourse_ai.rag.uploads.remove\"\n                      @action={{fn this.removeUpload upload}}\n                      class=\"btn-flat\"\n                    />\n                  </td>\n                </tr>\n              {{/each}}\n              {{#each this.uppyUpload.inProgressUploads as |upload|}}\n                <tr>\n                  <td><span class=\"rag-uploader__rag-file-icon\">{{icon\n                        \"file\"\n                      }}</span>\n                    {{upload.original_filename}}</td>\n                  <td class=\"rag-uploader__upload-status\">\n                    <div class=\"spinner small\"></div>\n                    <span>{{i18n \"discourse_ai.rag.uploads.uploading\"}}\n                      {{upload.uploadProgress}}%</span>\n                  </td>\n                  <td class=\"rag-uploader__remove-file\">\n                    <DButton\n                      @icon=\"xmark\"\n                      @title=\"discourse_ai.rag.uploads.remove\"\n                      @action={{fn this.cancelUploading upload}}\n                      class=\"btn-flat\"\n                    />\n                  </td>\n                </tr>\n              {{/each}}\n            </tbody>\n          </table>\n    \n          <input\n            {{didInsert this.uppyUpload.setup}}\n            class=\"hidden-upload-field\"\n            disabled={{this.uploading}}\n            type=\"file\"\n            multiple=\"multiple\"\n            accept={{this.acceptedFileTypes}}\n          />\n          <DButton\n            @label=\"discourse_ai.rag.uploads.button\"\n            @icon=\"plus\"\n            @title=\"discourse_ai.rag.uploads.button\"\n            @action={{this.submitFiles}}\n            class=\"btn-default\"\n          />\n        </div>\n      \n    */\n    {\n      \"id\": \"XwEOHoWK\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"rag-uploader\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"        \\\"],[10,2],[12],[1,[28,[32,0],[\\\"discourse_ai.rag.uploads.description_with_images\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,2],[12],[1,[28,[32,0],[\\\"discourse_ai.rag.uploads.description\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"ragUploads\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"rag-uploader__search-input-container\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"rag-uploader__search-input\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"magnifying-glass\\\"],[[\\\"class\\\"],[\\\"rag-uploader__search-input__search-icon\\\"]]]],[1,\\\"\\\\n            \\\"],[8,[32,2],[[24,0,\\\"rag-uploader__search-input__input\\\"],[16,\\\"placeholder\\\",[28,[32,0],[\\\"discourse_ai.rag.uploads.filter\\\"],null]],[4,[32,3],[\\\"keyup\\\",[30,0,[\\\"debouncedSearch\\\"]]],null]],[[\\\"@value\\\"],[[30,0,[\\\"term\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[10,\\\"table\\\"],[14,0,\\\"rag-uploader__uploads-list\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"filteredUploads\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"rag-uploader__rag-file-icon\\\"],[12],[1,[28,[32,1],[\\\"file\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[1,[30,2,[\\\"original_filename\\\"]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[8,[32,4],null,[[\\\"@upload\\\",\\\"@ragIndexingStatuses\\\"],[[30,2],[30,0,[\\\"ragIndexingStatuses\\\"]]]],null],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[14,0,\\\"rag-uploader__remove-file\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[32,5],[[24,0,\\\"btn-flat\\\"]],[[\\\"@icon\\\",\\\"@title\\\",\\\"@action\\\"],[\\\"xmark\\\",\\\"discourse_ai.rag.uploads.remove\\\",[28,[32,6],[[30,0,[\\\"removeUpload\\\"]],[30,2]],null]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"uppyUpload\\\",\\\"inProgressUploads\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[10,1],[14,0,\\\"rag-uploader__rag-file-icon\\\"],[12],[1,[28,[32,1],[\\\"file\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[1,[30,3,[\\\"original_filename\\\"]]],[13],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[14,0,\\\"rag-uploader__upload-status\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"spinner small\\\"],[12],[13],[1,\\\"\\\\n                \\\"],[10,1],[12],[1,[28,[32,0],[\\\"discourse_ai.rag.uploads.uploading\\\"],null]],[1,\\\"\\\\n                  \\\"],[1,[30,3,[\\\"uploadProgress\\\"]]],[1,\\\"%\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[14,0,\\\"rag-uploader__remove-file\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[32,5],[[24,0,\\\"btn-flat\\\"]],[[\\\"@icon\\\",\\\"@title\\\",\\\"@action\\\"],[\\\"xmark\\\",\\\"discourse_ai.rag.uploads.remove\\\",[28,[32,6],[[30,0,[\\\"cancelUploading\\\"]],[30,3]],null]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[11,\\\"input\\\"],[24,0,\\\"hidden-upload-field\\\"],[16,\\\"disabled\\\",[30,0,[\\\"uploading\\\"]]],[24,\\\"multiple\\\",\\\"multiple\\\"],[16,\\\"accept\\\",[30,0,[\\\"acceptedFileTypes\\\"]]],[24,4,\\\"file\\\"],[4,[32,7],[[30,0,[\\\"uppyUpload\\\",\\\"setup\\\"]]],null],[12],[13],[1,\\\"\\\\n      \\\"],[8,[32,5],[[24,0,\\\"btn-default\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@title\\\",\\\"@action\\\"],[\\\"discourse_ai.rag.uploads.button\\\",\\\"plus\\\",\\\"discourse_ai.rag.uploads.button\\\",[30,0,[\\\"submitFiles\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@allowImages\\\",\\\"upload\\\",\\\"upload\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/rag-uploader.js\",\n      \"scope\": () => [_discourseI18n.i18n, _dIcon.default, _component.Input, _modifier.on, _ragUploadProgress.default, _dButton.default, _helper.fn, _didInsert.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = RagUploader;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/reviewable-ai-chat-message\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/routing\", \"@ember/template\", \"truth-helpers\", \"discourse/components/reviewable-created-by\", \"discourse/components/reviewable-post-header\", \"discourse/plugins/chat/discourse/components/chat-channel-title\", \"discourse/plugins/chat/discourse/models/chat-channel\", \"discourse/plugins/discourse-ai/discourse/components/model-accuracies\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _routing, _template, _truthHelpers, _reviewableCreatedBy, _reviewablePostHeader, _chatChannelTitle, _chatChannel, _modelAccuracies, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ReviewableAiChatMessage extends _component.default {\n    get chatChannel() {\n      if (!this.args.reviewable.chat_channel) {\n        return;\n      }\n      return _chatChannel.default.create(this.args.reviewable.chat_channel);\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.chatChannel}}\n          <div class=\"flagged-post-header\">\n            <LinkTo\n              @route=\"chat.channel.near-message\"\n              @models={{array\n                this.chatChannel.slugifiedTitle\n                this.chatChannel.id\n                @reviewable.target_id\n              }}\n            >\n              <ChatChannelTitle @channel={{this.chatChannel}} />\n            </LinkTo>\n          </div>\n        {{/if}}\n    \n        <div class=\"post-contents-wrapper\">\n          <ReviewableCreatedBy\n            @user={{@reviewable.target_created_by}}\n            @tagName=\"\"\n          />\n          <div class=\"post-contents\">\n            <ReviewablePostHeader\n              @reviewable={{@reviewable}}\n              @createdBy={{@reviewable.target_created_by}}\n              @tagName=\"\"\n            />\n    \n            <div class=\"post-body\">\n              {{htmlSafe\n                (or @reviewable.payload.message_cooked @reviewable.cooked)\n              }}\n            </div>\n    \n            {{yield}}\n    \n            <ModelAccuracies @accuracies={{@reviewable.payload.accuracies}} />\n          </div>\n        </div>\n      \n    */\n    {\n      \"id\": \"I2fblp9y\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"chatChannel\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"flagged-post-header\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,0],null,[[\\\"@route\\\",\\\"@models\\\"],[\\\"chat.channel.near-message\\\",[28,[32,1],[[30,0,[\\\"chatChannel\\\",\\\"slugifiedTitle\\\"]],[30,0,[\\\"chatChannel\\\",\\\"id\\\"]],[30,1,[\\\"target_id\\\"]]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[32,2],null,[[\\\"@channel\\\"],[[30,0,[\\\"chatChannel\\\"]]]],null],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"post-contents-wrapper\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,3],null,[[\\\"@user\\\",\\\"@tagName\\\"],[[30,1,[\\\"target_created_by\\\"]],\\\"\\\"]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"post-contents\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,4],null,[[\\\"@reviewable\\\",\\\"@createdBy\\\",\\\"@tagName\\\"],[[30,1],[30,1,[\\\"target_created_by\\\"]],\\\"\\\"]],null],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"post-body\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[28,[32,5],[[28,[32,6],[[30,1,[\\\"payload\\\",\\\"message_cooked\\\"]],[30,1,[\\\"cooked\\\"]]],null]],null]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[18,2,null],[1,\\\"\\\\n\\\\n        \\\"],[8,[32,7],null,[[\\\"@accuracies\\\"],[[30,1,[\\\"payload\\\",\\\"accuracies\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@reviewable\\\",\\\"&default\\\"],false,[\\\"if\\\",\\\"yield\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/reviewable-ai-chat-message.js\",\n      \"scope\": () => [_routing.LinkTo, _helper.array, _chatChannelTitle.default, _reviewableCreatedBy.default, _reviewablePostHeader.default, _template.htmlSafe, _truthHelpers.or, _modelAccuracies.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ReviewableAiChatMessage;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/reviewable-ai-post\", [\"exports\", \"@ember/template\", \"discourse/components/reviewable-created-by\", \"discourse/components/reviewable-post-edits\", \"discourse/components/reviewable-post-header\", \"discourse/components/reviewable-topic-link\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/model-accuracies\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _template, _reviewableCreatedBy, _reviewablePostEdits, _reviewablePostHeader, _reviewableTopicLink, _discourseI18n, _modelAccuracies, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ReviewableAiPost = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <div class=\"flagged-post-header\">\n      <ReviewableTopicLink @reviewable={{@reviewable}} @tagName=\"\" />\n      <ReviewablePostEdits @reviewable={{@reviewable}} @tagName=\"\" />\n    </div>\n  \n    <div class=\"post-contents-wrapper\">\n      <ReviewableCreatedBy @user={{@reviewable.target_created_by}} @tagName=\"\" />\n      <div class=\"post-contents\">\n        <ReviewablePostHeader\n          @reviewable={{@reviewable}}\n          @createdBy={{@reviewable.target_created_by}}\n          @tagName=\"\"\n        />\n        <div class=\"post-body\">\n          {{#if @reviewable.blank_post}}\n            <p>{{i18n \"review.deleted_post\"}}</p>\n          {{else}}\n            {{htmlSafe @reviewable.cooked}}\n          {{/if}}\n        </div>\n  \n        {{yield}}\n  \n        <ModelAccuracies @accuracies={{@reviewable.payload.accuracies}} />\n      </div>\n    </div>\n  \n  */\n  {\n    \"id\": \"o5RtJSg5\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"flagged-post-header\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@reviewable\\\",\\\"@tagName\\\"],[[30,1],\\\"\\\"]],null],[1,\\\"\\\\n    \\\"],[8,[32,1],null,[[\\\"@reviewable\\\",\\\"@tagName\\\"],[[30,1],\\\"\\\"]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"post-contents-wrapper\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[32,2],null,[[\\\"@user\\\",\\\"@tagName\\\"],[[30,1,[\\\"target_created_by\\\"]],\\\"\\\"]],null],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"post-contents\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,3],null,[[\\\"@reviewable\\\",\\\"@createdBy\\\",\\\"@tagName\\\"],[[30,1],[30,1,[\\\"target_created_by\\\"]],\\\"\\\"]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"post-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"blank_post\\\"]],[[[1,\\\"          \\\"],[10,2],[12],[1,[28,[32,4],[\\\"review.deleted_post\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[1,[28,[32,5],[[30,1,[\\\"cooked\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[18,2,null],[1,\\\"\\\\n\\\\n      \\\"],[8,[32,6],null,[[\\\"@accuracies\\\"],[[30,1,[\\\"payload\\\",\\\"accuracies\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@reviewable\\\",\\\"&default\\\"],false,[\\\"if\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/reviewable-ai-post.js\",\n    \"scope\": () => [_reviewableTopicLink.default, _reviewablePostEdits.default, _reviewableCreatedBy.default, _reviewablePostHeader.default, _discourseI18n.i18n, _template.htmlSafe, _modelAccuracies.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"reviewable-ai-post:ReviewableAiPost\"));\n  var _default = _exports.default = ReviewableAiPost;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-category-suggester\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/components/dropdown-menu\", \"discourse/helpers/category-badge\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"float-kit/components/d-menu\", \"discourse/plugins/discourse-ai/discourse/lib/ai-helper-suggestions\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _service, _dButton, _dropdownMenu, _categoryBadge, _ajax, _ajaxError, _discourseI18n, _dMenu, _aiHelperSuggestions, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiCategorySuggester extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"suggestions\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #suggestions = (() => (dt7948.i(this, \"suggestions\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"untriggers\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #untriggers = (() => (dt7948.i(this, \"untriggers\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"triggerIcon\", [_tracking.tracked], function () {\n      return \"discourse-sparkles\";\n    }))();\n    #triggerIcon = (() => (dt7948.i(this, \"triggerIcon\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"content\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #content = (() => (dt7948.i(this, \"content\"), void 0))();\n    get showSuggestionButton() {\n      const composerFields = document.querySelector(\".composer-fields\");\n      this.content = this.args.composer?.reply;\n      const showTrigger = this.content?.length > _aiHelperSuggestions.MIN_CHARACTER_COUNT || this.args.topicState === \"edit\";\n      if (composerFields) {\n        if (showTrigger) {\n          composerFields.classList.add(\"showing-ai-suggestions\");\n        } else {\n          composerFields.classList.remove(\"showing-ai-suggestions\");\n        }\n      }\n      return this.siteSettings.ai_embeddings_enabled && showTrigger;\n    }\n    get showDropdown() {\n      if (this.suggestions?.length <= 0) {\n        this.dMenu.close();\n      }\n      return !this.loading && this.suggestions?.length > 0;\n    }\n    async loadSuggestions() {\n      if (this.suggestions && this.suggestions?.length > 0 && !this.dMenu.expanded) {\n        return this.suggestions;\n      }\n      this.loading = true;\n      this.triggerIcon = \"spinner\";\n      const data = {};\n      if (this.content) {\n        data.text = this.content;\n      } else {\n        data.topic_id = this.args.buffered.content.id;\n      }\n      try {\n        const {\n          assistant\n        } = await (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest_category\", {\n          method: \"POST\",\n          data\n        });\n        this.suggestions = assistant;\n        if (this.suggestions?.length <= 0) {\n          (0, _aiHelperSuggestions.showSuggestionsError)(this, this.loadSuggestions.bind(this));\n          return;\n        }\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        this.loading = false;\n        this.triggerIcon = \"rotate\";\n      }\n      return this.suggestions;\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"loadSuggestions\", [_object.action]))();\n    applySuggestion(suggestion) {\n      const composer = this.args.composer;\n      const buffered = this.args.buffered;\n      if (composer) {\n        composer.set(\"categoryId\", suggestion.id);\n        composer.get(\"categoryId\");\n      }\n      if (buffered) {\n        this.args.buffered.set(\"category_id\", suggestion.id);\n      }\n      return this.dMenu.close();\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"applySuggestion\", [_object.action]))();\n    onRegisterApi(api) {\n      this.dMenu = api;\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"onRegisterApi\", [_object.action]))();\n    onClose() {\n      if (this.suggestions?.length > 0) {\n        // If all suggestions have been used,\n        // re-triggering when no suggestions present\n        // will cause computation issues with\n        // setting the icon, so we prevent it\n        this.triggerIcon = \"discourse-sparkles\";\n      }\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"onClose\", [_object.action]))();\n    static #_11 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showSuggestionButton}}\n          <DMenu\n            @title={{i18n \"discourse_ai.ai_helper.suggest\"}}\n            @icon={{this.triggerIcon}}\n            @identifier=\"ai-category-suggester\"\n            @onClose={{this.onClose}}\n            @triggerClass=\"btn-transparent suggestion-button suggest-category-button {{if\n              this.loading\n              'is-loading'\n            }}\"\n            @contentClass=\"ai-suggestions-menu\"\n            @onRegisterApi={{this.onRegisterApi}}\n            @modalForMobile={{true}}\n            @untriggers={{this.untriggers}}\n            {{on \"click\" this.loadSuggestions}}\n          >\n            <:content>\n              {{#if this.showDropdown}}\n                <DropdownMenu as |dropdown|>\n                  {{#each this.suggestions as |suggestion index|}}\n                    <dropdown.item>\n                      <DButton\n                        class=\"category-row\"\n                        data-name={{suggestion.name}}\n                        data-value={{index}}\n                        title={{suggestion.name}}\n                        @action={{fn this.applySuggestion suggestion}}\n                      >\n                        <div class=\"category-status\">\n                          {{categoryBadge suggestion}}\n                          <span class=\"topic-count\">x\n                            {{suggestion.topicCount}}</span>\n                        </div>\n                      </DButton>\n                    </dropdown.item>\n                  {{/each}}\n                </DropdownMenu>\n              {{/if}}\n            </:content>\n          </DMenu>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"MyQ0Js5H\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showSuggestionButton\\\"]],[[[1,\\\"      \\\"],[8,[32,0],[[4,[32,2],[\\\"click\\\",[30,0,[\\\"loadSuggestions\\\"]]],null]],[[\\\"@title\\\",\\\"@icon\\\",\\\"@identifier\\\",\\\"@onClose\\\",\\\"@triggerClass\\\",\\\"@contentClass\\\",\\\"@onRegisterApi\\\",\\\"@modalForMobile\\\",\\\"@untriggers\\\"],[[28,[32,1],[\\\"discourse_ai.ai_helper.suggest\\\"],null],[30,0,[\\\"triggerIcon\\\"]],\\\"ai-category-suggester\\\",[30,0,[\\\"onClose\\\"]],[29,[\\\"btn-transparent suggestion-button suggest-category-button \\\",[52,[30,0,[\\\"loading\\\"]],\\\"is-loading\\\"]]],\\\"ai-suggestions-menu\\\",[30,0,[\\\"onRegisterApi\\\"]],true,[30,0,[\\\"untriggers\\\"]]]],[[\\\"content\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showDropdown\\\"]],[[[1,\\\"            \\\"],[8,[32,3],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"suggestions\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[8,[30,1,[\\\"item\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[32,4],[[24,0,\\\"category-row\\\"],[16,\\\"data-name\\\",[30,2,[\\\"name\\\"]]],[16,\\\"data-value\\\",[30,3]],[16,\\\"title\\\",[30,2,[\\\"name\\\"]]]],[[\\\"@action\\\"],[[28,[32,5],[[30,0,[\\\"applySuggestion\\\"]],[30,2]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"category-status\\\"],[12],[1,\\\"\\\\n                      \\\"],[1,[28,[32,6],[[30,2]],null]],[1,\\\"\\\\n                      \\\"],[10,1],[14,0,\\\"topic-count\\\"],[12],[1,\\\"x\\\\n                        \\\"],[1,[30,2,[\\\"topicCount\\\"]]],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2,3]],null],[1,\\\"            \\\"]],[1]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"dropdown\\\",\\\"suggestion\\\",\\\"index\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-category-suggester.js\",\n      \"scope\": () => [_dMenu.default, _discourseI18n.i18n, _modifier.on, _dropdownMenu.default, _dButton.default, _helper.fn, _categoryBadge.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiCategorySuggester;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-tag-suggester\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/components/dropdown-menu\", \"discourse/helpers/discourse-tag\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"float-kit/components/d-menu\", \"discourse/plugins/discourse-ai/discourse/lib/ai-helper-suggestions\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _service, _dButton, _dropdownMenu, _discourseTag, _ajax, _ajaxError, _discourseI18n, _dMenu, _aiHelperSuggestions, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTagSuggester extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"composer\", [_service.service]))();\n    #composer = (() => (dt7948.i(this, \"composer\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"suggestions\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #suggestions = (() => (dt7948.i(this, \"suggestions\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"untriggers\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #untriggers = (() => (dt7948.i(this, \"untriggers\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"triggerIcon\", [_tracking.tracked], function () {\n      return \"discourse-sparkles\";\n    }))();\n    #triggerIcon = (() => (dt7948.i(this, \"triggerIcon\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"content\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #content = (() => (dt7948.i(this, \"content\"), void 0))();\n    get showSuggestionButton() {\n      if (this.composer.disableTagsChooser) {\n        return false;\n      }\n      const composerFields = document.querySelector(\".composer-fields\");\n      this.content = this.args.composer?.reply;\n      const showTrigger = this.content?.length > _aiHelperSuggestions.MIN_CHARACTER_COUNT || this.args.topicState === \"edit\";\n      if (composerFields) {\n        if (showTrigger) {\n          composerFields.classList.add(\"showing-ai-suggestions\");\n        } else {\n          composerFields.classList.remove(\"showing-ai-suggestions\");\n        }\n      }\n      return this.siteSettings.ai_embeddings_enabled && showTrigger;\n    }\n    get showDropdown() {\n      if (this.suggestions?.length <= 0) {\n        this.dMenu.close();\n      }\n      return !this.loading && this.suggestions?.length > 0;\n    }\n    async loadSuggestions() {\n      if (this.suggestions && this.suggestions?.length > 0 && !this.dMenu.expanded) {\n        return this.suggestions;\n      }\n      this.loading = true;\n      this.triggerIcon = \"spinner\";\n      const data = {};\n      if (this.content) {\n        data.text = this.content;\n      } else {\n        data.topic_id = this.args.buffered.content.id;\n      }\n      try {\n        const {\n          assistant\n        } = await (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest_tags\", {\n          method: \"POST\",\n          data\n        });\n        this.suggestions = assistant;\n        const model = this.args.composer ? this.args.composer : this.args.buffered;\n        if (this.#tagSelectorHasValues()) {\n          this.suggestions = this.suggestions.filter(s => !model.get(\"tags\").includes(s.name));\n        }\n        if (this.suggestions?.length <= 0) {\n          (0, _aiHelperSuggestions.showSuggestionsError)(this, this.loadSuggestions.bind(this));\n          return;\n        }\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        this.loading = false;\n        this.triggerIcon = \"rotate\";\n      }\n      return this.suggestions;\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"loadSuggestions\", [_object.action]))();\n    #tagSelectorHasValues() {\n      const model = this.args.composer ? this.args.composer : this.args.buffered;\n      return model.get(\"tags\") && model.get(\"tags\").length > 0;\n    }\n    #removedAppliedTag(suggestion) {\n      return this.suggestions = this.suggestions.filter(s => s.id !== suggestion.id);\n    }\n    applySuggestion(suggestion) {\n      const maxTags = this.siteSettings.max_tags_per_topic;\n      const model = this.args.composer ? this.args.composer : this.args.buffered;\n      if (!model) {\n        return;\n      }\n      const tags = model.get(\"tags\");\n      if (!tags) {\n        model.set(\"tags\", [suggestion.name]);\n        this.#removedAppliedTag(suggestion);\n        return;\n      }\n      if (tags?.length >= maxTags) {\n        return this.toasts.error({\n          class: \"ai-suggestion-error\",\n          duration: \"short\",\n          data: {\n            message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.suggest_errors.too_many_tags\", {\n              count: maxTags\n            })\n          }\n        });\n      }\n      tags.push(suggestion.name);\n      model.set(\"tags\", [...tags]);\n      suggestion.disabled = true;\n      this.#removedAppliedTag(suggestion);\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"applySuggestion\", [_object.action]))();\n    onRegisterApi(api) {\n      this.dMenu = api;\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"onRegisterApi\", [_object.action]))();\n    onClose() {\n      if (this.suggestions?.length > 0) {\n        // If all suggestions have been used,\n        // re-triggering when no suggestions present\n        // will cause computation issues with\n        // setting the icon, so we prevent it\n        this.triggerIcon = \"discourse-sparkles\";\n      }\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"onClose\", [_object.action]))();\n    static #_13 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showSuggestionButton}}\n          <DMenu\n            @title={{i18n \"discourse_ai.ai_helper.suggest\"}}\n            @icon={{this.triggerIcon}}\n            @identifier=\"ai-tag-suggester\"\n            @onClose={{this.onClose}}\n            @triggerClass=\"btn-transparent suggestion-button suggest-tags-button {{if\n              this.loading\n              'is-loading'\n            }}\"\n            @contentClass=\"ai-suggestions-menu\"\n            @onRegisterApi={{this.onRegisterApi}}\n            @modalForMobile={{true}}\n            @untriggers={{this.untriggers}}\n            {{on \"click\" this.loadSuggestions}}\n          >\n            <:content>\n              {{#if this.showDropdown}}\n                <DropdownMenu as |dropdown|>\n                  {{#each this.suggestions as |suggestion index|}}\n                    <dropdown.item>\n                      <DButton\n                        class=\"tag-row\"\n                        data-name={{suggestion.name}}\n                        data-value={{index}}\n                        title={{suggestion.name}}\n                        @translatedLabel={{suggestion.name}}\n                        @disabled={{this.isDisabled suggestion}}\n                        @action={{fn this.applySuggestion suggestion}}\n                      >\n                        {{discourseTag\n                          suggestion.name\n                          count=suggestion.count\n                          noHref=true\n                        }}\n                      </DButton>\n                    </dropdown.item>\n                  {{/each}}\n                </DropdownMenu>\n              {{/if}}\n            </:content>\n          </DMenu>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"8IJI8bF5\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showSuggestionButton\\\"]],[[[1,\\\"      \\\"],[8,[32,0],[[4,[32,2],[\\\"click\\\",[30,0,[\\\"loadSuggestions\\\"]]],null]],[[\\\"@title\\\",\\\"@icon\\\",\\\"@identifier\\\",\\\"@onClose\\\",\\\"@triggerClass\\\",\\\"@contentClass\\\",\\\"@onRegisterApi\\\",\\\"@modalForMobile\\\",\\\"@untriggers\\\"],[[28,[32,1],[\\\"discourse_ai.ai_helper.suggest\\\"],null],[30,0,[\\\"triggerIcon\\\"]],\\\"ai-tag-suggester\\\",[30,0,[\\\"onClose\\\"]],[29,[\\\"btn-transparent suggestion-button suggest-tags-button \\\",[52,[30,0,[\\\"loading\\\"]],\\\"is-loading\\\"]]],\\\"ai-suggestions-menu\\\",[30,0,[\\\"onRegisterApi\\\"]],true,[30,0,[\\\"untriggers\\\"]]]],[[\\\"content\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showDropdown\\\"]],[[[1,\\\"            \\\"],[8,[32,3],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"suggestions\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[8,[30,1,[\\\"item\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[32,4],[[24,0,\\\"tag-row\\\"],[16,\\\"data-name\\\",[30,2,[\\\"name\\\"]]],[16,\\\"data-value\\\",[30,3]],[16,\\\"title\\\",[30,2,[\\\"name\\\"]]]],[[\\\"@translatedLabel\\\",\\\"@disabled\\\",\\\"@action\\\"],[[30,2,[\\\"name\\\"]],[28,[30,0,[\\\"isDisabled\\\"]],[[30,2]],null],[28,[32,5],[[30,0,[\\\"applySuggestion\\\"]],[30,2]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[1,[28,[32,6],[[30,2,[\\\"name\\\"]]],[[\\\"count\\\",\\\"noHref\\\"],[[30,2,[\\\"count\\\"]],true]]]],[1,\\\"\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2,3]],null],[1,\\\"            \\\"]],[1]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"dropdown\\\",\\\"suggestion\\\",\\\"index\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-tag-suggester.js\",\n      \"scope\": () => [_dMenu.default, _discourseI18n.i18n, _modifier.on, _dropdownMenu.default, _dButton.default, _helper.fn, _discourseTag.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTagSuggester;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-title-suggester\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"discourse/components/d-button\", \"discourse/components/dropdown-menu\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"float-kit/components/d-menu\", \"discourse/plugins/discourse-ai/discourse/lib/ai-helper-suggestions\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _dButton, _dropdownMenu, _ajax, _ajaxError, _discourseI18n, _dMenu, _aiHelperSuggestions, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTitleSuggester extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"suggestions\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #suggestions = (() => (dt7948.i(this, \"suggestions\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"untriggers\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #untriggers = (() => (dt7948.i(this, \"untriggers\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"triggerIcon\", [_tracking.tracked], function () {\n      return \"discourse-sparkles\";\n    }))();\n    #triggerIcon = (() => (dt7948.i(this, \"triggerIcon\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"content\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #content = (() => (dt7948.i(this, \"content\"), void 0))();\n    get showSuggestionButton() {\n      const composerFields = document.querySelector(\".composer-fields\");\n      const editTopicTitleField = document.querySelector(\".edit-topic-title\");\n      this.content = this.args.composer?.reply;\n      const showTrigger = this.content?.length > _aiHelperSuggestions.MIN_CHARACTER_COUNT || this.args.topicState === \"edit\";\n      if (composerFields) {\n        if (showTrigger) {\n          composerFields.classList.add(\"showing-ai-suggestions\");\n        } else {\n          composerFields.classList.remove(\"showing-ai-suggestions\");\n        }\n      }\n      if (editTopicTitleField) {\n        if (showTrigger) {\n          editTopicTitleField.classList.add(\"showing-ai-suggestions\");\n        } else {\n          editTopicTitleField.classList.remove(\"showing-ai-suggestions\");\n        }\n      }\n      return showTrigger;\n    }\n    get showDropdown() {\n      if (this.suggestions?.length <= 0) {\n        this.dMenu.close();\n      }\n      return !this.loading && this.suggestions?.length > 0;\n    }\n    async loadSuggestions() {\n      if (this.suggestions && this.suggestions?.length > 0 && !this.dMenu.expanded) {\n        return this.suggestions;\n      }\n      this.loading = true;\n      this.triggerIcon = \"spinner\";\n      const data = {};\n      if (this.content) {\n        data.text = this.content;\n      } else {\n        data.topic_id = this.args.buffered.content.id;\n      }\n      try {\n        const {\n          suggestions\n        } = await (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest_title\", {\n          method: \"POST\",\n          data\n        });\n        this.suggestions = suggestions;\n        if (this.suggestions?.length <= 0) {\n          (0, _aiHelperSuggestions.showSuggestionsError)(this, this.loadSuggestions.bind(this));\n          return;\n        }\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        this.loading = false;\n        this.triggerIcon = \"rotate\";\n      }\n      return this.suggestions;\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"loadSuggestions\", [_object.action]))();\n    applySuggestion(suggestion) {\n      const model = this.args.composer ? this.args.composer : this.args.buffered;\n      if (!model) {\n        return;\n      }\n      model.set(\"title\", suggestion);\n      this.dMenu.close();\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"applySuggestion\", [_object.action]))();\n    onRegisterApi(api) {\n      this.dMenu = api;\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"onRegisterApi\", [_object.action]))();\n    onClose() {\n      if (this.suggestions?.length > 0) {\n        // If all suggestions have been used,\n        // re-triggering when no suggestions present\n        // will cause computation issues with\n        // setting the icon, so we prevent it\n        this.triggerIcon = \"discourse-sparkles\";\n      }\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"onClose\", [_object.action]))();\n    static #_10 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showSuggestionButton}}\n          <DMenu\n            @title={{i18n \"discourse_ai.ai_helper.suggest\"}}\n            @icon={{this.triggerIcon}}\n            @identifier=\"ai-title-suggester\"\n            @onClose={{this.onClose}}\n            @triggerClass=\"btn-transparent suggestion-button suggest-titles-button {{if\n              this.loading\n              'is-loading'\n            }}\"\n            @contentClass=\"ai-suggestions-menu\"\n            @onRegisterApi={{this.onRegisterApi}}\n            @modalForMobile={{true}}\n            @untriggers={{this.untriggers}}\n            {{on \"click\" this.loadSuggestions}}\n          >\n            <:content>\n              {{#if this.showDropdown}}\n                <DropdownMenu as |dropdown|>\n                  {{#each this.suggestions as |suggestion index|}}\n                    <dropdown.item>\n                      <DButton\n                        data-name={{suggestion}}\n                        data-value={{index}}\n                        title={{suggestion}}\n                        @action={{fn this.applySuggestion suggestion}}\n                      >\n                        {{suggestion}}\n                      </DButton>\n                    </dropdown.item>\n                  {{/each}}\n                </DropdownMenu>\n              {{/if}}\n            </:content>\n          </DMenu>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"VM+2XnI7\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showSuggestionButton\\\"]],[[[1,\\\"      \\\"],[8,[32,0],[[4,[32,2],[\\\"click\\\",[30,0,[\\\"loadSuggestions\\\"]]],null]],[[\\\"@title\\\",\\\"@icon\\\",\\\"@identifier\\\",\\\"@onClose\\\",\\\"@triggerClass\\\",\\\"@contentClass\\\",\\\"@onRegisterApi\\\",\\\"@modalForMobile\\\",\\\"@untriggers\\\"],[[28,[32,1],[\\\"discourse_ai.ai_helper.suggest\\\"],null],[30,0,[\\\"triggerIcon\\\"]],\\\"ai-title-suggester\\\",[30,0,[\\\"onClose\\\"]],[29,[\\\"btn-transparent suggestion-button suggest-titles-button \\\",[52,[30,0,[\\\"loading\\\"]],\\\"is-loading\\\"]]],\\\"ai-suggestions-menu\\\",[30,0,[\\\"onRegisterApi\\\"]],true,[30,0,[\\\"untriggers\\\"]]]],[[\\\"content\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showDropdown\\\"]],[[[1,\\\"            \\\"],[8,[32,3],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"suggestions\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[8,[30,1,[\\\"item\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[32,4],[[16,\\\"data-name\\\",[30,2]],[16,\\\"data-value\\\",[30,3]],[16,\\\"title\\\",[30,2]]],[[\\\"@action\\\"],[[28,[32,5],[[30,0,[\\\"applySuggestion\\\"]],[30,2]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[1,[30,2]],[1,\\\"\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2,3]],null],[1,\\\"            \\\"]],[1]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"dropdown\\\",\\\"suggestion\\\",\\\"index\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-title-suggester.js\",\n      \"scope\": () => [_dMenu.default, _discourseI18n.i18n, _modifier.on, _dropdownMenu.default, _dButton.default, _helper.fn],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTitleSuggester;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/thumbnail-suggestion-item\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"discourse/components/d-button\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _dButton, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ThumbnailSuggestionItem extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"selected\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #selected = (() => (dt7948.i(this, \"selected\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"selectIcon\", [_tracking.tracked], function () {\n      return \"far-circle\";\n    }))();\n    #selectIcon = (() => (dt7948.i(this, \"selectIcon\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"selectLabel\", [_tracking.tracked], function () {\n      return \"discourse_ai.ai_helper.thumbnail_suggestions.select\";\n    }))();\n    #selectLabel = (() => (dt7948.i(this, \"selectLabel\"), void 0))();\n    toggleSelection(thumbnail) {\n      if (this.selected) {\n        this.selectIcon = \"far-circle\";\n        this.selectLabel = \"discourse_ai.ai_helper.thumbnail_suggestions.select\";\n        this.selected = false;\n        return this.args.removeSelection(thumbnail);\n      }\n      this.selectIcon = \"circle-check\";\n      this.selectLabel = \"discourse_ai.ai_helper.thumbnail_suggestions.selected\";\n      this.selected = true;\n      return this.args.addSelection(thumbnail);\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"toggleSelection\", [_object.action]))();\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-thumbnail-suggestions__item\">\n          <DButton\n            @icon={{this.selectIcon}}\n            @label={{this.selectLabel}}\n            @action={{fn this.toggleSelection @thumbnail}}\n            class={{if this.selected \"btn-primary\"}}\n          />\n          <img\n            src={{@thumbnail.url}}\n            loading=\"lazy\"\n            width={{@thumbnail.thumbnail_width}}\n            height={{@thumbnail.thumbnail_height}}\n          />\n        </div>\n      \n    */\n    {\n      \"id\": \"BsBgpDKw\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-thumbnail-suggestions__item\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],[[16,0,[52,[30,0,[\\\"selected\\\"]],\\\"btn-primary\\\"]]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[[30,0,[\\\"selectIcon\\\"]],[30,0,[\\\"selectLabel\\\"]],[28,[32,1],[[30,0,[\\\"toggleSelection\\\"]],[30,1]],null]]],null],[1,\\\"\\\\n      \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[30,1,[\\\"url\\\"]]],[14,\\\"loading\\\",\\\"lazy\\\"],[15,\\\"width\\\",[30,1,[\\\"thumbnail_width\\\"]]],[15,\\\"height\\\",[30,1,[\\\"thumbnail_height\\\"]]],[12],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@thumbnail\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/thumbnail-suggestion-item.js\",\n      \"scope\": () => [_dButton.default, _helper.fn],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ThumbnailSuggestionItem;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/admin-dashboard-tabs-after/admin-sentiment-dashbboard\", [\"exports\", \"@glimmer/component\", \"@ember/routing\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _routing, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AISentimentDashboard extends _component.default {\n    static shouldRender(args, context) {\n      return context.siteSettings.ai_sentiment_enabled;\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <li class=\"navigation-item sentiment\">\n          <LinkTo @route=\"admin.dashboardSentiment\" class=\"navigation-link\">\n            {{i18n \"discourse_ai.sentiments.dashboard.title\"}}\n          </LinkTo>\n        </li>\n      \n    */\n    {\n      \"id\": \"aCrw9598\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,\\\"li\\\"],[14,0,\\\"navigation-item sentiment\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],[[24,0,\\\"navigation-link\\\"]],[[\\\"@route\\\"],[\\\"admin.dashboardSentiment\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[32,1],[\\\"discourse_ai.sentiments.dashboard.title\\\"],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/admin-dashboard-tabs-after/admin-sentiment-dashbboard.js\",\n      \"scope\": () => [_routing.LinkTo, _discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AISentimentDashboard;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/after-composer-category-input/ai-category-suggestion\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-category-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _aiCategorySuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiCategorySuggestion extends _component.default {\n    static shouldRender(args, context) {\n      return (0, _showAiHelper.showComposerAiHelper)(args?.composer, context.siteSettings, context.currentUser, \"suggestions\");\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"composer\", [_service.service]))();\n    #composer = (() => (dt7948.i(this, \"composer\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#unless this.composer.disableCategoryChooser}}\n          <AiCategorySuggester\n            @composer={{@outletArgs.composer}}\n            @topicState=\"new\"\n          />\n        {{/unless}}\n      \n    */\n    {\n      \"id\": \"doeO/ThB\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"composer\\\",\\\"disableCategoryChooser\\\"]]],[[[1,\\\"      \\\"],[8,[32,0],null,[[\\\"@composer\\\",\\\"@topicState\\\"],[[30,1,[\\\"composer\\\"]],\\\"new\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/after-composer-category-input/ai-category-suggestion.js\",\n      \"scope\": () => [_aiCategorySuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiCategorySuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/after-composer-tag-input/ai-tag-suggestion\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-tag-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiTagSuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTagSuggestion extends _component.default {\n    static shouldRender(args, context) {\n      return (0, _showAiHelper.showComposerAiHelper)(args?.composer, context.siteSettings, context.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiTagSuggester @composer={{@outletArgs.composer}} @topicState=\"new\" />\n      \n    */\n    {\n      \"id\": \"u3rz9DLM\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@composer\\\",\\\"@topicState\\\"],[[30,1,[\\\"composer\\\"]],\\\"new\\\"]],null],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/after-composer-tag-input/ai-tag-suggestion.js\",\n      \"scope\": () => [_aiTagSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTagSuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/after-composer-title-input/ai-title-suggestion\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-title-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiTitleSuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTitleSuggestion extends _component.default {\n    static shouldRender(args, context) {\n      return (0, _showAiHelper.showComposerAiHelper)(args?.composer, context.siteSettings, context.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#unless @outletArgs.composer.disableTitleInput}}\n          <AiTitleSuggester @composer={{@outletArgs.composer}} @topicState=\"new\" />\n        {{/unless}}\n      \n    */\n    {\n      \"id\": \"Ptl68I7m\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[51,[30,1,[\\\"composer\\\",\\\"disableTitleInput\\\"]]],[[[1,\\\"      \\\"],[8,[32,0],null,[[\\\"@composer\\\",\\\"@topicState\\\"],[[30,1,[\\\"composer\\\"]],\\\"new\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/after-composer-title-input/ai-title-suggestion.js\",\n      \"scope\": () => [_aiTitleSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTitleSuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/after-d-editor/composer-open\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/helpers/body-class\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _bodyClass, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class _default extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    get composerModel() {\n      return this.args?.outletArgs?.composer;\n    }\n    get renderChatWarning() {\n      return this.siteSettings.ai_bot_enable_chat_warning;\n    }\n    get aiBotClasses() {\n      if (this.composerModel?.title === (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.default_pm_prefix\")) {\n        return \"ai-bot-chat\";\n      } else {\n        return \"ai-bot-pm\";\n      }\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"aiBotClasses\", [(0, _object.computed)(\"composerModel.targetRecipients\", \"composerModel.title\")]))();\n    get isAiBotChat() {\n      if (this.composerModel && this.composerModel.targetRecipients && this.currentUser.ai_enabled_chat_bots) {\n        let recipients = this.composerModel.targetRecipients.split(\",\");\n        return this.currentUser.ai_enabled_chat_bots.any(bot => recipients.any(username => username === bot.username));\n      }\n      return false;\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"isAiBotChat\", [(0, _object.computed)(\"composerModel.targetRecipients\")]))();\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.isAiBotChat}}\n          {{bodyClass this.aiBotClasses}}\n          {{#if this.renderChatWarning}}\n            <div class=\"ai-bot-chat-warning\">{{i18n\n                \"discourse_ai.ai_bot.pm_warning\"\n              }}</div>\n          {{/if}}\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"er7lpl54\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isAiBotChat\\\"]],[[[1,\\\"      \\\"],[1,[28,[32,0],[[30,0,[\\\"aiBotClasses\\\"]]],null]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"renderChatWarning\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"ai-bot-chat-warning\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.pm_warning\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/after-d-editor/composer-open.js\",\n      \"scope\": () => [_bodyClass.default, _discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = _default;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/after-search-result-entry/search-result-decoration\", [\"exports\", \"discourse/helpers/d-icon\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _dIcon, _discourseI18n, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const SearchResultDecoration = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <div\n      class=\"ai-result__icon\"\n      title={{i18n \"discourse_ai.embeddings.ai_generated_result\"}}\n    >\n      {{icon \"discourse-sparkles\"}}\n    </div>\n  \n  */\n  {\n    \"id\": \"+zzrKPCx\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"ai-result__icon\\\"],[15,\\\"title\\\",[28,[32,0],[\\\"discourse_ai.embeddings.ai_generated_result\\\"],null]],[12],[1,\\\"\\\\n    \\\"],[1,[28,[32,1],[\\\"discourse-sparkles\\\"],null]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/after-search-result-entry/search-result-decoration.js\",\n    \"scope\": () => [_discourseI18n.i18n, _dIcon.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"search-result-decoration:SearchResultDecoration\"));\n  var _default = _exports.default = SearchResultDecoration;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/before-create-topic-button/topic-list-gist-toggle\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/plugins/discourse-ai/discourse/components/ai-gist-toggle\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _aiGistToggle, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTopicGist extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"topicThumbnails\", [_service.service]))();\n    #topicThumbnails = (() => (dt7948.i(this, \"topicThumbnails\"), void 0))();\n    get shouldShow() {\n      return !this.topicThumbnails?.enabledForRoute;\n    }\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      <AiGistToggle />\n    */\n    {\n      \"id\": \"7j6Az6wp\",\n      \"block\": \"[[[8,[32,0],null,null,null]],[],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/before-create-topic-button/topic-list-gist-toggle.js\",\n      \"scope\": () => [_aiGistToggle.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTopicGist;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/composer-fields/persona-llm-selector\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/plugins/discourse-ai/discourse/components/ai-persona-llm-selector\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _aiPersonaLlmSelector, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  function isBotMessage(composer, currentUser) {\n    if (composer && composer.targetRecipients && currentUser.ai_enabled_chat_bots) {\n      const reciepients = composer.targetRecipients.split(\",\");\n      return currentUser.ai_enabled_chat_bots.filter(bot => bot.username).any(bot => reciepients.any(username => username === bot.username));\n    }\n    return false;\n  }\n  class BotSelector extends _component.default {\n    static shouldRender(args, context) {\n      return context?.currentUser?.ai_enabled_personas && isBotMessage(args.model, context.currentUser);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    setPersonaIdOnComposer(id) {\n      this.args.outletArgs.model.metaData = {\n        ai_persona_id: id\n      };\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"setPersonaIdOnComposer\", [_object.action]))();\n    setTargetRecipientsOnComposer(username) {\n      this.args.outletArgs.model.set(\"targetRecipients\", username);\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"setTargetRecipientsOnComposer\", [_object.action]))();\n    static #_4 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiPersonaLlmSelector\n          @setPersonaId={{this.setPersonaIdOnComposer}}\n          @setTargetRecipient={{this.setTargetRecipientsOnComposer}}\n        />\n      \n    */\n    {\n      \"id\": \"35crcj6G\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@setPersonaId\\\",\\\"@setTargetRecipient\\\"],[[30,0,[\\\"setPersonaIdOnComposer\\\"]],[30,0,[\\\"setTargetRecipientsOnComposer\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/composer-fields/persona-llm-selector.js\",\n      \"scope\": () => [_aiPersonaLlmSelector.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = BotSelector;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/edit-topic-category__after/ai-category-suggestion\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-category-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiCategorySuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiCategorySuggestion extends _component.default {\n    static shouldRender(args, context) {\n      return (0, _showAiHelper.showComposerAiHelper)(args?.composer, context.siteSettings, context.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiCategorySuggester\n          @buffered={{@outletArgs.buffered}}\n          @topicState=\"edit\"\n        />\n      \n    */\n    {\n      \"id\": \"xD6ygZtG\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@buffered\\\",\\\"@topicState\\\"],[[30,1,[\\\"buffered\\\"]],\\\"edit\\\"]],null],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/edit-topic-category__after/ai-category-suggestion.js\",\n      \"scope\": () => [_aiCategorySuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiCategorySuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/edit-topic-tags__after/ai-tag-suggestion\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-tag-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiTagSuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiCategorySuggestion extends _component.default {\n    static shouldRender(args, context) {\n      return (0, _showAiHelper.showComposerAiHelper)(args?.composer, context.siteSettings, context.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiTagSuggester @buffered={{@outletArgs.buffered}} @topicState=\"edit\" />\n      \n    */\n    {\n      \"id\": \"3ec6gwOx\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@buffered\\\",\\\"@topicState\\\"],[[30,1,[\\\"buffered\\\"]],\\\"edit\\\"]],null],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/edit-topic-tags__after/ai-tag-suggestion.js\",\n      \"scope\": () => [_aiTagSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiCategorySuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/edit-topic-title__after/ai-title-suggestion\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-title-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiTitleSuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTitleSuggestion extends _component.default {\n    static shouldRender(args, context) {\n      return (0, _showAiHelper.showComposerAiHelper)(args?.composer, context.siteSettings, context.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiTitleSuggester @buffered={{@outletArgs.buffered}} @topicState=\"edit\" />\n      \n    */\n    {\n      \"id\": \"QwHpqwnO\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@buffered\\\",\\\"@topicState\\\"],[[30,1,[\\\"buffered\\\"]],\\\"edit\\\"]],null],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/edit-topic-title__after/ai-title-suggestion.js\",\n      \"scope\": () => [_aiTitleSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTitleSuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/editor-preview/ai-image-caption-container\", [\"exports\", \"@glimmer/component\", \"@ember/modifier\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/render-modifiers/modifiers/did-update\", \"@ember/render-modifiers/modifiers/will-destroy\", \"@ember/service\", \"discourse/components/conditional-loading-spinner\", \"discourse/components/d-button\", \"discourse/components/d-textarea\", \"discourse/helpers/d-icon\", \"discourse/modifiers/auto-focus\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _modifier, _object, _didInsert, _didUpdate, _willDestroy, _service, _conditionalLoadingSpinner, _dButton, _dTextarea, _dIcon, _autoFocus, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiImageCaptionContainer extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"imageCaptionPopup\", [_service.service]))();\n    #imageCaptionPopup = (() => (dt7948.i(this, \"imageCaptionPopup\"), void 0))();\n    updateCaption(event) {\n      event.preventDefault();\n      this.imageCaptionPopup.newCaption = event.target.value;\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"updateCaption\", [_object.action]))();\n    saveCaption() {\n      this.imageCaptionPopup.updateCaption();\n      this.hidePopup();\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"saveCaption\", [_object.action]))();\n    resizeTextarea(target) {\n      const style = window.getComputedStyle(target);\n      // scrollbars will show based on scrollHeight alone\n      // so we need to consider borders too\n      const borderTopWidth = parseInt(style.borderTopWidth, 10);\n      const borderBottomWidth = parseInt(style.borderBottomWidth, 10);\n      target.scrollTop = 0;\n      target.style.height = `${target.scrollHeight + borderTopWidth + borderBottomWidth}px`;\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"resizeTextarea\", [_object.action]))();\n    hidePopup() {\n      this.imageCaptionPopup.showPopup = false;\n      if (this.imageCaptionPopup._request) {\n        this.imageCaptionPopup._request.abort();\n        this.imageCaptionPopup._request = null;\n        this.imageCaptionPopup.toggleLoadingState(false);\n      }\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"hidePopup\", [_object.action]))();\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.imageCaptionPopup.showPopup}}\n          <div\n            class=\"composer-popup education-message ai-caption-popup\"\n            {{willDestroy this.hidePopup}}\n          >\n            <ConditionalLoadingSpinner\n              @condition={{this.imageCaptionPopup.loading}}\n            >\n              <DTextarea\n                {{didInsert this.resizeTextarea}}\n                {{didUpdate this.resizeTextarea this.imageCaptionPopup.newCaption}}\n                @value={{this.imageCaptionPopup.newCaption}}\n                {{on \"change\" this.updateCaption}}\n                {{autoFocus}}\n              />\n            </ConditionalLoadingSpinner>\n    \n            <div class=\"actions\">\n              <DButton\n                class=\"btn-primary\"\n                @label=\"discourse_ai.ai_helper.image_caption.save_caption\"\n                @icon=\"check\"\n                @action={{this.saveCaption}}\n              />\n              <DButton\n                class=\"btn-flat cancel-request\"\n                @label=\"cancel\"\n                @action={{this.hidePopup}}\n              />\n    \n              <span class=\"credits\">\n                {{icon \"discourse-sparkles\"}}\n                <span>{{i18n \"discourse_ai.ai_helper.image_caption.credits\"}}</span>\n              </span>\n            </div>\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"84lcZtW4\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"imageCaptionPopup\\\",\\\"showPopup\\\"]],[[[1,\\\"      \\\"],[11,0],[24,0,\\\"composer-popup education-message ai-caption-popup\\\"],[4,[32,0],[[30,0,[\\\"hidePopup\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[8,[32,1],null,[[\\\"@condition\\\"],[[30,0,[\\\"imageCaptionPopup\\\",\\\"loading\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[32,2],[[4,[32,3],[[30,0,[\\\"resizeTextarea\\\"]]],null],[4,[32,4],[[30,0,[\\\"resizeTextarea\\\"]],[30,0,[\\\"imageCaptionPopup\\\",\\\"newCaption\\\"]]],null],[4,[32,5],[\\\"change\\\",[30,0,[\\\"updateCaption\\\"]]],null],[4,[32,6],null,null]],[[\\\"@value\\\"],[[30,0,[\\\"imageCaptionPopup\\\",\\\"newCaption\\\"]]]],null],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"actions\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,7],[[24,0,\\\"btn-primary\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[\\\"discourse_ai.ai_helper.image_caption.save_caption\\\",\\\"check\\\",[30,0,[\\\"saveCaption\\\"]]]],null],[1,\\\"\\\\n          \\\"],[8,[32,7],[[24,0,\\\"btn-flat cancel-request\\\"]],[[\\\"@label\\\",\\\"@action\\\"],[\\\"cancel\\\",[30,0,[\\\"hidePopup\\\"]]]],null],[1,\\\"\\\\n\\\\n          \\\"],[10,1],[14,0,\\\"credits\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,8],[\\\"discourse-sparkles\\\"],null]],[1,\\\"\\\\n            \\\"],[10,1],[12],[1,[28,[32,9],[\\\"discourse_ai.ai_helper.image_caption.credits\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/editor-preview/ai-image-caption-container.js\",\n      \"scope\": () => [_willDestroy.default, _conditionalLoadingSpinner.default, _dTextarea.default, _didInsert.default, _didUpdate.default, _modifier.on, _autoFocus.default, _dButton.default, _dIcon.default, _discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiImageCaptionContainer;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/fast-edit-footer-after/ai-edit-suggestion-button\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _service, _dButton, _ajax, _ajaxError, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiEditSuggestionButton extends _component.default {\n    static shouldRender(args, context) {\n      return (0, _showAiHelper.showPostAIHelper)(args, context);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"suggestion\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #suggestion = (() => (dt7948.i(this, \"suggestion\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"_activeAIRequest\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #_activeAIRequest = (() => (dt7948.i(this, \"_activeAIRequest\"), void 0))();\n    get disabled() {\n      return this.loading || this.suggestion?.length > 0;\n    }\n    get mode() {\n      return this.currentUser?.ai_helper_prompts.find(prompt => prompt.name === \"proofread\");\n    }\n    suggest() {\n      this.loading = true;\n      this._activeAIRequest = (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest\", {\n        method: \"POST\",\n        data: {\n          mode: this.mode.name,\n          text: this.args.outletArgs.initialValue,\n          custom_prompt: \"\"\n        }\n      });\n      this._activeAIRequest.then(_ref => {\n        let {\n          suggestions\n        } = _ref;\n        this.suggestion = suggestions[0].trim();\n        this.args.outletArgs.updateValue(this.suggestion);\n      }).catch(_ajaxError.popupAjaxError).finally(() => {\n        this.loading = false;\n      });\n      return this._activeAIRequest;\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"suggest\", [_object.action]))();\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#unless @outletArgs.newValue}}\n          <DButton\n            class=\"btn-small btn-ai-suggest-edit\"\n            @action={{this.suggest}}\n            @icon=\"discourse-sparkles\"\n            @label=\"discourse_ai.ai_helper.fast_edit.suggest_button\"\n            @isLoading={{this.loading}}\n            @disabled={{this.disabled}}\n          />\n        {{/unless}}\n      \n    */\n    {\n      \"id\": \"9jHc25oQ\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[51,[30,1,[\\\"newValue\\\"]]],[[[1,\\\"      \\\"],[8,[32,0],[[24,0,\\\"btn-small btn-ai-suggest-edit\\\"]],[[\\\"@action\\\",\\\"@icon\\\",\\\"@label\\\",\\\"@isLoading\\\",\\\"@disabled\\\"],[[30,0,[\\\"suggest\\\"]],\\\"discourse-sparkles\\\",\\\"discourse_ai.ai_helper.fast_edit.suggest_button\\\",[30,0,[\\\"loading\\\"]],[30,0,[\\\"disabled\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/fast-edit-footer-after/ai-edit-suggestion-button.js\",\n      \"scope\": () => [_dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiEditSuggestionButton;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/full-page-search-below-search-header/ai-full-page-discobot-discoveries\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/helpers/body-class\", \"discourse/helpers/d-icon\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-search-discoveries\", \"discourse/plugins/discourse-ai/discourse/components/ai-search-discoveries-tooltip\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _bodyClass, _dIcon, _discourseI18n, _aiSearchDiscoveries, _aiSearchDiscoveriesTooltip, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiFullPageDiscobotDiscoveries extends _component.default {\n    static shouldRender(args, _ref) {\n      let {\n        siteSettings,\n        currentUser\n      } = _ref;\n      return siteSettings.ai_bot_discover_persona && currentUser?.can_use_ai_bot_discover_persona && currentUser?.user_option?.ai_search_discoveries;\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"capabilities\", [_service.service]))();\n    #capabilities = (() => (dt7948.i(this, \"capabilities\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"discobotDiscoveries\", [_service.service]))();\n    #discobotDiscoveries = (() => (dt7948.i(this, \"discobotDiscoveries\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    get previewLength() {\n      if (!this.capabilities.viewport.md) {\n        return 50;\n      } else {\n        return 10000;\n      }\n    }\n    static #_4 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{bodyClass \"has-discoveries\"}}\n        <div class=\"ai-search-discoveries__discoveries-wrapper\">\n          {{#if this.discobotDiscoveries.showDiscoveryTitle}}\n            <h3\n              class=\"ai-search-discoveries__discoveries-title full-page-discoveries\"\n            >\n              <span>\n                {{icon \"discobot\"}}\n                {{i18n \"discourse_ai.discobot_discoveries.main_title\"}}\n              </span>\n              <AiSearchDiscoveriesTooltip />\n            </h3>\n          {{/if}}\n    \n          <div class=\"full-page-discoveries\">\n            <AiSearchDiscoveries\n              @discoveryPreviewLength={{this.previewLength}}\n              @searchTerm={{@outletArgs.search}}\n            />\n          </div>\n        </div>\n      \n    */\n    {\n      \"id\": \"lInfOcXN\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[1,[28,[32,0],[\\\"has-discoveries\\\"],null]],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-search-discoveries__discoveries-wrapper\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"discobotDiscoveries\\\",\\\"showDiscoveryTitle\\\"]],[[[1,\\\"        \\\"],[10,\\\"h3\\\"],[14,0,\\\"ai-search-discoveries__discoveries-title full-page-discoveries\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"discobot\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[28,[32,2],[\\\"discourse_ai.discobot_discoveries.main_title\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[8,[32,3],null,null,null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"full-page-discoveries\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,4],null,[[\\\"@discoveryPreviewLength\\\",\\\"@searchTerm\\\"],[[30,0,[\\\"previewLength\\\"]],[30,1,[\\\"search\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/full-page-search-below-search-header/ai-full-page-discobot-discoveries.js\",\n      \"scope\": () => [_bodyClass.default, _dIcon.default, _discourseI18n.i18n, _aiSearchDiscoveriesTooltip.default, _aiSearchDiscoveries.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiFullPageDiscobotDiscoveries;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/full-page-search-below-search-header/ai-full-page-search\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/ai-full-page-search\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiFullPageSearch, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiFullPageSearchConnector extends _component.default {\n    static shouldRender(args, _ref) {\n      let {\n        siteSettings\n      } = _ref;\n      return siteSettings.ai_embeddings_semantic_search_enabled;\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiFullPageSearch\n          @sortOrder={{@outletArgs.sortOrder}}\n          @searchTerm={{@outletArgs.search}}\n          @searchType={{@outletArgs.type}}\n          @addSearchResults={{@outletArgs.addSearchResults}}\n        />\n      \n    */\n    {\n      \"id\": \"4RggybC1\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@sortOrder\\\",\\\"@searchTerm\\\",\\\"@searchType\\\",\\\"@addSearchResults\\\"],[[30,1,[\\\"sortOrder\\\"]],[30,1,[\\\"search\\\"]],[30,1,[\\\"type\\\"]],[30,1,[\\\"addSearchResults\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/full-page-search-below-search-header/ai-full-page-search.js\",\n      \"scope\": () => [_aiFullPageSearch.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiFullPageSearchConnector;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/post-text-buttons/ai-post-helper-trigger\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/lib/utilities\", \"discourse/plugins/discourse-ai/discourse/components/ai-post-helper-menu\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _service, _dButton, _utilities, _aiPostHelperMenu, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPostHelperTrigger extends _component.default {\n    static shouldRender(args, context) {\n      return (0, _showAiHelper.showPostAIHelper)(args, context);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"menu\", [_service.service]))();\n    #menu = (() => (dt7948.i(this, \"menu\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"postHighlighted\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #postHighlighted = (() => (dt7948.i(this, \"postHighlighted\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"currentMenu\", [_tracking.tracked], function () {\n      return this.menu.getByIdentifier(\"post-text-selection-toolbar\");\n    }))();\n    #currentMenu = (() => (dt7948.i(this, \"currentMenu\"), void 0))();\n    // capture the state at the moment the toolbar is rendered\n    // so we ensure change of state (selection change for example)\n    // is not impacting the menu data\n    menuData = (() => ({\n      ...this.args.outletArgs.data,\n      quoteState: {\n        buffer: this.args.outletArgs.data.quoteState.buffer,\n        opts: this.args.outletArgs.data.quoteState.opts,\n        postId: this.args.outletArgs.data.quoteState.postId\n      },\n      post: this.args.outletArgs.post,\n      selectedRange: (0, _utilities.selectedRange)()\n    }))();\n    highlightSelectedText() {\n      const postId = this.args.outletArgs.data.quoteState.postId;\n      const postElement = document.querySelector(`article[data-post-id='${postId}'] .cooked`);\n      if (!postElement) {\n        return;\n      }\n      const range = this.menuData.selectedRange;\n      // Split start/end text nodes at their range boundary\n      if (range.startContainer.nodeType === Node.TEXT_NODE && range.startOffset > 0) {\n        const newStartNode = range.startContainer.splitText(range.startOffset);\n        range.setStart(newStartNode, 0);\n      }\n      if (range.endContainer.nodeType === Node.TEXT_NODE && range.endOffset < range.endContainer.length) {\n        range.endContainer.splitText(range.endOffset);\n      }\n      // Create a Walker to traverse text nodes within range\n      const walker = document.createTreeWalker(range.commonAncestorContainer, NodeFilter.SHOW_TEXT, {\n        acceptNode: node => range.intersectsNode(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT\n      });\n      const textNodes = [];\n      if (walker.currentNode?.nodeType === Node.TEXT_NODE) {\n        textNodes.push(walker.currentNode);\n      } else {\n        while (walker.nextNode()) {\n          textNodes.push(walker.currentNode);\n        }\n      }\n      for (let textNode of textNodes) {\n        const highlight = document.createElement(\"span\");\n        highlight.classList.add(\"ai-helper-highlighted-selection\");\n        // Replace textNode with highlighted clone\n        const clone = textNode.cloneNode(true);\n        highlight.appendChild(clone);\n        textNode.parentNode.replaceChild(highlight, textNode);\n      }\n      window.getSelection().removeAllRanges();\n      this.postHighlighted = true;\n    }\n    removeHighlightedText() {\n      if (!this.postHighlighted) {\n        return;\n      }\n      const highlightedSpans = document.querySelectorAll(\"span.ai-helper-highlighted-selection\");\n      highlightedSpans.forEach(span => {\n        const textNode = document.createTextNode(span.textContent);\n        span.parentNode.replaceChild(textNode, span);\n      });\n      this.postHighlighted = false;\n    }\n    async showAiPostHelperMenu() {\n      await this.currentMenu.close();\n      await this.menu.show(this.currentMenu.trigger, {\n        identifier: \"ai-post-helper-menu\",\n        component: _aiPostHelperMenu.default,\n        interactive: true,\n        trapTab: false,\n        closeOnScroll: false,\n        modalForMobile: true,\n        data: this.menuData,\n        placement: \"top-start\",\n        fallbackPlacements: [\"bottom-start\"],\n        updateOnScroll: false,\n        onClose: () => {\n          this.removeHighlightedText();\n        }\n      });\n      await this.currentMenu.destroy();\n      this.highlightSelectedText();\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"showAiPostHelperMenu\", [_object.action]))();\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{yield}}\n    \n        <div class=\"ai-post-helper\">\n          <DButton\n            @icon=\"discourse-sparkles\"\n            @title=\"discourse_ai.ai_helper.post_options_menu.title\"\n            @label=\"discourse_ai.ai_helper.post_options_menu.trigger\"\n            @action={{this.showAiPostHelperMenu}}\n            class=\"btn-flat ai-post-helper__trigger\"\n          />\n        </div>\n      \n    */\n    {\n      \"id\": \"R72pW812\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[18,1,null],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"ai-post-helper\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],[[24,0,\\\"btn-flat ai-post-helper__trigger\\\"]],[[\\\"@icon\\\",\\\"@title\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"discourse-sparkles\\\",\\\"discourse_ai.ai_helper.post_options_menu.title\\\",\\\"discourse_ai.ai_helper.post_options_menu.trigger\\\",[30,0,[\\\"showAiPostHelperMenu\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"&default\\\"],false,[\\\"yield\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/post-text-buttons/ai-post-helper-trigger.js\",\n      \"scope\": () => [_dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPostHelperTrigger;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/search-menu-before-advanced-search/ai-quick-search-loader\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/helpers/loading-spinner\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _loadingSpinner, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiQuickSearchLoader extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"quickSearch\", [_service.service]))();\n    #quickSearch = (() => (dt7948.i(this, \"quickSearch\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.quickSearch.loading}}\n          <div class=\"ai-quick-search-spinner\">\n            {{loadingSpinner}}\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"apo2cAJf\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"quickSearch\\\",\\\"loading\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-quick-search-spinner\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[32,0]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/search-menu-before-advanced-search/ai-quick-search-loader.js\",\n      \"scope\": () => [_loadingSpinner.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiQuickSearchLoader;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/search-menu-initial-options/ai-quick-semantic-search\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/components/search-menu/results/assistant-item\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/search\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _assistantItem, _ajax, _ajaxError, _search3, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiQuickSemanticSearch extends _component.default {\n    static shouldRender(args, _ref) {\n      let {\n        siteSettings\n      } = _ref;\n      return siteSettings.ai_embeddings_semantic_quick_search_enabled;\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"search\", [_service.service]))();\n    #search = (() => (dt7948.i(this, \"search\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"quickSearch\", [_service.service]))();\n    #quickSearch = (() => (dt7948.i(this, \"quickSearch\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    async searchTermChanged() {\n      if (!this.search.activeGlobalSearchTerm) {\n        this.search.noResults = false;\n        this.search.results = {};\n        this.quickSearch.loading = false;\n        this.quickSearch.invalidTerm = false;\n      } else if (!(0, _search3.isValidSearchTerm)(this.search.activeGlobalSearchTerm, this.siteSettings)) {\n        this.search.noResults = true;\n        this.search.results = {};\n        this.quickSearch.loading = false;\n        this.quickSearch.invalidTerm = true;\n        return;\n      } else {\n        await this.performSearch();\n      }\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"searchTermChanged\", [_object.action]))();\n    async performSearch() {\n      this.quickSearch.loading = true;\n      this.quickSearch.invalidTerm = false;\n      try {\n        const results = await (0, _ajax.ajax)(`/discourse-ai/embeddings/quick-search`, {\n          data: {\n            q: this.search.activeGlobalSearchTerm\n          }\n        });\n        const searchResults = await (0, _search3.translateResults)(results);\n        if (searchResults) {\n          this.search.noResults = results.resultTypes.length === 0;\n          this.search.results = searchResults;\n        }\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        this.quickSearch.loading = false;\n      }\n    }\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{yield}}\n    \n        {{#if this.search.activeGlobalSearchTerm}}\n          <AssistantItem\n            @suffix={{i18n \"discourse_ai.embeddings.quick_search.suffix\"}}\n            @icon=\"discourse-sparkles\"\n            @closeSearchMenu={{@closeSearchMenu}}\n            @searchTermChanged={{this.searchTermChanged}}\n            @suggestionKeyword={{@suggestionKeyword}}\n          />\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"xqHDbd5x\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[18,3,null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"search\\\",\\\"activeGlobalSearchTerm\\\"]],[[[1,\\\"      \\\"],[8,[32,0],null,[[\\\"@suffix\\\",\\\"@icon\\\",\\\"@closeSearchMenu\\\",\\\"@searchTermChanged\\\",\\\"@suggestionKeyword\\\"],[[28,[32,1],[\\\"discourse_ai.embeddings.quick_search.suffix\\\"],null],\\\"discourse-sparkles\\\",[30,1],[30,0,[\\\"searchTermChanged\\\"]],[30,2]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@closeSearchMenu\\\",\\\"@suggestionKeyword\\\",\\\"&default\\\"],false,[\\\"yield\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/search-menu-initial-options/ai-quick-semantic-search.js\",\n      \"scope\": () => [_assistantItem.default, _discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiQuickSemanticSearch;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/search-menu-results-top/ai-discobot-discoveries\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/helpers/d-icon\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-search-discoveries\", \"discourse/plugins/discourse-ai/discourse/components/ai-search-discoveries-tooltip\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _dIcon, _discourseI18n, _aiSearchDiscoveries, _aiSearchDiscoveriesTooltip, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiDiscobotDiscoveries extends _component.default {\n    static shouldRender(args, _ref) {\n      let {\n        siteSettings,\n        currentUser\n      } = _ref;\n      return siteSettings.ai_bot_discover_persona && currentUser?.can_use_ai_bot_discover_persona && currentUser?.user_option?.ai_search_discoveries;\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"discobotDiscoveries\", [_service.service]))();\n    #discobotDiscoveries = (() => (dt7948.i(this, \"discobotDiscoveries\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"search\", [_service.service]))();\n    #search = (() => (dt7948.i(this, \"search\"), void 0))();\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-discobot-discoveries\">\n          {{#if this.discobotDiscoveries.showDiscoveryTitle}}\n            <h3 class=\"ai-search-discoveries__discoveries-title\">\n              <span>\n                {{icon \"discobot\"}}\n                {{i18n \"discourse_ai.discobot_discoveries.main_title\"}}\n              </span>\n    \n              <AiSearchDiscoveriesTooltip />\n            </h3>\n          {{/if}}\n    \n          <AiSearchDiscoveries\n            @searchTerm={{@outletArgs.searchTerm}}\n            @discoveryPreviewLength={{50}}\n            @closeSearchMenu={{@outletArgs.closeSearchMenu}}\n          />\n    \n          {{#if this.search.results.topics.length}}\n            <h3 class=\"ai-search-discoveries__regular-results-title\">\n              {{icon \"bars-staggered\"}}\n              {{i18n \"discourse_ai.discobot_discoveries.regular_results\"}}\n            </h3>\n          {{/if}}\n        </div>\n      \n    */\n    {\n      \"id\": \"kJMYLbPh\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-discobot-discoveries\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"discobotDiscoveries\\\",\\\"showDiscoveryTitle\\\"]],[[[1,\\\"        \\\"],[10,\\\"h3\\\"],[14,0,\\\"ai-search-discoveries__discoveries-title\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,0],[\\\"discobot\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"discourse_ai.discobot_discoveries.main_title\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[8,[32,2],null,null,null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[8,[32,3],null,[[\\\"@searchTerm\\\",\\\"@discoveryPreviewLength\\\",\\\"@closeSearchMenu\\\"],[[30,1,[\\\"searchTerm\\\"]],50,[30,1,[\\\"closeSearchMenu\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"search\\\",\\\"results\\\",\\\"topics\\\",\\\"length\\\"]],[[[1,\\\"        \\\"],[10,\\\"h3\\\"],[14,0,\\\"ai-search-discoveries__regular-results-title\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[28,[32,0],[\\\"bars-staggered\\\"],null]],[1,\\\"\\\\n          \\\"],[1,[28,[32,1],[\\\"discourse_ai.discobot_discoveries.regular_results\\\"],null]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/search-menu-results-top/ai-discobot-discoveries.js\",\n      \"scope\": () => [_dIcon.default, _discourseI18n.i18n, _aiSearchDiscoveriesTooltip.default, _aiSearchDiscoveries.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiDiscobotDiscoveries;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/search-menu-results-top/ai-quick-search-info\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/lib/search\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _search3, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiQuickSearchInfo extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"search\", [_service.service]))();\n    #search = (() => (dt7948.i(this, \"search\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"quickSearch\", [_service.service]))();\n    #quickSearch = (() => (dt7948.i(this, \"quickSearch\"), void 0))();\n    get termTooShort() {\n      // We check the validity again here because the input may have changed\n      // since the last time we checked, so we may want to stop showing the error\n      const validity = !(0, _search3.isValidSearchTerm)(this.search.activeGlobalSearchTerm, this.siteSettings);\n      return validity && this.quickSearch.invalidTerm && this.search.activeGlobalSearchTerm?.length > 0;\n    }\n    static #_4 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.termTooShort}}\n          <div class=\"no-results\">{{i18n \"search.too_short\"}}</div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"k6uzZwr4\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"termTooShort\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"no-results\\\"],[12],[1,[28,[32,0],[\\\"search.too_short\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/search-menu-results-top/ai-quick-search-info.js\",\n      \"scope\": () => [_discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiQuickSearchInfo;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-category-after/ai-category-suggestion\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/plugins/discourse-ai/discourse/components/ai-split-topic-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _aiSplitTopicSuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiCategorySuggestion extends _component.default {\n    static shouldRender(args, context) {\n      return (0, _showAiHelper.showPostAIHelper)(args, context);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.siteSettings.ai_embeddings_enabled}}\n          <AiSplitTopicSuggester\n            @selectedPosts={{@outletArgs.selectedPosts}}\n            @mode=\"suggest_category\"\n            @updateAction={{@outletArgs.updateCategoryId}}\n          />\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"4O7HJkah\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"siteSettings\\\",\\\"ai_embeddings_enabled\\\"]],[[[1,\\\"      \\\"],[8,[32,0],null,[[\\\"@selectedPosts\\\",\\\"@mode\\\",\\\"@updateAction\\\"],[[30,1,[\\\"selectedPosts\\\"]],\\\"suggest_category\\\",[30,1,[\\\"updateCategoryId\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-category-after/ai-category-suggestion.js\",\n      \"scope\": () => [_aiSplitTopicSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiCategorySuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-tag-after/ai-tag-suggestion\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/plugins/discourse-ai/discourse/components/ai-split-topic-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _aiSplitTopicSuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTagSuggestion extends _component.default {\n    static shouldRender(args, context) {\n      return (0, _showAiHelper.showPostAIHelper)(args, context);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.siteSettings.ai_embeddings_enabled}}\n          <AiSplitTopicSuggester\n            @selectedPosts={{@outletArgs.selectedPosts}}\n            @mode=\"suggest_tags\"\n            @updateAction={{@outletArgs.updateTags}}\n            @currentValue={{@outletArgs.tags}}\n          />\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"jo6+zYZR\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"siteSettings\\\",\\\"ai_embeddings_enabled\\\"]],[[[1,\\\"      \\\"],[8,[32,0],null,[[\\\"@selectedPosts\\\",\\\"@mode\\\",\\\"@updateAction\\\",\\\"@currentValue\\\"],[[30,1,[\\\"selectedPosts\\\"]],\\\"suggest_tags\\\",[30,1,[\\\"updateTags\\\"]],[30,1,[\\\"tags\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-tag-after/ai-tag-suggestion.js\",\n      \"scope\": () => [_aiSplitTopicSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTagSuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-title-after/ai-title-suggestion\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/ai-split-topic-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiSplitTopicSuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTitleSuggestion extends _component.default {\n    static shouldRender(args, context) {\n      return (0, _showAiHelper.showPostAIHelper)(args, context);\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiSplitTopicSuggester\n          @selectedPosts={{@outletArgs.selectedPosts}}\n          @mode=\"suggest_title\"\n          @updateAction={{@outletArgs.updateTopicName}}\n        />\n      \n    */\n    {\n      \"id\": \"obhR2Q8M\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@selectedPosts\\\",\\\"@mode\\\",\\\"@updateAction\\\"],[[30,1,[\\\"selectedPosts\\\"]],\\\"suggest_title\\\",[30,1,[\\\"updateTopicName\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-title-after/ai-title-suggestion.js\",\n      \"scope\": () => [_aiSplitTopicSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTitleSuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/topic-list-before-category/ai-topic-gist-placement\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/ai-topic-gist\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiTopicGist, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTopicGistPlacement extends _component.default {\n    static shouldRender(args, context) {\n      const settings = context.siteSettings;\n      return settings.discourse_ai_enabled && settings.ai_summarization_enabled;\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      <AiTopicGist @topic={{@outletArgs.topic}} />\n    */\n    {\n      \"id\": \"H1L5toqM\",\n      \"block\": \"[[[8,[32,0],null,[[\\\"@topic\\\"],[[30,1,[\\\"topic\\\"]]]],null]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/topic-list-before-category/ai-topic-gist-placement.js\",\n      \"scope\": () => [_aiTopicGist.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTopicGistPlacement;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/topic-map-expanded-after/ai-summary-trigger\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/plugins/discourse-ai/discourse/components/modal/ai-summary-modal\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _dButton, _aiSummaryModal, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiSummaryTrigger extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    get isAiConversation() {\n      return this.args.outletArgs.topic.is_bot_pm;\n    }\n    openAiSummaryModal() {\n      this.modal.show(_aiSummaryModal.default, {\n        model: {\n          topic: this.args.outletArgs.topic,\n          postStream: this.args.outletArgs.postStream\n        }\n      });\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"openAiSummaryModal\", [_object.action]))();\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#unless this.isAiConversation}}\n          {{#if @outletArgs.topic.summarizable}}\n            <section class=\"topic-map__additional-contents toggle-summary\">\n              <DButton\n                @label=\"summary.buttons.generate\"\n                @icon=\"discourse-sparkles\"\n                @action={{this.openAiSummaryModal}}\n                class=\"btn-default ai-summarization-button\"\n              />\n            </section>\n          {{/if}}\n        {{/unless}}\n      \n    */\n    {\n      \"id\": \"zAyGCacI\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isAiConversation\\\"]]],[[[41,[30,1,[\\\"topic\\\",\\\"summarizable\\\"]],[[[1,\\\"        \\\"],[10,\\\"section\\\"],[14,0,\\\"topic-map__additional-contents toggle-summary\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,0],[[24,0,\\\"btn-default ai-summarization-button\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[\\\"summary.buttons.generate\\\",\\\"discourse-sparkles\\\",[30,0,[\\\"openAiSummaryModal\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"unless\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/topic-map-expanded-after/ai-summary-trigger.js\",\n      \"scope\": () => [_dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiSummaryTrigger;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/topic-map-participants-after/ai-conversation-invite\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"truth-helpers\", \"discourse/components/d-button\", \"discourse/components/header/topic/participant\", \"discourse/components/modal/add-pm-participants\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _truthHelpers, _dButton, _participant, _addPmParticipants, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiConversationInvite extends _component.default {\n    static shouldRender(args) {\n      return args.topic.is_bot_pm;\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"header\", [_service.service]))();\n    #header = (() => (dt7948.i(this, \"header\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"sidebarState\", [_service.service]))();\n    #sidebarState = (() => (dt7948.i(this, \"sidebarState\"), void 0))();\n    get participants() {\n      const participants = [...(this.header.topicInfo.details?.allowed_users ?? []), ...(this.header.topicInfo.details?.allowed_groups ?? [])];\n      return participants;\n    }\n    showInvite() {\n      this.modal.show(_addPmParticipants.default, {\n        model: {\n          title: \"discourse_ai.ai_bot.invite_ai_conversation.title\",\n          inviteModel: this.args.outletArgs.topic\n        }\n      });\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"showInvite\", [_object.action]))();\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-conversation__participants\">\n          <DButton\n            @icon=\"user-plus\"\n            @label=\"discourse_ai.ai_bot.invite_ai_conversation.button\"\n            @action={{this.showInvite}}\n            class=\"btn-default ai-conversations__invite-button\"\n          />\n          {{#each this.participants as |participant|}}\n            <Participant\n              @user={{participant}}\n              @type={{if participant.username \"user\" \"group\"}}\n              @username={{or participant.username participant.name}}\n              @avatarSize=\"medium\"\n            />\n          {{/each}}\n        </div>\n      \n    */\n    {\n      \"id\": \"iRQqMyq7\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-conversation__participants\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],[[24,0,\\\"btn-default ai-conversations__invite-button\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"user-plus\\\",\\\"discourse_ai.ai_bot.invite_ai_conversation.button\\\",[30,0,[\\\"showInvite\\\"]]]],null],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"participants\\\"]]],null]],null],null,[[[1,\\\"        \\\"],[8,[32,1],null,[[\\\"@user\\\",\\\"@type\\\",\\\"@username\\\",\\\"@avatarSize\\\"],[[30,1],[52,[30,1,[\\\"username\\\"]],\\\"user\\\",\\\"group\\\"],[28,[32,2],[[30,1,[\\\"username\\\"]],[30,1,[\\\"name\\\"]]],null],\\\"medium\\\"]],null],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"participant\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/topic-map-participants-after/ai-conversation-invite.js\",\n      \"scope\": () => [_dButton.default, _participant.default, _truthHelpers.or],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiConversationInvite;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/user-preferences-nav/ai-preferences\", [\"exports\", \"@glimmer/component\", \"@ember/routing\", \"discourse/helpers/d-icon\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _routing, _dIcon, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPreferences extends _component.default {\n    static shouldRender(args, context) {\n      return context.siteSettings.discourse_ai_enabled;\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <li class=\"user-nav__preferences-ai\">\n          <LinkTo @route=\"preferences.ai\">\n            {{icon \"discourse-sparkles\"}}\n            <span>{{i18n \"discourse_ai.title\"}}</span>\n          </LinkTo>\n        </li>\n      \n    */\n    {\n      \"id\": \"/y5E1bgJ\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,\\\"li\\\"],[14,0,\\\"user-nav__preferences-ai\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],null,[[\\\"@route\\\"],[\\\"preferences.ai\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[32,1],[\\\"discourse-sparkles\\\"],null]],[1,\\\"\\\\n        \\\"],[10,1],[12],[1,[28,[32,2],[\\\"discourse_ai.title\\\"],null]],[13],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/user-preferences-nav/ai-preferences.js\",\n      \"scope\": () => [_routing.LinkTo, _dIcon.default, _discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPreferences;\n});","define(\"discourse/plugins/discourse-ai/discourse/controllers/admin-dashboard-sentiment\", [\"exports\", \"@ember/object\", \"admin/controllers/admin-dashboard-tab\"], function (_exports, _object, _adminDashboardTab) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AdminDashboardSentiment extends _adminDashboardTab.default {\n    get filters() {\n      return {\n        startDate: this.startDate,\n        endDate: this.endDate\n      };\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"filters\", [(0, _object.computed)(\"startDate\", \"endDate\")]))();\n    get emotionFilters() {\n      return {\n        startDate: moment().subtract(2, \"month\").format(\"YYYY-MM-DD\"),\n        endDate: moment().format(\"YYYY-MM-DD\")\n      };\n    }\n    get emotions() {\n      const emotions = [\"admiration\", \"amusement\", \"anger\", \"annoyance\", \"approval\", \"caring\", \"confusion\", \"curiosity\", \"desire\", \"disappointment\", \"disapproval\", \"disgust\", \"embarrassment\", \"excitement\", \"fear\", \"gratitude\", \"grief\", \"joy\", \"love\", \"nervousness\", \"neutral\", \"optimism\", \"pride\", \"realization\", \"relief\", \"remorse\", \"sadness\", \"surprise\"];\n      return emotions;\n    }\n  }\n  _exports.default = AdminDashboardSentiment;\n});","define(\"discourse/plugins/discourse-ai/discourse/controllers/discourse-ai-bot-conversations\", [\"exports\", \"@glimmer/tracking\", \"@ember/controller\"], function (_exports, _tracking, _controller) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class DiscourseAiBotConversations extends _controller.default {\n    static #_ = (() => dt7948.g(this.prototype, \"llm\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #llm = (() => (dt7948.i(this, \"llm\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"persona\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #persona = (() => (dt7948.i(this, \"persona\"), void 0))();\n    queryParams = [\"llm\", \"persona\"];\n  }\n  _exports.default = DiscourseAiBotConversations;\n});","define(\"discourse/plugins/discourse-ai/discourse/controllers/preferences-ai\", [\"exports\", \"@glimmer/tracking\", \"@ember/controller\", \"@ember/object\", \"@ember/service\", \"discourse/lib/ajax-error\", \"discourse/lib/environment\"], function (_exports, _tracking, _controller, _object, _service, _ajaxError, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class PreferencesAiController extends _controller.default {\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"saved\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #saved = (() => (dt7948.i(this, \"saved\"), void 0))();\n    get booleanSettings() {\n      return [{\n        key: \"ai_search_discoveries\",\n        label: \"discourse_ai.discobot_discoveries.user_setting\",\n        settingName: \"ai-search-discoveries\",\n        checked: this.model.user_option.ai_search_discoveries,\n        isIncluded: (() => {\n          return this.siteSettings.ai_bot_discover_persona && this.model?.can_use_ai_bot_discover_persona && this.siteSettings.ai_bot_enabled;\n        })()\n      }];\n    }\n    get userSettingAttributes() {\n      const attrs = [];\n      this.booleanSettings.forEach(setting => {\n        if (setting.isIncluded) {\n          attrs.push(setting.key);\n        }\n      });\n      return attrs;\n    }\n    save() {\n      this.saved = false;\n      return this.model.save(this.userSettingAttributes).then(() => {\n        this.saved = true;\n        if (!(0, _environment.isTesting)()) {\n          location.reload();\n        }\n      }).catch(_ajaxError.popupAjaxError);\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n  }\n  _exports.default = PreferencesAiController;\n});","define(\"discourse/plugins/discourse-ai/discourse/discourse-ai-bot-dashboard-route-map\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _default;\n  function _default() {\n    this.route(\"discourse-ai-bot-conversations\", {\n      path: \"/discourse-ai/ai-bot/conversations\"\n    });\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/discourse-ai-shared-conversation-show-route-map\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _default;\n  function _default() {\n    this.route(\"discourse-ai-shared-conversation-show\", {\n      path: \"/discourse-ai/ai-bot/shared-ai-conversations/:share_key\"\n    });\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/admin-plugin-configuration-nav\", [\"exports\", \"discourse/lib/plugin-api\"], function (_exports, _pluginApi) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    name: \"discourse-ai-admin-plugin-configuration-nav\",\n    initialize(container) {\n      const currentUser = container.lookup(\"service:current-user\");\n      if (!currentUser || !currentUser.admin) {\n        return;\n      }\n      (0, _pluginApi.withPluginApi)(api => {\n        api.addAdminPluginConfigurationNav(\"discourse-ai\", [{\n          label: \"discourse_ai.features.short_title\",\n          route: \"adminPlugins.show.discourse-ai-features\",\n          description: \"discourse_ai.features.description\"\n        }, {\n          label: \"discourse_ai.usage.short_title\",\n          route: \"adminPlugins.show.discourse-ai-usage\",\n          description: \"discourse_ai.usage.subheader_description\"\n        }, {\n          label: \"discourse_ai.llms.short_title\",\n          route: \"adminPlugins.show.discourse-ai-llms\",\n          description: \"discourse_ai.llms.preconfigured.description\"\n        }, {\n          label: \"discourse_ai.ai_persona.short_title\",\n          route: \"adminPlugins.show.discourse-ai-personas\",\n          description: \"discourse_ai.ai_persona.persona_description\"\n        }, {\n          label: \"discourse_ai.embeddings.short_title\",\n          route: \"adminPlugins.show.discourse-ai-embeddings\",\n          description: \"discourse_ai.embeddings.description\"\n        }, {\n          label: \"discourse_ai.tools.short_title\",\n          route: \"adminPlugins.show.discourse-ai-tools\",\n          description: \"discourse_ai.tools.subheader_description\"\n        }, {\n          label: \"discourse_ai.spam.short_title\",\n          route: \"adminPlugins.show.discourse-ai-spam\",\n          description: \"discourse_ai.spam.spam_description\"\n        }]);\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/admin-reports\", [\"exports\", \"discourse/lib/plugin-api\", \"discourse/plugins/discourse-ai/discourse/components/admin-report-emotion\"], function (_exports, _pluginApi, _adminReportEmotion) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    name: \"discourse-ai-admin-reports\",\n    initialize(container) {\n      const currentUser = container.lookup(\"service:current-user\");\n      if (!currentUser || !currentUser.admin) {\n        return;\n      }\n\n      // We need to import dynamically with CommonJS require because\n      // using ESM import in an initializer would cause the component to be imported globally\n      // and cause errors for non-admin users since the component is only available to admins\n      const AdminReportSentimentAnalysis = require(\"discourse/plugins/discourse-ai/discourse/components/admin-report-sentiment-analysis\").default;\n      (0, _pluginApi.withPluginApi)(api => {\n        api.registerReportModeComponent(\"emotion\", _adminReportEmotion.default);\n        api.registerReportModeComponent(\"sentiment_analysis\", AdminReportSentimentAnalysis);\n        api.registerValueTransformer(\"admin-reports-show-query-params\", _ref => {\n          let {\n            value\n          } = _ref;\n          return [...value, \"selectedChart\"];\n        });\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/ai-artifacts\", [\"exports\", \"discourse/lib/plugin-api\", \"discourse/plugins/discourse-ai/discourse/components/ai-artifact\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _pluginApi, _aiArtifact, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  function initializeAiArtifacts(api) {\n    api.decorateCookedElement((element, helper) => {\n      if (!helper.renderGlimmer) {\n        return;\n      }\n      [...element.querySelectorAll(\"div.ai-artifact\")].forEach(artifactElement => {\n        const artifactId = artifactElement.getAttribute(\"data-ai-artifact-id\");\n        const artifactVersion = artifactElement.getAttribute(\"data-ai-artifact-version\");\n        const artifactHeight = artifactElement.getAttribute(\"data-ai-artifact-height\");\n        const autorun = artifactElement.getAttribute(\"data-ai-artifact-autorun\") || artifactElement.hasAttribute(\"data-ai-artifact-autorun\");\n        const seamless = artifactElement.getAttribute(\"data-ai-artifact-seamless\") || artifactElement.hasAttribute(\"data-ai-artifact-seamless\");\n        const dataAttributes = {};\n        for (const attr of artifactElement.attributes) {\n          if (attr.name.startsWith(\"data-\") && attr.name !== \"data-ai-artifact-id\" && attr.name !== \"data-ai-artifact-version\" && attr.name !== \"data-ai-artifact-height\" && attr.name !== \"data-ai-artifact-autorun\" && attr.name !== \"data-ai-artifact-seamless\") {\n            dataAttributes[attr.name] = attr.value;\n          }\n        }\n        helper.renderGlimmer(artifactElement, (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n        /*\n          \n                      <AiArtifact\n                        @artifactId={{artifactId}}\n                        @artifactVersion={{artifactVersion}}\n                        @artifactHeight={{artifactHeight}}\n                        @autorun={{autorun}}\n                        @seamless={{seamless}}\n                        @dataAttributes={{dataAttributes}}\n                      />\n                    \n        */\n        {\n          \"id\": \"1GHagHFs\",\n          \"block\": \"[[[1,\\\"\\\\n              \\\"],[8,[32,0],null,[[\\\"@artifactId\\\",\\\"@artifactVersion\\\",\\\"@artifactHeight\\\",\\\"@autorun\\\",\\\"@seamless\\\",\\\"@dataAttributes\\\"],[[32,1],[32,2],[32,3],[32,4],[32,5],[32,6]]],null],[1,\\\"\\\\n            \\\"]],[],false,[]]\",\n          \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/initializers/ai-artifacts.js\",\n          \"scope\": () => [_aiArtifact.default, artifactId, artifactVersion, artifactHeight, autorun, seamless, dataAttributes],\n          \"isStrictMode\": true\n        }), (0, _templateOnly.default)(undefined, undefined)));\n      });\n    }, {\n      id: \"ai-artifact\",\n      onlyStream: true\n    });\n  }\n  var _default = _exports.default = {\n    name: \"ai-artifact\",\n    initialize() {\n      (0, _pluginApi.withPluginApi)(initializeAiArtifacts);\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/ai-bot-replies\", [\"exports\", \"discourse/lib/deprecated\", \"discourse/lib/plugin-api\", \"discourse/widgets/render-glimmer\", \"discourse/plugins/discourse-ai/discourse/components/ai-bot-header-icon\", \"discourse/plugins/discourse-ai/discourse/components/post/ai-persona-flair\", \"discourse/plugins/discourse-ai/discourse/components/post-menu/ai-cancel-streaming-button\", \"discourse/plugins/discourse-ai/discourse/components/post-menu/ai-debug-button\", \"discourse/plugins/discourse-ai/discourse/components/post-menu/ai-share-button\", \"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", \"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/progress-handlers\", \"@ember/template-factory\"], function (_exports, _deprecated, _pluginApi, _renderGlimmer, _aiBotHeaderIcon, _aiPersonaFlair, _aiCancelStreamingButton, _aiDebugButton, _aiShareButton, _aiBotHelper, _progressHandlers, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  let allowDebug = false;\n  function attachHeaderIcon(api) {\n    api.headerIcons.add(\"ai\", _aiBotHeaderIcon.default);\n  }\n  function initializeAIBotReplies(api) {\n    initializePauseButton(api);\n    api.modifyClass(\"controller:topic\", {\n      pluginId: \"discourse-ai\",\n      onAIBotStreamedReply: function (data) {\n        (0, _progressHandlers.streamPostText)(this.model.postStream, data);\n      },\n      subscribe: function () {\n        this._super();\n        if (this.model.isPrivateMessage && this.model.details.allowed_users && this.model.details.allowed_users.filter(_aiBotHelper.isGPTBot).length >= 1) {\n          // we attempt to recover the last message in the bus\n          // so we subscribe at -2\n          this.messageBus.subscribe(`discourse-ai/ai-bot/topic/${this.model.id}`, this.onAIBotStreamedReply.bind(this), -2);\n        }\n      },\n      unsubscribe: function () {\n        this.messageBus.unsubscribe(\"discourse-ai/ai-bot/topic/*\");\n        this._super();\n      }\n    });\n  }\n  function initializePersonaDecorator(api) {\n    api.renderAfterWrapperOutlet(\"post-meta-data-poster-name\", _aiPersonaFlair.default);\n    (0, _deprecated.withSilencedDeprecations)(\"discourse.post-stream-widget-overrides\", () => initializeWidgetPersonaDecorator(api));\n  }\n  function initializeWidgetPersonaDecorator(api) {\n    api.decorateWidget(`poster-name:after`, dec => {\n      const botType = (0, _aiBotHelper.getBotType)(dec.attrs.user);\n      // we have 2 ways of decorating\n      // 1. if a bot is a LLM we decorate with persona name\n      // 2. if bot is a persona we decorate with LLM name\n      if (botType === \"llm\") {\n        return dec.widget.attach(\"persona-flair\", {\n          personaName: dec.model?.topic?.ai_persona_name\n        });\n      } else if (botType === \"persona\") {\n        return dec.widget.attach(\"persona-flair\", {\n          personaName: dec.model?.llm_name\n        });\n      }\n    });\n    (0, _renderGlimmer.registerWidgetShim)(\"persona-flair\", \"span.persona-flair\", (0, _templateFactory.createTemplateFactory)(\n    /*\n      {{@data.personaName}}\n    */\n    {\n      \"id\": \"ImoUEZuD\",\n      \"block\": \"[[[1,[30,1,[\\\"personaName\\\"]]]],[\\\"@data\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/initializers/ai-bot-replies.js\",\n      \"isStrictMode\": false\n    }));\n  }\n  function initializePauseButton(api) {\n    api.registerValueTransformer(\"post-menu-buttons\", _ref2 => {\n      let {\n        value: dag,\n        context: {\n          post,\n          firstButtonKey\n        }\n      } = _ref2;\n      if ((0, _aiBotHelper.isGPTBot)(post.user)) {\n        dag.add(\"ai-cancel-gpt\", _aiCancelStreamingButton.default, {\n          before: firstButtonKey,\n          after: [\"ai-share\", \"ai-debug\"]\n        });\n      }\n    });\n  }\n  function initializeDebugButton(api) {\n    const currentUser = api.getCurrentUser();\n    if (!currentUser || !currentUser.ai_enabled_chat_bots || !allowDebug) {\n      return;\n    }\n    api.registerValueTransformer(\"post-menu-buttons\", _ref3 => {\n      let {\n        value: dag,\n        context: {\n          post,\n          firstButtonKey\n        }\n      } = _ref3;\n      if (post.topic?.archetype === \"private_message\") {\n        dag.add(\"ai-debug\", _aiDebugButton.default, {\n          before: firstButtonKey,\n          after: \"ai-share\"\n        });\n      }\n    });\n  }\n  function initializeShareButton(api) {\n    const currentUser = api.getCurrentUser();\n    if (!currentUser || !currentUser.ai_enabled_chat_bots) {\n      return;\n    }\n    api.registerValueTransformer(\"post-menu-buttons\", _ref4 => {\n      let {\n        value: dag,\n        context: {\n          post,\n          firstButtonKey\n        }\n      } = _ref4;\n      if (post.topic?.archetype === \"private_message\") {\n        dag.add(\"ai-share\", _aiShareButton.default, {\n          before: firstButtonKey\n        });\n      }\n    });\n  }\n  function initializeShareTopicButton(api) {\n    const modal = api.container.lookup(\"service:modal\");\n    const currentUser = api.container.lookup(\"service:current-user\");\n    api.registerTopicFooterButton({\n      id: \"share-ai-conversation\",\n      icon: \"share-nodes\",\n      label: \"discourse_ai.ai_bot.share_ai_conversation.name\",\n      title: \"discourse_ai.ai_bot.share_ai_conversation.title\",\n      action() {\n        (0, _aiBotHelper.showShareConversationModal)(modal, this.topic.id);\n      },\n      classNames: [\"share-ai-conversation-button\"],\n      dependentKeys: [\"topic.ai_persona_name\"],\n      displayed() {\n        return currentUser?.can_share_ai_bot_conversations && this.topic.ai_persona_name;\n      }\n    });\n  }\n  var _default = _exports.default = {\n    name: \"discourse-ai-bot-replies\",\n    initialize(container) {\n      const user = container.lookup(\"service:current-user\");\n      if (user?.ai_enabled_chat_bots) {\n        allowDebug = user.can_debug_ai_bot_conversations;\n        (0, _pluginApi.withPluginApi)(api => {\n          attachHeaderIcon(api);\n          initializeAIBotReplies(api);\n          initializePersonaDecorator(api);\n          initializeDebugButton(api, container);\n          initializeShareButton(api, container);\n          initializeShareTopicButton(api, container);\n        });\n      }\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/ai-chat-summarization\", [\"exports\", \"discourse/lib/api\", \"discourse/plugins/discourse-ai/discourse/components/modal/chat-modal-channel-summary\"], function (_exports, _api, _chatModalChannelSummary) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _api.apiInitializer)(api => {\n    const siteSettings = api.container.lookup(\"service:site-settings\");\n    const currentUser = api.getCurrentUser();\n    const chatService = api.container.lookup(\"service:chat\");\n    const modal = api.container.lookup(\"service:modal\");\n    const canSummarize = currentUser && currentUser.can_summarize;\n    if (!siteSettings.chat_enabled || !chatService?.userCanChat || !canSummarize) {\n      return;\n    }\n    api.registerChatComposerButton({\n      translatedLabel: \"discourse_ai.summarization.chat.title\",\n      id: \"channel-summary\",\n      icon: \"discourse-sparkles\",\n      position: \"dropdown\",\n      action: () => {\n        modal.show(_chatModalChannelSummary.default, {\n          model: {\n            channelId: chatService.activeChannel?.id\n          }\n        });\n      }\n    });\n  });\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/ai-conversations-sidebar\", [\"exports\", \"discourse/lib/plugin-api\", \"discourse/plugins/discourse-ai/discourse/components/ai-bot-sidebar-new-conversation\", \"discourse/plugins/discourse-ai/discourse/services/ai-conversations-sidebar-manager\"], function (_exports, _pluginApi, _aiBotSidebarNewConversation, _aiConversationsSidebarManager) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    name: \"ai-conversations-sidebar\",\n    initialize() {\n      (0, _pluginApi.withPluginApi)(api => {\n        const siteSettings = api.container.lookup(\"service:site-settings\");\n        if (!siteSettings.ai_bot_enable_dedicated_ux) {\n          return;\n        }\n        const currentUser = api.container.lookup(\"service:current-user\");\n        if (!currentUser) {\n          return;\n        }\n        const aiConversationsSidebarManager = api.container.lookup(\"service:ai-conversations-sidebar-manager\");\n        aiConversationsSidebarManager.api = api;\n        api.addSidebarPanel(BaseCustomSidebarPanel => class AiConversationsSidebarPanel extends BaseCustomSidebarPanel {\n          key = (() => _aiConversationsSidebarManager.AI_CONVERSATIONS_PANEL)();\n          hidden = true;\n          displayHeader = false; // this would add a misplaced back to forum button\n          expandActiveSection = true;\n        });\n        api.renderInOutlet(\"before-sidebar-sections\", _aiBotSidebarNewConversation.default);\n        const setSidebarPanel = transition => {\n          if (transition?.to?.name === \"discourse-ai-bot-conversations\") {\n            return aiConversationsSidebarManager.forceCustomSidebar();\n          }\n          const topic = api.container.lookup(\"controller:topic\").model;\n          // if the topic is not a private message, not created by the current user,\n          // or doesn't have a bot response, we don't need to override sidebar\n          if (topic?.archetype === \"private_message\" && topic.user_id === currentUser.id && topic.is_bot_pm) {\n            return aiConversationsSidebarManager.forceCustomSidebar();\n          }\n          aiConversationsSidebarManager.stopForcingCustomSidebar();\n        };\n        api.container.lookup(\"service:router\").on(\"routeDidChange\", setSidebarPanel);\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/ai-gist-topic-list-class\", [\"exports\", \"discourse/lib/api\"], function (_exports, _api) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _api.apiInitializer)(api => {\n    const gistService = api.container.lookup(\"service:gists\");\n    api.registerValueTransformer(\"topic-list-item-class\", _ref => {\n      let {\n        value,\n        context\n      } = _ref;\n      const shouldShow = gistService.preference === \"table-ai\" && gistService.shouldShow;\n      if (context.topic.get(\"ai_topic_gist\") && shouldShow) {\n        value.push(\"excerpt-expanded\");\n      }\n      return value;\n    });\n  });\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/ai-helper\", [\"exports\", \"discourse/lib/plugin-api\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-composer-helper-menu\", \"discourse/plugins/discourse-ai/discourse/components/modal/diff-modal\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\"], function (_exports, _pluginApi, _discourseI18n, _aiComposerHelperMenu, _diffModal, _showAiHelper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  function initializeAiHelperTrigger(api) {\n    api.onToolbarCreate(toolbar => {\n      const currentUser = api.getCurrentUser();\n      const modal = api.container.lookup(\"service:modal\");\n      const selectedText = toolbarEvent => {\n        const composerContent = toolbarEvent.getText();\n        const selected = toolbarEvent.selected.value;\n        if (selected && selected.length > 0) {\n          return selected;\n        }\n        if (composerContent && composerContent.length > 0) {\n          return composerContent;\n        }\n      };\n      toolbar.addButton({\n        id: \"ai-helper-trigger\",\n        group: \"extras\",\n        icon: \"discourse-sparkles\",\n        title: \"discourse_ai.ai_helper.context_menu.trigger\",\n        preventFocus: true,\n        hideShortcutInTitle: true,\n        shortcut: \"ALT+P\",\n        shortcutAction: toolbarEvent => {\n          if (toolbarEvent.getText().length === 0) {\n            const toasts = api.container.lookup(\"service:toasts\");\n            return toasts.error({\n              class: \"ai-proofread-error-toast\",\n              duration: \"short\",\n              data: {\n                message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.no_content_error\")\n              }\n            });\n          }\n          const mode = currentUser?.ai_helper_prompts.find(p => p.name === \"proofread\").name;\n          modal.show(_diffModal.default, {\n            model: {\n              mode,\n              selectedText: selectedText(toolbarEvent),\n              toolbarEvent,\n              showResultAsDiff: true\n            }\n          });\n        },\n        condition: () => (0, _showAiHelper.showComposerAiHelper)(api.container.lookup(\"service:composer\").model, api.container.lookup(\"service:site-settings\"), currentUser, \"context_menu\"),\n        sendAction: event => {\n          const menu = api.container.lookup(\"service:menu\");\n          menu.show(document.querySelector(\".ai-helper-trigger\"), {\n            identifier: \"ai-composer-helper-menu\",\n            component: _aiComposerHelperMenu.default,\n            modalForMobile: true,\n            interactive: true,\n            data: {\n              toolbarEvent: event,\n              selectedText: selectedText(event)\n            }\n          });\n        }\n      });\n    });\n  }\n  var _default = _exports.default = {\n    name: \"discourse-ai-helper\",\n    initialize() {\n      (0, _pluginApi.withPluginApi)(api => {\n        initializeAiHelperTrigger(api);\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/ai-image-caption\", [\"exports\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/api\", \"discourse-i18n\"], function (_exports, _ajax, _ajaxError, _api, _discourseI18n) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _api.apiInitializer)(api => {\n    const buttonAttrs = {\n      label: (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.image_caption.button_label\"),\n      icon: \"discourse-sparkles\",\n      class: \"generate-caption\"\n    };\n    const settings = api.container.lookup(\"service:site-settings\");\n    const currentUser = api.getCurrentUser();\n    if (!settings.ai_helper_enabled_features.includes(\"image_caption\") || !currentUser?.can_use_assistant) {\n      return;\n    }\n    api.addComposerImageWrapperButton(buttonAttrs.label, buttonAttrs.class, buttonAttrs.icon, event => {\n      const imageCaptionPopup = api.container.lookup(\"service:imageCaptionPopup\");\n      imageCaptionPopup.popupTrigger = event.target;\n      if (imageCaptionPopup.popupTrigger.classList.contains(\"generate-caption\")) {\n        const buttonWrapper = event.target.closest(\".button-wrapper\");\n        const imageIndex = parseInt(buttonWrapper.getAttribute(\"data-image-index\"), 10);\n        const imageSrc = event.target.closest(\".image-wrapper\").querySelector(\"img\").getAttribute(\"src\");\n        imageCaptionPopup.toggleLoadingState(true);\n        const site = api.container.lookup(\"service:site\");\n        if (!site.mobileView) {\n          imageCaptionPopup.showPopup = !imageCaptionPopup.showPopup;\n        }\n        imageCaptionPopup._request = (0, _ajax.ajax)(`/discourse-ai/ai-helper/caption_image`, {\n          method: \"POST\",\n          data: {\n            image_url: imageSrc,\n            image_url_type: \"long_url\"\n          }\n        });\n        imageCaptionPopup._request.then(_ref => {\n          let {\n            caption\n          } = _ref;\n          imageCaptionPopup.imageSrc = imageSrc;\n          imageCaptionPopup.imageIndex = imageIndex;\n          imageCaptionPopup.newCaption = caption;\n          if (site.mobileView) {\n            // Auto-saves caption on mobile view\n            imageCaptionPopup.updateCaption();\n          }\n        }).catch(_ajaxError.popupAjaxError).finally(() => {\n          imageCaptionPopup.toggleLoadingState(false);\n        });\n      }\n    });\n  });\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/ai-search-discoveries\", [\"exports\", \"discourse/lib/api\"], function (_exports, _api) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _api.apiInitializer)(api => {\n    const currentUser = api.getCurrentUser();\n    const settings = api.container.lookup(\"service:site-settings\");\n    if (!settings.ai_bot_enabled || !currentUser?.can_use_ai_bot_discover_persona) {\n      return;\n    }\n    api.addSaveableUserOptionField(\"ai_search_discoveries\");\n  });\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/ai-semantic-search\", [\"exports\", \"discourse/lib/api\"], function (_exports, _api) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _api.apiInitializer)(api => {\n    api.modifyClass(\"component:search-result-entry\", {\n      pluginId: \"discourse-ai\",\n      classNameBindings: [\"bulkSelectEnabled\", \"post.generatedByAi:ai-result\"]\n    });\n  });\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/ai-sentiment-admin-nav\", [\"exports\", \"discourse/lib/api\"], function (_exports, _api) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _api.apiInitializer)(api => {\n    const currentUser = api.getCurrentUser();\n    if (!currentUser || !currentUser.admin || !currentUser.can_see_sentiment_reports) {\n      return;\n    }\n    api.addAdminSidebarSectionLink(\"reports\", {\n      name: \"sentiment_overview\",\n      route: \"admin.dashboardSentiment\",\n      label: \"discourse_ai.sentiments.sidebar.overview\",\n      icon: \"chart-column\"\n    });\n    api.addAdminSidebarSectionLink(\"reports\", {\n      name: \"sentiment_analysis\",\n      route: \"adminReports.show\",\n      routeModels: [\"sentiment_analysis\"],\n      label: \"discourse_ai.sentiments.sidebar.analysis\",\n      icon: \"chart-pie\"\n    });\n  });\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/related-topics\", [\"exports\", \"@glimmer/tracking\", \"discourse/components/basic-topic-list\", \"discourse/helpers/d-icon\", \"discourse/lib/plugin-api\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _tracking, _basicTopicList, _dIcon, _pluginApi, _discourseI18n, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const RelatedTopics = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <div\n      role=\"complementary\"\n      aria-labelledby=\"related-topics-title\"\n      id=\"related-topics\"\n      class=\"more-topics__list\"\n    >\n      <h3 id=\"related-topics-title\" class=\"more-topics__list-title\">\n        {{icon \"discourse-sparkles\"}}{{i18n \"discourse_ai.related_topics.title\"}}\n      </h3>\n      <div class=\"topics\">\n        <BasicTopicList @topics={{@topic.relatedTopics}} />\n      </div>\n    </div>\n  \n  */\n  {\n    \"id\": \"BD0VyKCH\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[10,0],[14,\\\"role\\\",\\\"complementary\\\"],[14,\\\"aria-labelledby\\\",\\\"related-topics-title\\\"],[14,1,\\\"related-topics\\\"],[14,0,\\\"more-topics__list\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h3\\\"],[14,1,\\\"related-topics-title\\\"],[14,0,\\\"more-topics__list-title\\\"],[12],[1,\\\"\\\\n      \\\"],[1,[28,[32,0],[\\\"discourse-sparkles\\\"],null]],[1,[28,[32,1],[\\\"discourse_ai.related_topics.title\\\"],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"topics\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,2],null,[[\\\"@topics\\\"],[[30,1,[\\\"relatedTopics\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@topic\\\"],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/initializers/related-topics.js\",\n    \"scope\": () => [_dIcon.default, _discourseI18n.i18n, _basicTopicList.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"related-topics:RelatedTopics\"));\n  var _default = _exports.default = {\n    name: \"discourse-ai-related-topics\",\n    initialize(container) {\n      const settings = container.lookup(\"service:site-settings\");\n      if (!settings.ai_embeddings_enabled || !settings.ai_embeddings_semantic_related_topics_enabled) {\n        return;\n      }\n      (0, _pluginApi.withPluginApi)(api => {\n        api.registerMoreTopicsTab({\n          id: \"related-topics\",\n          name: (0, _discourseI18n.i18n)(\"discourse_ai.related_topics.pill\"),\n          icon: \"discourse-sparkles\",\n          component: RelatedTopics,\n          condition: _ref => {\n            let {\n              topic\n            } = _ref;\n            return topic.relatedTopics?.length;\n          }\n        });\n        api.modifyClass(\"model:topic\", Superclass => class extends Superclass {\n          static #_ = (() => dt7948.g(this.prototype, \"related_topics\", [_tracking.tracked]))();\n          #related_topics = (() => (dt7948.i(this, \"related_topics\"), void 0))();\n          relatedTopicsCache = [];\n          get relatedTopics() {\n            // Used to keep related topics when a user scrolls up from the\n            // bottom of the topic and then scrolls back down\n            if (this.related_topics) {\n              this.relatedTopicsCache = this.related_topics;\n            }\n            return this.relatedTopicsCache?.map(topic => this.store.createRecord(\"topic\", topic));\n          }\n          static #_2 = (() => dt7948.n(this.prototype, \"relatedTopics\", [_tracking.cached]))();\n        });\n        api.modifyClass(\"model:post-stream\", Superclass => class extends Superclass {\n          _setSuggestedTopics(result) {\n            super._setSuggestedTopics(...arguments);\n            this.topic.related_topics = result.related_topics;\n          }\n        });\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/translation\", [\"exports\", \"discourse/lib/api\", \"discourse/lib/cookie\"], function (_exports, _api, _cookie) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _api.apiInitializer)(api => {\n    const settings = api.container.lookup(\"service:site-settings\");\n    if (!settings.discourse_ai_enabled || !settings.ai_translation_enabled) {\n      return;\n    }\n    api.registerCustomPostMessageCallback(\"localized\", (topicController, data) => {\n      if (!(0, _cookie.default)(\"content-localization-show-original\")) {\n        const postStream = topicController.get(\"model.postStream\");\n        postStream.triggerChangedPost(data.id, data.updated_at).then(() => {\n          topicController.appEvents.trigger(\"post-stream:refresh\", {\n            id: data.id\n          });\n        });\n      }\n    });\n  });\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", [\"exports\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/get-owner\", \"discourse/models/composer\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/modal/share-full-topic-modal\"], function (_exports, _ajax, _ajaxError, _getOwner, _composer, _discourseI18n, _shareFullTopicModal) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.composeAiBotMessage = composeAiBotMessage;\n  _exports.getBotType = getBotType;\n  _exports.isGPTBot = isGPTBot;\n  _exports.isPostFromAiBot = isPostFromAiBot;\n  _exports.showShareConversationModal = showShareConversationModal;\n  const MAX_PERSONA_USER_ID = -1200;\n  let enabledChatBotMap = null;\n  function ensureBotMap() {\n    if (!enabledChatBotMap) {\n      const currentUser = (0, _getOwner.getOwnerWithFallback)(this).lookup(\"service:current-user\");\n      enabledChatBotMap = {};\n      currentUser.ai_enabled_chat_bots.forEach(bot => {\n        enabledChatBotMap[bot.id] = bot;\n      });\n    }\n  }\n  function isGPTBot(user) {\n    if (!user) {\n      return;\n    }\n    ensureBotMap();\n    return !!enabledChatBotMap[user.id];\n  }\n  function getBotType(user) {\n    if (!user) {\n      return;\n    }\n    ensureBotMap();\n    const bot = enabledChatBotMap[user.id];\n    if (!bot) {\n      return;\n    }\n    return bot.is_persona ? \"persona\" : \"llm\";\n  }\n  function isPostFromAiBot(post, currentUser) {\n    return post.user_id <= MAX_PERSONA_USER_ID || !!currentUser?.ai_enabled_chat_bots?.any(bot => post.username === bot.username);\n  }\n  function showShareConversationModal(modal, topicId) {\n    (0, _ajax.ajax)(`/discourse-ai/ai-bot/shared-ai-conversations/preview/${topicId}.json`).then(payload => {\n      modal.show(_shareFullTopicModal.default, {\n        model: payload\n      });\n    }).catch(_ajaxError.popupAjaxError);\n  }\n  async function composeAiBotMessage(targetBot, composer) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n      skipFocus: false,\n      topicBody: \"\",\n      personaUsername: null\n    };\n    const currentUser = composer.currentUser;\n    const draftKey = \"new_private_message_ai_\" + new Date().getTime();\n    let botUsername;\n    if (targetBot) {\n      botUsername = currentUser.ai_enabled_chat_bots.find(bot => bot.model_name === targetBot)?.username;\n    } else if (options.personaUsername) {\n      botUsername = options.personaUsername;\n    } else {\n      botUsername = currentUser.ai_enabled_chat_bots[0].username;\n    }\n    const data = {\n      action: _composer.default.PRIVATE_MESSAGE,\n      recipients: botUsername,\n      topicTitle: (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.default_pm_prefix\"),\n      archetypeId: \"private_message\",\n      draftKey,\n      hasGroups: false,\n      warningsDisabled: true\n    };\n    if (options.skipFocus) {\n      data.topicBody = options.topicBody;\n      await composer.open(data);\n    } else {\n      composer.focusComposer({\n        fallbackToNewTopic: true,\n        openOpts: data\n      });\n    }\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-helper-suggestions\", [\"exports\", \"@ember/application\", \"@ember/runloop\", \"discourse-i18n\"], function (_exports, _application, _runloop, _discourseI18n) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.MIN_CHARACTER_COUNT = void 0;\n  _exports.showSuggestionsError = showSuggestionsError;\n  const MIN_CHARACTER_COUNT = _exports.MIN_CHARACTER_COUNT = 40;\n  function showSuggestionsError(context, reloadFn) {\n    const toasts = (0, _application.getOwner)(context).lookup(\"service:toasts\");\n    toasts.error({\n      class: \"ai-suggestion-error\",\n      duration: \"long\",\n      showProgressBar: true,\n      data: {\n        message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.suggest_errors.no_suggestions\"),\n        actions: [{\n          label: (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.context_menu.regen\"),\n          icon: \"rotate\",\n          class: \"btn btn-small\",\n          action: async toast => {\n            toast.close();\n            await reloadFn();\n            if (context.dMenu?.show && context.suggestions?.length > 0) {\n              (0, _runloop.later)(() => context.dMenu.show(), 50);\n            }\n          }\n        }]\n      }\n    });\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/progress-handlers\", [\"exports\", \"@ember/runloop\", \"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/post-updater\"], function (_exports, _runloop, _postUpdater) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.MIN_LETTERS_PER_INTERVAL = void 0;\n  _exports.addProgressDot = addProgressDot;\n  _exports.applyProgress = applyProgress;\n  _exports.default = streamUpdaterText;\n  _exports.streamPostText = streamPostText;\n  const PROGRESS_INTERVAL = 40;\n  const GIVE_UP_INTERVAL = 600000; // 10 minutes which is our max thinking time for now\n  const MIN_LETTERS_PER_INTERVAL = _exports.MIN_LETTERS_PER_INTERVAL = 6;\n  const MAX_FLUSH_TIME = 800;\n  let progressTimer = null;\n\n  /**\n   * Finds the last non-empty child element or text node of a given DOM element.\n   * Iterates backward through the element's child nodes and skips over empty text nodes.\n   *\n   * @param {HTMLElement} element - The DOM element to inspect.\n   * @returns {Node} - The last non-empty child node or null if none found.\n   */\n  function lastNonEmptyChild(element) {\n    let lastChild = element.lastChild;\n    while (lastChild && lastChild.nodeType === Node.TEXT_NODE && !/\\S/.test(lastChild.textContent)) {\n      lastChild = lastChild.previousSibling;\n    }\n    return lastChild;\n  }\n\n  /**\n   * Adds a progress dot (a span element with a \"progress-dot\" class) at the end of the\n   * last non-empty block within a given DOM element. This is used to visually indicate\n   * progress while content is being streamed.\n   *\n   * @param {HTMLElement} element - The DOM element to which the progress dot will be added.\n   */\n  function addProgressDot(element) {\n    let lastBlock = element;\n    while (true) {\n      let lastChild = lastNonEmptyChild(lastBlock);\n      if (!lastChild) {\n        break;\n      }\n      if (lastChild.nodeType === Node.ELEMENT_NODE) {\n        lastBlock = lastChild;\n      } else {\n        break;\n      }\n    }\n    const dotElement = document.createElement(\"span\");\n    dotElement.classList.add(\"progress-dot\");\n    lastBlock.appendChild(dotElement);\n  }\n\n  /**\n   * Applies progress to a streaming operation, updating the raw and cooked text,\n   * handling progress dots, and stopping streaming when complete.\n   *\n   * @param {Object} status - The current streaming status object.\n   * @param {Object} updater - An instance of a stream updater (e.g., PostUpdater or SummaryUpdater).\n   * @returns {Promise<boolean>} - Resolves to true if streaming is complete, otherwise false.\n   */\n  async function applyProgress(status, updater) {\n    status.startTime = status.startTime || Date.now();\n    if (Date.now() - status.startTime > GIVE_UP_INTERVAL) {\n      updater.streaming = false;\n      return true;\n    }\n    if (!updater.element) {\n      // wait till later\n      return false;\n    }\n    const oldRaw = updater.raw;\n    if (status.raw === oldRaw && !status.done) {\n      const hasProgressDot = updater.element.querySelector(\".progress-dot\");\n      if (hasProgressDot) {\n        return false;\n      }\n    }\n    if (status.raw !== undefined) {\n      let newRaw = status.raw;\n      if (!status.done) {\n        // rush update if we have a </details> tag (function call)\n        if (oldRaw.length === 0 && newRaw.indexOf(\"</details>\") !== -1) {\n          newRaw = status.raw;\n        } else {\n          const diff = newRaw.length - oldRaw.length;\n\n          // progress interval is 40ms\n          // by default we add 6 letters per interval\n          // but ... we want to be done in MAX_FLUSH_TIME\n          let letters = Math.floor(diff / (MAX_FLUSH_TIME / PROGRESS_INTERVAL));\n          if (letters < MIN_LETTERS_PER_INTERVAL) {\n            letters = MIN_LETTERS_PER_INTERVAL;\n          }\n          newRaw = status.raw.substring(0, oldRaw.length + letters);\n        }\n      }\n      await updater.setRaw(newRaw, status.done);\n    }\n    if (status.done) {\n      if (status.cooked) {\n        await updater.setCooked(status.cooked);\n      }\n      updater.streaming = false;\n    }\n    return status.done;\n  }\n\n  /**\n   * Handles progress updates for a post stream by applying the streaming status of\n   * each post and updating its content accordingly. This function ensures that progress\n   * is tracked and handled for multiple posts simultaneously.\n   *\n   * @param {Object} postStream - The post stream object containing the posts to be updated.\n   * @returns {Promise<boolean>} - Resolves to true if polling should continue, otherwise false.\n   */\n  async function handleProgress(postStream) {\n    const status = postStream.aiStreamingStatus;\n    let keepPolling = false;\n    const promises = Object.keys(status).map(async postId => {\n      let postStatus = status[postId];\n      const postUpdater = new _postUpdater.default(postStream, postStatus.post_id);\n      const done = await applyProgress(postStatus, postUpdater);\n      if (done) {\n        delete status[postId];\n      } else {\n        keepPolling = true;\n      }\n    });\n    await Promise.all(promises);\n    return keepPolling;\n  }\n\n  /**\n   * Ensures that progress for a post stream is being updated. It starts a progress timer\n   * if one is not already active, and continues polling for progress updates at regular intervals.\n   *\n   * @param {Object} postStream - The post stream object containing the posts to be updated.\n   */\n  function ensureProgress(postStream) {\n    if (!progressTimer) {\n      progressTimer = (0, _runloop.later)(async () => {\n        const keepPolling = await handleProgress(postStream);\n        progressTimer = null;\n        if (keepPolling) {\n          ensureProgress(postStream);\n        }\n      }, PROGRESS_INTERVAL);\n    }\n  }\n\n  /**\n   * Streams the raw text for a post by tracking its status and applying progress updates.\n   * If streaming is already in progress, this function ensures it continues to update the content.\n   *\n   * @param {Object} postStream - The post stream object containing the post to be updated.\n   * @param {Object} data - The data object containing raw and cooked content of the post.\n   */\n  function streamPostText(postStream, data) {\n    if (data.noop) {\n      return;\n    }\n    let status = postStream.aiStreamingStatus = postStream.aiStreamingStatus || {};\n    status[data.post_id] = data;\n    ensureProgress(postStream);\n  }\n\n  /**\n   * A generalized function to handle streaming of content using any specified updater class.\n   * It applies progress updates to the content (raw and cooked) based on the given data.\n   * Use this function to stream content for Glimmer components.\n   *\n   * @param {Function} updaterClass - The updater class to be used for streaming (e.g., PostUpdater, SummaryUpdater).\n   * @param {Object} data - The data object containing the content to be streamed.\n   * @param {Object} context - Additional context required for the updater (typically the context of the Ember component).\n   */\n  function streamUpdaterText(updaterClass, data, context) {\n    const updaterInstance = new updaterClass(data, context);\n    if (!progressTimer) {\n      progressTimer = (0, _runloop.later)(async () => {\n        await applyProgress(data, updaterInstance);\n        progressTimer = null;\n        if (!data.done) {\n          await applyProgress(data, updaterInstance);\n        }\n      }, PROGRESS_INTERVAL);\n    }\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/post-updater\", [\"exports\", \"discourse/lib/load-morphlex\", \"discourse/lib/text\", \"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/progress-handlers\", \"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/stream-updater\"], function (_exports, _loadMorphlex, _text, _progressHandlers, _streamUpdater) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class PostUpdater extends _streamUpdater.default {\n    morphingOptions = {\n      beforeAttributeUpdated: (element, attributeName) => {\n        return !(element.tagName === \"DETAILS\" && attributeName === \"open\");\n      }\n    };\n    constructor(postStream, postId) {\n      super();\n      this.postStream = postStream;\n      this.postId = postId;\n      this.post = postStream.findLoadedPost(postId);\n      const topicId = postStream.topic.id;\n      if (this.post) {\n        this.postElement = document.querySelector(`.topic-area[data-topic-id=\"${topicId}\"] #post_${this.post.post_number}`);\n      }\n    }\n    get element() {\n      return this.postElement;\n    }\n    set streaming(value) {\n      if (this.postElement) {\n        if (value) {\n          this.postElement.classList.add(\"streaming\");\n        } else {\n          this.postElement.classList.remove(\"streaming\");\n        }\n      }\n    }\n    async setRaw(value, done) {\n      this.post.set(\"raw\", value);\n      const cooked = await (0, _text.cook)(value);\n\n      // resets animation\n      this.element.classList.remove(\"streaming\");\n      void this.element.offsetWidth;\n      this.element.classList.add(\"streaming\");\n      const cookedElement = document.createElement(\"div\");\n      cookedElement.innerHTML = cooked;\n      if (!done) {\n        (0, _progressHandlers.addProgressDot)(cookedElement);\n      }\n      await this.setCooked(cookedElement.innerHTML);\n    }\n    async setCooked(value) {\n      if (!this.postElement) {\n        return;\n      }\n      this.post.set(\"cooked\", value);\n      (await (0, _loadMorphlex.default)()).morphInner(this.postElement.querySelector(\".cooked\"), `<div>${value}</div>`, this.morphingOptions);\n    }\n    get raw() {\n      return this.post.get(\"raw\") || \"\";\n    }\n  }\n  _exports.default = PostUpdater;\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/stream-updater\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /**\n   * Interface needed to implement for a streaming updater\n   */\n  class StreamUpdater {\n    set streaming(value) {\n      throw \"not implemented\";\n    }\n    async setCooked() {\n      throw \"not implemented\";\n    }\n    async setRaw() {\n      throw \"not implemented\";\n    }\n    get element() {\n      throw \"not implemented\";\n    }\n    get raw() {\n      throw \"not implemented\";\n    }\n  }\n  _exports.default = StreamUpdater;\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-topic-summary\", [\"exports\", \"@glimmer/tracking\", \"discourse/lib/ajax\", \"discourse/lib/formatter\", \"discourse/lib/text\"], function (_exports, _tracking, _ajax, _formatter, _text3) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTopicSummary {\n    static #_ = (() => dt7948.g(this.prototype, \"text\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #text = (() => (dt7948.i(this, \"text\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"summarizedOn\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #summarizedOn = (() => (dt7948.i(this, \"summarizedOn\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"summarizedBy\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #summarizedBy = (() => (dt7948.i(this, \"summarizedBy\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"newPostsSinceSummary\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #newPostsSinceSummary = (() => (dt7948.i(this, \"newPostsSinceSummary\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"outdated\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #outdated = (() => (dt7948.i(this, \"outdated\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"canRegenerate\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #canRegenerate = (() => (dt7948.i(this, \"canRegenerate\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"regenerated\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #regenerated = (() => (dt7948.i(this, \"regenerated\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"showSummaryBox\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showSummaryBox = (() => (dt7948.i(this, \"showSummaryBox\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"canCollapseSummary\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #canCollapseSummary = (() => (dt7948.i(this, \"canCollapseSummary\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"loadingSummary\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loadingSummary = (() => (dt7948.i(this, \"loadingSummary\"), void 0))();\n    processUpdate(update) {\n      const topicSummary = update.ai_topic_summary;\n      return (0, _text3.cook)(topicSummary.summarized_text).then(cooked => {\n        this.text = cooked;\n        this.loading = false;\n      }).then(() => {\n        if (update.done) {\n          this.summarizedOn = (0, _formatter.shortDateNoYear)(topicSummary.summarized_on);\n          this.summarizedBy = topicSummary.algorithm;\n          this.newPostsSinceSummary = topicSummary.new_posts_since_summary;\n          this.outdated = topicSummary.outdated;\n          this.newPostsSinceSummary = topicSummary.new_posts_since_summary;\n          this.canRegenerate = topicSummary.outdated && topicSummary.can_regenerate;\n        }\n      });\n    }\n    collapse() {\n      this.showSummaryBox = false;\n      this.canCollapseSummary = false;\n    }\n    generateSummary(currentUser, topicId) {\n      this.showSummaryBox = true;\n      if (this.text && !this.canRegenerate) {\n        this.canCollapseSummary = false;\n        return;\n      }\n      let fetchURL = `/discourse-ai/summarization/t/${topicId}?`;\n      if (currentUser) {\n        fetchURL += `stream=true`;\n        if (this.canRegenerate) {\n          fetchURL += \"&skip_age_check=true\";\n        }\n      }\n      this.loading = true;\n      return (0, _ajax.ajax)(fetchURL).then(data => {\n        if (!currentUser) {\n          data.done = true;\n          this.processUpdate(data);\n        }\n      });\n    }\n  }\n  _exports.default = AiTopicSummary;\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/copy-conversation\", [\"exports\", \"discourse/lib/ajax\", \"discourse/lib/utilities\", \"discourse-i18n\"], function (_exports, _ajax, _utilities, _discourseI18n) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _default;\n  async function _default(topic, fromPostNumber, toPostNumber) {\n    await (0, _utilities.clipboardCopyAsync)(async () => {\n      const text = await generateClipboard(topic, fromPostNumber, toPostNumber);\n      return new Blob([text], {\n        type: \"text/plain\"\n      });\n    });\n  }\n  async function generateClipboard(topic, fromPostNumber, toPostNumber) {\n    const stream = topic.get(\"postStream\");\n    let postNumbers = [];\n    // simpler to understand than Array.from\n    for (let i = fromPostNumber; i <= toPostNumber; i++) {\n      postNumbers.push(i);\n    }\n    const postIds = postNumbers.map(postNumber => {\n      return stream.findPostIdForPostNumber(postNumber);\n    });\n\n    // we need raw to construct so post stream will not help\n\n    const url = `/t/${topic.id}/posts.json`;\n    const data = {\n      post_ids: postIds,\n      include_raw: true\n    };\n    const response = await (0, _ajax.ajax)(url, {\n      data\n    });\n    let buffer = [];\n    buffer.push(\"<details class='ai-quote'>\");\n    buffer.push(\"<summary>\");\n    buffer.push(`<span>${topic.title}</span>`);\n    buffer.push(`<span title='${(0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.ai_title\")}'>${(0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.ai_label\")}</span>`);\n    buffer.push(\"</summary>\");\n    response.post_stream.posts.forEach(post => {\n      buffer.push(\"\");\n      buffer.push(`**${post.username}:**`);\n      buffer.push(\"\");\n      buffer.push(post.raw);\n    });\n    buffer.push(\"</details>\");\n    const text = buffer.join(\"\\n\");\n    return text;\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/diff-streamer\", [\"exports\", \"@glimmer/tracking\", \"@ember/runloop\", \"discourse/lib/load-js-diff\", \"discourse/lib/utilities\"], function (_exports, _tracking, _runloop, _loadJsDiff, _utilities) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_CHAR_TYPING_DELAY = 10;\n  const STREAMING_DIFF_TRUNCATE_THRESHOLD = 0.1;\n  const STREAMING_DIFF_TRUNCATE_BUFFER = 10;\n  const RUSH_MAX_TICKS = 10; // ≤ 10 visual diff refreshes\n  const RUSH_TICK_INTERVAL = 100; // 100 ms between them → ≤ 1 s total\n  class DiffStreamer {\n    static #_ = (() => dt7948.g(this.prototype, \"isStreaming\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isStreaming = (() => (dt7948.i(this, \"isStreaming\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"words\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #words = (() => (dt7948.i(this, \"words\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"lastResultText\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #lastResultText = (() => (dt7948.i(this, \"lastResultText\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"diff\", [_tracking.tracked], function () {\n      return this.selectedText;\n    }))();\n    #diff = (() => (dt7948.i(this, \"diff\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"suggestion\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #suggestion = (() => (dt7948.i(this, \"suggestion\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"isDone\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isDone = (() => (dt7948.i(this, \"isDone\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"isThinking\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #isThinking = (() => (dt7948.i(this, \"isThinking\"), void 0))();\n    typingTimer = null;\n    currentWordIndex = 0;\n    currentCharIndex = 0;\n    jsDiff = null;\n    bufferedToken = null;\n    rushMode = false;\n    rushBatchSize = 1;\n    rushTicksLeft = 0;\n    receivedFinalUpdate = false;\n    /**\n    * Initializes the DiffStreamer with initial text and typing delay.\n    * @param {string} selectedText - The original text to diff against.\n    * @param {number} typingDelay - (Optional) character typing delay in ms.\n    */\n    constructor(selectedText, typingDelay) {\n      this.selectedText = selectedText;\n      this.typingDelay = typingDelay || DEFAULT_CHAR_TYPING_DELAY;\n      this.loadJSDiff();\n    }\n    /**\n    * Loads the jsDiff library asynchronously.\n    */\n    async loadJSDiff() {\n      this.jsDiff = await (0, _loadJsDiff.default)();\n    }\n    /**\n    * Main entry point for streaming updates from the backend.\n    * Handles both incremental and final updates.\n    * @param {object} result - The result object containing the new text and status\n    * @param {string} newTextKey - The key in result that holds the new text value (e.g. if the JSON is { text: \"Hello\", done: false }, newTextKey would be \"text\")\n    */\n    async updateResult(result, newTextKey) {\n      if (this.receivedFinalUpdate) {\n        return;\n      }\n      if (!this.jsDiff) {\n        await this.loadJSDiff();\n      }\n      this.isThinking = false;\n      const newText = result[newTextKey];\n      const gotDoneFlag = !!result?.done;\n      if (gotDoneFlag) {\n        this.receivedFinalUpdate = true;\n        if (this.typingTimer) {\n          (0, _runloop.cancel)(this.typingTimer);\n          this.typingTimer = null;\n        }\n        // flush buffered token so everything is renderable\n        if (this.bufferedToken) {\n          this.words.push(this.bufferedToken);\n          this.bufferedToken = null;\n        }\n        // tokenise whatever tail we haven’t processed yet\n        const tail = newText.slice(this.lastResultText.length);\n        if (tail.length) {\n          this.words.push(...this.#tokenize(tail));\n        }\n        const charsLeft = newText.length - this.suggestion.length;\n        if (charsLeft <= 0) {\n          this.suggestion = newText;\n          this.diff = this.#formatDiffWithTags(this.jsDiff.diffWordsWithSpace(this.selectedText, newText), false);\n          this.isStreaming = false;\n          this.isDone = true;\n          return;\n        }\n        this.rushBatchSize = Math.ceil(charsLeft / RUSH_MAX_TICKS);\n        this.rushTicksLeft = RUSH_MAX_TICKS;\n        this.rushMode = true;\n        this.isStreaming = true;\n        this.lastResultText = newText;\n        this.#streamNextChar();\n        return;\n      }\n      const delta = newText.slice(this.lastResultText.length);\n      if (!delta) {\n        this.lastResultText = newText;\n        return;\n      }\n      // combine any previous buffered token with new delta and retokenize\n      const combined = (this.bufferedToken || \"\") + delta;\n      const tokens = this.#tokenize(combined);\n      this.bufferedToken = tokens.pop() || null;\n      if (tokens.length) {\n        this.words.push(...tokens);\n      }\n      this.isStreaming = true;\n      if (!this.typingTimer) {\n        this.#streamNextChar();\n      }\n      this.lastResultText = newText;\n    }\n    /**\n    * Resets the streamer's internal state to allow reuse.\n    */\n    reset() {\n      this.diff = \"\";\n      this.suggestion = \"\";\n      this.lastResultText = \"\";\n      this.words = [];\n      this.currentWordIndex = 0;\n      this.currentCharIndex = 0;\n      this.bufferedToken = null;\n      this.isStreaming = false;\n      this.isDone = false;\n      this.receivedFinalUpdate = false;\n      this.isThinking = true;\n      this.rushMode = false;\n      this.rushBatchSize = 1;\n      this.rushTicksLeft = 0;\n      if (this.typingTimer) {\n        (0, _runloop.cancel)(this.typingTimer);\n        this.typingTimer = null;\n      }\n    }\n    /**\n    * Computes a truncated diff during streaming to avoid excessive churn.\n    * @param {string} original - The original text.\n    * @param {string} suggestion - The partially streamed suggestion.\n    * @returns {Array} Array of diff parts with `.added`, `.removed`, and `.value`.\n    */\n    streamingDiff(original, suggestion) {\n      const max = Math.floor(suggestion.length + suggestion.length * STREAMING_DIFF_TRUNCATE_THRESHOLD + STREAMING_DIFF_TRUNCATE_BUFFER);\n      const head = original.slice(0, max);\n      const tail = original.slice(max);\n      const output = this.jsDiff.diffWordsWithSpace(head, suggestion);\n      if (tail.length) {\n        let last = output.at(-1);\n        let secondLast = output.at(-2);\n        if (last.added && secondLast?.removed) {\n          output.splice(-2, 2, last, secondLast);\n          last = secondLast;\n        }\n        if (!last.removed) {\n          last = {\n            added: false,\n            removed: true,\n            value: \"\"\n          };\n          output.push(last);\n        }\n        last.value += tail;\n      }\n      return output;\n    }\n    /**\n    * Internal loop that emits the next character(s) to simulate typing.\n    * Works in both normal and rush mode.\n    */\n    #streamNextChar() {\n      if (!this.isStreaming) {\n        return;\n      }\n      const limit = this.rushMode ? this.rushBatchSize : 1;\n      let emitted = 0;\n      while (emitted < limit && this.currentWordIndex < this.words.length) {\n        const token = this.words[this.currentWordIndex];\n        this.suggestion += token.charAt(this.currentCharIndex);\n        this.currentCharIndex++;\n        emitted++;\n        if (this.currentCharIndex >= token.length) {\n          this.currentWordIndex++;\n          this.currentCharIndex = 0;\n        }\n      }\n      let refresh = false;\n      if (this.rushMode) {\n        if (this.rushTicksLeft > 0) {\n          this.rushTicksLeft--;\n          refresh = true;\n        }\n      } else {\n        refresh = this.currentCharIndex === 0;\n      }\n      if (refresh || this.currentWordIndex >= this.words.length) {\n        const useStreaming = this.currentWordIndex < this.words.length || this.rushMode;\n        this.diff = this.#formatDiffWithTags(useStreaming ? this.streamingDiff(this.selectedText, this.suggestion) : this.jsDiff.diffWordsWithSpace(this.selectedText, this.suggestion), !this.rushMode);\n      }\n      const doneStreaming = this.currentWordIndex >= this.words.length;\n      if (doneStreaming) {\n        this.isStreaming = false;\n        this.rushMode = false;\n        this.typingTimer = null;\n        if (this.receivedFinalUpdate) {\n          this.isDone = true;\n        }\n      } else {\n        const delay = this.rushMode ? RUSH_TICK_INTERVAL : this.typingDelay;\n        this.typingTimer = (0, _runloop.later)(this, this.#streamNextChar, delay);\n      }\n    }\n    /**\n    * Splits a string into tokens, preserving whitespace as separate entries.\n    * @param {string} text - The input string.\n    * @returns {Array} Array of tokens.\n    */\n    #tokenize(text) {\n      return text.split(/(?<=\\S)(?=\\s)/);\n    }\n    /**\n    * Wraps a chunk of text in appropriate HTML tags based on its diff type.\n    * @param {string} text - The text chunk.\n    * @param {string} type - The type: 'added', 'removed', or 'unchanged'.\n    * @returns {string} HTML string.\n    */\n    #wrapChunk(text, type) {\n      if (type === \"added\") {\n        return `<ins>${text}</ins>`;\n      }\n      if (type === \"removed\") {\n        return /^\\s+$/.test(text) ? \"\" : `<del>${text}</del>`;\n      }\n      return `<span>${text}</span>`;\n    }\n    /**\n    * Converts a diff array into a string of HTML with highlight markup.\n    * @param {Array} diffArray - The array from a diff function.\n    * @param {boolean} highlightLastWord - Whether to highlight the last non-removed word.\n    * @returns {string} HTML representation of the diff.\n    */\n    #formatDiffWithTags(diffArray) {\n      let highlightLastWord = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      const words = [];\n      diffArray.forEach(part => (part.value.match(/\\S+|\\s+/g) || []).forEach(tok => words.push({\n        text: tok,\n        type: part.added ? \"added\" : part.removed ? \"removed\" : \"unchanged\"\n      })));\n      let lastIndex = -1;\n      if (highlightLastWord) {\n        for (let i = words.length - 1; i >= 0; i--) {\n          if (words[i].type !== \"removed\" && /\\S/.test(words[i].text)) {\n            lastIndex = i;\n            break;\n          }\n        }\n      }\n      const output = [];\n      for (let i = 0; i <= lastIndex; i++) {\n        let {\n          text,\n          type\n        } = words[i];\n        text = (0, _utilities.escapeExpression)(text);\n        if (/^\\s+$/.test(text)) {\n          output.push(text);\n          continue;\n        }\n        let chunk = this.#wrapChunk(text, type);\n        if (highlightLastWord && i === lastIndex) {\n          chunk = `<mark class=\"highlight\">${chunk}</mark>`;\n        }\n        output.push(chunk);\n      }\n      for (let i = lastIndex + 1; i < words.length;) {\n        const type = words[i].type;\n        let buf = \"\";\n        while (i < words.length && words[i].type === type) {\n          buf += words[i++].text;\n        }\n        output.push(this.#wrapChunk((0, _utilities.escapeExpression)(buf), type));\n      }\n      return output.join(\"\");\n    }\n  }\n  _exports.default = DiffStreamer;\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.showComposerAiHelper = showComposerAiHelper;\n  _exports.showPostAIHelper = showPostAIHelper;\n  function showComposerAiHelper(composerModel, siteSettings, currentUser, featureType) {\n    const enableHelper = _helperEnabled(siteSettings);\n    const enableAssistant = currentUser.can_use_assistant;\n    const canShowInPM = siteSettings.ai_helper_allowed_in_pm;\n    const enableFeature = siteSettings.ai_helper_enabled_features.includes(featureType);\n    if (composerModel?.privateMessage) {\n      return enableHelper && enableAssistant && canShowInPM && enableFeature;\n    }\n    return enableHelper && enableAssistant && enableFeature;\n  }\n  function showPostAIHelper(outletArgs, context) {\n    return _helperEnabled(context.siteSettings) && context.currentUser?.can_use_assistant_in_post;\n  }\n  function _helperEnabled(siteSettings) {\n    return siteSettings.discourse_ai_enabled && siteSettings.ai_helper_enabled;\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/smooth-streamer\", [\"exports\", \"@glimmer/tracking\", \"@ember/runloop\"], function (_exports, _tracking, _runloop) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_TYPING_DELAY = 15;\n  /**\n   * SmoothStreamer provides a typing animation effect for streamed text updates.\n   */\n  class SmoothStreamer {\n    static #_ = (() => dt7948.g(this.prototype, \"isStreaming\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isStreaming = (() => (dt7948.i(this, \"isStreaming\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"streamedText\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #streamedText = (() => (dt7948.i(this, \"streamedText\"), void 0))();\n    typingTimer = null;\n    streamedTextLength = 0;\n    /**\n    * @param {() => string} getRealtimeText - Function to retrieve the latest realtime text\n    * @param {(value: string) => void} setRealtimeText - Function to update the realtime text\n    * @param {number} [typingDelay] - Delay (in ms) between each character reveal\n    */\n    constructor(getRealtimeText, setRealtimeText, typingDelay) {\n      this.getRealtimeText = getRealtimeText;\n      this.setRealtimeText = setRealtimeText;\n      this.typingDelay = typingDelay || DEFAULT_TYPING_DELAY;\n    }\n    /**\n    * Retrieves the appropriate text: either the animated stream or the full realtime text.\n    * @returns {string}\n    */\n    get renderedText() {\n      return this.isStreaming ? this.streamedText : this.realtimeText;\n    }\n    /**\n    * Retrieves the current realtime text.\n    * @returns {string}\n    */\n    get realtimeText() {\n      return this.getRealtimeText();\n    }\n    /**\n    * Updates the realtime text.\n    * @param {string} value - The new text value\n    */\n    set realtimeText(value) {\n      this.setRealtimeText(value);\n    }\n    /**\n    * Resets the streaming state, clearing all animation progress.\n    */\n    resetStreaming() {\n      this.#cancelTypingTimer();\n      this.isStreaming = false;\n      this.streamedText = \"\";\n      this.streamedTextLength = 0;\n    }\n    /**\n    * Processes an update result (typically from MessageBus)\n    * either completing the stream or continuing animation.\n    * @param {object} result - The result object containing the new text and status\n    * @param {string} newTextKey - The key in result that holds the new text value (e.g. if the JSON is { text: \"Hello\", done: false }, newTextKey would be \"text\")\n    */\n    async updateResult(result, newTextKey) {\n      const newText = result[newTextKey];\n      if (result?.done) {\n        this.streamedText = newText;\n        this.realtimeText = newText;\n        this.isStreaming = false;\n        // Clear pending animations\n        this.#cancelTypingTimer();\n      } else if (newText.length > this.realtimeText.length) {\n        this.realtimeText = newText;\n        this.isStreaming = true;\n        await this.#onTextUpdate();\n      }\n    }\n    /**\n    * Types out the next character in the streaming text.\n    * Private method.\n    */\n    #typeCharacter() {\n      if (this.streamedTextLength < this.realtimeText.length) {\n        this.streamedText += this.realtimeText.charAt(this.streamedTextLength);\n        this.streamedTextLength++;\n        this.typingTimer = (0, _runloop.later)(this, this.#typeCharacter, this.typingDelay);\n      } else {\n        this.typingTimer = null;\n      }\n    }\n    /**\n    * Handles text updates and restarts the typing animation.\n    * Private method.\n    */\n    #onTextUpdate() {\n      this.#cancelTypingTimer();\n      this.#typeCharacter();\n    }\n    /**\n    * Cancels any pending typing animation.\n    * Private method.\n    */\n    #cancelTypingTimer() {\n      if (this.typingTimer) {\n        (0, _runloop.cancel)(this.typingTimer);\n      }\n    }\n  }\n  _exports.default = SmoothStreamer;\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/utilities\", [\"exports\", \"@ember/template\", \"discourse/lib/utilities\"], function (_exports, _template, _utilities) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.jsonToHtml = jsonToHtml;\n  function jsonToHtml(json) {\n    if (json === null) {\n      return \"null\";\n    }\n    if (typeof json !== \"object\") {\n      return (0, _utilities.escapeExpression)(json);\n    }\n    let html = \"<ul>\";\n    for (let [key, value] of Object.entries(json)) {\n      html += \"<li>\";\n      key = (0, _utilities.escapeExpression)(key);\n      if (typeof value === \"object\" && Array.isArray(value)) {\n        html += `<strong>${key}:</strong> ${jsonToHtml(value)}`;\n      } else if (typeof value === \"object\") {\n        html += `<strong>${key}:</strong> <ul><li>${jsonToHtml(value)}</li></ul>`;\n      } else {\n        if (typeof value === \"string\") {\n          value = (0, _utilities.escapeExpression)(value).replace(/\\n/g, \"<br>\");\n        }\n        html += `<strong>${key}:</strong> ${value}`;\n      }\n      html += \"</li>\";\n    }\n    html += \"</ul>\";\n    return (0, _template.htmlSafe)(html);\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/preferences-ai-route-map\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    resource: \"user.preferences\",\n    map() {\n      this.route(\"ai\");\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/routes/discourse-ai-shared-conversation-show\", [\"exports\", \"@ember/service\", \"discourse/routes/discourse\"], function (_exports, _service, _discourse) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class DiscourseAiSharedConversationShowRoute extends _discourse.default {\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    beforeModel(transition) {\n      if (this.currentUser?.user_option?.external_links_in_new_tab) {\n        window.open(transition.intent.url, \"_blank\");\n      } else {\n        this.redirect(transition.intent.url);\n      }\n      transition.abort();\n    }\n    redirect(url) {\n      window.location = url;\n    }\n  }\n  _exports.default = DiscourseAiSharedConversationShowRoute;\n});","define(\"discourse/plugins/discourse-ai/discourse/routes/preferences-ai\", [\"exports\", \"@ember/service\", \"discourse/lib/utilities\", \"discourse/routes/restricted-user\"], function (_exports, _service, _utilities, _restrictedUser) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class PreferencesAiRoute extends _restrictedUser.default {\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    setupController(controller, user) {\n      if (!this.siteSettings.discourse_ai_enabled) {\n        return this.router.transitionTo(`discovery.${(0, _utilities.defaultHomepage)()}`);\n      }\n      controller.set(\"model\", user);\n    }\n  }\n  _exports.default = PreferencesAiRoute;\n});","define(\"discourse/plugins/discourse-ai/discourse/services/ai-bot-conversations-hidden-submit\", [\"exports\", \"@ember/object\", \"@ember/runloop\", \"@ember/service\", \"@ember-compat/tracked-built-ins\", \"discourse/lib/ajax\", \"discourse/lib/uploads\", \"discourse-i18n\"], function (_exports, _object, _runloop, _service, _trackedBuiltIns, _ajax, _uploads, _discourseI18n) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiBotConversationsHiddenSubmit extends _service.default {\n    static #_ = (() => dt7948.g(this.prototype, \"aiConversationsSidebarManager\", [_service.service]))();\n    #aiConversationsSidebarManager = (() => (dt7948.i(this, \"aiConversationsSidebarManager\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"appEvents\", [_service.service]))();\n    #appEvents = (() => (dt7948.i(this, \"appEvents\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"composer\", [_service.service]))();\n    #composer = (() => (dt7948.i(this, \"composer\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"dialog\", [_service.service]))();\n    #dialog = (() => (dt7948.i(this, \"dialog\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"loading\", [_trackedBuiltIns.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    personaId;\n    targetUsername;\n    inputValue = \"\";\n    focusInput() {\n      this.composer.destroyDraft();\n      this.composer.close();\n      (0, _runloop.next)(() => {\n        document.getElementById(\"ai-bot-conversations-input\").focus();\n      });\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"focusInput\", [_object.action]))();\n    async submitToBot(uploadData) {\n      if (this.inputValue.length < this.siteSettings.min_personal_message_post_length) {\n        return this.dialog.alert({\n          message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversations.min_input_length_message\", {\n            count: this.siteSettings.min_personal_message_post_length\n          }),\n          didConfirm: () => this.focusInput(),\n          didCancel: () => this.focusInput()\n        });\n      }\n\n      // Don't submit if there are still uploads in progress\n      if (uploadData.inProgressUploadsCount > 0) {\n        return this.dialog.alert({\n          message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversations.uploads_in_progress\")\n        });\n      }\n      this.loading = true;\n      const title = (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.default_pm_prefix\");\n\n      // Prepare the raw content with any uploads appended\n      let rawContent = this.inputValue;\n\n      // Append upload markdown if we have uploads\n      if (uploadData.uploads && uploadData.uploads.length > 0) {\n        rawContent += \"\\n\\n\";\n        uploadData.uploads.forEach(upload => {\n          const uploadMarkdown = (0, _uploads.getUploadMarkdown)(upload);\n          rawContent += uploadMarkdown + \"\\n\";\n        });\n      }\n      try {\n        const response = await (0, _ajax.ajax)(\"/posts.json\", {\n          method: \"POST\",\n          data: {\n            raw: rawContent,\n            title,\n            archetype: \"private_message\",\n            target_recipients: this.targetUsername,\n            meta_data: {\n              ai_persona_id: this.personaId\n            }\n          }\n        });\n\n        // Reset uploads after successful submission\n        this.inputValue = \"\";\n        this.appEvents.trigger(\"discourse-ai:bot-pm-created\", {\n          id: response.topic_id,\n          slug: response.topic_slug,\n          title\n        });\n        this.router.transitionTo(response.post_url);\n      } finally {\n        this.loading = false;\n      }\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"submitToBot\", [_object.action]))();\n  }\n  _exports.default = AiBotConversationsHiddenSubmit;\n});","define(\"discourse/plugins/discourse-ai/discourse/services/ai-conversations-sidebar-manager\", [\"exports\", \"@glimmer/tracking\", \"@ember/runloop\", \"@ember/service\", \"@ember/template\", \"@ember-compat/tracked-built-ins\", \"discourse/lib/ajax\", \"discourse/lib/debounce\", \"discourse/lib/formatter\", \"discourse/lib/sidebar/panels\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-bot-sidebar-empty-state\"], function (_exports, _tracking, _runloop, _service, _template, _trackedBuiltIns, _ajax, _debounce, _formatter, _panels, _discourseI18n, _aiBotSidebarEmptyState) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.AI_CONVERSATIONS_PANEL = void 0;\n  const AI_CONVERSATIONS_PANEL = _exports.AI_CONVERSATIONS_PANEL = \"ai-conversations\";\n  const SCROLL_BUFFER = 100;\n  const DEBOUNCE = 100;\n  class AiConversationsSidebarManager extends _service.default {\n    static #_ = (() => dt7948.g(this.prototype, \"appEvents\", [_service.service]))();\n    #appEvents = (() => (dt7948.i(this, \"appEvents\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"sidebarState\", [_service.service]))();\n    #sidebarState = (() => (dt7948.i(this, \"sidebarState\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"messageBus\", [_service.service]))();\n    #messageBus = (() => (dt7948.i(this, \"messageBus\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"topics\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #topics = (() => (dt7948.i(this, \"topics\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"sections\", [_tracking.tracked], function () {\n      return new _trackedBuiltIns.TrackedArray();\n    }))();\n    #sections = (() => (dt7948.i(this, \"sections\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"isLoading\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #isLoading = (() => (dt7948.i(this, \"isLoading\"), void 0))();\n    api = null;\n    isFetching = false;\n    page = 0;\n    hasMore = true;\n    _registered = (() => new Set())();\n    _hasScrollListener = false;\n    _scrollElement = null;\n    _didInit = false;\n    _debouncedScrollHandler = () => {\n      (0, _debounce.default)(this, () => {\n        const element = this._scrollElement;\n        if (!element) {\n          return;\n        }\n        const {\n          scrollTop,\n          scrollHeight,\n          clientHeight\n        } = element;\n        if (scrollHeight - scrollTop - clientHeight - SCROLL_BUFFER < 100 && !this.isFetching && this.hasMore) {\n          this.fetchMessages();\n        }\n      }, DEBOUNCE);\n    };\n    constructor() {\n      super(...arguments);\n      this.appEvents.on(\"discourse-ai:bot-pm-created\", this, this._handleNewBotPM);\n      this.appEvents.on(\"discourse-ai:conversations-sidebar-updated\", this, this._attachScrollListener);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.appEvents.off(\"discourse-ai:bot-pm-created\", this, this._handleNewBotPM);\n      this.appEvents.off(\"discourse-ai:conversations-sidebar-updated\", this, this._attachScrollListener);\n    }\n    addEmptyStateClass() {\n      document.body.classList.toggle(\"has-empty-ai-conversations-sidebar\", !this.topics.length);\n    }\n    forceCustomSidebar() {\n      document.body.classList.add(\"has-ai-conversations-sidebar\");\n      if (!this.sidebarState.isForcingSidebar) {\n        this.appEvents.trigger(\"discourse-ai:force-conversations-sidebar\");\n      }\n      this.sidebarState.isForcingSidebar = true;\n\n      // calling this before fetching data\n      // helps avoid flash of main sidebar mode\n      this.sidebarState.setPanel(AI_CONVERSATIONS_PANEL);\n      this.sidebarState.setSeparatedMode();\n      this.sidebarState.hideSwitchPanelButtons();\n\n      // don't render sidebar multiple times\n      if (this._didInit) {\n        this.addEmptyStateClass();\n        return true;\n      }\n      this._didInit = true;\n      this.fetchMessages().then(() => {\n        this.sidebarState.setPanel(AI_CONVERSATIONS_PANEL);\n        this.addEmptyStateClass();\n      });\n      return true;\n    }\n    _attachScrollListener() {\n      const sections = document.querySelector(\".sidebar-sections.ai-conversations-panel\");\n      this._scrollElement = sections;\n      if (this._hasScrollListener || !this._scrollElement) {\n        return;\n      }\n      sections.addEventListener(\"scroll\", this._debouncedScrollHandler);\n      this._hasScrollListener = true;\n    }\n    _removeScrollListener() {\n      if (this._hasScrollListener) {\n        this._scrollElement.removeEventListener(\"scroll\", this._debouncedScrollHandler);\n        this._hasScrollListener = false;\n        this._scrollElement = null;\n      }\n    }\n    stopForcingCustomSidebar() {\n      document.body.classList.remove(\"has-ai-conversations-sidebar\");\n      document.body.classList.remove(\"has-empty-ai-conversations-sidebar\");\n      const isAdmin = this.sidebarState.currentPanel?.key === _panels.ADMIN_PANEL;\n      if (this.sidebarState.isForcingSidebar && !isAdmin) {\n        this.sidebarState.setPanel(_panels.MAIN_PANEL);\n        this.sidebarState.isForcingSidebar = false;\n        this.appEvents.trigger(\"discourse-ai:stop-forcing-conversations-sidebar\");\n      }\n      this._removeScrollListener();\n    }\n    async fetchMessages() {\n      if (this.isFetching || !this.hasMore) {\n        return;\n      }\n      const isFirstPage = this.page === 0;\n      this.isFetching = true;\n      try {\n        let {\n          conversations,\n          meta\n        } = await (0, _ajax.ajax)(\"/discourse-ai/ai-bot/conversations.json\", {\n          data: {\n            page: this.page,\n            per_page: 40\n          }\n        });\n        if (isFirstPage) {\n          this.topics = conversations;\n        } else {\n          this.topics = [...this.topics, ...conversations];\n          // force rerender when fetching more messages\n          this.sidebarState.setPanel(AI_CONVERSATIONS_PANEL);\n        }\n        this.page += 1;\n        this.hasMore = meta.has_more;\n        this._rebuildSections();\n      } finally {\n        this.isFetching = false;\n        this.isLoading = false;\n      }\n    }\n    _handleNewBotPM(topic) {\n      this.topics = [topic, ...this.topics];\n      this._rebuildSections();\n      this._watchForTitleUpdate(topic.id);\n    }\n    _watchForTitleUpdate(topicId) {\n      if (this._subscribedTopicIds?.has(topicId)) {\n        return;\n      }\n      this._subscribedTopicIds = this._subscribedTopicIds || new Set();\n      this._subscribedTopicIds.add(topicId);\n      const channel = `/discourse-ai/ai-bot/topic/${topicId}`;\n      this.messageBus.subscribe(channel, payload => {\n        this._applyTitleUpdate(topicId, payload.title);\n        this.messageBus.unsubscribe(channel);\n      });\n    }\n    _applyTitleUpdate(topicId, newTitle) {\n      this.topics = this.topics.map(t => t.id === topicId ? {\n        ...t,\n        title: newTitle\n      } : t);\n      this._rebuildSections();\n    }\n\n    // organize by date and create a section for each date group\n    _rebuildSections() {\n      const now = Date.now();\n      const fresh = [];\n      const todaySection = {\n        name: \"today\",\n        title: (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversations.today\"),\n        links: new _trackedBuiltIns.TrackedArray()\n      };\n      fresh.push(todaySection);\n      this.topics.forEach(t => {\n        const postedAtMs = new Date(t.last_posted_at || now).valueOf();\n        const diffDays = Math.floor((now - postedAtMs) / 86400000);\n        let dateGroup;\n        if (diffDays <= 1) {\n          dateGroup = \"today\";\n        } else if (diffDays <= 7) {\n          dateGroup = \"last-7-days\";\n        } else if (diffDays <= 30) {\n          dateGroup = \"last-30-days\";\n        } else {\n          const d = new Date(postedAtMs);\n          const key = `${d.getFullYear()}-${d.getMonth()}`;\n          dateGroup = key;\n        }\n        let sec;\n        if (dateGroup === \"today\") {\n          sec = todaySection;\n        } else {\n          sec = fresh.find(s => s.name === dateGroup);\n        }\n        if (!sec) {\n          let title;\n          switch (dateGroup) {\n            case \"last-7-days\":\n              title = (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversations.last_7_days\");\n              break;\n            case \"last-30-days\":\n              title = (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversations.last_30_days\");\n              break;\n            default:\n              title = (0, _formatter.autoUpdatingRelativeAge)(new Date(t.last_posted_at));\n          }\n          sec = {\n            name: dateGroup,\n            title,\n            links: new _trackedBuiltIns.TrackedArray()\n          };\n          fresh.push(sec);\n        }\n        sec.links.push({\n          key: t.id,\n          route: \"topic.fromParamsNear\",\n          models: [t.slug, t.id, t.last_read_post_number || 0],\n          title: t.title,\n          text: t.title,\n          classNames: `ai-conversation-${t.id}`\n        });\n      });\n      this.sections = new _trackedBuiltIns.TrackedArray(fresh);\n\n      // register each new section once\n      for (let sec of fresh) {\n        if (this._registered.has(sec.name)) {\n          continue;\n        }\n        this._registered.add(sec.name);\n        this.api.addSidebarSection(BaseCustomSidebarSection => {\n          return class extends BaseCustomSidebarSection {\n            static #_ = (() => dt7948.g(this.prototype, \"manager\", [(0, _service.service)(\"ai-conversations-sidebar-manager\")]))();\n            #manager = (() => (dt7948.i(this, \"manager\"), void 0))();\n            static #_2 = (() => dt7948.g(this.prototype, \"events\", [(0, _service.service)(\"appEvents\")]))();\n            #events = (() => (dt7948.i(this, \"events\"), void 0))();\n            constructor() {\n              super(...arguments);\n              (0, _runloop.scheduleOnce)(\"afterRender\", this, this.triggerEvent);\n            }\n            triggerEvent() {\n              this.events.trigger(\"discourse-ai:conversations-sidebar-updated\");\n            }\n            get name() {\n              return sec.name;\n            }\n            get title() {\n              return sec.title;\n            }\n            get text() {\n              return (0, _template.htmlSafe)(sec.title);\n            }\n            get links() {\n              return this.manager.sections.find(s => s.name === sec.name)?.links || [];\n            }\n            get emptyStateComponent() {\n              if (!this.manager.isLoading && this.links.length === 0) {\n                return _aiBotSidebarEmptyState.default;\n              }\n            }\n          };\n        }, AI_CONVERSATIONS_PANEL);\n      }\n    }\n  }\n  _exports.default = AiConversationsSidebarManager;\n});","define(\"discourse/plugins/discourse-ai/discourse/services/discobot-discoveries\", [\"exports\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\"], function (_exports, _tracking, _object, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class DiscobotDiscoveries extends _service.default {\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))(); // We use this to retain state after search menu gets closed.\n    // Similar to discourse/discourse#25504\n    static #_2 = (() => dt7948.g(this.prototype, \"discovery\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #discovery = (() => (dt7948.i(this, \"discovery\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"lastQuery\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #lastQuery = (() => (dt7948.i(this, \"lastQuery\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"discoveryTimedOut\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #discoveryTimedOut = (() => (dt7948.i(this, \"discoveryTimedOut\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"modelUsed\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #modelUsed = (() => (dt7948.i(this, \"modelUsed\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"loadingDiscoveries\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loadingDiscoveries = (() => (dt7948.i(this, \"loadingDiscoveries\"), void 0))();\n    resetDiscovery() {\n      this.loadingDiscoveries = false;\n      this.discovery = \"\";\n      this.discoveryTimedOut = false;\n      this.modelUsed = \"\";\n    }\n    get showDiscoveryTitle() {\n      return this.discovery.length > 0 || this.loadingDiscoveries || this.discoveryTimedOut;\n    }\n    async disableDiscoveries() {\n      this.currentUser.user_option.ai_search_discoveries = false;\n      await this.currentUser.save([\"ai_search_discoveries\"]);\n      location.reload();\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"disableDiscoveries\", [_object.action]))();\n  }\n  _exports.default = DiscobotDiscoveries;\n});","define(\"discourse/plugins/discourse-ai/discourse/services/gists\", [\"exports\", \"@glimmer/tracking\", \"@ember/service\"], function (_exports, _tracking, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class Gists extends _service.default {\n    static #_ = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"preference\", [_tracking.tracked], function () {\n      return localStorage.getItem(\"topicListLayout\");\n    }))();\n    #preference = (() => (dt7948.i(this, \"preference\"), void 0))();\n    get shouldShow() {\n      return this.router.currentRoute.attributes?.list?.topics?.some(topic => topic.ai_topic_gist);\n    }\n    setPreference(value) {\n      this.preference = value;\n      localStorage.setItem(\"topicListLayout\", value);\n      if (this.preference === \"table-ai\") {\n        localStorage.setItem(\"aiPreferred\", true);\n      }\n    }\n  }\n  _exports.default = Gists;\n});","define(\"discourse/plugins/discourse-ai/discourse/services/image-caption-popup\", [\"exports\", \"@glimmer/tracking\", \"@ember/service\", \"discourse/lib/uploads\"], function (_exports, _tracking, _service, _uploads) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ImageCaptionPopup extends _service.default {\n    static #_ = (() => dt7948.g(this.prototype, \"composer\", [_service.service]))();\n    #composer = (() => (dt7948.i(this, \"composer\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"appEvents\", [_service.service]))();\n    #appEvents = (() => (dt7948.i(this, \"appEvents\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"showPopup\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showPopup = (() => (dt7948.i(this, \"showPopup\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"imageIndex\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #imageIndex = (() => (dt7948.i(this, \"imageIndex\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"imageSrc\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #imageSrc = (() => (dt7948.i(this, \"imageSrc\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"newCaption\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #newCaption = (() => (dt7948.i(this, \"newCaption\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"popupTrigger\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #popupTrigger = (() => (dt7948.i(this, \"popupTrigger\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"_request\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #_request = (() => (dt7948.i(this, \"_request\"), void 0))();\n    updateCaption() {\n      const matchingPlaceholder = this.composer.model.reply.match(_uploads.IMAGE_MARKDOWN_REGEX);\n      if (matchingPlaceholder) {\n        const match = matchingPlaceholder[this.imageIndex];\n        const replacement = match.replace(_uploads.IMAGE_MARKDOWN_REGEX, `![${this.newCaption}|$2$3$4]($5)`);\n        if (match) {\n          this.appEvents.trigger(\"composer:replace-text\", match, replacement);\n        }\n      }\n    }\n    toggleLoadingState(loading) {\n      if (loading) {\n        this.popupTrigger?.classList.add(\"disabled\");\n        return this.loading = true;\n      }\n      this.popupTrigger?.classList.remove(\"disabled\");\n      return this.loading = false;\n    }\n  }\n  _exports.default = ImageCaptionPopup;\n});","define(\"discourse/plugins/discourse-ai/discourse/services/quick-search\", [\"exports\", \"@glimmer/tracking\", \"@ember/service\"], function (_exports, _tracking, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class QuickSearch extends _service.default {\n    static #_ = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"invalidTerm\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #invalidTerm = (() => (dt7948.i(this, \"invalidTerm\"), void 0))();\n  }\n  _exports.default = QuickSearch;\n});","define(\"discourse/plugins/discourse-ai/discourse/templates/admin-dashboard-sentiment\", [\"exports\", \"@ember/routing\", \"ember-route-template\", \"discourse/helpers/d-icon\", \"discourse-i18n\", \"admin/components/admin-report\", \"admin/components/dashboard-period-selector\", \"float-kit/components/d-tooltip\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _routing, _emberRouteTemplate, _dIcon, _discourseI18n, _adminReport, _dashboardPeriodSelector, _dTooltip, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _emberRouteTemplate.default)((0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n      <div class=\"sentiment section\">\n        <div class=\"period-section\">\n          <div class=\"section-title\">\n            <h2 id=\"sentiment-heading\">\n              {{i18n \"discourse_ai.sentiments.dashboard.title\"}}\n            </h2>\n  \n            <DashboardPeriodSelector\n              @period={{@controller.period}}\n              @setPeriod={{@controller.setPeriod}}\n              @startDate={{@controller.startDate}}\n              @endDate={{@controller.endDate}}\n              @setCustomDateRange={{@controller.setCustomDateRange}}\n            />\n          </div>\n        </div>\n  \n        <div class=\"section-body\">\n          <div class=\"charts\">\n            <AdminReport\n              @dataSourceName=\"overall_sentiment\"\n              @filters={{@controller.filters}}\n              @showHeader={{true}}\n            />\n            <div class=\"admin-report activity-metrics\">\n              <div class=\"header\">\n                <ul class=\"breadcrumb\">\n                  <li class=\"item report\">\n                    <LinkTo @route=\"adminReports\" class=\"report-url\">\n                      {{i18n \"admin.dashboard.emotion.title\"}}\n                    </LinkTo>\n                    <DTooltip @interactive=\"true\">\n                      <:trigger>\n                        {{icon \"circle-question\"}}\n                      </:trigger>\n                      <:content>\n                        <span>{{i18n\n                            \"admin.dashboard.emotion.description\"\n                          }}</span>\n                      </:content>\n                    </DTooltip>\n                  </li>\n                </ul>\n              </div>\n              <div class=\"report-body\">\n                <div class=\"counters-list\">\n                  <div class=\"counters-header\">\n                    <div class=\"counters-cell\"></div>\n                    <div class=\"counters-cell\">{{i18n\n                        \"admin.dashboard.reports.today\"\n                      }}</div>\n                    <div class=\"counters-cell\">{{i18n\n                        \"admin.dashboard.reports.yesterday\"\n                      }}</div>\n                    <div class=\"counters-cell\">{{i18n\n                        \"admin.dashboard.reports.last_7_days\"\n                      }}</div>\n                    <div class=\"counters-cell\">{{i18n\n                        \"admin.dashboard.reports.last_30_days\"\n                      }}</div>\n                  </div>\n                  {{#each @controller.emotions as |metric|}}\n                    <AdminReport\n                      @showHeader={{false}}\n                      @filters={{@controller.emotionFilters}}\n                      @forcedModes=\"emotion\"\n                      @dataSourceName=\"emotion_{{metric}}\"\n                    />\n                  {{/each}}\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    \n  */\n  {\n    \"id\": \"20JiKdh5\",\n    \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"sentiment section\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"period-section\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"section-title\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"h2\\\"],[14,1,\\\"sentiment-heading\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,0],[\\\"discourse_ai.sentiments.dashboard.title\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[8,[32,1],null,[[\\\"@period\\\",\\\"@setPeriod\\\",\\\"@startDate\\\",\\\"@endDate\\\",\\\"@setCustomDateRange\\\"],[[30,1,[\\\"period\\\"]],[30,1,[\\\"setPeriod\\\"]],[30,1,[\\\"startDate\\\"]],[30,1,[\\\"endDate\\\"]],[30,1,[\\\"setCustomDateRange\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"section-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"charts\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,2],null,[[\\\"@dataSourceName\\\",\\\"@filters\\\",\\\"@showHeader\\\"],[\\\"overall_sentiment\\\",[30,1,[\\\"filters\\\"]],true]],null],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"admin-report activity-metrics\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"header\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"ul\\\"],[14,0,\\\"breadcrumb\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"li\\\"],[14,0,\\\"item report\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[32,3],[[24,0,\\\"report-url\\\"]],[[\\\"@route\\\"],[\\\"adminReports\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[1,[28,[32,0],[\\\"admin.dashboard.emotion.title\\\"],null]],[1,\\\"\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n                  \\\"],[8,[32,4],null,[[\\\"@interactive\\\"],[\\\"true\\\"]],[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n                      \\\"],[1,[28,[32,5],[\\\"circle-question\\\"],null]],[1,\\\"\\\\n                    \\\"]],[]],[[[1,\\\"\\\\n                      \\\"],[10,1],[12],[1,[28,[32,0],[\\\"admin.dashboard.emotion.description\\\"],null]],[13],[1,\\\"\\\\n                    \\\"]],[]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"report-body\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"counters-list\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"counters-header\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[1,[28,[32,0],[\\\"admin.dashboard.reports.today\\\"],null]],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[1,[28,[32,0],[\\\"admin.dashboard.reports.yesterday\\\"],null]],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[1,[28,[32,0],[\\\"admin.dashboard.reports.last_7_days\\\"],null]],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[1,[28,[32,0],[\\\"admin.dashboard.reports.last_30_days\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,1,[\\\"emotions\\\"]]],null]],null],null,[[[1,\\\"                  \\\"],[8,[32,2],null,[[\\\"@showHeader\\\",\\\"@filters\\\",\\\"@forcedModes\\\",\\\"@dataSourceName\\\"],[false,[30,1,[\\\"emotionFilters\\\"]],\\\"emotion\\\",[29,[\\\"emotion_\\\",[30,2]]]]],null],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@controller\\\",\\\"metric\\\"],false,[\\\"each\\\",\\\"-track-array\\\"]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/templates/admin-dashboard-sentiment.js\",\n    \"scope\": () => [_discourseI18n.i18n, _dashboardPeriodSelector.default, _adminReport.default, _routing.LinkTo, _dTooltip.default, _dIcon.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, undefined)));\n});","define(\"discourse/plugins/discourse-ai/discourse/templates/discourse-ai-bot-conversations\", [\"exports\", \"ember-route-template\", \"discourse/plugins/discourse-ai/discourse/components/ai-bot-conversations\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _emberRouteTemplate, _aiBotConversations, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _emberRouteTemplate.default)((0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    <AiBotConversations @controller={{@controller}} />\n  */\n  {\n    \"id\": \"a8WVTD3/\",\n    \"block\": \"[[[8,[32,0],null,[[\\\"@controller\\\"],[[30,1]]],null]],[\\\"@controller\\\"],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/templates/discourse-ai-bot-conversations.js\",\n    \"scope\": () => [_aiBotConversations.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, undefined)));\n});","define(\"discourse/plugins/discourse-ai/discourse/templates/preferences/ai\", [\"exports\", \"@ember/helper\", \"ember-route-template\", \"truth-helpers\", \"discourse/components/preference-checkbox\", \"discourse/components/save-controls\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _helper, _emberRouteTemplate, _truthHelpers, _preferenceCheckbox, _saveControls, _discourseI18n, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _emberRouteTemplate.default)((0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n      <div class=\"ai-user-preferences\">\n        <legend class=\"control-label\">{{i18n \"discourse_ai.title\"}}</legend>\n  \n        {{#each @controller.booleanSettings as |setting|}}\n          {{#if setting.isIncluded}}\n            <div class=\"control-group ai-setting\">\n              <PreferenceCheckbox\n                @labelKey={{setting.label}}\n                @checked={{get @controller.model.user_option setting.key}}\n                data-setting-name={{setting.settingName}}\n                class=\"pref-{{setting.settingName}}\"\n              />\n            </div>\n          {{/if}}\n        {{/each}}\n  \n        {{#if (eq @controller.userSettingAttributes.length 0)}}\n          {{i18n \"discourse_ai.user_preferences.empty\"}}\n        {{/if}}\n  \n        {{#unless (eq @controller.userSettingAttributes.length 0)}}\n          <SaveControls\n            @id=\"user_ai_preference_save\"\n            @model={{@controller.model}}\n            @action={{@controller.save}}\n            @saved={{@controller.saved}}\n          />\n        {{/unless}}\n      </div>\n    \n  */\n  {\n    \"id\": \"wxtqQ3zy\",\n    \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-user-preferences\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"legend\\\"],[14,0,\\\"control-label\\\"],[12],[1,[28,[32,0],[\\\"discourse_ai.title\\\"],null]],[13],[1,\\\"\\\\n\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,1,[\\\"booleanSettings\\\"]]],null]],null],null,[[[41,[30,2,[\\\"isIncluded\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"control-group ai-setting\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[32,1],[[16,\\\"data-setting-name\\\",[30,2,[\\\"settingName\\\"]]],[16,0,[29,[\\\"pref-\\\",[30,2,[\\\"settingName\\\"]]]]]],[[\\\"@labelKey\\\",\\\"@checked\\\"],[[30,2,[\\\"label\\\"]],[28,[32,2],[[30,1,[\\\"model\\\",\\\"user_option\\\"]],[30,2,[\\\"key\\\"]]],null]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[2]],null],[1,\\\"\\\\n\\\"],[41,[28,[32,3],[[30,1,[\\\"userSettingAttributes\\\",\\\"length\\\"]],0],null],[[[1,\\\"        \\\"],[1,[28,[32,0],[\\\"discourse_ai.user_preferences.empty\\\"],null]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[51,[28,[32,3],[[30,1,[\\\"userSettingAttributes\\\",\\\"length\\\"]],0],null]],[[[1,\\\"        \\\"],[8,[32,4],null,[[\\\"@id\\\",\\\"@model\\\",\\\"@action\\\",\\\"@saved\\\"],[\\\"user_ai_preference_save\\\",[30,1,[\\\"model\\\"]],[30,1,[\\\"save\\\"]],[30,1,[\\\"saved\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@controller\\\",\\\"setting\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\",\\\"unless\\\"]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/templates/preferences/ai.js\",\n    \"scope\": () => [_discourseI18n.i18n, _preferenceCheckbox.default, _helper.get, _truthHelpers.eq, _saveControls.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, undefined)));\n});","define(\"discourse/plugins/discourse-ai/lib/discourse-markdown/ai-tags\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.setup = setup;\n  function setup(helper) {\n    helper.allowList([\"details[class=ai-quote]\"]);\n    helper.allowList([\"div[class=ai-artifact]\", \"div[data-ai-artifact-id]\", \"div[data-ai-artifact-version]\", \"div[data-ai-artifact-autorun]\", \"div[data-ai-artifact-height]\", \"div[data-ai-artifact-width]\"]);\n  }\n});"],"mappings":"AAAAA,OAAA,oGAAAC,GACA;AAEAC,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACAJ,EAAAI,QAAA,CACAC,SAAA,0BACAC,KAAA,WACA,GAAAC,GACAC,KAAAC,MAAA,yBACAH,KAAA,eACA,WACAE,KAAAC,MAAA,OACAD,KAAAC,MAAA,QACAH,KAAA,aAEA,GACAE,KAAAC,MAAA,qBACAH,KAAA,WACA,WACAE,KAAAC,MAAA,OACAD,KAAAC,MAAA,QACAH,KAAA,aAEA,GACAE,KAAAC,MAAA,sBACAH,KAAA,YACA,WACAE,KAAAC,MAAA,OACAD,KAAAC,MAAA,QACAH,KAAA,aAEA,GACAE,KAAAC,MAAA,qBACAH,KAAA,YAEAE,KAAAC,MAAA,sBACAH,KAAA,aAEAE,KAAAC,MAAA,2BACAH,KAAA,iBACA,WACAE,KAAAC,MAAA,OACAD,KAAAC,MAAA,QACAH,KAAA,aAEA,GACAE,KAAAC,MAAA,yBACAH,KAAA,eACA,WACAE,KAAAC,MAAA,QACAH,KAAA,aAEA,EACA,E,GCxDAP,OAAA,6FAAAC,GACA;AAEAC,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACAJ,EAAAI,QAAA,CACAC,SAAA,kBACAC,KAAA,aACA,GAAAC,GACAC,KAAAC,MAAA,4BACAH,KAAA,uBACAI,gBAAA,GAEA,E,GCfAX,OAAA,sHAAAC,EAAAW,GACA;AAEAV,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAQ,UAAAD,EAAAP,QACAS,UAAA;AACA,QAAAC,GACA,oCACA,CACA,OAAAC,CAAAC,EAAAC,EAAAC,GAEA,IAAAZ,EAAAE,KAAAM,SAAAE,EAAAC,EAAAC,GAAAF,EAAAG,UAAAX,KAAAY,WAAAH;AACA,OAAAT,KAAAa,kBAAAf,EAAAY,EACA,CACA,UAAAE,GACA,oBACA,EAEApB,EAAAI,QAAAQ,C,GCrBAb,OAAA,oHAAAC,EAAAW,GACA;AAEAV,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAkB,UAAAX,EAAAP,QACAS,UAAA;AACA,QAAAC,GACA,oCACA,CACA,OAAAC,CAAAC,EAAAC,EAAAC,GAEA,IAAAZ,EAAAE,KAAAM,SAAAE,EAAAC,EAAAC,GAAAF,EAAAG,UAAAX,KAAAY,WAAAH;AACA,OAAAT,KAAAa,kBAAAf,EAAAY,EACA,CACA,UAAAE,GACA,kBACA,EAEApB,EAAAI,QAAAkB,C,GCrBAvB,OAAA,gHAAAC,EAAAW,GACA;AAEAV,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAQ,UAAAD,EAAAP,QACAS,UAAA;AACA,QAAAC,GACA,oCACA,CACA,OAAAC,CAAAC,EAAAC,EAAAC,GAEA,IAAAZ,EAAAE,KAAAM,SAAAE,EAAAC,EAAAC,GAAAF,EAAAG,UAAAX,KAAAY,WAAAH;AACA,OAAAT,KAAAa,kBAAAf,EAAAY,EACA,CACA,UAAAE,GACA,cACA,EAEApB,EAAAI,QAAAQ,C,GCrBAb,OAAA,oHAAAC,EAAAW,GACA;AAEAV,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAQ,UAAAD,EAAAP,QACAS,UAAA;AACA,QAAAC,GACA,oCACA,CACA,OAAAC,CAAAC,EAAAC,EAAAC,GAEA,IAAAZ,EAAAE,KAAAM,SAAAE,EAAAC,EAAAC,GAAAF,EAAAG,UAAAX,KAAAY,WAAAH;AACA,OAAAT,KAAAa,kBAAAf,EAAAY,EACA,CACA,UAAAE,GACA,kBACA,EAEApB,EAAAI,QAAAQ,C,GCrBAb,OAAA,iHAAAC,EAAAW,GACA;AAEAV,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAmB,UAAAZ,EAAAP,QACAS,UAAA;AACA,QAAAC,GACA,oCACA,CACA,OAAAC,CAAAC,EAAAC,EAAAC,GAEA,IAAAZ,EAAAE,KAAAM,SAAAE,EAAAC,EAAAC,GAAAF,EAAAG,UAAAX,KAAAY,WAAAH;AACA,OAAAT,KAAAa,kBAAAf,EAAAY,EACA,CACA,UAAAE,GACA,eACA,EAEApB,EAAAI,QAAAmB,C,GCrBAxB,OAAA,uIAAAC,EAAAwB,EAAAb,GACA;AAEAV,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAqB,UAAAd,EAAAP,QACA,gBAAAsB,GACA,OAAAlB,KAAAmB,cAAA,wMACA,CACA,gBAAAC,GACA,MAAAC,EAAArB,KAAAkB;AAEA,OADAG,EAAAC,GAAAtB,KAAAsB,GACAD,CACA,CACA,gBAAAE,GACA,eAAAP,EAAAQ,MAAA,uDACAC,KAAA,CACAC,aAAA1B,KAAAkB,qBAGA,CACA,WAAAS,GACA,MAAAN,EAAArB,KAAAkB;AACA,OAAAlB,KAAAQ,MAAAoB,aAAA,eAAAP,EACA,EAEA7B,EAAAI,QAAAqB,C,GC5BA1B,OAAA,gHAAAC,EAAAW,GACA;AAEAV,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAiC,UAAA1B,EAAAP,QACA,gBAAAsB,GACA,OAAAlB,KAAAmB,cAAA,0CACA,EAEA3B,EAAAI,QAAAiC,C,GCZAtC,OAAA,iIAAAC,EAAAwB,EAAAb,GACA;AAEAV,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAkC,UAAA3B,EAAAP,QACA,gBAAAsB,GACA,OAAAlB,KAAAmB,cAAA,+MACA,CACA,gBAAAC,GACA,MAAAC,EAAArB,KAAAkB;AAGA,OAFAG,EAAAC,GAAAtB,KAAAsB,GACAD,EAAAU,WAAA/B,KAAA+B,WACAV,CACA,CACA,gBAAAE,CAAAS,GACA,eAAAhB,EAAAQ,MAAA,iDACAC,KAAA,CACAQ,OAAAD,GAAAhC,KAAAkB,qBAGA,EAEA1B,EAAAI,QAAAkC,C,GCzBAvC,OAAA,qIAAAC,EAAAwB,EAAAb,GACA;AAEAV,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAsC,EAAA,4iBACAC,EAAA;AACA,MAAAC,UAAAjC,EAAAP,QACA,gBAAAyC,GACA,MAAAC,QAAA,EAAAtB,EAAAQ,MAAA,2CAAAxB,KAAAsB,sBAAA,CACAb,KAAA;AAIA,OAFAT,KAAAuC,KAAAD,EAAAC,KACAvC,KAAAwC,QAAAxC,KAAAuC,KAAAjB,GACAtB,KAAAuC,IACA,CACA,sBAAAE,CAAAhB,GACA,OAAAA,EAAAiB,OAAA,IAAA3C,IAAA4C,GACA,CAAAA,EAAAlB,EAAAmB,YAAAD,IAAA,GAAAlB,EAAAoB,YAAAC,SAAAH,IAEA,CAMA,aAAAI,CAAA1B,GACA,MAAAwB,EAAA,GACAD,EAAA,GACAI,EAAA3B,EAAAqB,OAAA3C,IAAAkD,IACA,oBAAAA,EACA,OAAAA;AACA,CACA,IAAAC,EAAAC,EAAAC,GAAAH;AACA,MAAAI,EAAA;AACA,UAAAC,KAAAH,EACAA,EAAAI,eAAAD,KAGAD,EAAAC,GAAAH,EAAAG;AAQA,OANA7D,OAAA+D,KAAAH,GAAAI,OAAA,IACAb,EAAAM,GAAAG,GAEAD,GACAP,EAAAa,KAAAR,GAEAA,CACA;AAEA7B,EAAAqB,MAAAM,EACA3B,EAAAwB,cACAxB,EAAAuB,aACA,CACA,gBAAAxB,GACA,MAAAC,EAAArB,KAAA2D,OAAA3D,KAAAmB,cAAAgB,GAAAnC,KAAAmB,cAAAe;AAEA,OADAb,EAAAC,GAAAtB,KAAAsB,GACAD,CACA,CACA,gBAAAH,GACA,OAAAlB,KAAAmB,cAAAe,EACA,CACA,QAAA0B,CAAAnC,GACA,MAAAoC,EAAAC,KAAAC,MAAAD,KAAAE,UAAAvC,IACAwC,EAAA7B,EAAA8B,OAAAL;AAEA,OADAI,EAAAvB,MAAA1C,KAAAyC,uBAAAoB,GACAI,CACA,CACA,MAAAE,GACA,MAAA9C,EAAArB,KAAAmB,cAAAe;AAKA,OAJAlC,KAAA+C,cAAA1B,GACAA,EAAA+C,kBAAApE,KAAAoE,oBAAA,EACA/C,EAAAgD,gBAAAhD,EAAAgD,iBAAA,GACAhD,EAAAiD,SAAAjD,EAAAiD,UAAA,GACAjD,CACA,EAEA7B,EAAAI,QAAAwC,C,GC/EA7C,OAAA,+IAAAC,EAAA+E,EAAApE,GACA;AAEAV,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAsC,EAAA;AACA,MAAAsC,UAAArE,EAAAP,QACA,gBAAAsB,GACA,OAAAlB,KAAAmB,cAAAe,EACA,CACA,gBAAAd,GACA,OAAApB,KAAAmB,cAAAe,EACA,CACA,eAAAuC,CAAAC,GACA,WAAAH,EAAAI,aAAAD,GAAA3E,IAAA6E,IACA,MAAAC,EAAA,IAAAN,EAAAO,cAAAF;AAMA,OALAC,EAAAE,MAAAF,EAAAE,KAAAtB,OACAoB,EAAAE,KAAA,IAAAR,EAAAI,aAAAE,EAAAE,MAEAF,EAAAE,KAAA,KAEAF,IAEA,CACA,WAAAlD,GACA,MAAAN,EAAArB,KAAAmB,cAAAe;AAEA,OADAb,EAAAqD,WAAA1E,KAAAyE,gBAAApD,EAAAqD,YACA1E,KAAAQ,MAAAoB,aAAA,UAAAP,EACA,EAEA7B,EAAAI,QAAA4E,C,GChCAjF,OAAA,yPAAAC,EAAAwF,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA0F,EAAAC,OAAAC,EAAA,cAAAR,EAAApF,QACA,aAAA6F,GACA,IAAAC,EAAAC,SAAAC,OAAA;AACA,OAAA5F,KAAA6F,WAAAH,EACA,CACA,iBAAAI,GACA,IAAAJ,EAAAC,SAAAI,SAAA,SAAAH,OAAA;AACA,OAAA5F,KAAA6F,WAAAH,EACA,CACA,qBAAAM,GACA,IAAAN,EAAAC,SAAAI,SAAA,UAAAH,OAAA;AACA,OAAA5F,KAAA6F,WAAAH,EACA,CACA,sBAAAO,GACA,IAAAP,EAAAC,SAAAI,SAAA,WAAAH,OAAA;AACA,OAAA5F,KAAA6F,WAAAH,EACA,CACA,WAAAQ,GACA,mCACA,CACA,MAAAC,GACA,oBAAAnG,KAAAoG,MAAA3F,IACA,CACA,UAAAoF,CAAAH,GACA,SAAAN,EAAAxF,SAAA,GAAAI,KAAAkG,gBAAAR,IAAA1F,KAAAmG,WACA,CACAE,SAAA,QAAArB,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBAkDA,CACAjF,GAAA,WACAkF,MAAA,+xDACAC,WAAA,kIACAC,MAAA,KAAAxB,EAAAtF,QAAAuF,EAAAvF,SACA+G,cAAA,IACA3G,MAxDA,IAyDA,IAAAiF,EAAA2B,mBAAA,8BAAA3B,EAAA4B,YAAA;AACArH,EAAAI,QAAA0F,C,GC3FA/F,OAAA,w7BAAAC,EAAAwF,EAAA8B,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAxC,EAAAyC,EAAA3G,EAAA4G,EAAAxC,EAAAyC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAnD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAyI,UAAArD,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAC,GAAA,MAAAlD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,iBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAC,GAAA,MAAArD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAE,GAAA,MAAAtD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAG,GAAA,MAAAvD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAI,GAAA,MAAAxD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,wBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAK,GAAA,MAAAzD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAM,GAAA,MAAA1D,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,YACA,GAFA;AAGAO,GAAA,MAAA3D,OAAAmD,EAAA1I,KAAA;AACAmJ,gBAAA,QAAA/B,EAAAgC,UAAAC,IACArJ,KAAAsJ,mBAAAD,GACAA,EAAAE,cAAA,wBAAAvJ,KAAAiJ,yBAAAO,UAAAC,IAAA,YAFA;AAIA,kBAAAH,CAAAD,GACA,MAAAK,EAAAL,EAAAM,iBAAA;AACA,QAAAC,KAAAF,EACAE,EAAAJ,UAAAK,OAAA,SAEA,CACA,qBAAAC,CAAArI,GACA,OAAAA,EAAAsI,aAAAtI,EAAAuI,eAAAvI,EAAAwI,eACA,CACA,gBAAAC,CAAAC,GACA,OAAAA,GACA,eACA,OACA7I,GAAA,WACA8I,MAAA,EAAAnC,EAAAoC,MAAA,oEACAC,KAAA;AAEA,cACA,OACAhJ,GAAA,UACA8I,MAAA,EAAAnC,EAAAoC,MAAA,mEACAC,KAAA;AAEA,eACA,OACAhJ,GAAA,WACA8I,MAAA,EAAAnC,EAAAoC,MAAA,oEACAC,KAAA,cAGA,CACA,gBAAAC,GACA,MACAC,EAAA;AACA,OAFAxK,KAAAyK,KAAArE,MAAA3E,KAAA,GAEAiJ,eAAA,EAAAzC,EAAAoC,MAAA,GAAAG,eAAA,EAAAvC,EAAAoC,MAAA,GAAAG,QACA,CACA,UAAAG,GACA,qCACA,CACA,sBAAAC,GACA,OAAA5K,KAAAyK,KAAArE,MAAAyE,kBAAAC,KAAAC,GAAA,aAAAA,EAAAzJ,IAAA1B,OACA,CACA,qBAAAoL,GACA,OAAAhL,KAAAyK,KAAArE,MAAAyE,kBAAAC,KAAAC,GAAA,YAAAA,EAAAzJ,IAAA1B,OACA,CACA,mBAAAqL,GACA,OAAAjL,KAAAyK,KAAArE,MAAA3E,KAAA1B,IAAA0B,IACA,CACAyJ,SAAAnD,EAAAnI,QAAAuL,SAAA1J,EAAA2J,aACAC,MAAA5J,EAAAiJ,eAAAjJ,EAAA6J,SACAC,OAAA,CAAA9J,EAAAuI,eAAAhK,KAAA8J,sBAAArI,KAAAwI,gBACAuB,UAAA,CACAC,SAAAhK,EAAAuI,eACA0B,QAAA1L,KAAA8J,sBAAArI,GACAkK,SAAAlK,EAAAwI,gBAEA2B,YAAAnK,EAAAsI,YACA8B,OAAA,CACAJ,SAAAhK,EAAAuI,eAAAvI,EAAAsI,YAAA,IACA2B,QAAA1L,KAAA8J,sBAAArI,KAAAsI,YAAA,IACA4B,SAAAlK,EAAAwI,eAAAxI,EAAAsI,YAAA,OAIA,CACA,iBAAA+B,GACA,OAAA9L,KAAA6I,OAAA7I,KAAA6I,MAAApF,OAGAzD,KAAA6I,MAAAkC,OAAAgB,IACAA,EAAAC,aAAA,EAAArE,EAAA/H,SAAAmM,EAAAC,aACAD,EAAAb,SAAAnD,EAAAnI,QAAAuL,SAAAY,EAAAX,aACA,QAAApL,KAAAiJ,cAGA8C,EAAA5B,YAAAnK,KAAAiJ,eARA,EAUA,CACA,eAAAgD,GACA,QACA3K,GAAA,MACA8I,KAAA,MAAAnC,EAAAoC,MAAA,mEAAArK,KAAA4I,cAAAgD,eACAtB,KAAA,iBACA4B,OAAA,KACAlM,KAAAiJ,aAAA,QAEA,CACA3H,GAAA,WACA8I,KAAA,MAAAnC,EAAAoC,MAAA,wEAAArK,KAAA4I,cAAA2C,OAAA,MACAjB,KAAA,aACA4B,OAAA,KACAlM,KAAAiJ,aAAA,aAEA,CACA3H,GAAA,UACA8I,KAAA,MAAAnC,EAAAoC,MAAA,uEAAArK,KAAA4I,cAAA2C,OAAA,MACAjB,KAAA,WACA4B,OAAA,KACAlM,KAAAiJ,aAAA,YAEA,CACA3H,GAAA,WACA8I,KAAA,MAAAnC,EAAAoC,MAAA,wEAAArK,KAAA4I,cAAA2C,OAAA,MACAjB,KAAA,aACA4B,OAAA,KACAlM,KAAAiJ,aAAA,aAGA,CACA,iBAAAkD,GACA,eAAAnL,EAAAQ,MAAA,iCACAC,KAAA,CACA2K,SAAApM,KAAA4K,mBACAyB,YAAArM,KAAA4I,eAAAyC,MACAiB,WAAAtM,KAAAyK,KAAArE,MAAAkG,WACAC,SAAAvM,KAAAyK,KAAArE,MAAAmG,SACAC,OAAAxM,KAAA+I,aAGA,CACA,iBAAA0D,GACA,MAAAC,EAAA1M,KAAAyI,OAAAkE,aAAAD;AACA,GAAAA,EAAA9D,cAAA,CAEA,GADA5I,KAAA4I,cAAA5I,KAAAiL,gBAAAH,KAAArJ,KAAA4J,QAAAqB,EAAA9D,gBACA5I,KAAA4I,cACA;AAEA5I,KAAAgJ,sBAAA;AACA,IACA,MAAA4D,QAAA5M,KAAAmM;AACAnM,KAAA6I,MAAA+D,EAAA/D,MAAA9I,IAAAgM,GAAA/D,EAAApI,QAAAsE,OAAA6H,IACA/L,KAAA8I,aAAA8D,EAAAC,SACA7M,KAAA+I,WAAA6D,EAAAE,WACA,OAAAC,IACA,EAAAnF,EAAAoF,gBAAAD,EACA,CACA,CACA,CACA1G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,eAAAtB,EAAAiF,SAAA;AACA,iBAAAgB,CAAAzL,GACA,GAAAzB,KAAA4I,gBAAAnH,EAEA;AAEA,MAAA0L,EAAAnN,KAAAyI,OAAAkE,aAAAD,YACAU,EAAAD,GAAAE,QAAAvJ,KAAAC,MAAAoJ,EAAAE,SAAA;AACArN,KAAAyI,OAAA6E,aAAAtN,KAAAyI,OAAAkE,aAAAY,KAAA,CACAb,YAAA,IACAS,EACAE,QAAAD,EACAxE,cAAAnH,EAAA4J,SAGArL,KAAA4I,cAAAnH,EACAzB,KAAAgJ,sBAAA;AACA,IACA,MAAA4D,QAAA5M,KAAAmM;AACAnM,KAAA6I,MAAA+D,EAAA/D,MAAA9I,IAAAgM,GAAA/D,EAAApI,QAAAsE,OAAA6H,IACA/L,KAAA8I,aAAA8D,EAAAC,SACA7M,KAAA+I,WAAA6D,EAAAE,WACA,OAAAC,IACA,EAAAnF,EAAAoF,gBAAAD,EACA,CACA,CACA1G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,eAAAtB,EAAAiF,SAAA;AACA,oBAAAsB,GACA,IAAAxN,KAAA8I,cAAA,OAAA9I,KAAA4I,cACA;AAEA,IACA,MAAAgE,QAAA5M,KAAAmM;AACAnM,KAAA8I,aAAA8D,EAAAC,SACA7M,KAAA+I,WAAA6D,EAAAE;AACA,MAAAW,EAAAb,EAAA/D,MAAA9I,IAAAgM,GAAA/D,EAAApI,QAAAsE,OAAA6H;AAEA,OADA/L,KAAA6I,MAAA6E,YAAAD,GACAA,CACA,OAAAV,IACA,EAAAnF,EAAAoF,gBAAAD,EACA,CACA,CACA1G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,eAAAyB,GACA3N,KAAAgJ,sBAAA,EACAhJ,KAAA4I,cAAA,KACA5I,KAAAiJ,aAAA,MACAjJ,KAAA6I,MAAA;AACA,MAAAsE,EAAAnN,KAAAyI,OAAAkE,aAAAD,YACAU,EAAAD,GAAAE,QAAAvJ,KAAAC,MAAAoJ,EAAAE,SAAA;AACArN,KAAAyI,OAAA6E,aAAAtN,KAAAyI,OAAAkE,aAAAY,KAAA,CACAb,YAAA,IACAS,EACAE,QAAAD,EACAxE,cAAA,OAGA,CACAvC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,UAAA0B,GACA,MAAAC,EAAA7N,KAAAyI,OAAAqF;AACAD,KAGA,EAAA/F,EAAAiG,gBAAA,EAAA3I,EAAA4I,gBAAAH,IACA7N,KAAAkJ,UAAA,SACA,EAAArB,EAAAjI,SAAA,KACAI,KAAAkJ,UAAA,QACA,KACA,CACA7C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,cAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAoIA,CACAjF,GAAA,WACAkF,MAAA,q+IACAC,WAAA,6IACAC,MAAA,KAAAQ,EAAAtH,QAAAqI,EAAAoC,KAAArD,EAAAiH,GAAAlH,EAAAmH,GAAAxG,EAAA9H,QAAAwI,EAAAxI,QAAAyH,EAAA8G,IAAA1G,EAAA7H,QAAA0H,EAAA1H,QAAAsI,EAAAtI,QAAAuI,EAAAvI,QAAA2H,EAAA3H,QAAA4H,EAAA5H,QAAAsF,EAAAtF,SACA+G,cAAA,IACA3G,MA1IA,GA4IAR,EAAAI,QAAAyI,C,GCvYA9I,OAAA,sWAAAC,EAAAwF,EAAA8B,EAAAG,EAAAC,EAAAC,EAAAiH,EAAA9G,EAAA+G,EAAAjJ,EAAAH,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AAKA,MAAA0O,UAAAtJ,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA6F,GAAA,MAAAjJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,mBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA8F,GAAA,MAAAlJ,OAAAmD,EAAA1I,KAAA;AACA,WAAA0O,GACAC,SAAAC,WACA5O,KAAA6O,eAAA7O,KAAA8O,cAAAC,KAAA/O,MACAA,KAAAgP,gBAAAhP,KAAAiP,eAAAF,KAAA/O,MACAkP,OAAAC,iBAAA,WAAAnP,KAAAgP,gBACA,CACA,WAAAI,GACAT,MAAAS,eAAAR,WACAM,OAAAG,oBAAA,UAAArP,KAAA6O,gBACAK,OAAAG,oBAAA,WAAArP,KAAAgP,gBACA,CACA,aAAAF,CAAAQ,GACA,WAAAA,EAAAC,KAAA,QAAAD,EAAAC,KACAC,QAAAC,MAEA,CACApJ,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,cAAA+C,CAAAK,GACA,MAAAI,EAAAJ,EAAAI;AACA1P,KAAAwO,SAAAkB,GAAAC,aAAA3P,KAAAyK,KAAAkF,WACA3P,KAAAwO,UACAU,OAAAG,oBAAA,UAAArP,KAAA6O,eAEA,CACAxI,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,qBAAA0D,GACA,GAAA5P,KAAAyO,gBACA;AAEA,cAAAzO,KAAAuO,aAAAsB,qBACA;AAEA,cAAA7P,KAAAuO,aAAAsB,qBAAA,CAEA,QADA,SAAA7P,KAAAyK,KAAAqF,UAAA,IAAA9P,KAAAyK,KAAAqF,SAAA,MAAA9P,KAAAyK,KAAAqF,QAEA,CACA,cAAA9P,KAAAuO,aAAAsB,oBACA,CACA,eAAAE,GACA,IAAAlC,GAAA,EAAAzI,EAAAxF,SAAA,kCAAAI,KAAAyK,KAAAkF;AAIA,OAHA3P,KAAAyK,KAAAuF,kBACAnC,EAAA,GAAAA,KAAA7N,KAAAyK,KAAAuF,mBAEAnC,CACA,CACA,YAAAoC,GACAjQ,KAAAyO,iBAAA,CACA,CACApI,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,gBAAAtB,EAAAiF,SAAA;AACA,UAAAgE,GACAlQ,KAAAwO,SAMAgB,QAAAC,QALAP,OAAAM,QAAAW,UAAA,CACAR,WAAA3P,KAAAyK,KAAAkF,YACA,GAAAT,OAAAkB,SAAAC,KAAA,wBACAnB,OAAAC,iBAAA,UAAAnP,KAAA6O,iBAIA7O,KAAAwO,UAAAxO,KAAAwO,QACA,CACAnI,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,cAAAtB,EAAAiF,SAAA;AACA,kBAAAoE,GACA,8BAAAtQ,KAAAwO,SAAA,8BAAAxO,KAAAuQ,SAAA,4BACA,CACA,iBAAAC,CAAAnH,GACArJ,KAAAyK,KAAAgG,gBACAhR,OAAAiR,QAAA1Q,KAAAyK,KAAAgG,gBAAAE,QAAAC,IACA,IAAArB,EAAA5P,GAAAiR;AACAvH,EAAAwH,aAAAtB,EAAA5P,IAGA,CACA0G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,qBAAAtB,EAAAiF,SAAA;AACA,eAAA4E,GACA,GAAA9Q,KAAAyK,KAAAsG,eAAA,CACA,IAAAC,EAAAC,SAAAjR,KAAAyK,KAAAsG,eAAA;AAOA,OANAG,MAAAF,OAAA,KACAA,EAAA,KAEAA,EAAA,MACAA,EAAA,MAEA,EAAA5C,EAAA+C,UAAA,WAAAH,OACA,CACA,CACA,YAAAT,GACA,eAAAvQ,KAAAyK,KAAA8F,WAAA,IAAAvQ,KAAAyK,KAAA8F,UAAA,MAAAvQ,KAAAyK,KAAA8F,QACA,CACA,cAAAa,GACA,OAAApR,KAAAuQ,WAAAvQ,KAAA4P,iBACA,CACAvJ,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAgDA,CACAjF,GAAA,WACAkF,MAAA,i9CACAC,WAAA,yHACAC,MAAA,KAAA2H,EAAAzO,QAAA0H,EAAA1H,QAAAsH,EAAAtH,SACA+G,cAAA,IACA3G,MAtDA,GAwDAR,EAAAI,QAAA0O,C,GCzKA/O,OAAA,8aAAAC,EAAAwF,EAAA8B,EAAAC,EAAAE,EAAAC,EAAAmK,EAAAC,EAAAC,EAAAC,EAAA3J,EAAA5C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA6R,EACApL,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA+I,GAAA,MAAAnM,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAgJ,GAAA,MAAApM,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAiJ,GAAA,MAAArM,OAAAmD,EAAA1I,KAAA;AACA,WAAA0O,GACA,IAAAjE,EAAAmE,UAAAnL,OAAA,QAAAoO,IAAAjD,UAAA,GAAAA,UAAA;AACA5O,KAAA0R,KAAAjH,EAAAiH,OAAA,EACA1R,KAAA2R,MAAAlH,EAAAkH,QAAA,CACA,EAGA,MAAAG,UAAA9M,EAAApF,QACAmS,OAAA,SAAAC,MAAAC,KAAA,CACAxO,OAHA,IAIA,QAAAgO,IAFA;AAGAS;AACAC;AACAC;AACA,cAAAC,GACArS,KAAA+R,OAAAO,YAAAZ,MAAA,EACA1R,KAAA+R,OAAAO,YAAAX,OAAA,CACA,CACAtL,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,UAAAqG,CAAA/L,GACAA,EAAAoL,WAGApL,EAAAkL,MAAA,EACA1R,MAAAkS,GAAA,EAAArK,EAAAjI,SAAAI,KAAA,KACAA,MAAAwS,EAAAhM,GAAAoL,UAAA,GACA,KACA5R,MAAAmS,GAAA,EAAAtK,EAAAjI,SAAAI,KAAA,KACAwG,EAAAoL,UAAA,GACA,KACA,CACAvL,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,cAAAtB,EAAAiF,SAAA;AACA,SAAAuG,CAAAjM,GACAA,EAAAkL,OAGA1R,MAAAoS,GAAA,EAAAvK,EAAAjI,SAAAI,KAAA,KACAA,MAAAwS,EAAAhM,GAAAkL,MAAA,EACA1R,MAAAwS,EAAAhM,GAAAmL,OAAA,EACA3R,KAAA+R,OAAAW,aAAAlM,IACAxG,KAAA+R,OAAAO,YAAAV,UAAA,IAEA,KACA,CACAvL,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,aAAAtB,EAAAiF,SAAA;AACA,iBAAAyG,IACA,EAAApB,EAAAqB,QAAA5S,MAAAoS,IACA,EAAAb,EAAAqB,QAAA5S,MAAAkS,IACA,EAAAX,EAAAqB,QAAA5S,MAAAmS,EACA,CACA9L,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,qBAAAtB,EAAAiF,SAAA;AACA,EAAAsG,CAAAK,GACA,OAAAA,IAAA7S,KAAA+R,OAAAW,WACA1S,KAAA+R,OAAAO,YAEAtS,KAAA+R,OAAAe,SAAA9S,KAAA+R,OAAAgB,QAAAF,GAAA,EAEA,CACAxM,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAoBA,CACAjF,GAAA,WACAkF,MAAA,8qBACAC,WAAA,mIACAC,MAAA,KAAAQ,EAAAtH,QAAA4R,EAAA5R,QAAAyR,EAAAzR,QAAAmH,EAAAmH,GAAAoD,EAAA1R,SACA+G,cAAA,IACA3G,MA1BA,GA4BAR,EAAAI,QAAAkS,C,GC1GAvS,OAAA,m1BAAAC,EAAAsH,EAAA9B,EAAA+B,EAAAC,EAAAC,EAAA+L,EAAA9L,EAAAqK,EAAApK,EAAA5C,EAAA0O,EAAA3L,EAAA4L,EAAAzL,EAAA0L,EAAAvL,EAAAwL,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA3L,EAAAG,EAAAyL,EAAArO,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA+T,UAAA3O,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,kCAAApB,EAAAqB,UAAA;AACAoL,GAAA,MAAArO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAApB,EAAAqB,UAAA;AACAqL,GAAA,MAAAtO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,2BAAApB,EAAAqB,UAAA;AACAsL,GAAA,MAAAvO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAApB,EAAAqB,UAAA;AACAuL,GAAA,MAAAxO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,WAAApE,EAAAI,YACA,GAFA;AAGAqP,GAAA,MAAAzO,OAAAmD,EAAA1I,KAAA;AAEAiU,SAAA;AACAC,WAAA;AACAC,YAAA;AACAC,aAAA9E,IACA,GAAA+E,SAAAC,gBAAAtU,KAAAiU,SACA;AAEA,MAAAM,UACAA,EAAAC,aACAA,EAAAC,MACAA,IACA,EAAA3M,EAAA4M,kBAAApF,EAAA,CACAf,aAAAvO,KAAAuO,aACAgG,WAAA;CAEAA,GAAAC,GAAAC,EAAA3R,SAAA,eAGAwM,KAAAqF,eAAArF,EAAAqF,cAAAC,OACA5U,KAAAkU,WAAAW,SAAA,IAAAvF,EAAAqF,cAAAC,OAAA,CACAE,QAAA;AAIA,IAAAC,GACApG,MAAAoG,QAAAnG,WACA5O,KAAAkU,WAAA,IAAAZ,EAAA1T,SAAA,EAAAoT,EAAAgC,UAAAhV,MAAA,CACAsB,GAAA,uBACAb,KAAA,sBACAwU,gCAAA,EACAC,UAAA,KACAlV,KAAAuO,aAAA4G,2CACAnV,KAAAkU,WAAAkB,YAAAC,gBAAA9B,EAAA3T,QAAA,CACA0V,WAAA,CAAA7T,EAAA8T,IAAAvV,KAAA8T,wBAAA0B,cAAA/T,EAAA8T,GACAE,aAAAzV,KAAA+T,KAAA2B,iBAGA1V,KAAAkU,WAAAkB,YAAAO,qBAAAC,IACA,MAAAC,EAAA7V,KAAA8V,mBAAAhL,KAAAiL,KAAAzU,KAAAsU,EAAAtU;AACAuU,MAAAG,aACAH,EAAAG,YAAA,KAGAhW,KAAAkU,WAAAkB,YAAAa,qBAAAL,IACA,MAAAC,EAAA7V,KAAA8V,mBAAAhL,KAAAiL,KAAAzU,KAAAsU,EAAAtU;AACAuU,IACAA,EAAAG,YAAA,KAGAhW,KAAAiU,UAAA9E,iBAAA,QAAAnP,KAAAoU,eAEA8B,WAAAC,IACAnW,KAAAgU,QAAAtQ,KAAAyS,IAGAC,yBAAA,KAEApW,KAAAqW,qBAAA,uBAGA,CACA,WAAAjH,GACAT,MAAAS,eAAAR,WACA5O,KAAAiU,UAAA5E,oBAAA,QAAArP,KAAAoU,cACApU,KAAAkU,YAAAoC,WAEAtW,KAAAiU,SAAAsC,cACAvW,KAAAiU,SAAAsC,aAAA,UAEA,CACA,WAAAC,GACA,OAAAxW,KAAA4T,gCAAA4C,OACA,CACA,qBAAAV,GACA,OAAA9V,KAAAkU,YAAA4B,mBAAA,EACA,CACA,wBAAAW,GACA,OAAAzW,KAAAgU,SAAAvQ,OAAA,GAAAzD,KAAA8V,mBAAArS,OAAA,CACA,CACA,YAAAiT,CAAApV,GACAtB,KAAA4T,+BAAA+C,UAAArV,CACA,CACA+E,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,gBAAAtB,EAAAiF,SAAA;AACA,kBAAA0K,CAAAC,GACA7W,KAAA4T,+BAAAkD,eAAAD,CACA,CACAxQ,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,sBAAAtB,EAAAiF,SAAA;AACA,gBAAA6K,CAAApX,GACAK,KAAAgX,sBACAhX,KAAA4T,+BAAAqD,WAAAtX,EAAAuX,QAAAvX,QACA,CACA0G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,oBAAAtB,EAAAiF,SAAA;AACA,aAAAiL,CAAA7H,GACA,aAAAA,EAAA4H,OAAAE,UAGA,UAAA9H,EAAAC,KAAAD,EAAA+H,UACArX,KAAAsX,wBAEA,CACAjR,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,WAAAqL,CAAAlO,GACArJ,KAAAiU,SAAA5K,EACArJ,KAAAwX,kBAAAnO,IACA,EAAAkI,EAAAkG,cAAA,cAAAzX,UAAA0X,cACA,CACArR,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,eAAAtB,EAAAiF,SAAA;AACA,aAAAwL,GACA1X,KAAAiU,UAAA0D,OACA,CACAtR,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,iBAAAsL,CAAAvD,GACA,MAAA2D,GAAA,EAAA3E,EAAArT,SAAAqU;AACAjU,KAAA6X,sBAAAD,GACA5X,KAAA8X,yBAAAF,EACA,CACAvR,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,qBAAAtB,EAAAiF,SAAA;AACA,qBAAA2L,CAAAD,GACA5X,KAAAuO,aAAAwJ,iBAGAH,EAAArB,aAAA,CACAyB,SAAA5E,EAAAxT,QACAqY,WAAAC,KACA,EAAAzE,EAAA0E,wBACA,EAAA3E,EAAA5T,SAAA,CACAsY,OACAE,eAAA,IACAC,KAAA/V,KACA,EAAAmR,EAAA6E,qBAAA,EAAAtF,EAAAgC,UAAAhV,MAAAsC,EAAAiW,OACAjW,KAGAkW,SAAArV,IAAA,EAAAsQ,EAAAgF,sBAAAtV,GACAoM,IAAA,IACAmJ,MAAA,OACAC,iBAAA,EACAC,2BAAA,EACAC,kBAAAC,KAAAjC,UAAAiC,EAAAvL,KACAwL,cAAA3O,IACApK,KAAAiU,SAAAtU,MAAAyK,EACApK,KAAA0X,gBACA1X,KAAA+W,iBAAA,CACAG,OAAA,CACAvX,MAAAyK,MAIA4O,QAAAvF,EAAA0E,qBAEA,CACA9R,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,yBAAAtB,EAAAiF,SAAA;AACA,wBAAA4L,CAAAF,GAGA,MAAAqB,EAAAjZ,KAAA+T,KAAAmF,uBAAA,mBACA,EAAA7F,EAAA8F,0BAAAF,EAAArB,EAAA5X,KAAAuO,aAAA,CACAoK,iBAAA,EACAI,cAAA3O,IACApK,KAAAiU,SAAAtU,MAAAyK,EACApK,KAAA0X,gBACA1X,KAAA+W,iBAAA,CACAG,OAAA,CACAvX,MAAAyK,OAKA,CACA/D,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,4BAAAtB,EAAAiF,SAAA;AACA,iBAAAkN,CAAA/P,GACAA,IACArJ,KAAAmU,YAAA9K,EACArJ,KAAAkU,YACAlU,KAAAkU,WAAAmF,MAAAhQ,GAGA,CACAhD,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,qBAAAtB,EAAAiF,SAAA;AACA,cAAAoN,GACAtZ,KAAAmU,aACAnU,KAAAmU,YAAAoF,OAEA,CACAlT,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,YAAAsN,CAAArD,GACAnW,KAAAgU,QAAA,IAAAzP,EAAAI,aAAA3E,KAAAgU,QAAAjJ,OAAA0O,OAAAtD,GACA,CACA9P,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,gBAAAtB,EAAAiF,SAAA;AACA,YAAAwN,CAAAvD,GACAnW,KAAAkU,WAAAyF,mBAAA,CACAC,OAAAzD,EAAA7U,IAEA,CACA+E,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,gBAAAtB,EAAAiF,SAAA;AACA,2BAAAoL,GACA,UACAtX,KAAA4T,+BAAAiG,YAAA,CACA7F,QAAAhU,KAAAgU,QACA8F,uBAAA9Z,KAAA8V,kBAAArS,SAEAzD,KAAAgU,QAAA,IAAAzP,EAAAI,YACA,OAAAoV,IACA,EAAAnS,EAAAoF,gBAAA+M,EACA,CACA,CACA1T,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,yBAAAtB,EAAAiF,SAAA;AACA,mBAAA8K,GACAhX,KAAAiU,SAAA+F,MAAAhJ,OAAA,OACAhR,KAAAiU,SAAA+F,MAAAhJ,OAAAhR,KAAAiU,SAAAgG,aAAA;AAEA,MAAAC,EAAAjJ,SAAAkJ,iBAAAna,KAAAiU,UAAAiG,UAAA;AAEAla,KAAAiU,SAAAgG,aAAAC,EACAla,KAAAiU,SAAA+F,MAAAI,UAAA,OAEApa,KAAAiU,SAAA+F,MAAAI,UAAA,QAEA,CACA/T,SAAA,QAAArB,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBAiGA,CACAjF,GAAA,WACAkF,MAAA,mgHACAC,WAAA,kIACAC,MAAA,KAAAe,EAAA7H,QAAA8T,EAAA9T,QAAAqI,EAAAoC,KAAA6I,EAAAtT,QAAAuT,EAAAvT,QAAA0H,EAAA1H,QAAAsH,EAAAtH,QAAAoH,EAAAiH,GAAAlH,EAAAmH,IACAvH,cAAA,IACA3G,MAvGA,GAyGAR,EAAAI,QAAA+T,C,GC3VApU,OAAA,ieAAAC,EAAAwF,EAAAiC,EAAAE,EAAAG,EAAA4L,EAAAC,EAAArL,EAAAG,EAAAoS,EAAAC,EAAArV,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA2a,UAAAvV,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAApB,EAAAqB,UAAA;AACAgS,GAAA,MAAAjV,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAApB,EAAAqB,UAAA;AACAiS,GAAA,MAAAlV,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAApB,EAAAqB,UAAA;AACAqL,GAAA,MAAAtO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,kBAAApB,EAAAqB,UAAA;AACAkS,GAAA,MAAAnV,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAC,GAAA,MAAAlD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACAmS,GAAA,MAAApV,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACA,QAAA4a,GACA,MAAAC,EAAA7a,KAAA6T,YAAAiH,qBAAA/P,OAAAgQ,MAAAC,YAAAD,EAAAE,iBAAAlQ,OAAAmQ;AACA,OAAAL,IAAA9a,IAAAgb,KAAAI,YAAA,EACA,CACA,oBAAAC,GACA,OAAApb,KAAA4a,KAAAnX,OAAA,GAAAzD,KAAAuO,aAAA8M,oBACA,CACA,QAAA/Q,GACA,OAAAtK,KAAAsb,mCACA,UAEA,OACA,CACA,sCAAAA,GACA,OAAAtb,KAAA0a,eAAAa,sBAAAvb,KAAAuO,aAAAiN,4BAAAxb,KAAA2a,aAAAc,cAAAlM,MAAA+K,EAAAoB,sBACA,CACA,OAAAC,GACA,OAAA3b,KAAAsb,mCACAtb,KAAAyI,OAAA6E,aAAA,gBAAAxF,EAAA8T,sBAEA5b,KAAAuO,aAAAiN,4BACAxb,KAAAwa,UAAAqB,QAAA,wCACA7b,KAAAyI,OAAA6E,aAAA,wCAEA,EAAA+M,EAAAyB,qBAAA9b,KAAA4a,KAAA,GAAA5a,KAAAya,SACA,CACApU,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,WAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAoBA,CACAjF,GAAA,WACAkF,MAAA,miBACAC,WAAA,gIACAC,MAAA,KAAAwM,EAAAtT,QAAAuT,EAAAvT,QAAA0H,EAAA1H,QAAAqI,EAAAoC,MACA1D,cAAA,IACA3G,MA1BA,GA4BAR,EAAAI,QAAA2a,C,GC7EAhb,OAAA,qMAAAC,EAAAyI,EAAAjD,EAAAK,EAAA0W,GACA;AAEAtc,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACAJ,EAAAI,SAAA,EAAAoF,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBAQA,CACAjF,GAAA,WACAkF,MAAA,kLACAC,WAAA,wIACAC,MAAA,KAAAuB,EAAAoC,MACA1D,cAAA,KACA,EAAAoV,EAAAnc,cAAAiS,EAAA,8B,GCrBAtS,OAAA,mUAAAC,EAAAwF,EAAAiC,EAAAE,EAAAG,EAAAgT,EAAArV,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AAEA,MAAAoc,UAAAhX,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAApB,EAAAqB,UAAA;AACAgS,GAAA,MAAAjV,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAC,GAAA,MAAAlD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACAmS,GAAA,MAAApV,OAAAmD,EAAA1I,KAAA;AACA,gBAAAic,GACA,OAAAjc,KAAA2a,aAAAuB,eAAA5B,EAAAoB,uBACA,CACA,aAAAhE,GACArD,SAAA8H,eAZA,+BAYAxE,OACA,CACAtR,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,OAAAkQ,GACApc,KAAAwa,UAAAqB,QAAA,6CACA,mCAAA7b,KAAAyI,OAAA4T,iBACArc,KAAAyI,OAAA6E,aAAA,sCAEAtN,KAAA0X,gBAEA1X,KAAAyK,KAAA6R,YAAAC,wBACA,CACAlW,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,WAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAeA,CACAjF,GAAA,WACAkF,MAAA,sWACAC,WAAA,6IACAC,MAAA,KAAAY,EAAA1H,SACA+G,cAAA,IACA3G,MArBA,GAuBAR,EAAAI,QAAAoc,C,GCvDAzc,OAAA,giBAAAC,EAAAwF,EAAA8B,EAAAG,EAAA+L,EAAA7L,EAAAc,EAAAuU,EAAAC,EAAAC,EAAAC,EAAAC,EAAA3X,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAid,UAAA7X,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAApB,EAAAqB,UAAA;AACAsU,GAAA,MAAAvX,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAApB,EAAAqB,UAAA;AACAqL,GAAA,MAAAtO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAApB,EAAAqB,UAAA;AACAuL,GAAA,MAAAxO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,mBAAAzB,EAAA6B,UAAA;AACAoU,GAAA,MAAAxX,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAAzB,EAAA6B,UAAA;AACAqU,GAAA,MAAAzX,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,qBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAsU,GAAA,MAAA1X,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,kBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAuU,GAAA,MAAA3X,OAAAmD,EAAA1I,KAAA;AACAmd,QAAA;AACAC,YAAA;AACA,WAAA1O,GACAC,SAAAC,WACA,IAAA5O,KAAAyK,KAAAhJ,KAAA4b,aAAAC,UAAA7Z,SACAzD,KAAAkd,gBAAA,EAEA,CACA,iBAAAK,GACA,IAAAJ,EAAAnd,KAAA6T,aAAA2J;AACAL,IAAApS,OAAAnG,KAAAwL,SAAAtN,SAAA,aAAAiI,OAAAnG,GAAA,oBAAAA,EAAA2I,MAAAxN,IAAA6E,IAIA,MAAA6Y,EAAAzd,KAAAuO,aAAAmP,eAEAC,EADA3d,KAAAuO,aAAAqP,kBACA9S,KAAA+S,KAAAle,QAAA8d,GACAK,GAAA,EAAA7V,EAAAoC,MAAA,wDACA0T,SAAAJ,EAAApQ;AAEA,oBAAA3I,EAAA2I,KACA,IACA3I,EACAoZ,gBAAAF,GAGAlZ;AAGA,MAAAqZ,EAAAd,EAAAe,UAAAtZ,GAAA,kBAAAA,EAAA2I;AACA,QAAA0Q,EAAA,CACA,MAAAE,EAAAhB,EAAAiB,OAAAH,EAAA;AACAd,EAAAkB,QAAAF,EACA,CAWA,OAVAne,KAAA6T,aAAAyK,yBACAnB,IAAApS,OAAAnG,GAAA,kBAAAA,EAAA2I,OAEA4P,EAAAxM,QAAA/L,IACA5E,KAAAmd,QAAAvY,EAAA2I,MAAA3I,IAEA5E,KAAAod,YAAAD,EAAAoB,OAAA,CAAAC,EAAA5Z,KACA4Z,EAAA5Z,EAAA2I,MAAA3I,EAAA6Z,YACAD,GACA,IACArB,CACA,CACA,SAAAuB,GACA,MAAAC,GAAA,EAAA3L,EAAAgC,UAAAhV,MACAmD,EAAA,CACAyb,MAAA,IAAA5e,KAAAyK,KAAAmU,QACAC,SAAA,QACApd,KAAA,CACAqd,MAAA,QACAxU,KAAA,uBACAyU,SAAA,EAAA9W,EAAAoC,MAAA;AAYA,WATA,cAAAoS,EAAA7c,QACA,WAAA8O,GACAC,MAAAgQ,EAAAxb,EACA,CACA,KAAAyb,GACA5e,KAAAmD,QAAAyb,OACA,CACAvY,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,SAAAtB,EAAAiF,SAAA,IAEAyS,EAAAxb,EACA,CACA,oBAAA6b,CAAAC,GAEA,SADAjf,KAAAyK,KAAAmU,QACA,oBAAAK,EAAA1R,KACA,OAAAvN,KAAA8c,MAAApL,KAAAkL,EAAAhd,QAAA,CACAwG,MAAA,CACA8Y,KAAAD,EAAA1R,KACA4R,aAAAnf,KAAAyK,KAAAhJ,KAAA0d,aACAC,WAAApf,KAAAqf;AAIA,MAAAC,EAAA,SAAAL,EAAAR,aAAA,mBAAAQ,EAAA1R;AACA,OAAAvN,KAAA8c,MAAApL,KAAAiL,EAAA/c,QAAA,CACAwG,MAAA,CACA8Y,KAAAD,EAAA1R,KACA4R,aAAAnf,KAAAyK,KAAAhJ,KAAA0d,aACAI,OAAAvf,KAAAwf,aACAnC,aAAArd,KAAAyK,KAAAhJ,KAAA4b,aACAJ,kBAAAjd,KAAAid,kBACAqC,qBAGA,CACAjZ,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,SAAAuT,GACAzf,KAAAid,kBAAA,GACAjd,KAAAyK,KAAAmU,OACA,CACAvY,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,aAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAuBA,CACAjF,GAAA,WACAkF,MAAA,kqBACAC,WAAA,qIACAC,MAAA,KAAA8V,EAAA5c,QAAA8c,EAAA9c,SACA+G,cAAA,IACA3G,MA7BA,GA+BAR,EAAAI,QAAAid,C,GC5JAtd,OAAA,2RAAAC,EAAAwF,EAAA8B,EAAA9F,EAAAiH,EAAAyX,EAAAC,EAAA1a,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAggB,UAAA5a,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,qBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAkX,GAAA,MAAAta,OAAAmD,EAAA1I,KAAA;AACA,WAAA0O,GACAC,SAAAC,WACA5O,MAAA8f,IACA,CACA,QAAAA,GACA,MAAAC,cACAA,SACA,EAAA/e,EAAAQ,MAAA,oCACAC,KAAA,CACAue,OAAA,eACA9U,SAAA,kBAGA2U,EAAAE,EAAAjV,KAAAmV,GAAA,yBAAAA;AACAjgB,KAAA6f,kBAAAF,EAAA/f,QAAAsE,OAAA2b,EACA,CACAxZ,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAkBA,CACAjF,GAAA,WACAkF,MAAA,ukBACAC,WAAA,qIACAC,MAAA,KAAAuB,EAAAoC,KAAAqV,EAAA9f,SACA+G,cAAA,IACA3G,MAxBA,GA0BAR,EAAAI,QAAAggB,C,GCtDArgB,OAAA,+jBAAAC,EAAAwF,EAAA8B,EAAAC,EAAAE,EAAAsK,EAAApK,EAAAE,EAAA6Y,EAAAC,EAAA7Y,EAAA8Y,EAAAlb,EAAA0C,EAAAK,EAAAoY,EAAAC,EAAArb,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA2gB,UAAAvb,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAgY,IAAA,MAAAjb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAC,GAAA,MAAAlD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAiY,IAAA,MAAAlb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAApB,EAAAqB,UAAA;AACAhI,IAAA,MAAA+E,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA+X,IAAA,MAAAnb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,kBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAgY,IAAA,MAAApb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAiY,IAAA,MAAArb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAkY,IAAA,MAAAtb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAmY,IAAA,MAAAvb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,mBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAoY,IAAA,MAAAxb,OAAAmD,EAAA1I,KAAA;AACA,WAAA0O,GACAC,SAAAC,WACA5O,KAAAyK,KAAArE,QACApG,KAAA+gB,gBAAA/gB,KAAAyK,KAAArE,MAAA4a,SAEA,CACA,YAAAC,GACA,IAAAxf;AAEAA,EADAzB,KAAA2gB,eACA3gB,KAAAQ,MAAAoB,aAAA,eAAA5B,KAAA2gB,gBAAAhf,cAEA3B,KAAAyK,KAAArE,MAAAzE;AAEA,MAAAuf,EAAApd,KAAAC,MAAAD,KAAAE,UAAAvC;AAEA,OADAzB,KAAAmhB,kBAAAD,EACAA,CACA,CACA7a,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,YAAAzB,EAAAsa,SAAA;AACA,qBAAAC,GAIA,OAAArhB,KAAAyK,KAAA6W,WAAAC,cAAAC,UAAAzhB,IAAA0hB,IACA,OACAngB,GAAAmgB,EACAlU,MANAmU,EAMAD,GALA,EAAAxZ,EAAAoC,MAAA,qCAAAqX;AADAA,OASA,CACA,qBAAAC,GACA,MAAAC,EAAAC,IACA,EAAA5Z,EAAAoC,MAAA,8CAAAwX;AAEA,OAAA7hB,KAAAyK,KAAA6W,WAAAC,cAAAO,mBAAA/hB,IAAA8hB,IACA,CACAvgB,GAAAugB,EACAtU,KAAAqU,EAAAC,KAGA,CACA,WAAAE,GACA,MAAAA,EAAA/hB,KAAAyK,KAAA6W,WAAAC,cAAAQ,QAAAhiB,IAAAiiB,IACA,CACAzU,KAAAyU,EAAAC,aACA3gB,GAAA0gB,EAAAE,UACAlB,SAAAgB,EAAAhB;AAQA,OALAe,EAAAI,cAAA,CACA5U,MAAA,EAAAtF,EAAAoC,MAAA,8CACA/I,GAAA,SACA0f,SAAA,SAEAe,CACA,CACA,eAAAK,GACA,OAAApiB,KAAA2gB,gBAAA3gB,KAAAyK,KAAArE,MAAAic,KACA,CACA,sBAAAC,GACA,MAAAtB,EAAAhhB,KAAA+gB;AACA,IAAAC,EACA;AAKA,SAHAhhB,KAAAyK,KAAA6W,YAAA,IACAC,eAAA,IACAgB,iBAAA,IACAvB,IAAA,EACA,CACA,oBAAAwB,GACA,SAAAva,EAAAoC,MAAA,mCACA0P,MAAA/Z,KAAA8gB,WAEA,CACA,qBAAA2B,GACA,OAAAziB,KAAA4gB,aAAA,OAAA5gB,KAAA6gB,UACA,CACA,UAAA6B,GACA,OAAA1iB,KAAAyK,KAAArE,MAAA9E,GAAA,CACA,CACA,eAAAqhB,CAAAX,GACAhiB,KAAA2gB,eAAA3gB,KAAAyK,KAAA6W,WAAAC,cAAAQ,QAAAa,OAAA,YAAAZ,EAAA1gB,KAAA,GACAtB,KAAA2gB,eAAAK,WACAhhB,KAAA+gB,gBAAA/gB,KAAA2gB,eAAAK,SAEA,CACA3a,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,WAAA2W,CAAA7B,EAAApQ,GACA,IAAAkS,IACAA,GACAlS;AACAkS,EAAA,WAAA9B,GACAhhB,KAAA+gB,gBAAAC;AACA,MACA+B,GADA/iB,KAAAyK,KAAA6W,YAAAC,eAAAgB,iBAAA,IACAvB,IAAA,GACAgC,EAAA;AACA,GAAAD,EAAA,CACAtjB,OAAA+D,KAAAuf,GACApS,QAAApB,IACAyT,EAAAzT,GAAA,MAEA,CACAuT,EAAA,kBAAAE,EACA,CACA3c,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,eAAAtB,EAAAiF,SAAA;AACA,kBAAA+W,GAqBA,OAAAxjB,OAAAiR,QAAA1Q,KAAAsiB,oBAAA/D,OAAA,CAAA2E,EAAAC,KACA,IAAAC,EAAAzjB,GAAAwjB;AAEA,OADAD,EAAAE,GAtBAzjB,IACAA,EAKA,iBAAAA,EACA,CACAc,KAAAd,GAGA,CACAc,KAAAd,EAAAc,MAAA,OACA4iB,QAAA1jB,EAAA0jB,QAAA,IAAAtjB,IAAAujB,IAAA,CACAhiB,GAAAgiB,EACA/V,KAAA+V,KAEA1jB,QAAAD,EAAAC,SAfA,CACAa,KAAA,QAmBA8iB,CAAA5jB,GACAujB,GACA,GACA,CACA,SAAAM,GACAxjB,KAAA2gB,eAAA,KACA3gB,KAAA+gB,gBAAA,IACA,CACA1a,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,aAAAtB,EAAAiF,SAAA;AACA,UAAAuX,CAAAxC,GACAjhB,KAAA0gB,UAAA;AACA,MAAA2B,EAAAriB,KAAAyK,KAAArE,MAAAic;AACA,IACA,MAAAqB,EAAA,IACAzC;AAEA,GAAAjhB,KAAA2gB,eAAA,CAEA,MAAAgD,EAAA3jB,KAAAQ,MAAAoB,aAAA,mBACA5B,KAAA2gB,kBACA+C;MAEAC,EAAAF,OACAzjB,KAAAyK,KAAA6W,WAAAsC,UAAAD,EACA,YAEA3jB,KAAAyK,KAAArE,MAAAqd,KAAAC;AAEA,GAAArB,EACAriB,KAAAyI,OAAA6E,aAAA;IACA,CACA,MAAAuW,EAAA7jB,KAAA+gB;AACA/gB,KAAAmhB,kBAAArd,KAAAC,MAAAD,KAAAE,UAAA0f,IACA1jB,KAAA+gB,gBAAA8C,EACA7jB,KAAAwgB,OAAAsD,QAAA,CACAriB,KAAA,CACAsd,SAAA,EAAA9W,EAAAoC,MAAA,kCAEAwU,SAAA,SAEA,CACA,OAAA9R,IACA,EAAAnF,EAAAoF,gBAAAD,EACA,UACA,EAAAwE,EAAAwS,OAAA,KACA/jB,KAAA0gB,UAAA,GACA,IACA,CACA,CACAra,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,QAAAtB,EAAAiF,SAAA;AACA,UAAA8X,CAAAviB,GACAzB,KAAA4gB,aAAA;AACA,IACA,IAAAqD;AAGAA,EADAjkB,KAAAyK,KAAArE,MAAAic,OAAAriB,KAAA2gB,eACA3gB,KAAAQ,MAAAoB,aAAA,mBACA5B,KAAA2gB,kBACAlf,IAIAzB,KAAAyK,KAAArE;AAEA,MAAA8d,QAAAD,EAAA1iB,WAAAE;AACAzB,KAAA6gB,WAAAqD,EAAAJ,QACA9jB,KAAA6gB,WACA7gB,KAAA8gB,UAAA,KAEA9gB,KAAA8gB,UAAAoD,EAAAnK,KAEA,OAAAhN,IACA,EAAAnF,EAAAoF,gBAAAD,EACA,UACA,EAAAwE,EAAAwS,OAAA,KACA/jB,KAAA4gB,aAAA,GACA,IACA,CACA,CACAva,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,QAAAtB,EAAAiF,SAAA;AACA,SACA,OAAAlM,KAAAygB,OAAA0D,QAAA,CACApF,SAAA,EAAA9W,EAAAoC,MAAA,0CACA+Z,WAAA,IACApkB,KAAAyK,KAAArE,MAAAie,gBAAAhM,KAAA,KACArY,KAAAyK,KAAA6W,WAAAgD,aAAAtkB,KAAAyK,KAAArE,OACApG,KAAAyI,OAAA6E,aAAA,qDACAiX,MAAA3c,EAAAoF,iBAGA,CACA3G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,UAAAtB,EAAAiF,SAAA;AACA,YAAAsY,CAAAvB,GACA,OAAAA,EAAAxjB,OAAA+D,KAAAyf,GAAA,EACA,CACA5c,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,gBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBA+RA,CACAjF,GAAA,WACAkF,MAAA,q5TACAC,WAAA,iIACAC,MAAA,KAAAwZ,EAAAtgB,QAAAqI,EAAAoC,KAAAiW,EAAA1gB,QAAAygB,EAAAzgB,QAAAmH,EAAA0d,OAAA1d,EAAAmH,GAAAkS,EAAAxgB,QAAA0H,EAAA1H,QAAAyH,EAAAqd,IAAA3d,EAAA4d,IAAAtd,EAAAud,GAAAzE,EAAAvgB,QAAAsF,EAAAtF,SACA+G,cAAA,IACA3G,MArSA,GAuSAR,EAAAI,QAAA2gB,C,GC9iBAhhB,OAAA,seAAAC,EAAAwF,EAAA+B,EAAAI,EAAA0d,EAAAvd,EAAAwd,EAAA7c,EAAA8c,EAAA7c,EAAA8c,EAAA/f,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAqlB,UAAAjgB,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,yBAAApB,EAAAqB,UAAA;AACA0c,IAAA,MAAA3f,OAAAmD,EAAA1I,KAAA;AACA,wBAAAmlB,GACA,WAAAnlB,KAAAyK,KAAA6W,WAAA7d,MACA,CACA4C,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAkGA,CACAjF,GAAA,WACAkF,MAAA,mvHACAC,WAAA,uIACAC,MAAA,KAAAme,EAAAjlB,QAAAqI,EAAAoC,KAAA2a,EAAAplB,QAAAklB,EAAAllB,QAAAmH,EAAA0d,OAAAvc,EAAAtI,QAAA0H,EAAA1H,QAAAmlB,EAAAnlB,SACA+G,cAAA,IACA3G,MAxGA,GA0GAR,EAAAI,QAAAqlB,C,GCvHA1lB,OAAA,oRAAAC,EAAAwF,EAAA8B,EAAAC,EAAAE,EAAAme,EAAA9d,EAAAW,EAAAhD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAylB,UAAArgB,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA2c,IAAA,MAAA/f,OAAAmD,EAAA1I,KAAA;AACA,kBAAAulB,GACA,OAAAvlB,KAAAyK,KAAA8a,gBAAA,CACA,CACA,WAAAC,GACA,OAAAxlB,KAAAyK,KAAAgb,OAAAhiB,OAAAzD,KAAAulB,cACA,CACA,gBAAAG,GACA,OAAA1lB,KAAAyK,KAAAgb,MAGAzlB,KAAAslB,WAAAtlB,KAAAyK,KAAAgb,MAAAzlB,KAAAyK,KAAAgb,MAAAE,MAAA,EAAA3lB,KAAAulB,gBAFA,EAGA,CACA,kBAAAK,GACA,OAAA5lB,KAAAyK,KAAAgb,OAAAhiB,OAAAzD,KAAAulB,cACA,CACA,qBAAAM,GACA,OAAA7lB,KAAAslB,YACA,EAAArd,EAAAoC,MAAA,wCAEA,EAAApC,EAAAoC,MAAA,qCACAyb,MAAA9lB,KAAA4lB,gBAGA,CACA,cAAAG,GACA/lB,KAAAslB,YAAAtlB,KAAAslB,UACA,CACAjf,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,UAAA8Z,CAAAC,GACA,OAAAA,IAAAjmB,KAAA0lB,aAAAjiB,OAAA,CACA,CACA4C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,cAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAgBA,CACAjF,GAAA,WACAkF,MAAA,8dACAC,WAAA,8HACAC,MAAA,KAAAY,EAAA1H,SACA+G,cAAA,IACA3G,MAtBA,GAwBA,MAAAkmB,UAAAlhB,EAAApF,QACA,iBAAAumB,GAEA,UADAnmB,KAAAyK,KAAA2b,SAAAC,WAAArmB,KAAAyK,KAAA2b,SACA,IAAAE,SAAA,CAAAC,EAAAC,KAAAD,EAAAE,aAAA,IAAAC,cAAAF,EAAAC,aAAA,IACA,CACA,YAAAE,CAAAC,GACA,eAAAA,EAAAH,WACA,CACApgB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,gBAAAtB,EAAAiF,SAAA;AACA,SAAA2a,CAAAC,GACA,OAAA9mB,KAAA+mB,UAAAD,GAAArjB,OAAA,CACA,CACA4C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,aAAAtB,EAAAiF,SAAA;AACA,SAAA6a,CAAAD,GACA,MAAAE,EAAA,GACAC,EAAA,IAAAC;AAaA,OAZAJ,EAAAK,UACAL,EAAAK,SAAAxW,QAAA1M,IACAA,EAAAmjB,gBACAnjB,EAAAmjB,eAAAzW,QAAA0W,IACAJ,EAAAK,IAAAD,EAAA/lB,MACA2lB,EAAAxd,IAAA4d,EAAA/lB,IACA0lB,EAAAtjB,KAAA2jB,QAMAL,CACA,CACA3gB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,aAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBA6IA,CACAjF,GAAA,WACAkF,MAAA,m6KACAC,WAAA,8HACAC,MAAA,KAAAuB,EAAAoC,KAAAtD,EAAA0d,OAAAnd,EAAA1H,QAAAylB,EAAAD,EAAAmC,QACA5gB,cAAA,IACA3G,MAnJA,GAqJAR,EAAAI,QAAAsmB,C,GCxPA3mB,OAAA,0jBAAAC,EAAAwF,EAAA8B,EAAAC,EAAAE,EAAAE,EAAA0d,EAAAvd,EAAAwd,EAAA0C,EAAAC,EAAAxf,EAAAyf,EAAAC,EAAA1iB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MACAgoB,EAAA,aACAC,EAAA;AACA,MAAAC,UAAA9iB,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,yBAAApB,EAAAqB,UAAA;AACA0c,IAAA,MAAA3f,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAof,IAAA,MAAAxiB,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,wBAAAzB,EAAA6B,SAAA,WACA,OAAAif,CACA,GAFA;AAGAI,IAAA,MAAAziB,OAAAmD,EAAA1I,KAAA;AACA,WAAA0O,GAGA,GAFAC,SAAAC,WAEA5O,KAAAyK,KAAAwd,UAAAxkB,OAAA,GAEA,IADAzD,KAAAyK,KAAAwd,SAAAld,OAAAmd,IAAA,IAAAA,EAAAC,gBAAA1kB,SAEAzD,KAAAgoB,qBAAAH,EAEA,CACA,CACA,uBAAAO,GACA,QACAzoB,MA1BA,MA2BA0oB,OAAA,EAAApgB,EAAAoC,MAAA,sCACA,CACA1K,MAAAioB,EACAS,OAAA,EAAApgB,EAAAoC,MAAA,yCACA,CACA1K,MAAAkoB,EACAQ,OAAA,EAAApgB,EAAAoC,MAAA,2CAEA,CACA,oBAAAie,GACA,IAAAtoB,KAAAyK,KAAAwd,UAAA,IAAAjoB,KAAAyK,KAAAwd,SAAAxkB,OACA;AAEA,IAAAwkB,EAAAjoB,KAAAyK,KAAAwd;AAMA,GALAjoB,KAAAgoB,uBAAAJ,EACAK,IAAAld,OAAA+b,IAAA,IAAAA,EAAAqB,gBACAnoB,KAAAgoB,uBAAAH,IACAI,IAAAld,OAAA+b,IAAA,IAAAA,EAAAqB,iBAEAnoB,KAAA+nB,aAAA,KAAA/nB,KAAA+nB,YAAAQ,OAAA,CACA,MAAArQ,EAAAlY,KAAA+nB,YAAAS,cAAAD,OACAE,EAAA,CAAAC,EAAA5B,KACA,IAEA,IADA,EAAA7e,EAAAoC,MAAA,yBAAAqe,EAAAjC,eAAAK,EAAAvZ,QAAAib,cACA1lB,SAAAoV,GACA;AAEA,MAAAyQ,EAAA7B,EAAAK,UAAAyB,KAAA3kB,KAAAsJ,MAAAib,cAAA1lB,SAAAoV,IACA2Q,EAAA/B,EAAAgC,YAAAF,KAAAG,KAAAxb,MAAAib,cAAA1lB,SAAAoV,IACA8Q,EAAAlC,EAAAK,UAAAyB,KAAA3kB,KAAAmjB,gBAAAwB,KAAAvB,KAAA9Z,MAAAib,cAAA1lB,SAAAoV;AACA,OAAAyQ,GAAAE,GAAAG,CACA,OAAAjP,GAGA,OADAkP,QAAAlP,MAAA,2BAAAA,IACA,CACA;AAGAkO,IAAAld,OAAA2d,IACA,IAEA,SADA,EAAAzgB,EAAAoC,MAAA,yBAAAqe,EAAAjC,oBAAA+B,cACA1lB,SAAAoV,KAGAwQ,EAAAT,UAAA,IAAAW,KAAA9B,GAAA2B,EAAAC,EAAA5B,GACA,OAAA/M,GAGA,OADAkP,QAAAlP,MAAA,2BAAAA,IACA,CACA,IAGAkO,IAAAloB,IAAA2oB,IACA,IAGA,IAFA,EAAAzgB,EAAAoC,MAAA,yBAAAqe,EAAAjC,oBAAA+B,cAEA1lB,SAAAoV,GACA,OAAAwQ;AAGA,MAAAQ,GAAAR,EAAAT,UAAA,IAAAld,OAAA+b,GAAA2B,EAAAC,EAAA5B;AAEA,OAAArnB,OAAA0pB,OAAA,GAAAT,EAAA,CACAT,SAAAiB,GAEA,OAAAnP,GAGA,OADAkP,QAAAlP,MAAA,2BAAAA,GACA2O,CACA,IACA3d,OAAA2d,KAAAT,UAAAS,EAAAT,SAAAxkB,OAAA,EACA,CACA,OAAAwkB,CACA,CACA,cAAAmB,CAAA9Z,GACAtP,KAAA+nB,YAAAzY,EAAA4H,QAAAvX,OAAA,EACA,CACA0G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,oBAAAmd,CAAA1pB,GACAK,KAAAgoB,qBAAAroB,CACA,CACA0G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,wBAAAtB,EAAAiF,SAAA;AACA,aAAAod,GACAtpB,KAAA+nB,YAAA,GACA/nB,KAAAgoB,qBAAAJ,EACAvT,SAAA9K,cAAA,wBAAAoO,OACA,CACAtR,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAuDA,CACAjF,GAAA,WACAkF,MAAA,g8DACAC,WAAA,yHACAC,MAAA,KAAAme,EAAAjlB,QAAAqI,EAAAoC,KAAAya,EAAAllB,QAAA4nB,EAAA5nB,QAAA6nB,EAAA7nB,QAAAmH,EAAAwiB,KAAA7B,EAAA9nB,QAAA+nB,EAAA/nB,QAAA0H,EAAA1H,SACA+G,cAAA,IACA3G,MA7DA,GA+DAR,EAAAI,QAAAkoB,C,GCzLAvoB,OAAA,omBAAAC,EAAAwF,EAAA8B,EAAAE,EAAAC,EAAAoK,EAAAlK,EAAAqiB,EAAAC,EAAAjY,EAAAtM,EAAAlE,EAAA4G,EAAA8hB,EAAAzhB,EAAAC,EAAAyhB,EAAA1kB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AAEA,MAAAgqB,UAAA5kB,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAApB,EAAAqB,UAAA;AACAgS,GAAA,MAAAjV,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAC,GAAA,MAAAlD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,4BAAApB,EAAAqB,UAAA;AACAqhB,IAAA,MAAAtkB,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,UAAA;AACAmhB,IAAA,MAAAvkB,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAohB,IAAA,MAAAxkB,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,oBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAqhB,IAAA,MAAAzkB,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,OAAA3I,KAAAyK,KAAAwf,SACA,GAFA;AAGAA,IAAA,MAAA1kB,OAAAmD,EAAA1I,KAAA;AACAkqB,kBAAAlqB,KAAAyK,KAAA0f;AACA,WAAAzb,GACAC,SAAAC,WACA5O,KAAAwa,UAAAvM,GAAA,kCAAAjO,UAAAoqB,UACApqB,KAAAoqB,UACA,CACA,WAAAhb,GACAT,MAAAS,eAAAR,WACA5O,KAAAwa,UAAA6P,IAAA,kCAAArqB,UAAAoqB,SACA,CACA,QAAAA,GACA,GAAApqB,KAAAsqB,cAMA,OAHAtqB,KAAAkqB,kBAAAlqB,KAAAyK,KAAA0f,WACAnqB,KAAA8pB,WAAA,EACA9pB,KAAAuqB,iBACAvqB,KAAAwqB,mBACA,CACAnkB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,YAAAtB,EAAAiF,SAAA;AACA,uBAAAue,GACA,GAAAzqB,KAAA8pB,WAAA,IAAA9pB,KAAA+pB,UAAAtmB,SAAAzD,KAAA0qB,iBACA,QAEA,CACA,oBAAAA,GACA,WAAA1qB,KAAAiqB,SACA,CACA,mBAAAU,GACA,OAAA3qB,KAAA0qB,iBAIA1qB,KAAA8pB,WACA,EAAA7hB,EAAAoC,MAAA,mDAGArK,KAAA+pB,UAAAtmB,QAAAzD,KAAAgqB,kBACA,EAAA/hB,EAAAoC,MAAA,0DACAyb,MAAA9lB,KAAA+pB,UAAAtmB,SAIAzD,KAAA+pB,UAAAtmB,SAAAzD,KAAAgqB,kBACA,EAAA/hB,EAAAoC,MAAA,iEACAyb,MAAA9lB,KAAA+pB,UAAAtmB,SAIA,IAAAzD,KAAA+pB,UAAAtmB,QAAAzD,KAAAmqB,aAAAnqB,KAAAkqB,mBACA,EAAAjiB,EAAAoC,MAAA,uDAGA,IAAArK,KAAA+pB,UAAAtmB,QACA,EAAAwE,EAAAoC,MAAA,6DADA,GAvBA,EAAApC,EAAAoC,MAAA,8DA0BA,CACA,WAAAugB,GACA,OAAA5qB,KAAA0qB,mBAAA1qB,KAAA8pB,WAAA9pB,KAAAmqB,aAAAnqB,KAAAkqB,iBACA,CACA,aAAAW,GACA,OAAA7qB,KAAA4qB,SAAA,IAAA5qB,KAAA+pB,UAAAtmB,MACA,CACA,cAAA0mB,GAIA,OAHAnqB,KAAAkqB,oBAAAlqB,KAAAyK,KAAA0f,aACAnqB,KAAAkqB,uBAAArY,GAEA7R,KAAAyK,KAAA0f,UACA,CACA,iBAAAG,GACA,OAAAtqB,KAAAyK,KAAAqgB,aAAArB,EAAAsB,sBAAA,EAAArB,EAAAsB,mBAAAhrB,KAAAmqB,WAAAnqB,KAAAuO,eAAAvO,KAAA0qB,gBACA,CACA,eAAAO,GACA,OAAAjrB,KAAA0qB,iBAEA1qB,KAAA8pB,UACA,cACA9pB,KAAA6qB,UACA,kBADA,EAHA,aAMA,CACA,eAAAK,GACA,SAAAjjB,EAAAoC,MAAA,qDAAArK,KAAA0qB,iBAAA,sCACA,CACA,eAAAS,GACAnrB,KAAAwa,UAAAqB,QA7GA,sCA6GA,CACAuP,SAAAprB,KAAAgqB,mBAEAhqB,KAAAgqB,iBACAhqB,KAAAyK,KAAA4gB,iBAAA,eAEArrB,KAAAyK,KAAA4gB,iBAAArrB,KAAA+pB,UAAA,YAEA/pB,KAAAgqB,kBAAAhqB,KAAAgqB,gBACA,CACA3jB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,cAAAqe,GACAvqB,KAAA+pB,UAAA,GACA/pB,KAAAgqB,kBAAA,EACAhqB,KAAAyK,KAAA4gB,iBAAA,cACA,CACAhlB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,iBAAAse,GACAxqB,KAAAuqB,kBACA,EAAAvpB,EAAAQ,MAAA,4CACAC,KAAA,CACA6pB,EAAAtrB,KAAAmqB,cAEA9R,KAAAkT,UACA,MAAAnlB,QAAA,EAAAsjB,EAAA8B,kBAAAC,IAAA;AACA,IAAArlB,EAAAyC,OAAApF,SAGA2C,EAAAyC,MAAA8H,QAAA5E,IACAA,EAAA2f,eAAA,IAEA1rB,KAAA+pB,UAAA3jB,EAAAyC,SACA0b,MAAA3c,EAAAoF,gBAAA2e,QAAA,KACA3rB,KAAA8pB,WAAA,GAEA,CACA,WAAA8B,GACA5rB,KAAAiqB,YAAAjqB,KAAAyK,KAAAwf,YACAjqB,KAAAiqB,UAAAjqB,KAAAyK,KAAAwf,UACAjqB,KAAA0qB,iBACA1qB,KAAAoqB,YAEApqB,KAAAgqB,kBAAA,EACAhqB,KAAAuqB,kBAGA,CACAlkB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,eAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBA4CA,CACAjF,GAAA,WACAkF,MAAA,kzCACAC,WAAA,iIACAC,MAAA,KAAA2K,EAAAzR,QAAA4R,EAAA5R,QAAA4pB,EAAA5pB,QAAAoH,EAAAiH,GAAA/I,EAAAtF,QAAA+pB,EAAA/pB,QAAAsI,EAAAtI,SACA+G,cAAA,IACA3G,MAlDA,GAoDAR,EAAAI,QAAAgqB,C,GCxNArqB,OAAA,2YAAAC,EAAAwF,EAAA+B,EAAAE,EAAAE,EAAAE,EAAAC,EAAAukB,EAAApkB,EAAAvC,EAAA+C,EAAA6jB,EAAA7mB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAmsB,UAAA/mB,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAApB,EAAAqB,UAAA;AACAwjB,IAAA,MAAAzmB,OAAAmD,EAAA1I,KAAA;AACA,WAAAisB,GACA,QACA3qB,GAAA,QACA+mB,MAAA,8DACA/d,KAAA,mBACA,CACAhJ,GAAA,WACA+mB,MAAA,+DACA/d,KAAA,2BACA4hB,YAAA,4EAEA,CACA,oBAAAC,GACA,OAAAnsB,KAAAgsB,MAAArH,IAAA,aACA,CACA,iBAAAyH,GAEA,OADApsB,KAAAisB,QAAAnhB,KAAAlB,KAAAtI,KAAAtB,KAAAmsB,mBACAnsB,KAAAisB,QAAA,EACA,CACA,aAAAI,CAAAC,GACAtsB,KAAAusB,MAAAD,CACA,CACAjmB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,QAAAsgB,CAAAlpB,GACAtD,KAAAgsB,MAAAS,cAAAnpB,GACAtD,KAAAusB,MAAA3N,OACA,CACAvY,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,YAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAyCA,CACAjF,GAAA,WACAkF,MAAA,i/CACAC,WAAA,4HACAC,MAAA,KAAAe,EAAA7H,QAAAmH,EAAA0d,OAAAqH,EAAAlsB,QAAAsF,EAAAtF,QAAAisB,EAAAjsB,QAAA0H,EAAA1H,QAAAyH,EAAAud,GAAA7d,EAAAmH,GAAAjG,EAAAoC,MACA1D,cAAA,IACA3G,MA/CA,GAiDAR,EAAAI,QAAAmsB,C,GCvFAxsB,OAAA,6TAAAC,EAAAwF,EAAA+B,EAAAC,EAAAC,EAAAI,EAAAC,EAAAolB,EAAAzkB,EAAAhD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA+sB,UAAA3nB,EAAApF,QACA,SAAAgtB,CAAAtd,GACA,aAAAA,EAAAC,IAGA,OAAAvP,KAAAyK,KAAAoiB,OAAA7sB,KAAAyK,KAAAqiB,WACA,CACAzmB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,aAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBA0BA,CACAjF,GAAA,WACAkF,MAAA,itBACAC,WAAA,qIACAC,MAAA,KAAAuB,EAAAoC,KAAArD,EAAAiH,GAAAye,EAAA9sB,QAAAmH,EAAAmH,GAAA5G,EAAA1H,QAAAyH,EAAAqd,KACA/d,cAAA,IACA3G,MAhCA,GAkCAR,EAAAI,QAAA+sB,C,GCjDAptB,OAAA,4NAAAC,EAAA8H,EAAAW,EAAAjD,EAAAK,EAAA0W,GACA;AAEAtc,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAmtB,GAAA,EAAA/nB,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBAiBA,CACAjF,GAAA,WACAkF,MAAA,6bACAC,WAAA,+HACAC,MAAA,KAAAuB,EAAAoC,KAAA/C,EAAA1H,SACA+G,cAAA,KACA,EAAAoV,EAAAnc,cAAAiS,EAAA;AACArS,EAAAI,QAAAmtB,C;AC/BAxtB,OAAA,gYAAAC,EAAAwF,EAAA+B,EAAAI,EAAAE,EAAAC,EAAA0lB,EAAAllB,EAAAmlB,EAAAhoB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAstB,UAAAloB,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAApB,EAAAqB,UAAA;AACAuL,GAAA,MAAAxO,OAAAmD,EAAA1I,KAAA;AACA,gBAAAmtB,GACA,OAAAntB,KAAA+T,KAAAqZ,aAAAptB,KAAAyK,KAAA4iB,eACA,CACA,YAAAC,GACA,SAAAxlB,EAAAylB,iBAAA,GAAAP,EAAAQ,8BACA,CACAnnB,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBA8BA,CACAjF,GAAA,WACAkF,MAAA,uiCACAC,WAAA,oIACAC,MAAA,KAAAW,EAAAud,GAAAqI,EAAArtB,QAAA0H,EAAA1H,QAAAmH,EAAAmH,GAAA7G,EAAA8G,KACAxH,cAAA,IACA3G,MApCA,GAsCAR,EAAAI,QAAAstB,C,GCtDA3tB,OAAA,2KAAAC,EAAAwF,EAAAK,EAAA0W,GACA;AAEAtc,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA6tB,EAAA,cACAC,GAAA,EAAA1oB,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBAYA,CACAjF,GAAA,WACAkF,MAAA,6UACAC,WAAA,+HACAC,MAAA,KAAA+mB,GACA9mB,cAAA,KACA,EAAAoV,EAAAnc,cAAAiS,EAAA;AACArS,EAAAI,QAAA8tB,C,GC3BAnuB,OAAA,ipBAAAC,EAAAwF,EAAA8B,EAAAC,EAAAE,EAAAme,EAAA7T,EAAApK,EAAAE,EAAA8Y,EAAAC,EAAAuN,EAAAzoB,EAAA0C,EAAAK,EAAA2lB,EAAAC,EAAAC,EAAA7oB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAmuB,UAAA/oB,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAgY,IAAA,MAAAjb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAC,GAAA,MAAAlD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAiY,IAAA,MAAAlb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAApB,EAAAqB,UAAA;AACAsU,GAAA,MAAAvX,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA+X,IAAA,MAAAnb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAiY,IAAA,MAAArb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAkY,IAAA,MAAAtb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAmY,IAAA,MAAAvb,OAAAmD,EAAA1I,KAAA;AACA,YAAAihB,GACA,GAAAjhB,KAAAyK,KAAAujB,YAAA,CACA,IAAA1sB,EAAA2sB,GAAAjuB,KAAAyK,KAAAujB,YAAAE,MAAA;AACA,YAAA5sB,EACA,OACAihB,gBAAA;AAGA,MAAA4L,EAAAnuB,KAAAyK,KAAA2jB,KAAA7M,cAAAQ,QAAAa,OAAA,KAAAthB,GACA+sB,EAAAF,EAAAG,OAAA1L,OAAA,OAAAqL;AACA,OACAM,kBAAAF,EAAAG,OACAC,kBAAAJ,EAAAI,kBACAC,UAAAP,EAAAO,UACA7gB,IAAAwgB,EAAAM,UAAAR,EAAAQ,SACA1M,aAAAoM,EAAApM,aACA1U,KAAA8gB,EAAA9gB,KACAyT,SAAAmN,EAAAnN,SACAuB,gBAAAviB,KAAA4uB,sBAAAT,EAAAnN,UACA6N,WAAAR,EAAAQ,WACAC,YAAAT,EAAAS,YACAC,kBAAAV,EAAAU,kBAEA,CACA,MAAA3oB,MACAA,GACApG,KAAAyK;AACA,OACA8jB,kBAAAnoB,EAAAmoB,kBACAE,kBAAAroB,EAAAqoB,kBACAO,QAAA5oB,EAAA4oB,QACAN,UAAAtoB,EAAAsoB,UACA7gB,IAAAzH,EAAAyH,IACAoU,aAAA7b,EAAA6b,aACA1U,KAAAnH,EAAAmH,KACAyT,SAAA5a,EAAA4a,SACAiO,iBAAA7oB,EAAA6oB,iBACAC,eAAA9oB,EAAA8oB,eACAL,WAAAzoB,EAAAyoB,WACAC,YAAA1oB,EAAA0oB,YACAC,kBAAA3oB,EAAA2oB,kBACAxM,gBAAAviB,KAAA4uB,sBAAAxoB,EAAA4a,SAAA5a,EAAAmc,iBACAxgB,WAAAqE,EAAArE,WAEA,CACAsE,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,YAAAzB,EAAAsa,SAAA;AACA,qBAAAC,GAIA,OAAArhB,KAAAyK,KAAA2jB,KAAA7M,cAAAC,UAAAzhB,IAAA0hB,IACA,OACAngB,GAAAmgB,EACAlU,MANAmU,EAMAD,GALA,EAAAxZ,EAAAoC,MAAA,+BAAAqX;AADAA,QAQAyN,KAAA,CAAA5I,EAAAC,IAAAD,EAAAhZ,KAAAmZ,cAAAF,EAAAjZ,MACA,CACA,cAAA6hB,GACA,OAAApvB,KAAAyK,KAAA2jB,KAAA7M,cAAA6N,WAAAD,KAAA,CAAA5I,EAAAC,IAAAD,EAAAhZ,KAAAmZ,cAAAF,EAAAjZ,MACA,CACA,aAAA8hB,GACA,OAAAzB,EAAAhuB,QAAAsE,OAAAlE,KAAAyK,KAAArE,OAAA7D,KACA,CACA,oBAAAigB,GACA,SAAAva,EAAAoC,MAAA,mCACA0P,MAAA/Z,KAAA8gB,WAEA,CACA,qBAAA2B,GACA,OAAAziB,KAAA4gB,aAAA,OAAA5gB,KAAA6gB,UACA,CACA,qBAAAyO,GACA,MAAAC,EAAAvvB,KAAAyK,KAAArE,MAAAopB,SAAAzkB,OAAA0kB,GAAA,WAAAA,EAAAhvB;AACA,IAAA8uB,GAAA,IAAAA,EAAA9rB,OACA;AAQA,OANA8rB,EAAAxvB,IAAA0vB,IACA,EAAAxnB,EAAAoC,MAAA,2BAAAolB,EAAAhvB,OAAA,CACAwD,QAAAwrB,EAAAliB,QAIAmiB,KAAA,KACA,CACA,gBAAAC,GACA,SAAA1nB,EAAAoC,MAAA,oCACAulB,SAAA5vB,KAAAsvB,kBACAxJ,MAAA9lB,KAAAyK,KAAArE,MAAAopB,QAAA/rB,QAEA,CACA,sBAAAosB,GACA,OAAA7vB,KAAAyK,KAAArE,MAAAic,KACA,CACA,qBAAAuM,CAAA5N,GACA,IAAA8O,EAAAlhB,UAAAnL,OAAA,QAAAoO,IAAAjD,UAAA,GAAAA,UAAA;AACA,MAAAmU,EAAA/iB,KAAAyK,KAAA2jB,KAAA7M,cAAAgB,gBAAAvB,IAAA;AACA,OAAAvhB,OAAAswB,YAAAtwB,OAAAiR,QAAAqS,GAAAhjB,IAAA6Q,IACA,IAAAof,EAAA1M,GAAA1S;AACA,OAAAof,EAAAF,EAAAE,KAAA,SAAA1M,GAAA7iB,KAAA6iB,EAAA1jB,QAAA,SAEA,CACA,UAAAqwB,CAAAjP,GACA,sBAAAA,CACA,CACA3a,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,cAAAtB,EAAAiF,SAAA;AACA,iBAAAgkB,CAAAC,GACAnwB,KAAA8c,MAAApL,KAAAoc,EAAAluB,QAAA,CACAwG,MAAA,CACA2iB,IAAA/oB,KAAAyK,KAAArE,MACA+pB,wBAGA,CACA9pB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,qBAAAtB,EAAAiF,SAAA;AACA,kBAAAoW,CAAAtB,GACA,MAAA+B,EAAA/iB,KAAAyK,KAAA2jB,KAAA7M,cAAAgB,gBAAAvB,IAAA;AACA,OAAAvhB,OAAAiR,QAAAqS,GAAAxE,OAAA,CAAA2E,EAAAC,KACA,IAAAC,EAAAzjB,GAAAwjB;AAyBA,MAxBA,iBAAAxjB,EACAujB,EAAAE,GAAA,CACA3iB,KAAAd,GAEA,iBAAAA,GACAA,EAAA0jB,SACA1jB,EAAA,IACAA,GAEAA,EAAA0jB,OAAA1jB,EAAA0jB,OAAAtjB,IAAAujB,IAAA,CACAhiB,GAAAgiB,EACA/V,KAAA+V,MAGAJ,EAAAE,GAAA,CACA3iB,KAAAd,EAAAc,MAAA,OACA4iB,OAAA1jB,EAAA0jB,QAAA,GACAzjB,QAAAD,EAAAC,cAAAiS,IAGAqR,EAAAE,GAAA,CACA3iB,KAAA,QAGAyiB,GACA,GACA,CACA7c,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,sBAAAtB,EAAAiF,SAAA;AACA,UAAAuX,CAAAhiB,GACAzB,KAAA0gB,UAAA;AACA,MAAA2B,EAAAriB,KAAAyK,KAAArE,MAAAic,MACA+N,EAAA,IACA3uB;AAIAA,EAAAgtB,oBACA2B,EAAA3B,kBAAA;AAEA,UACAzuB,KAAAyK,KAAArE,MAAAqd,KAAA2M,GACA/N,IACAriB,KAAAyK,KAAA2jB,KAAAxK,UAAA5jB,KAAAyK,KAAArE,aACApG,KAAAyI,OAAA4nB,YAAA,2CAAArwB,KAAAyK,KAAArE,MAAA9E,KAEAtB,KAAAwgB,OAAAsD,QAAA,CACAriB,KAAA,CACAsd,SAAA,EAAA9W,EAAAoC,MAAA,4BAEAwU,SAAA,SAEA,OAAA9R,IACA,EAAAnF,EAAAoF,gBAAAD,EACA,UACA,EAAAwE,EAAAwS,OAAA,KACA/jB,KAAA0gB,UAAA,GACA,IACA,CACA,CACAra,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,QAAAtB,EAAAiF,SAAA;AACA,UAAA8X,CAAAviB,GACAzB,KAAA4gB,aAAA;AACA,IACA,MAAAsD,QAAAlkB,KAAAyK,KAAArE,MAAA7E,WAAAE;AACAzB,KAAA6gB,WAAAqD,EAAAJ,QACA9jB,KAAA6gB,WACA7gB,KAAA8gB,UAAA,KAEA9gB,KAAA8gB,UAAAoD,EAAAnK,KAEA,OAAAhN,IACA,EAAAnF,EAAAoF,gBAAAD,EACA,UACA,EAAAwE,EAAAwS,OAAA,KACA/jB,KAAA4gB,aAAA,GACA,IACA,CACA,CACAva,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,QAAAtB,EAAAiF,SAAA;AACA,WAAA2W,CAAA7B,EAAAsP,GACA,IAAAxN,IACAA,GACAwN;AACAxN,EAAA,kBAAA9iB,KAAA4uB,sBAAA5N,IACA8B,EAAA,WAAA9B,EACA,CACA3a,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,eAAAtB,EAAAiF,SAAA;AACA,SACA,OAAAlM,KAAAygB,OAAA0D,QAAA,CACApF,SAAA,EAAA9W,EAAAoC,MAAA,oCACA+Z,WAAA,IACApkB,KAAAyK,KAAArE,MAAAie,gBAAAhM,KAAA,KACArY,KAAAyK,KAAA2jB,KAAA9J,aAAAtkB,KAAAyK,KAAArE,OACApG,KAAAyI,OAAA6E,aAAA,+CACAiX,MAAA3c,EAAAoF,iBAGA,CACA3G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,UAAAtB,EAAAiF,SAAA;AACA,kBAAAqkB,CAAAtN,GACA,OAAAA,EAAAxjB,OAAA+D,KAAAyf,GAAA,EACA,CACA5c,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,sBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAyWA,CACAjF,GAAA,WACAkF,MAAA,y3ZACAC,WAAA,gIACAC,MAAA,KAAA0Z,EAAAxgB,QAAAqI,EAAAoC,KAAAtD,EAAA4d,IAAA5d,EAAA0d,OAAApd,EAAAud,GAAA+I,EAAA/tB,QAAAwlB,EAAAmC,OAAAlgB,EAAAmpB,GAAA3C,EAAAjuB,QAAAmH,EAAAmH,GAAAiS,EAAAvgB,QAAAsF,EAAAtF,SACA+G,cAAA,IACA3G,MA/WA,GAiXAR,EAAAI,QAAAmuB,C,GC9mBAxuB,OAAA,mRAAAC,EAAA0gB,EAAAuQ,EAAAzrB,EAAAK,EAAA0W,GACA;AAEAtc,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA8wB,GAAA,EAAA1rB,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBAcA,CACAjF,GAAA,WACAkF,MAAA,+QACAC,WAAA,2HACAC,MAAA,KAAAwZ,EAAAtgB,QAAA6wB,EAAA7wB,SACA+G,cAAA,KACA,EAAAoV,EAAAnc,cAAAiS,EAAA;AACArS,EAAAI,QAAA8wB,C,GC5BAnxB,OAAA,2NAAAC,EAAAuH,EAAA4pB,EAAA3rB,EAAAK,EAAA0W,GACA;AAEAtc,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAgxB,GAAA,EAAA5rB,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBAeA,CACAjF,GAAA,WACAkF,MAAA,6QACAC,WAAA,6HACAC,MAAA,KAAAiqB,EAAA/wB,QAAAmH,EAAAwiB,MACA5iB,cAAA,KACA,EAAAoV,EAAAnc,cAAAiS,EAAA;AACArS,EAAAI,QAAAgxB,C,GC7BArxB,OAAA,umBAAAC,EAAAwF,EAAA+B,EAAAE,EAAAE,EAAA0d,EAAAvd,EAAAwd,EAAA7c,EAAAoY,EAAAC,EAAApY,EAAAwf,EAAAmJ,EAAA5rB,EAAAI,GACA;AAMA,SAAAyrB,EAAA/H,GACA,GAAAA,EAAAznB,GAAA,EACA,QAEA,CARA7B,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AAMA,MAAAmxB,UAAA/rB,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,yBAAApB,EAAAqB,UAAA;AACA0c,IAAA,MAAA3f,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAC,GAAA,MAAAlD,OAAAmD,EAAA1I,KAAA;AACA,gBAAAgxB,CAAAjI,GAIA,IAAAxZ,EAAA;AAQA,OANAA,EADA,iBAAAwZ,EAAAznB,GACA,GAAAynB,EAAA/H,YAAA+H,EAAAxb,OAGAwb,EAAAznB,GAAA2vB,QAAA,eAEA1hB,EAAA,uCAAAA,IACAtH,EAAArI,QAAAsxB,OAAA3hB,EAAA,CACA4hB,eAAA,KAEA,EAAAlpB,EAAAoC,MAAAkF,GAEA,EACA,CACAlJ,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,oBAAAtB,EAAAiF,SAAA;AACA,oBAAAklB,CAAArI,GACA,GAAA+H,EAAA/H,GACA,SAAA9gB,EAAAoC,MAAA,iDACAjE,MAAA2iB,EAAAxb,MAGA,CACAlH,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,wBAAAtB,EAAAiF,SAAA;AACA,uBAAAmlB,CAAA/vB,GACA,OAAAA,EAAA2vB,QAAA,UACA,CACA,kBAAAK,GACA,WAAAtxB,KAAAyK,KAAA2jB,KAAA3qB,MACA,CACA,sBAAA8tB,GACA,OAAAvxB,KAAAsxB,eACA,wCAEA,+CAEA,CACA,qBAAAE,GACA,MAAAruB,EAAA,EACA7B,GAAA,OACAiM,MAAA,EAAAtF,EAAAoC,MAAA,wCACA2W,SAAA,SAEAyQ,EAAAzxB,KAAAyK,KAAA2jB,KAAAsD,QAAA3xB,IAAAgpB,IAAA,CACA/H,SAAA+H,EAAA/H,SACAzT,KAAAwb,EAAAxb;AAiBA,OAfAvN,KAAAyK,KAAA2jB,KAAA7M,cAAAQ,QAAApR,QAAAoY,IACAA,EAAAuF,QACAvF,EAAAuF,OAAA3d,QAAAvK,IACA,MAAA9E,EAAA,GAAAynB,EAAAznB,MAAA8E,EAAAmH;AACAkkB,EAAA7I,KAAA8I,KAAA1Q,WAAA+H,EAAA/H,UAAA0Q,EAAAnkB,OAAAnH,EAAAmH,OAEApK,EAAAO,KAAA,CACApC,KACAiM,KAAAnH,EAAA6b,aACAjB,SAAA+H,EAAA/H,eAMA7d,CACA,CACA,qBAAAwuB,CAAA3D,GACAhuB,KAAAyI,OAAA6E,aAAA,2CACAZ,YAAA,CACAshB,gBAGA,CACA3nB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,yBAAAtB,EAAAiF,SAAA;AACA,aAAA0lB,CAAAC,GACA,SAAA5pB,EAAAoC,MAAA,2BAAAwnB,EAAApxB,OAAA,CACAwD,QAAA4tB,EAAAtkB,MAEA,CACAlH,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAkIA,CACAjF,GAAA,WACAkF,MAAA,0uKACAC,WAAA,iIACAC,MAAA,KAAAme,EAAAjlB,QAAAqI,EAAAoC,KAAAwmB,EAAAjxB,QAAAklB,EAAAllB,QAAA8nB,EAAA9nB,QAAAmH,EAAA0d,OAAAqM,EAAA5oB,EAAAtI,QAAA0H,EAAA1H,QAAA0gB,EAAA1gB,QAAAygB,EAAAzgB,QAAAmH,EAAAmH,IACAvH,cAAA,IACA3G,MAxIA,GA0IAR,EAAAI,QAAAmxB,C,GC5OAxxB,OAAA,qlCAAAC,EAAAwF,EAAA8B,EAAAC,EAAAE,EAAAC,EAAAke,EAAA7T,EAAApK,EAAAE,EAAA6Y,EAAAE,EAAAuN,EAAA/lB,EAAAxC,EAAA0sB,EAAA7pB,EAAA2lB,EAAAmE,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAArtB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA2yB,UAAAvtB,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAC,GAAA,MAAAlD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAApB,EAAAqB,UAAA;AACAhI,IAAA,MAAA+E,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAiY,IAAA,MAAAlb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAgY,IAAA,MAAAjb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA6pB,IAAA,MAAAjtB,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA+X,IAAA,MAAAnb,OAAAmD,EAAA1I,KAAA;AACAyyB,cAAA;AACA,YAAAxR,GAGA,GAAAjhB,KAAAyyB,cAAA,CACA,MAAAhxB,EAAAzB,KAAAyyB;AAEA,OADAzyB,KAAAyyB,cAAA,KACAhxB,CACA,EACA,MAAAA,EAAAzB,KAAAyK,KAAArE,MAAAjC;AAIA,OAHA1C,EAAAiB,QACAjB,EAAAmB,YAAA5C,KAAA0yB,eAAAjxB,EAAAmB,YAAAnB,EAAAiB,QAEAjB,CACA,CACA,CACA4E,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,YAAAzB,EAAAsa,SAAA;AACA,qBAAAuR,GACA,OAAA3yB,KAAAuO,aAAAqkB,YACA,CACA,YAAAC,GACA,OAAA7yB,KAAAyK,KAAA0c,SAAA5F,cAAA7e,KACA,CACA,kBAAAowB,GACA,MAAAjV,EAAAtO,IAAA,EAAAtH,EAAAoC,MAAA,kDAAAkF;AACA,QACAhC,KAAAsQ,EAAA,OACAvc,GAAA,OACA,CACAiM,KAAAsQ,EAAA,UACAvc,GAAA,QACA,CACAiM,KAAAsQ,EAAA,QACAvc,GAAA,SAEA,CACA,wBAAAyxB,GACA,MAAArB,EAAA,EACApwB,IAAA,EACAiM,MAAA,EAAAtF,EAAAoC,MAAA;AAUA,MARA,QAAAsG,QAAAjI,IACAgpB,EAAAhuB,KAAA,CACApC,GAAAoH,EACA6E,MAAA,EAAAtF,EAAAoC,MAAA,mDACAyb,MAAApd,QAIAgpB,CACA,CACA,qBAAAsB,GACA,MAAAhM,QAAA8K,EAAAlyB,QAAAqzB,QAAA,CACAC,kBAAA;AAIA,IADAlM,EAAAlc,KAAAxC,GAAA,IAAAA,EAAAhH,IACA,CACA,MAAA6xB,EAAA;AACAnM,EAAAtjB,KAAA,CACApC,GAAA,EACAiM,KAAA4lB,GAEA,CACAnzB,KAAAwyB,UAAAxL,CACA,CACA3gB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,UAAAuX,CAAAhiB,GACA,MAAA4gB,EAAAriB,KAAAyK,KAAArE,MAAAic;AACAriB,KAAA0gB,UAAA;AACA,IACA,MAAA0S,EAAA3zB,OAAA0pB,OAAAnpB,KAAAyK,KAAArE,MAAApG,KAAAyK,KAAArE,MAAAxC,SAAAnC;MACA2xB,EAAA3P,OACAzjB,MAAAqzB,KACAhR,GAAA,IAAAriB,KAAAyK,KAAArE,MAAAktB,YAAA7vB,SACAzD,KAAAyK,KAAA0c,SAAAvD,UAAAwP,SACApzB,KAAAyI,OAAA4nB,YAAA,+CAAA+C,IAEApzB,KAAAwgB,OAAAsD,QAAA,CACAriB,KAAA,CACAsd,SAAA,EAAA9W,EAAAoC,MAAA,kCAEAwU,SAAA,SAEA,OAAA9R,IACA,EAAAnF,EAAAoF,gBAAAD,EACA,UACA,EAAAwE,EAAAwS,OAAA,KACA/jB,KAAA0gB,UAAA,GACA,IACA,CACA,CACAra,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,QAAAtB,EAAAiF,SAAA;AACA,aAAAmjB,GAEA,MAAAkE,EAAA9zB,OAAA0pB,OAAA,GAAAnpB,KAAAyK,KAAArE,OAAA7D;AACA,OAAAqrB,EAAAhuB,QAAAsE,OAAAqvB,EACA,CACA,SACA,OAAAvzB,KAAAygB,OAAA0D,QAAA,CACApF,SAAA,EAAA9W,EAAAoC,MAAA,0CACA+Z,WAAA,IACApkB,KAAAyK,KAAArE,MAAAie,gBAAAhM,KAAA,KACArY,KAAAyK,KAAA0c,SAAA7C,aAAAtkB,KAAAyK,KAAArE,OACApG,KAAAyI,OAAA6E,aAAA,oDAIA,CACAjH,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,UAAAtB,EAAAiF,SAAA;AACA,mBAAAsnB,CAAAC,EAAA9zB,EAAAiR,GACA,IAAAkS,IACAA,GACAlS;AACAkS,EAAA,UAAAnjB,SACAK,KAAA0zB,aAAAD,EAAA,UAAA9zB,EACA,CACA0G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,oBAAAynB,CAAAF,EAAA9zB,EAAAwjB,GACA,IAAAL,IACAA,GACAK;AACAL,EAAA,WAAAnjB,SACAK,KAAA0zB,aAAAD,EAAA,WAAA9zB,GAAA,EACA,CACA0G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,gBAAA7J,CAAAuxB,GACA,IACA,IAAArxB,QAAAvC,KAAAyK,KAAArE,MAAA/D;AACAuxB,EAAA9Q,IAAA,OAAAvgB,GACAqxB,EAAA9Q,IAAA,UAAAvgB,EAAAjB,GACA,OAAAyL,IACA,EAAAnF,EAAAoF,gBAAAD,EACA,CACA,CACA1G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,cAAAtB,EAAAiF,SAAA;AACA,aAAA2nB,CAAAD,EAAAE,GACAF,EAAA9Q,IAAA,cAAAgR,EACA,CACAztB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,kBAAAsN,CAAAoa,EAAAH,EAAAM,EAAA5d,GACA,MAAA6d,EAAAD,EAAAhpB,OAAA6K,KAAAtU,KAAA6U,EAAA7U;AACAsyB,EAAA9Q,IAAA,cAAAkR,GACAh0B,KAAAyK,KAAArE,MAAAic,aACAriB,KAAA0zB,aAAAD,EAAA,cAAAO,EAEA,CACA3tB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,gBAAAtB,EAAAiF,SAAA;AACA,eAAA+nB,CAAAL,EAAAM,EAAAC,GACA,MAAAC,EAAAF,GAAAxxB,OAAAqI,OAAAspB,IAAAF,EAAArxB,SAAAuxB,KAAA,GACAC,EAAAt0B,KAAA0yB,eAAAwB,EAAAtxB,YAAAuxB;AAKA,GAJAP,EAAAW,cAAA,CACA7xB,MAAAyxB,EACAvxB,YAAA0xB,IAEAJ,EAAArxB,aAAAY,OAAA,GACA,MAAA+wB,EAAAN,EAAArxB,YAAAkI,OAAA0pB,IAAAL,EAAAtxB,SAAA2xB;AACAb,EAAA9Q,IAAA,cAAA0R,EACA,CACA,CACAnuB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,oBAAAwoB,CAAAhyB,GACA,OAAA1C,KAAA6yB,SAAA9nB,OAAA9H,GAAAP,EAAAI,SAAAG,EAAA3B,IACA,CACA+E,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,wBAAAtB,EAAAiF,SAAA;AACA,eAAAyoB,CAAAf,EAAAnyB,GACA,MAAAmzB,EAAA,IAAAnzB,EAAA6C,SAAA;AACAsvB,EAAA9Q,IAAA,WAAA8R,EACA,CACAvuB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,cAAAwmB,CAAAmC,EAAAC,GACA,MAAAR,EAAA70B,OAAA0pB,OAAA,GAAA0L;AAaA,OAZAC,EAAAnkB,QAAAzN,IACA,MAAAD,EAAAjD,KAAA6yB,SAAAjQ,OAAA,KAAA1f,GACAN,EAAAK,GAAAE;AACA,IAAAP,GAAA0xB,EAAApxB,GACA;AAEA,MAAAG,EAAA;AACA5D,OAAA+D,KAAAZ,GAAA+N,QAAApB,IACAlM,EAAAkM,GAAA,OAEA+kB,EAAApxB,GAAAG,IAEAixB,CACA,CACA,kBAAAZ,CAAAD,EAAArQ,EAAA2R,EAAA1B,GACA,IAAArzB,KAAAyK,KAAArE,MAAAic,MAAA,CACA,MAAA2S,EAAAv1B,OAAA0pB,OAAA,GAAAsK;AACAuB,EAAA5R,GAAA2R;AACA,IACA,MAAAtqB,EAAA;AACAA,EAAA2Y,GAAA2R,EACA/0B,KAAAyyB,cAAAuC,QACAh1B,KAAAyK,KAAArE,MAAA6uB,OAAAxqB,GACA4oB,GACArzB,MAAAqzB,IAEA,OAAAtmB,IACA,EAAAnF,EAAAoF,gBAAAD,EACA,CACA,CACA,CACA,GAAAsmB,GACA,MAAA6B,EAAAl1B,KAAAyK,KAAA0c,SAAAd,UAAA8I,KAAA,CAAA5I,EAAAC,IACAD,EAAA4O,WAAA3O,EAAA2O,UACA,GACA5O,EAAA4O,UAAA3O,EAAA2O,SACA,EAEA5O,EAAAhZ,KAAAmZ,cAAAF,EAAAjZ;AAGAvN,KAAAyK,KAAA0c,SAAAiO,QACAp1B,KAAAyK,KAAA0c,SAAAkO,WAAAH,EACA,CACA,aAAAI,GACA,MAAAC,EAAA,2CAAAv1B,KAAAyK,KAAArE,MAAA9E;AACA4N,OAAAkB,SAAAC,MAAA,EAAAjL,EAAAxF,SAAA21B,EACA,CACAlvB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAubA,CACAjF,GAAA,WACAkF,MAAA,+/dACAC,WAAA,+HACAC,MAAA,KAAAwZ,EAAAtgB,QAAAsH,EAAAtH,QAAAwgB,EAAAxgB,QAAAqI,EAAAoC,KAAA2nB,EAAApyB,QAAAqyB,EAAAryB,QAAAmyB,EAAAnyB,QAAAmH,EAAAmH,GAAA7G,EAAAmpB,GAAA0B,EAAAtyB,QAAAwyB,EAAAxyB,QAAAuyB,EAAAvyB,QAAA0yB,EAAA1yB,QAAAyyB,EAAAzyB,QAAA+tB,EAAA/tB,QAAAwlB,EAAAmC,OAAAlgB,EAAAmuB,IACA7uB,cAAA,IACA3G,MA7bA,GA+bAR,EAAAI,QAAA2yB,C,GCtrBAhzB,OAAA,kSAAAC,EAAAwF,EAAA8B,EAAAC,EAAAC,EAAAC,EAAAI,EAAAnC,EAAA+C,EAAAhD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA61B,UAAAzwB,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA+sB,IAAA,MAAAnwB,OAAAmD,EAAA1I,KAAA;AACA,aAAA21B,GACA,OAAA31B,KAAA01B,UAAA,0BACA,CACA,aAAAE,GACA51B,KAAA01B,WAAA11B,KAAA01B,SACA,CACArvB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,UAAA2pB,GACA71B,KAAA01B,WAAA,EACA11B,KAAAyK,KAAAqrB,mBAAAjsB,OAAA7J,KAAAyK,KAAAsrB,cACA,CACA1vB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,cAAAtB,EAAAiF,SAAA;AACA,gBAAA8pB,GACA,SAAA/tB,EAAAoC,MAAA,sDACA4rB,OAAAj2B,KAAAyK,KAAAsrB,cAAA,GAEA,CACA1vB,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAoCA,CACAjF,GAAA,WACAkF,MAAA,2oCACAC,WAAA,gIACAC,MAAA,KAAAM,EAAAiH,GAAA/I,EAAAtF,QAAAqI,EAAAoC,KAAAtD,EAAA0d,OAAApd,EAAAud,IACAje,cAAA,IACA3G,MA1CA,GA4CAR,EAAAI,QAAA61B,C,GCzEAl2B,OAAA,s1BAAAC,EAAAwF,EAAA8B,EAAAC,EAAAE,EAAAme,EAAAje,EAAAE,EAAAwd,EAAAvd,EAAAwd,EAAA0C,EAAAqE,EAAApE,EAAAyO,EAAA1kB,EAAAtM,EAAAlE,EAAA4G,EAAAK,EAAA8c,EAAA+G,EAAAqK,EAAAC,EAAAnxB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAy2B,EAAA,EACA/0B,GAAA,QACA+mB,MAAA,4BACA/d,KAAA,mBACA,CACAhJ,GAAA,OACA+mB,MAAA,2BACA/d,KAAA;AAEA,MAAAgsB,UAAAtxB,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,yBAAApB,EAAAqB,UAAA;AACA0c,IAAA,MAAA3f,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,iBAAApB,EAAAqB,UAAA;AACA+tB,IAAA,MAAAhxB,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACAguB,IAAA,MAAAjxB,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAiY,IAAA,MAAAlb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAof,IAAA,MAAAxiB,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,iBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGA8tB,IAAA,MAAAlxB,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,iBAAAzB,EAAA6B,SAAA,WACA,OAAA0tB,EAAA,EACA,GAFA;AAGAK,IAAA,MAAAnxB,OAAAmD,EAAA1I,KAAA;AACA,WAAA0O,GACAC,SAAAC;AACA,MAAA+nB,EAAA32B,KAAAu2B,cAAA5R,IAAA;AACA,GAAAgS,EAAA,CACA,MAAAC,EAAAP,EAAAvrB,KAAA0b,KAAAllB,KAAAq1B;AACAC,IACA52B,KAAA02B,cAAAE,EAEA,CACA,CACA,oBAAAC,GACA,IAAA1P,EAAAnnB,KAAAyK,KAAA0c,UAAA;AAMA,GAJA,QAAAnnB,KAAAy2B,gBACAtP,IAAApc,OAAA9G,MAAAgkB,UAAA,IAAAW,KAAA9B,KAAAL,cAAAzmB,KAAAy2B,iBAGAz2B,KAAA+nB,YAAA,CACA,MAAA7P,EAAAlY,KAAA+nB,YAAAS;AACArB,IAAApc,OAAA9G,IACA,MAAA6yB,EAAA7yB,EAAAsJ,MAAAib,cAAA1lB,SAAAoV,IAAAjU,EAAAioB,aAAA1D,cAAA1lB,SAAAoV,GACAuQ,GAAAxkB,EAAAgkB,UAAA,IAAAW,KAAA9B,KAAAL,aAAA+B,cAAA1lB,SAAAoV,IACA2Q,EAAA5kB,EAAA8yB,aAAA9U,cAAAuG,cAAA1lB,SAAAoV;AACA,OAAA4e,GAAArO,GAAAI,GAEA,CACA,OAAA1B,CACA,CACA,wBAAA6P,GACA,IAAA/O,EAAA;AASA,OARAjoB,KAAAyK,KAAA0c,UAAA,IAAAxW,QAAA1M,KACAA,EAAAgkB,UAAA,IAAAtX,QAAAmW,IACAA,GAAAL,cAAAwB,EAAAnlB,SAAAgkB,EAAAL,cACAwB,EAAAvkB,KAAAojB,EAAAL,iBAIAwB,EAAAkH,OACA,EACAxvB,MAAA,MACA0oB,OAAA,EAAApgB,EAAAoC,MAAA,oDACA4d,EAAAloB,IAAAwN,IAAA,CACA5N,MAAA4N,EACA8a,OAAA,EAAApgB,EAAAoC,MAAA,yBAAAkD,aAEA,CACA,mBAAAimB,CAAAvvB,GACA,MAAAgzB,EAAAhzB,EAAAmnB,QACA2J,GAAAkC;AACA,IACAhzB,EAAA6e,IAAA,UAAAiS,SACA9wB,EAAAwf,MACA,OAAAyT,GACAjzB,EAAA6e,IAAA,UAAAmU,IACA,EAAArvB,EAAAoF,gBAAAkqB,EACA,CACA,CACA7wB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,kBAAAirB,CAAA7nB,GACAtP,KAAA+nB,YAAAzY,EAAA4H,QAAAvX,OAAA,EACA,CACA0G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,sBAAAtB,EAAAiF,SAAA;AACA,qBAAAkrB,CAAAz3B,GACAK,KAAAy2B,cAAA92B,CACA,CACA0G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,yBAAAtB,EAAAiF,SAAA;AACA,aAAAod,GACAtpB,KAAA+nB,YAAA,GACA/nB,KAAAy2B,cAAA,MACApiB,SAAA9K,cAAA,wBAAAoO,OACA,CACAtR,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,aAAAmgB,CAAAC,GACAtsB,KAAAusB,MAAAD,CACA,CACAjmB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,cAAAmrB,CAAAC,GACA,MAAAV,EAAAP,EAAAvrB,KAAA0b,KAAAllB,KAAAg2B;AACAV,IACA52B,KAAA02B,cAAAE,EACA52B,KAAAu2B,cAAAzT,IAAA,CACAvT,IAAA,yBACA5P,MAAA23B,KAGAt3B,KAAAusB,MAAA3N,OACA,CACAvY,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,aAAAqrB,GACA,MAAAC,EAAAnjB,SAAAojB,cAAA;AACAD,EAAA/2B,KAAA,OACA+2B,EAAAE,OAAA,QACAF,EAAAxd,MAAA2d,QAAA,OACAH,EAAAI,SAAAtoB,GAAAtP,KAAA63B,iBAAAvoB,GACA+E,SAAAyjB,KAAAC,YAAAP,GACAA,EAAAje,QACAlF,SAAAyjB,KAAAE,YAAAR,EACA,CACAnxB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,gBAAA2rB,CAAAvoB,GACA,MAAAsG,EAAAtG,EAAA4H,OAAAtC,MAAA;AACA,IAAAgB,EACA;AAEA,MAAAqiB,EAAA,IAAAC;AACAD,EAAAE,OAAAprB,IACA,IACA,MAAAqrB,EAAAt0B,KAAAC,MAAAgJ,EAAAmK,OAAA5U;AACAtC,KAAAq4B,cAAAD,EACA,OACAp4B,KAAAygB,OAAA6X,OAAA,EAAArwB,EAAAoC,MAAA,iDACA,GAEA4tB,EAAAM,WAAA3iB,EACA,CACAvP,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,oBAAAtB,EAAAiF,SAAA;AACA,aAAAmsB,CAAAG,GAGA,MAAAC,EAAAD;AAIA,OANA5pB,UAAAnL,OAAA,QAAAoO,IAAAjD,UAAA,IAAAA,UAAA,KAIA6pB,EAAAr1B,OAAA,IAEA,EAAApC,EAAAQ,MALA,sDAKA,CACAf,KAAA,OACAgB,KAAAqC,KAAAE,UAAAy0B,GACAC,YAAA,qBACArgB,KAAA/V,IACA,IAAA2B,EAAAkyB,EAAAv2B,QAAAsE,OAAA5B,GACAq2B,EAAA34B,KAAAyK,KAAA0c,SAAAvE,OAAA,KAAA3e,EAAA3C;AACAq3B,GACA34B,KAAAyK,KAAA0c,SAAA7C,aAAAqU,GAEA34B,KAAAyK,KAAA0c,SAAAyR,SAAA,EAAA30B,KACAsgB,MAAAxK,IACA,MAAAA,EAAA8e,OAAAC,OACA94B,KAAAygB,OAAA0D,QAAA,CACApF,SAAA,EAAA9W,EAAAoC,MAAA,iDACAkD,KAAAirB,EAAAv0B,QAAAsJ,OACA,KAAAwM,EAAA8e,MAAAE,cAAAC,QAAAtJ,KAAA,MACAuJ,mBAAA,oCACA7U,WAAA,IAAApkB,KAAAq4B,cAAAG,GAAA,MAGA,EAAA5wB,EAAAoF,gBAAA+M,IAGA,CACA1T,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAqMA,CACAjF,GAAA,WACAkF,MAAA,+hPACAC,WAAA,oIACAC,MAAA,KAAAme,EAAAjlB,QAAAqI,EAAAoC,KAAA+rB,EAAAx2B,QAAAklB,EAAAllB,QAAA6nB,EAAA7nB,QAAAmH,EAAAwiB,KAAA/B,EAAA5nB,QAAAksB,EAAAlsB,QAAAsF,EAAAtF,QAAAisB,EAAAjsB,QAAAy2B,EAAA/uB,EAAA1H,QAAAmH,EAAAmH,GAAA6W,EAAAnlB,QAAA4R,EAAA5R,QAAAmH,EAAA0d,OAAAyR,EAAAt2B,QAAAyH,EAAAmpB,GAAApL,EAAAmC,QACA5gB,cAAA,IACA3G,MA3MA,GA6MAR,EAAAI,QAAA02B,C,GCtYA/2B,OAAA,wSAAAC,EAAAwF,EAAA8B,EAAAC,EAAAwK,EAAApK,EAAAc,EAAAixB,EAAAj0B,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAu5B,EAAA,yBACAC,EAAA;AACA,MAAAC,UAAAr0B,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAApB,EAAAqB,UAAA;AACAqL,GAAA,MAAAtO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,iBAAApB,EAAAqB,UAAA;AACA+tB,IAAA,MAAAhxB,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,OAAAzB,EAAA6B,UAAA;AACAogB,IAAA,MAAAxjB,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,oBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA2wB,IAAA,MAAA/zB,OAAAmD,EAAA1I,KAAA;AACA,WAAA0O,GACAC,SAAAC,WACA5O,KAAAu5B,YAAA91B,SACAzD,MAAAw5B,KACAx5B,MAAAy5B,MACA,EAAAloB,EAAAmoB,MAAA,KACA15B,KAAA25B,0BAGA,CACA,YAAAlf,GACA,OAAAza,KAAAyK,MAAA6R,YAAAlW,KACA,CACA,kBAAAwzB,GACA,OAAA55B,KAAA6T,YAAAiH,qBAAA+e,IAAA9e,MAAAC,WACA,CACA,cAAAue,GACA,IAAAv5B,KAAA6T,YAAAimB,oBACA;AAEA,IAAAC,EAAA/5B,KAAA6T,YAAAimB;AAKA,OAJAC,IAAAhvB,OAAA9G,KAAA+1B,yBACAh6B,KAAA45B,iBACAG,IAAAhvB,OAAA9G,KAAA4S,WAEAkjB,EAAAh6B,IAAAkE,IACA,CACA3C,GAAA2C,EAAA3C,GACAiM,KAAAtJ,EAAAsJ,KACA2e,YAAAjoB,EAAAioB,cAGA,CACA,cAAA+N,GACA,OAAAj6B,KAAAu5B,WAAA91B,OAAA,CACA,CACA,SAAA9D,GACA,OAAAK,KAAAk6B,MACA,CACA,SAAAv6B,CAAAo1B,GACA/0B,KAAAk6B,OAAAnF,EACA/0B,KAAAu2B,cAAA4D,QAAAhB,EAAApE,GACA/0B,KAAAyK,KAAAiM,aAAAqe,GACA/0B,KAAAo6B,sBACAp6B,KAAA25B,uBACA,CACA,mBAAAS,GACA,IAAAp6B,KAAA45B,eAEA,YADA55B,KAAAs5B,kBAAA;AAGA,MAAAr1B,EAAAjE,KAAA6T,YAAAimB,oBAAAhvB,KAAAuvB,KAAA/4B,KAAAtB,KAAAk6B;AACAl6B,KAAAs5B,kBAAAr1B,GAAAq2B,iBACA,CACA,cAAAC,GACA,OAAAv6B,KAAA+oB,GACA,CACA,cAAAwR,CAAAxF,GACA/0B,KAAA+oB,IAAAgM,EACA/0B,KAAAu2B,cAAA4D,QAAAf,EAAArE,GACA/0B,KAAA25B,uBACA,CACA,qBAAAA,GACA,GAAA35B,KAAAs5B,iBAAA,CACA,MAAAkB,EAAAx6B,KAAA6T,YAAAiH,qBAAAhQ,KAAAiQ,KAAAzZ,KAAAtB,KAAA+oB,KAAAlS;AACA7W,KAAAyK,KAAAmM,mBAAA4jB,EACA,MACA,MAAAv2B,EAAAjE,KAAA6T,YAAAimB,oBAAAhvB,KAAAuvB,KAAA/4B,KAAAtB,KAAAk6B;AACAl6B,KAAAyK,KAAAmM,mBAAA3S,EAAA4S,UAAA,GACA,CACA,CACA,cAAA4jB,GAEA,OADAz6B,KAAA6T,YAAAiH,qBAAA/P,OAAAgQ,MAAAC,YAAAjQ,OAAAmQ,SACAnb,IAAAgb,IACA,CACAzZ,GAAAyZ,EAAAzZ,GACAiM,KAAAwN,EAAAkH,gBAEAkN,KAAA,CAAA5I,EAAAC,IAAAD,EAAAhZ,KAAAmZ,cAAAF,EAAAjZ,MACA,CACA,mBAAAmtB,GACA,OAAA16B,KAAAs5B,kBAAAt5B,KAAAy6B,WAAAh3B,OAAA,CACA,CACA,GAAAk3B,GACA,MAAAC,EAAA56B,KAAAyK,MAAAmwB;AACA,GAAAA,EAAA,CACA,MAAA32B,EAAAjE,KAAAu5B,WAAAzuB,KAAAlG,KAAA2I,OAAAqtB;AACA,GAAA32B,EACA,OAAAA,EAAA3C,EAEA,CACA,CACA,GAAAu5B,GACA,MAAAC,EAAA96B,KAAAyK,MAAAqwB;AACA,GAAAA,EAAA,CACA,MAAA/R,EAAA/oB,KAAAy6B,WAAA3vB,KAAA+S,KAAAtQ,OAAAutB;AACA,GAAA/R,EACA,OAAAA,EAAAznB,EAEA,CACA,CACA,GAAAk4B,GACA,IAAA7iB,EAAA3W,MAAA26B,MAAA36B,KAAAu2B,cAAAwE,QAAA5B;AACAn5B,KAAAk6B,OAAAl6B,KAAAu5B,WAAA,GAAAj4B,GACAqV,IACAA,EAAA1F,SAAA0F,EAAA,IACA3W,KAAAu5B,WAAAM,IAAA9e,KAAAzZ,KAAAqV,KACA3W,KAAAk6B,OAAAvjB,IAGA3W,KAAAyK,KAAAiM,aAAA1W,KAAAk6B,OACA,CACA,GAAAT,GAEA,GADAz5B,KAAAo6B,sBACAp6B,KAAA45B,eAAA,CACA,IAAAoB,EAAAh7B,MAAA66B,MAAA76B,KAAAu2B,cAAAwE,QAAA3B;AACA4B,IACAA,EAAA/pB,SAAA+pB,EAAA;AAEA,MAAAC,EAAAj7B,KAAAy6B,WAAA3vB,KAAAowB,KAAA55B,KAAA05B,IAAAh7B,KAAAy6B,WAAA;AAEAO,EADAC,EACAA,EAAA35B,GAEA,GAEA05B,IACA,EAAAzpB,EAAAmoB,MAAA,KACA15B,KAAAu6B,WAAAS,GAGA,CACA,CACA30B,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAkCA,CACAjF,GAAA,WACAkF,MAAA,moCACAC,WAAA,qIACAC,MAAA,KAAAuB,EAAAoC,KAAA6uB,EAAAt5B,QAAAmH,EAAAwiB,MACA5iB,cAAA,IACA3G,MAxCA,GA0CAR,EAAAI,QAAAy5B,C,GClMA95B,OAAA,4RAAAC,EAAAwF,EAAAiC,EAAAI,EAAAY,EAAAgqB,EAAAhtB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAu7B,UAAAn2B,EAAApF,QACA,mBAAAw7B,GACA,MAAAvI,EAAA7yB,KAAAyK,KAAAooB;AACA,SAAAA,IAAA7yB,KAAAyK,KAAAhJ,KAAAiB,QAGA1C,KAAAyK,KAAAhJ,MAAAiB,MAAAm3B,IAAA52B,GAAA4vB,EAAAjQ,OAAA,KAAA3f,IAAAE,QACA,CACA,iBAAAk4B,GACA,MAAAC,EAAA;AAOA,OANAt7B,KAAAyK,KAAAooB,SAAA9yB,IAAA6hB,IACA0Z,EAAA1Z,EAAAtgB,IAAA,CACAiM,KAAAqU,EAAArU,QACAqU,GAAAze,WAGAm4B,CACA,CACA,cAAAC,CAAA34B,GACA,OAAAA,EAAAnD,OAAA+D,KAAAZ,GAAA,EACA,CACAyD,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,cAAAsvB,CAAAt4B,GAEA,MAAAo4B,EAAAt7B,KAAAq7B,cAAAn4B;AACA,IAAAo4B,EACA;AAIA,OADA77B,OAAA+D,KAAA83B,GAAAvwB,OAAAilB,GAAA,SAAAA,EAEA,CACA3pB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBA8DA,CACAjF,GAAA,WACAkF,MAAA,mmFACAC,WAAA,qIACAC,MAAA,KAAAuB,EAAAoC,KAAApD,EAAA0d,IAAAtd,EAAAud,GAAAqN,EAAAryB,SACA+G,cAAA,IACA3G,MApEA,GAsEAR,EAAAI,QAAAu7B,C,GC9GA57B,OAAA,izBAAAC,EAAAwF,EAAA8B,EAAAG,EAAAqK,EAAAnK,EAAAC,EAAAC,EAAAo0B,EAAAn0B,EAAAo0B,EAAAC,EAAAnqB,EAAAxQ,EAAA4G,EAAAg0B,EAAAC,EAAA/zB,EAAAG,EAAA6zB,EAAApf,EAAAqf,EAAA92B,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAo8B,UAAAh3B,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAApB,EAAAqB,UAAA;AACAyzB,IAAA,MAAA12B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAApB,EAAAqB,UAAA;AACAuL,GAAA,MAAAxO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAApB,EAAAqB,UAAA;AACAsU,GAAA,MAAAvX,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAApB,EAAAqB,UAAA;AACAqL,GAAA,MAAAtO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAApB,EAAAqB,UAAA;AACA0zB,IAAA,MAAA32B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAApB,EAAAqB,UAAA;AACA2zB,IAAA,MAAA52B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,OAAA3I,KAAAo8B,YAAAj5B,OACA,GAFA;AAGAk5B,IAAA,MAAA92B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA6N,IAAA,MAAAjR,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA2zB,IAAA,MAAA/2B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,qBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAsU,GAAA,MAAA1X,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,kBAAAzB,EAAA6B,SAAA,WACA,YACA,GAFA;AAGA4zB,IAAA,MAAAh3B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,mBAAAzB,EAAA6B,SAAA,WACA,qDACA,GAFA;AAGA6zB,IAAA,MAAAj3B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA8zB,IAAA,MAAAl3B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,iBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA+zB,IAAA,MAAAn3B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAg0B,IAAA,MAAAp3B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,sBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAi0B,IAAA,MAAAr3B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,oBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAk0B,IAAA,MAAAt3B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,uBAAAzB,EAAA6B,SAAA,WACA,OAAA3I,KAAAyK,KAAAhJ,KAAAq7B,gBACA,GAFA;AAGAC,IAAA,MAAAx3B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,kBAAAzB,EAAA6B,SAAA,WACA,WAAAozB,EAAAn8B,QAAA,IAAAI,KAAAs8B,WAAAvH,GAAA/0B,KAAAs8B,WAAAvH,EACA,GAFA;AAGAiI,IAAA,MAAAz3B,OAAAmD,EAAA1I,KAAA;AACAo8B,YAAA,CACAj5B,QAAA,UACAqT,QAAA,UACAlU,OAAA;AAEA26B,oBAAA,QAAA71B,EAAAgC,UAAAC,IACA,GAAArJ,KAAA+8B,qBAAA/8B,KAAA28B,UACA;AAEA,MAAAO,EAAAl9B,KAAAm8B,QAAAgB,SAAA9zB,EAAA,CACA+zB,WAAA,8BACA1L,SAAA,EAAAzpB,EAAAoC,MAAA,8DACAgzB,UAAA,MACAC,SAAA;AAEA,WACAJ,EAAAK,aAXA;AAcAl3B,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,oBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGA60B,IAAA,MAAAj4B,OAAAmD,EAAA1I,KAAA;AACA,oBAAAy9B,GACA,OAAAz9B,KAAA28B,YAAA38B,KAAA+8B,mBACA,CACA,iBAAAxf,GACA,IAAAJ,EAAAnd,KAAA6T,aAAA2J;AACAL,IAAApS,OAAA2yB,KAAAttB,SAAAtN,SAAA;AAEA,MAAAmb,EAAAd,EAAAe,UAAAtZ,GAAA,kBAAAA,EAAA2I;AACA,QAAA0Q,EAAA,CACA,MAAAE,EAAAhB,EAAAiB,OAAAH,EAAA;AACAd,EAAAkB,QAAAF,EACA,CAOA,OANAne,KAAA29B,2BACAxgB,IAAApS,OAAAnG,GAAA,kBAAAA,EAAA2I,OAEAvN,KAAAyK,KAAAhJ,KAAAm8B,cACAzgB,IAAApS,OAAAnG,GAAA,cAAAA,EAAA2I,OAEA4P,CACA,CACA,6BAAA0gB,GACA,OAAA79B,KAAA89B,oBACA,oBAEA,oBAEA,CACA,uBAAAC,GACA,MAAAxvB,EAAAvO,KAAAuO,aACAqvB,EAAA59B,KAAAyK,KAAAhJ,KAAAm8B;AACA,SAAArvB,GAAAyvB,2BAAAzvB,GAAA0vB,0BAAAL,IAGA,YAAA59B,KAAA48B,oBAAArvB,IACA,CACA,sBAAAowB,GACA,OAAA39B,KAAA6T,aAAAyK,sBACA,CACA,oBAAA4f,CAAA9zB,GAOA,OADAA,GAFAA,GAFAA,IAAA6mB,QAAA,iBAEAA,QAAA,kBAEA1I,QACA,EAAAsT,EAAAsC,UAAA/zB,EACA,CACA,mBAAAg0B,CAAAz+B,GACAK,KAAAq+B,kBACAr+B,KAAAs+B,cAEAt+B,KAAAq+B,iBAAA1+B,EACAK,KAAAu+B,WACA,CACA,SAAAA,GACAv+B,KAAAi8B,WAAAsC,UAAAv+B,KAAAq+B,iBAAAr+B,KAAAw+B,cAAA,EACA,CACA,WAAAF,GACAt+B,KAAAq+B,mBAGAr+B,KAAAi8B,WAAAqC,YAAAt+B,KAAAq+B,iBAAAr+B,KAAAw+B,eACAx+B,KAAAq+B,iBAAA,KACA,CACAh4B,UAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,eAAAqzB,EAAA7sB,OAAA;AACA,mBAAAyvB,CAAAl8B,GACAtC,KAAA28B,WAAAr6B,EAAAm8B,WACAz+B,KAAAg9B,eAAA0B,aAAAp8B,EAAA,SACA,CACA+D,UAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAqzB,EAAA7sB,OAAA;AACA,4BAAA4vB,GACA3+B,KAAA89B,qBAAA99B,KAAA89B,mBACA,CACAz3B,UAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,gCAAAtB,EAAAiF,SAAA;AACA,yBAAA0yB,CAAA3f,GACAjf,KAAAq8B,UAAAr8B,KAAAo8B,YAAA5lB,QACAxW,KAAA48B,mBAAA3d;AACA,MAAA4f,EAAA;AACA,IACA,GAAAA,EAAA/7B,SAAAmc,EAAA1R,MAAA,CACA,MAAAuxB,QAAA9+B,KAAA++B,sBAAA9f;AAEA,YADAjf,KAAAo+B,gBAAAU,EAAAE,iBAEA,CACAh/B,KAAAw9B,kBAAA,EAAAx8B,EAAAQ,MAAA,mCACAy9B,OAAA,OACAx9B,KAAA,CACAyd,KAAAD,EAAA1R,KACAnD,KAAApK,KAAAyK,KAAAhJ,KAAAy9B,WAAAC,OACAC,cAAAp/B,KAAAid,qBAIAjd,KAAAw9B,iBAAAnlB,KAAAzH,IACA,IAAAyuB,YACAA,GACAzuB;AAEA,GADA5Q,KAAAs8B,WAAA+C,EAAA,GAAA9W,OACA,cAAAtJ,EAAA1R,KACA,OAAAvN,KAAAs/B,2BAEA3T,QAAA,KACA3rB,KAAAwW,SAAA,EACAxW,KAAAq8B,UAAAr8B,KAAAo8B,YAAA95B,QAEA,OAAAyX,IACA,EAAAnS,EAAAoF,gBAAA+M,EACA,CACA,OAAA/Z,KAAAw9B,gBACA,CACAn3B,UAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,uBAAAtB,EAAAiF,SAAA;AACA,qBAAA6yB,CAAA9f,GACAjf,KAAAq8B,UAAAr8B,KAAAo8B,YAAA95B;AACA,MAAA45B,EAAAl8B,KAAAk8B,KAAAqD,gBAAA;AACArD,IACAA,EAAA/4B,QAAAk6B,UAAA;AAcA,OAXAr9B,KAAAw9B,kBAAA,EAAAx8B,EAAAQ,MADA,4CACA,CACAy9B,OAAA,OACAx9B,KAAA,CACA2O,SAAA,OACA8O,KAAAD,EAAA1R,KACAnD,KAAApK,KAAAyK,KAAAhJ,KAAAy9B,WAAAC,OACAK,QAAAx/B,KAAAyK,KAAAhJ,KAAAy9B,WAAAO,OACAL,cAAAp/B,KAAAid,kBACAyiB,UAAA1/B,KAAAi8B,WAAA0D,YAGA3/B,KAAAw9B,gBACA,CACA,sBAAA8B,GAEA,OADAt/B,KAAA08B,eAAA,EACA18B,KAAA+T,KAAAqZ,iBACAptB,KAAAy8B,cAAA,GAGAz8B,KAAA8c,MAAApL,KAAAiqB,EAAA/7B,QAAA,CACAwG,MAAA,CACAw5B,aAAA5/B,KAAAyK,KAAAhJ,KAAAy9B,WAAAC,OACApK,SAAA/0B,KAAAs8B,WACAvwB,KAAA/L,KAAAyK,KAAAhJ,KAAAsK,KACA6S,MAAA5e,KAAA6/B,gBAIA,CACA,cAAAC,GACA9/B,KAAAw9B,mBACAx9B,KAAAw9B,iBAAAuC,QACA//B,KAAAw9B,iBAAA,KACAx9B,KAAAwW,SAAA,EACAxW,KAAAq8B,UAAAr8B,KAAAo8B,YAAAj5B,QAEA,CACAkD,UAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,cAAA8zB,GACAhgC,KAAAs8B,YAAA74B,OAAA,KACA,EAAAqE,EAAAiG,eAAA/N,KAAAs8B,YACAt8B,KAAAu8B,eAAA,QACAv8B,KAAAw8B,gBAAA,kDACAyD,WAAA,KACAjgC,KAAAu8B,eAAA,OACAv8B,KAAAw8B,gBAAA,iDACA,MAEA,CACAn2B,UAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,SAAAuT,GAIA,OAFAzf,KAAAs8B,WAAA,GACAt8B,KAAAid,kBAAA,GACAjd,KAAAyK,KAAAmU,OACA,CACAvY,UAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,aAAAtB,EAAAiF,SAAA;AACA,mBAAA2zB,GACA7/B,KAAAy8B,cAAA,QACAz8B,KAAAyK,KAAAhJ,KAAAy+B,aACA,CACA75B,UAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,oBAAAi0B,GAEA,GADAngC,KAAA68B,kBAAA,EACA78B,KAAA+9B,oBACA,IACA,MAAAz7B,QAAA,EAAAtB,EAAAQ,MAAA,UAAAxB,KAAAyK,KAAAhJ,KAAAsK,KAAAzK,MACA8+B,EAAApgC,KAAAk+B,qBAAAl+B,KAAAs8B,YACA+D,GAAA,EAAAp4B,EAAAoC,MAAA,6DACAi2B,EAAA,GAAAtgC,KAAAyK,KAAAhJ,KAAAy9B,WAAAC,YAAAiB,MAAAC,MACAE,EAAAj+B,EAAAk+B,IAAAvP,QAAAjxB,KAAAyK,KAAAhJ,KAAAy9B,WAAAC,OAAAmB;MACAtgC,KAAAyK,KAAAhJ,KAAAsK,KAAA0X,KAAA,CACA+c,IAAAD,GAEA,OAAAxmB,IACA,EAAAnS,EAAAoF,gBAAA+M,EACA,SACA/Z,KAAA68B,kBAAA,QACA78B,KAAAyf,WACA,CAEA,CACApZ,UAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA7F,UAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAuFA,CACAjF,GAAA,WACAkF,MAAA,+7FACAC,WAAA,iIACAC,MAAA,KAAAW,EAAA8G,IAAA9G,EAAAud,GAAAlI,EAAA9c,QAAAk8B,EAAAl8B,QAAA0R,EAAA1R,QAAA4R,EAAA5R,QAAA67B,EAAA77B,QAAA0H,EAAA1H,QAAA87B,EAAA97B,SACA+G,cAAA,IACA3G,MA7FA,GA+FAR,EAAAI,QAAAo8B,C,GCzYAz8B,OAAA,iRAAAC,EAAAwF,EAAA8B,EAAAE,EAAAC,EAAAgB,EAAA0oB,EAAA1rB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA6gC,EAAA,EACAn/B,GAAA,OACAo/B,QAAA,KACAC,QAAA,2CACA,CACAr/B,GAAA,QACAo/B,QAAA,MACAC,QAAA,gDACA,CACAr/B,GAAA,QACAo/B,QAAA,MACAC,QAAA,0CACA,CACAr/B,GAAA,SACAo/B,QAAA,OACAC,QAAA,2CACA,CACAr/B,GAAA,SACAq/B,QAAA;AAEA,MAAAC,UAAA57B,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,oBAAAzB,EAAA6B,SAAA,WACA,aACA,GAFA;AAGAk4B,IAAA,MAAAt7B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAm4B,IAAA,MAAAv7B,OAAAmD,EAAA1I,KAAA;AACA,WAAA0O,GACAC,SAAAC;AACA,MAAA8xB,EAAA1gC,KAAAyK,KAAA9K,MACAqiB,EAAAye,EAAA31B,KAAAlG,KAAA87B;AACA1e,EACAhiB,KAAA6gC,iBAAA7e,EAAA1gB,IAEAtB,KAAA6gC,iBAAA,SACA7gC,KAAA8gC,YAAAC,KAAAC,MAAAN,EAAA,MAEA,CACA,iBAAAO,GACA,OAAAR,EAAA1gC,IAAAiiB,IAAA,CACA1gB,GAAA0gB,EAAA1gB,GACAiM,MAAA,EAAAtF,EAAAoC,MAAA2X,EAAA2e,SACAD,QAAA1e,EAAA0e,UAEA,CACA,YAAAQ,GACA,iBAAAlhC,KAAA6gC,gBACA,CACA,0BAAAM,GACA,OAAAnhC,KAAAkhC,SACAlhC,KAAA8gC,YAAA,KAAA9gC,KAAA8gC,YAAA,EAEA7vB,SAAAjR,KAAA6gC,iBAAA,GAEA,CACA,cAAAO,CAAAzhC,GACAK,KAAA6gC,iBAAAlhC,EACAK,KAAAqhC,aACA,CACAh7B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,mBAAAo1B,CAAAhyB,GACAtP,KAAA8gC,YAAA7vB,SAAA3B,EAAA4H,OAAAvX,MAAA,IACAK,KAAAqhC,aACA,CACAh7B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,uBAAAtB,EAAAiF,SAAA;AACA,WAAAm1B,GACArhC,KAAAyK,KAAA82B,UACAvhC,KAAAyK,KAAA82B,SAAAvhC,KAAAmhC,uBAEA,CACA96B,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBA4BA,CACAjF,GAAA,WACAkF,MAAA,0yBACAC,WAAA,wIACAC,MAAA,KAAAiqB,EAAA/wB,QAAAoH,EAAAiH,GAAAhG,EAAAoC,MACA1D,cAAA,IACA3G,MAlCA,GAoCAR,EAAAI,QAAAghC,C,GCnHArhC,OAAA,ySAAAC,EAAAwF,EAAAmC,EAAAG,EAAApC,EAAA+C,EAAAC,EAAAjD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA4hC,UAAAx8B,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,uBAAApB,EAAAqB,UAAA;AACAi5B,IAAA,MAAAl8B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAyCA,CACAjF,GAAA,WACAkF,MAAA,shDACAC,WAAA,2IACAC,MAAA,KAAAwB,EAAAtI,QAAAsF,EAAAtF,QAAAqI,EAAAoC,KAAA/C,EAAA1H,SACA+G,cAAA,IACA3G,MA/CA,GAiDAR,EAAAI,QAAA4hC,C,GC3DAjiC,OAAA,i1BAAAC,EAAAwF,EAAA8B,EAAAG,EAAAC,EAAAmK,EAAAC,EAAAC,EAAApK,EAAAs0B,EAAAn0B,EAAAkK,EAAAxQ,EAAA4G,EAAAg0B,EAAA8F,EAAAC,EAAAC,EAAA35B,EAAA8zB,EAAA8F,EAAAlY,EAAA1kB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AAEA,MAAAkiC,UAAA98B,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAu5B,IAAA,MAAAx8B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAApB,EAAAqB,UAAA;AACAyzB,IAAA,MAAA12B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,uBAAApB,EAAAqB,UAAA;AACAi5B,IAAA,MAAAl8B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAApB,EAAAqB,UAAA;AACAgS,GAAA,MAAAjV,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAApB,EAAAqB,UAAA;AACAqL,GAAA,MAAAtO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAApB,EAAAqB,UAAA;AACAiS,GAAA,MAAAlV,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,4BAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAq5B,IAAA,MAAAz8B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,mBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAs5B,IAAA,MAAA18B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,wBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAu5B,IAAA,MAAA38B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,0BAAAzB,EAAA6B,SAAA,WACA,OAAA3I,KAAAyK,KAAA03B,wBAAA,GACA,GAFA;AAGAA,IAAA,MAAA58B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,kBAAAzB,EAAA6B,SAAA,WACA,WAAAozB,EAAAn8B,QAAA,IAAAI,KAAAyhC,oBAAAW,UAAArN,GAAA/0B,KAAAyhC,oBAAAW,UAAArN,EACA,GAFA;AAGAiI,IAAA,MAAAz3B,OAAAmD,EAAA1I,KAAA;AACAqiC,iBAAA;AACA,WAAA3zB,GACAC,SAAAC,WACA5O,KAAAwa,UAAAvM,GAAA,kCAAAjO,UAAAsiC,iBACA,CACA,WAAAlzB,GACAT,MAAAS,eAAAR,WACA5O,KAAAwa,UAAA6P,IAAA,kCAAArqB,UAAAsiC,iBACA,CACA,YAAAC,GACA,IAAAviC,KAAAwiC,OAAA/+B,QAAAzD,KAAAyhC,oBAAAW,WAAA3+B,OAAA,IACAzD,KAAAyhC,oBAAAgB,iBACAziC,KAAAg9B,eAAA0F,mBAEA,EAAAhB,EAAAiB,eAAArW,IACAA,EAAAsW,+BAAA,CAAAC,EAAAvzB,KACA,GAAAuzB,EAGA,OAAA7iC,KAAAyhC,oBAAAqB,YAAA9iC,KAAAwiC,OAGA,UAAAlzB,EAAAC,KAAAvP,KAAAwiC,OACAxiC,KAAAsiC,oBAHA,KAQA,CACAj8B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,gBAAAqzB,EAAA7sB,OAAA;AACA,sBAAAg0B,CAAA9N,GACAj1B,KAAAwiC,QAAAvN,EAAAuN,QACAxiC,KAAAqiC,mBACA,EAAA9wB,EAAAqB,QAAA5S,KAAAqiC,kBAEAriC,KAAAyhC,oBAAAW,YACApiC,KAAAyhC,oBAAAW,UAAA,IAEApiC,KAAAyhC,oBAAAuB,UAAA/N,EAAAgO,WACAjjC,KAAAyhC,oBAAAyB,oBAAA,EACAljC,KAAAg9B,eAAA0B,aAAAzJ,EAAA,qBAEA,CACA5uB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,oBAAAqzB,EAAA7sB,OAAA;AACA,WAAAuvB,GACAt+B,KAAAi8B,WAAAqC,YAAA,gCAAAt+B,KAAA+iC,iBACA,CACA18B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,eAAAqzB,EAAA7sB,OAAA;AACA,SAAAwvB,GACAv+B,KAAAi8B,WAAAsC,UAAA,gCAAAv+B,KAAA+iC,iBACA,CACA18B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,aAAAqzB,EAAA7sB,OAAA;AACA,SAAAyzB,GACA,OAAAxiC,KAAAyK,MAAA0f,YAAAnqB,KAAA+hC,OAAAoB,sBACA,CACA,eAAAC,GACA,OAAApjC,KAAAkiC,qBACA,6CAEA,gDAEA,CACA,cAAAmB,GACA,OAAArjC,KAAAkiC,qBACA,aAEA,EAEA,CACA,uBAAAoB,GACA,OAAAtjC,KAAAyhC,oBAAAyB,oBAAAljC,KAAAg9B,eAAAuG,aAAA9/B,OAAAzD,KAAAmiC,sBACA,CACA,qBAAAqB,GACA,OAAAxjC,KAAAkiC,sBAAAliC,KAAAsjC,mBACA,CACA,2BAAAG,GACA,MAAAtc,EAAAnnB,KAAA6T,aAAAimB;AACA,IAAA3S,EACA;AAEA,GAAAnnB,KAAAyhC,oBAAAiC,kBACA;AAEA,MAAAC,EAAAxc,EAAArc,KAAA7G,KAAA3C,KAAA2P,SAAAjR,KAAAuO,cAAAq1B,wBAAA,KACAC,EAAAF,GAAA9sB;AACA,OAAA7W,KAAAyhC,oBAAAW,WAAA3+B,OAAA,IAAAzD,KAAAg9B,eAAA8G,aAAAD,CACA,CACA,yBAAAE,GACA,OAAA/jC,KAAAgiC,yBACA,kDAEA,kDACA,CACA,sBAAAM,GACA,OAAAtiC,KAAAwiC,OAAA/+B,OAGA,OAFAzD,KAAAyhC,oBAAAgB,sBACAziC,KAAAg9B,eAAA0F;AAGA,GAAA1iC,KAAAyhC,oBAAAqB,YAAA9iC,KAAAwiC,MAAA,CAIAxiC,KAAAg9B,eAAA0F,iBACA1iC,KAAAyhC,oBAAAgB,iBAEAziC,KAAAiiC,iBAAA,EACAjiC,KAAAyhC,oBAAAyB,oBAAA,EACAljC,KAAAqiC,kBAAA,EAAA9wB,EAAAwS,OAAA/jB,UAAAgkC,iBAhJA;AAiJA,IACAhkC,KAAAyhC,oBAAAqB,UAAA9iC,KAAAwiC,YACA,EAAAxhC,EAAAQ,MAAA,iCACAC,KAAA,CACA+gC,MAAAxiC,KAAAwiC,QAGA,OACAxiC,KAAAiiC,iBAAA,CACA,CAbA,MALAjiC,KAAAiiC,iBAAA,CAmBA,CACA57B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,oBAAAtB,EAAAiF,SAAA;AACA,eAAA+3B,GACAjkC,KAAAkiC,sBAAAliC,KAAAkiC,oBACA,CACA77B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,0BAAAg4B,GACA,MAAAziC,EAAA,CACAe,QAAAxC,KAAA6T,YAAAvS,GACAkhC,MAAAxiC,KAAAwiC,MACA2B,QAAAnkC,KAAAyhC,oBAAAW;AAEA,IACApiC,KAAAgiC,0BAAA;AACA,MAAAoC,QAAA,EAAApjC,EAAAQ,MAAA,gDACAf,KAAA,OACAgB,SAEA4iC,QAAAzC,EAAAhiC,QAAAkL,KAAAs5B,EAAAE,SAAA,IACAC,EAAA3C,EAAAhiC,QAAAsE,OAAAmgC;AACA1C,EAAA/hC,QAAAwc,QAAA,MAAAgoB,EAAAE,WAAA,CACAE,mBAAA,KACAxkC,KAAAyK,KAAAg6B,iBACAzkC,KAAAyK,KAAAg6B,kBAEAzkC,KAAAya,SAAAiqB,cAAA,CACAH,YAIA,OAAAx3B,IACA,EAAAnF,EAAAoF,gBAAAD,EACA,SACA/M,KAAAgiC,0BAAA,CACA,CACA,CACA37B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,wBAAAtB,EAAAiF,SAAA;AACA,gBAAA83B,GACAhkC,KAAAyhC,oBAAAW,WAAA3+B,OAAA,IAGAzD,KAAAyhC,oBAAAyB,oBAAA,EACAljC,KAAAyhC,oBAAAW,UAAA,GACApiC,KAAAyhC,oBAAAiC,mBAAA,EACA,CACAr9B,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAwDA,CACAjF,GAAA,WACAkF,MAAA,m1DACAC,WAAA,mIACAC,MAAA,KAAAQ,EAAAtH,QAAAyR,EAAAzR,QAAA0R,EAAA1R,QAAAiiC,EAAAjiC,QAAAqI,EAAAoC,KAAAmH,EAAA5R,QAAA67B,EAAA77B,QAAA0H,EAAA1H,QAAA+pB,EAAA/pB,SACA+G,cAAA,IACA3G,MA9DA,GAgEAR,EAAAI,QAAAkiC,C,GC/QAviC,OAAA,yRAAAC,EAAAuH,EAAAqH,EAAA/G,EAAAY,EAAAC,EAAAlD,EAAAK,EAAA0W,GACA;AAEAtc,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA+kC,GAAA,EAAA3/B,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBAyBA,CACAjF,GAAA,WACAkF,MAAA,8mBACAC,WAAA,yIACAC,MAAA,KAAAW,EAAAmpB,GAAAtoB,EAAAtI,QAAAmH,EAAA0d,OAAArW,EAAA+C,SAAAlJ,EAAAoC,MACA1D,cAAA,KACA,EAAAoV,EAAAnc,cAAAiS,EAAA;AACArS,EAAAI,QAAA+kC,C,GCvCAplC,OAAA,kuBAAAC,EAAAwF,EAAA8B,EAAAC,EAAAC,EAAAC,EAAAme,EAAAje,EAAAG,EAAAwd,EAAA8f,EAAApb,EAAAthB,EAAAhD,EAAAwnB,EAAA1rB,EAAA4G,EAAAxC,EAAA6C,EAAA48B,EAAAlU,EAAAmU,EAAA7/B,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAmlC,UAAA//B,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAgY,IAAA,MAAAjb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAApB,EAAAqB,UAAA;AACAsU,GAAA,MAAAvX,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAAzB,EAAA6B,SAAA,WACA,OACAq8B,cAAA,EACAC,cAAA,EACAC,gBAAA,EACAC,gBAAA,EACAC,WAAA,GAEA,GARA;AASAC,IAAA,MAAA9/B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA28B,IAAA,MAAA//B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGA48B,IAAA,MAAAhgC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,qBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGA68B,IAAA,MAAAjgC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,sBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA88B,IAAA,MAAAlgC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAqwB,IAAA,MAAAzzB,OAAAmD,EAAA1I,KAAA;AACA,WAAA0O,GACAC,SAAAC,WACA5O,KAAA0lC,uBACA,IAAA1lC,KAAAyK,KAAArE,OAAAu/B,oBAAAC,OACA5lC,KAAAg5B,OAAAt1B,KAAA,CACAqb,SAAA,EAAA9W,EAAAoC,MAAA,mDACAT,OAAA,CACAye,OAAA,EAAApgB,EAAAoC,MAAA,kDACA6B,OAAAlM,KAAA6lC,sBAIA,CACA,yBAAAA,GACA,MAAAC,EAAA9lC,KAAAyK,KAAArE,MAAAu/B;AACA,GAAAG,MAAAF,MAGA,WACA,EAAA5kC,EAAAQ,MAAA,kDACAf,KAAA,OACAgB,KAAA,CACAsY,MAAA,6BAGA+J,SACA9jB,KAAAwgB,OAAAsD,QAAA,CACAriB,KAAA,CACAsd,SAAA,EAAA9W,EAAAoC,MAAA,sCAEAwU,SAAA,SAGA,OAAA9E,IACA,EAAAnS,EAAAoF,gBAAA+M,EACA,SACA7K,OAAAkB,SAAA21B,QACA,CACA,CACA1/B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,uBAAAtB,EAAAiF,SAAA;AACA,mBAAAw5B,GACA,MAAAt/B,EAAApG,KAAAyK,KAAArE;AACApG,KAAAslC,UAAAl/B,EAAA4/B,WACA5/B,EAAA6/B,OACAjmC,KAAAulC,YAAAn/B,EAAA6/B,OAEAjmC,KAAAkmC,cAAAziC,SACAzD,KAAAulC,YAAAvlC,KAAAkmC,cAAA,GAAA5kC,GACAtB,KAAAmmC,iBAAA,GAGAnmC,KAAAylC,mBAAAr/B,EAAAggC,oBACApmC,KAAAqlC,MAAAj/B,EAAAi/B,MACArlC,KAAAwlC,kBAAAp/B,EAAAigC,aACA,CACAhgC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,uBAAAtB,EAAAiF,SAAA;AACA,iBAAAg6B,GACA,OAAAlmC,KAAAyK,KAAArE,OAAAkgC,gBAAA,EACA,CACA,mBAAA9S,GACAxzB,KAAAslC,WAAAtlC,KAAAslC;AACA,MAAA7jC,EAAA,CACAukC,WAAAhmC,KAAAslC;AAEAtlC,KAAAmmC,kBACA1kC,EAAA8kC,aAAAvmC,KAAAg7B;AAEA,IACA,MAAApuB,QAAA,EAAA5L,EAAAQ,MAAA,4CACAf,KAAA,MACAgB;AAEAzB,KAAAmmC,iBAAA,EACAnmC,KAAAslC,UAAA14B,EAAAo5B,UACA,OAAAjsB,GACA/Z,KAAAslC,WAAAtlC,KAAAslC,WACA,EAAA19B,EAAAoF,gBAAA+M,EACA,CACA,CACA1T,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,SAAA8uB,GACA,OAAAh7B,KAAAulC,WACA,CACA,eAAAiB,CAAA7mC,GACAK,KAAAulC,YAAA5lC,CACA,CACA0G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,aAAAtB,EAAAiF,SAAA;AACA,mBAAAu6B,CAAA9mC,GACAK,KAAAwlC,kBAAA7lC,CACA,CACA0G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,UAAAuX,GACA,UACA,EAAAziB,EAAAQ,MAAA,4CACAf,KAAA,MACAgB,KAAA,CACA8kC,aAAAvmC,KAAAg7B,MACAoL,oBAAApmC,KAAAylC,mBACAY,cAAArmC,KAAAwlC,qBAGAxlC,KAAAwgB,OAAAsD,QAAA,CACAriB,KAAA,CACAsd,SAAA,EAAA9W,EAAAoC,MAAA,qCAEAwU,SAAA,SAEA,OAAA9E,IACA,EAAAnS,EAAAoF,gBAAA+M,EACA,CACA,CACA1T,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,QAAAtB,EAAAiF,SAAA;AACA,aAAAw6B,GACA1mC,KAAA8c,MAAApL,KAAAozB,EAAAllC,QAAA,CACAwG,MAAA,CACAq/B,mBAAAzlC,KAAAylC,mBACAzK,MAAAh7B,KAAAg7B,QAGA,CACA30B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,WAAAy6B,GACA,MAAAC,EAAA,CACAve,OAAA,EAAApgB,EAAAoC,MAAA,mCACA1K,MAAAK,KAAAqlC,MAAAJ,eAEA4B,EAAA,CACAxe,OAAA,EAAApgB,EAAAoC,MAAA,qCACA1K,MAAAK,KAAAqlC,MAAAH,gBACA/I,SAAA,EAAAl0B,EAAAoC,MAAA,wDAEAy8B,EAAA,CACAze,OAAA,EAAApgB,EAAAoC,MAAA,qCACA1K,MAAAK,KAAAqlC,MAAAF,gBACAhJ,SAAA,EAAAl0B,EAAAoC,MAAA;AAOA,OALArK,KAAAyK,KAAArE,MAAA2gC,oBACAH,EAAAv2B,MAAA,EAAAjL,EAAAxF,SAAA,sBAAAI,KAAAyK,KAAArE,MAAA2gC,sDACAF,EAAAx2B,MAAA,EAAAjL,EAAAxF,SAAA,sBAAAI,KAAAyK,KAAArE,MAAA2gC,2DACAD,EAAAz2B,MAAA,EAAAjL,EAAAxF,SAAA,6HAAAI,KAAAyK,KAAArE,MAAA4gC,oBAEA,EACA3e,OAAA,EAAApgB,EAAAoC,MAAA,mCACA1K,MAAAK,KAAAqlC,MAAAL,eACA4B,EAAAC,EAAAC,EACA,CACAzgC,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAkHA,CACAjF,GAAA,WACAkF,MAAA,4+HACAC,WAAA,qHACAC,MAAA,KAAAxB,EAAAtF,QAAA0H,EAAA1H,QAAAklB,EAAAllB,QAAAqI,EAAAoC,KAAAmf,EAAA5pB,QAAAoH,EAAAiH,GAAA/F,EAAAtI,QAAA+wB,EAAA/wB,QAAAwlB,EAAAmC,OAAAmF,EAAA9sB,QAAAmH,EAAAmH,GAAA22B,EAAAjlC,QAAAglC,EAAAhlC,SACA+G,cAAA,IACA3G,MAxHA,GA0HAR,EAAAI,QAAAmlC,C,GCxTAxlC,OAAA,8ZAAAC,EAAAwF,EAAA8B,EAAAC,EAAAC,EAAAC,EAAAE,EAAAE,EAAAC,EAAAI,EAAA1G,EAAA4G,EAAAkkB,EAAA7mB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAqnC,UAAAjiC,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAApB,EAAAqB,UAAA;AACAuL,GAAA,MAAAxO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAApB,EAAAqB,UAAA;AACA0zB,IAAA,MAAA32B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA02B,IAAA,MAAA95B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA6N,IAAA,MAAAjR,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAAzB,EAAA6B,SAAA,WACA,0BACA,GAFA;AAGA2B,IAAA,MAAA/E,OAAAmD,EAAA1I,KAAA;AACAknC,iBAAA,CACA77B,MAAA,gBACAH,SAAA,mBACAi8B,IAAA;AAEA,SAAAC,GACA,OAAApnC,KAAAyK,KAAA48B,cAAAtnC,IAAA29B,KAAA4J,QAAA5X,KAAA,KACA,CACA,YAAA6X,GACA,OAAAvnC,KAAAwW,SAAAxW,KAAAq/B,YAAA57B,OAAA,CACA,CACA,eAAA+jC,GACAxnC,KAAAwW,SAAAxW,KAAAq/B,YAAA57B,OAAA,IAGAzD,KAAAwW,SAAA,GACA,EAAAxV,EAAAQ,MAAA,2BAAAxB,KAAAyK,KAAAyU,OAAA,CACA+f,OAAA,OACAx9B,KAAA,CACA2I,KAAApK,KAAAonC,SAEA/uB,KAAA/V,IACA,GAAAtC,KAAAyK,KAAAyU,OAAAlf,KAAAknC,iBAAA77B,MACArL,KAAAq/B,YAAA/8B,EAAA+8B;KACA,GAAAr/B,KAAAyK,KAAAyU,OAAAlf,KAAAknC,iBAAAh8B,SAAA,CACA,MAAAu8B,EAAAnlC,EAAAolC,UAAA3nC,IAAA4nC,KAAArmC,IACAsmC,EAAA5nC,KAAA+T,KAAA8zB,WAAA98B,OAAAG,GAAAu8B,EAAA3kC,SAAAoI,EAAA5J;AACAtB,KAAAq/B,YAAAuI,CACA,MAAA5nC,KAAAyK,KAAAyU,OAAAlf,KAAAknC,iBAAAC,MACAnnC,KAAAq/B,YAAA/8B,EAAAolC,UAAA3nC,IAAA4nC,IACA,CACAp6B,KAAAo6B,EAAAp6B,KACAuY,MAAA6hB,EAAA7hB,YAIAvB,MAAA3c,EAAAoF,gBAAA2e,QAAA,KACA3rB,KAAAwW,SAAA,IAEA,CACAnQ,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,eAAA47B,CAAAxL,EAAAJ,GACA,GAAAl8B,KAAAyK,KAAAyU,KAAA,CAGA,GAAAlf,KAAAyK,KAAAyU,OAAAlf,KAAAknC,iBAAA77B,MAEA,OADArL,KAAAyK,KAAAs9B,aAAAzL,GACAJ,EAAAtd;AAEA,GAAA5e,KAAAyK,KAAAyU,OAAAlf,KAAAknC,iBAAAh8B,SAEA,OADAlL,KAAAyK,KAAAs9B,aAAAzL,EAAAh7B,IACA46B,EAAAtd;AAEA,GAAA5e,KAAAyK,KAAAyU,OAAAlf,KAAAknC,iBAAAC,IAAA,CACA,GAAAnnC,KAAAyK,KAAAu9B,aACA,GAAAh2B,MAAAi2B,QAAAjoC,KAAAyK,KAAAu9B,cAAA,CACA,MAAAE,EAAA,IAAAloC,KAAAyK,KAAAu9B,aAAA1L;AACAt8B,KAAAyK,KAAAs9B,aAAA,QAAA7gB,IAAAghB,IACA,MACA,MAAAA,EAAA,CAAAloC,KAAAyK,KAAAu9B,aAAA1L;AACAt8B,KAAAyK,KAAAs9B,aAAA,QAAA7gB,IAAAghB,IACA,MAEAl2B,MAAAi2B,QAAA3L,GACAt8B,KAAAyK,KAAAs9B,aAAA,IAAAzL,IAEAt8B,KAAAyK,KAAAs9B,aAAA,CAAAzL;AAGA,OAAAJ,EAAAtd,OACA,CA1BA,CA2BA,CACAvY,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAgEA,CACAjF,GAAA,WACAkF,MAAA,2kEACAC,WAAA,sIACAC,MAAA,KAAAY,EAAA1H,QAAAksB,EAAAlsB,QAAAoH,EAAAiH,GAAA5G,EAAAud,GAAA7d,EAAAmH,GAAAxG,EAAA9H,SACA+G,cAAA,IACA3G,MAtEA,GAwEAR,EAAAI,QAAAqnC,C,GCzKA1nC,OAAA,kVAAAC,EAAAyI,EAAA45B,EAAAlY,EAAA3kB,EAAAK,EAAA0W,GACA;AAEAtc,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAuoC,GAAA,EAAAnjC,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBAeA,CACAjF,GAAA,WACAkF,MAAA,4YACAC,WAAA,iIACAC,MAAA,KAAAm7B,EAAAjiC,QAAAqI,EAAAoC,KAAAsf,EAAA/pB,SACA+G,cAAA,KACA,EAAAoV,EAAAnc,cAAAiS,EAAA;AACArS,EAAAI,QAAAuoC,C,GC7BA5oC,OAAA,6iBAAAC,EAAAwF,EAAA8B,EAAAC,EAAAE,EAAAE,EAAAE,EAAA+Y,EAAAxY,EAAAxC,EAAA6C,EAAAmgC,EAAA/V,EAAAC,EAAArtB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAyoC,UAAArjC,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAApB,EAAAqB,UAAA;AACAsU,GAAA,MAAAvX,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAiY,IAAA,MAAAlb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAC,GAAA,MAAAlD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAgY,IAAA,MAAAjb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,iBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA2/B,IAAA,MAAA/iC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA+X,IAAA,MAAAnb,OAAAmD,EAAA1I,KAAA;AACAuoC,gBAAA,EACAh7B,KAAA,SACAjM,GAAA,UACA,CACAiM,KAAA,SACAjM,GAAA,UACA,CACAiM,KAAA,UACAjM,GAAA,WACA,CACAiM,KAAA,QACAjM,GAAA;AAEA,YAAA2f,GACA,MAAAvc,GAAA1E,KAAAyK,KAAA+9B,aAAA9jC,YAAA,IAAA3E,IAAA8E,IACA,MAAA4jC,EAAA,IACA5jC;AAMA,OAJA4jC,EAAAC,OAAA7jC,EAAAE,MAAAF,EAAAE,KAAAtB,OAAA,EACAglC,EAAAC,eACAD,EAAA1jC,KAEA0jC;AAEA,OACAl7B,KAAAvN,KAAAyK,KAAA+9B,aAAAj7B,MAAA,GACAo7B,UAAA3oC,KAAAyK,KAAA+9B,aAAAG,WAAA,GACAzc,YAAAlsB,KAAAyK,KAAA+9B,aAAAtc,aAAA,GACA0c,QAAA5oC,KAAAyK,KAAA+9B,aAAAI,SAAA,GACAlkC,aACAmkC,OAAA7oC,KAAAyK,KAAA+9B,aAAAK,QAAA,GACAvV,YAAAtzB,KAAAyK,KAAA+9B,aAAAlV,aAAA,GAEA,CACA,YAAAwV,CAAAnpC,EAAAiR,GACA,IAAArD,KACAA,EAAAw7B,WACAA,EAAAjmB,IACAA,GACAlS;AAEAkS,EAAA,GAAAimB,SADAppC,EACA,KAEA,IAEAmjB,EAAAvV,EAAA5N,EACA,CACA0G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,gBAAAtB,EAAAiF,SAAA;AACA,UAAAuX,CAAAhiB,GACAzB,KAAA0gB,UAAA;AAEA,MAAAsoB,EAAAllC,KAAAC,MAAAD,KAAAE,UAAAvC;AACAunC,EAAAtkC,YACAskC,EAAAtkC,WAAAiM,QAAA9L,IACAA,EAAA6jC,eACA7jC,EAAAE,YAEAF,EAAA6jC;AAGA,UACA1oC,KAAAyK,KAAArE,MAAAqd,KAAAulB,GACAhpC,KAAAwgB,OAAAsD,QAAA,CACAriB,KAAA,CACAsd,SAAA,EAAA9W,EAAAoC,MAAA,6BAEAwU,SAAA,UAEA7e,KAAAyK,KAAA/H,MAAAm3B,IAAA52B,KAAA3B,KAAAtB,KAAAyK,KAAArE,MAAA9E,KACAtB,KAAAyK,KAAA/H,MAAAumC,WAAAjpC,KAAAyK,KAAArE,aAEApG,KAAAyI,OAAA4nB,YAAA,4CAAArwB,KAAAyK,KAAArE,MACA,OAAA2G,IACA,EAAAnF,EAAAoF,gBAAAD,EACA,SACA/M,KAAA0gB,UAAA,CACA,CACA,CACAra,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,QAAAtB,EAAAiF,SAAA;AACA,SACA,OAAAlM,KAAAygB,OAAA0D,QAAA,CACApF,SAAA,EAAA9W,EAAAoC,MAAA,qCACA+Z,WAAAmH,gBACAvrB,KAAAyK,KAAArE,MAAAie,gBACArkB,KAAAyK,KAAA/H,MAAA4hB,aAAAtkB,KAAAyK,KAAArE,OACApG,KAAAyI,OAAA6E,aAAA,gDAGA,CACAjH,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,UAAAtB,EAAAiF,SAAA;AACA,aAAA2nB,CAAA1D,EAAAnc,GACA,MAAAk1B,EAAAl1B,EAAAjJ,OAAAoL,IAAAnW,KAAAsoC,cAAA1f,KAAAhT,KAAAtU,KAAA6U,EAAA7U;AACA6uB,EAAA,cAAA+Y,GACAlpC,KAAAsoC,cAAA,IAAAtoC,KAAAsoC,iBAAAY,EACA,CACA7iC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,YAAAsN,CAAAoa,EAAAzd,GACAnW,KAAAsoC,cAAAtoC,KAAAsoC,cAAAv9B,OAAA6K,KAAAtU,KAAA6U,EAAA7U,IACAsyB,EAAA9Q,IAAA,cAAA9iB,KAAAsoC,cACA,CACAjiC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,gBAAAtB,EAAAiF,SAAA;AACA,aAAAi9B,GACAnpC,KAAA8c,MAAApL,KAAA02B,EAAAxoC,QAAA,CACAwG,MAAA,CACAnD,KAAAjD,KAAAyK,KAAA+9B,eAGA,CACAniC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,yBAAAk9B,CAAA3nC,EAAAwkB,GACA,OAAAxkB,EAAAiD,WAAAuhB,GAAAxlB,IACA,CACA,yBAAA4oC,GACA,OAAArpC,KAAAuO,aAAA+6B,oBAAA,EAAArhC,EAAAoC,MAAA,uDAAApC,EAAAoC,MAAA,uCACA,CACA,UAAAk/B,GACA,MAAAhU,EAAA,wCAAAv1B,KAAAyK,KAAArE,MAAA9E;AACA4N,OAAAkB,SAAAC,MAAA,EAAAjL,EAAAxF,SAAA21B,EACA,CACAlvB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,cAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAkQA,CACAjF,GAAA,WACAkF,MAAA,ylRACAC,WAAA,iIACAC,MAAA,KAAA0Z,EAAAxgB,QAAAqI,EAAAoC,KAAAhD,EAAA8G,IAAA9G,EAAAmpB,GAAAzpB,EAAAmH,GAAAnH,EAAA0d,OAAA1d,EAAAwiB,KAAA+I,EAAA1yB,QAAAyyB,EAAAzyB,SACA+G,cAAA,IACA3G,MAxQA,GA0QAR,EAAAI,QAAAyoC,C,GC5ZA9oC,OAAA,0RAAAC,EAAAwF,EAAAmC,EAAA+Y,EAAAspB,EAAAvkC,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA6pC,UAAAzkC,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAApB,EAAAqB,UAAA;AACAhI,IAAA,MAAA+E,OAAAmD,EAAA1I,KAAA;AACA,kBAAA2gB,GACA,OAAA3gB,KAAAyK,KAAAkW,eAGA3gB,KAAAyK,KAAAsX,QAAAa,OAAA,YAAA5iB,KAAAyK,KAAAkW,gBAFA3gB,KAAAyK,KAAAsX,QAAAa,OAAA,yBAGA,CACA,gBAAA4lB,GACA,OAAAxoC,KAAAyK,KAAArE,MAAAic,MACAriB,KAAAQ,MAAAoB,aAAA,UAAA5B,KAAA2gB,gBAEA3gB,KAAAyK,KAAArE,KAEA,CACAC,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAiBA,CACAjF,GAAA,WACAkF,MAAA,qWACAC,WAAA,4HACAC,MAAA,KAAAwZ,EAAAtgB,QAAA4pC,EAAA5pC,SACA+G,cAAA,IACA3G,MAvBA,GAyBAR,EAAAI,QAAA6pC,C,GChDAlqC,OAAA,ylBAAAC,EAAAwF,EAAA+B,EAAAE,EAAAme,EAAAje,EAAAE,EAAAwd,EAAAvd,EAAAwd,EAAA+G,EAAA7qB,EAAA4G,EAAAK,EAAA8c,EAAA+G,EAAA4d,EAAAzkC,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA+pC,UAAA3kC,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,yBAAApB,EAAAqB,UAAA;AACA0c,IAAA,MAAA3f,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAC,GAAA,MAAAlD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAiY,IAAA,MAAAlb,OAAAmD,EAAA1I,KAAA;AACA,sBAAA4pC,GACA,OAAA5pC,KAAAyK,KAAA/H,MAAA6e,cAAAQ,QAAAte,OAAA,CACA,CACA,cAAAomC,CAAA7nB,GACA,OAAAhiB,KAAAyI,OAAA6E,aAAA,4CACAZ,YAAA,CACAo9B,SAAA9nB,EAAAE,YAGA,CACA7b,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,UAAA69B,GAEA,MAAAvS,EAAAnjB,SAAAojB,cAAA;AACAD,EAAA/2B,KAAA,OACA+2B,EAAAE,OAAA,QACAF,EAAAxd,MAAA2d,QAAA,OACAH,EAAAI,SAAAtoB,GAAAtP,KAAA63B,iBAAAvoB,GACA+E,SAAAyjB,KAAAC,YAAAP,GACAA,EAAAje,QACAlF,SAAAyjB,KAAAE,YAAAR,EACA,CACAnxB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,cAAAtB,EAAAiF,SAAA;AACA,gBAAA2rB,CAAAvoB,GACA,MAAAsG,EAAAtG,EAAA4H,OAAAtC,MAAA;AACA,IAAAgB,EACA;AAEA,MAAAqiB,EAAA,IAAAC;AACAD,EAAAE,OAAAprB,IACA,IACA,MAAAqrB,EAAAt0B,KAAAC,MAAAgJ,EAAAmK,OAAA5U;AACAtC,KAAAgqC,WAAA5R,EAAA6R,QACA,OACAjqC,KAAAygB,OAAA6X,OAAA,EAAArwB,EAAAoC,MAAA,4CACA,GAEA4tB,EAAAM,WAAA3iB,EACA,CACAvP,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,oBAAAtB,EAAAiF,SAAA;AACA,UAAA89B,CAAAE,GAGA,MAAAzR,EAAA,CACAwR,QAAAC;AAKA,OARAt7B,UAAAnL,OAAA,QAAAoO,IAAAjD,UAAA,IAAAA,UAAA,KAMA6pB,EAAAr1B,OAAA,IAEA,EAAApC,EAAAQ,MAPA,mDAOA,CACAf,KAAA,OACAgB,KAAAqC,KAAAE,UAAAy0B,GACAC,YAAA,qBACArgB,KAAA/V,IACA,IAAAW,EAAAymC,EAAA9pC,QAAAsE,OAAA5B,EAAA2nC,SACAE,EAAAnqC,KAAAyK,KAAA/H,MAAAkgB,OAAA,KAAA3f,EAAA3B;AACA6oC,GACAnqC,KAAAyK,KAAA/H,MAAA4hB,aAAA6lB,GAEAnqC,KAAAyK,KAAA/H,MAAAk2B,SAAA,EAAA31B,KACAshB,MAAAxK,IACA,MAAAA,EAAA8e,OAAAC,OACA94B,KAAAygB,OAAA0D,QAAA,CACApF,SAAA,EAAA9W,EAAAoC,MAAA,4CACAkD,KAAA28B,EAAAvB,YAEA1P,mBAAA,+BACA7U,WAAA,IAAApkB,KAAAgqC,WAAAE,GAAA,MAGA,EAAAtiC,EAAAoF,gBAAA+M,IAGA,CACA1T,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBA+FA,CACAjF,GAAA,WACAkF,MAAA,ooHACAC,WAAA,iIACAC,MAAA,KAAAme,EAAAjlB,QAAAqI,EAAAoC,KAAAya,EAAAllB,QAAA0H,EAAA1H,QAAAksB,EAAAlsB,QAAAisB,EAAAjsB,QAAAyH,EAAAud,GAAA7d,EAAAmH,GAAAkX,EAAAmC,OAAAxC,EAAAnlB,SACA+G,cAAA,IACA3G,MArGA,GAuGAR,EAAAI,QAAA+pC,C,GC/LApqC,OAAA,+NAAAC,EAAAuH,EAAAqjC,EAAAplC,EAAAK,EAAA0W,GACA;AAEAtc,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAyqC,GAAA,EAAArlC,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBAWA,CACAjF,GAAA,WACAkF,MAAA,0PACAC,WAAA,8HACAC,MAAA,KAAA0jC,EAAAxqC,QAAAmH,EAAAwiB,MACA5iB,cAAA,KACA,EAAAoV,EAAAnc,cAAAiS,EAAA;AACArS,EAAAI,QAAAyqC,C,GCzBA9qC,OAAA,8LAAAC,EAAAwF,EAAAmC,EAAAiH,EAAAnJ,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA0qC,UAAAtlC,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAApB,EAAAqB,UAAA;AACAwjB,IAAA,MAAAzmB,OAAAmD,EAAA1I,KAAA;AACA,cAAAuqC,GACA,mBAAAvqC,KAAAgsB,MAAAwe,YAAAxqC,KAAAgsB,MAAAue,UACA,CACA,WAAAE,GACA,QAAAzqC,KAAA0qC,IACA,CACA,QAAAA,GACA,OAAA1qC,KAAAyK,KAAA85B,MAAA5f,IAAA,gBACA,CACA,kBAAAgmB,GACA,OAAA3qC,KAAAyK,KAAA85B,MAAA5f,IAAA,iBACA,CACAte,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAoBA,CACAjF,GAAA,WACAkF,MAAA,4nBACAC,WAAA,2HACAC,MAAA,KAAA0H,EAAA+C,UACAxK,cAAA,IACA3G,MA1BA,GA4BAR,EAAAI,QAAA0qC,C,GClDA/qC,OAAA,k1BAAAC,EAAAwF,EAAA8B,EAAAC,EAAAE,EAAAC,EAAAmK,EAAA+T,EAAAje,EAAAE,EAAA8Y,EAAA7Y,EAAAwd,EAAA8f,EAAAgG,EAAA1U,EAAA1kB,EAAAxQ,EAAA46B,EAAAiP,EAAA5iC,EAAA48B,EAAA9f,EAAA+lB,EAAAna,EAAA1rB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAmrC,UAAA/lC,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAApB,EAAAqB,UAAA;AACAhI,IAAA,MAAA+E,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,OAAAhD,SAAAI,SAAA,WAAAilC,QACA,GAFA;AAGAC,IAAA,MAAA1lC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,WAAAuiC,IACA,GAFA;AAGAC,IAAA,MAAA5lC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAAzB,EAAA6B,SAAA,WACA,OAAA3I,KAAAyK,KAAArE,KACA,GAFA;AAGA3E,IAAA,MAAA8D,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,mBAAAzB,EAAA6B,UAAA;AACAyiC,IAAA,MAAA7lC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,iBAAAzB,EAAA6B,UAAA;AACA0iC,IAAA,MAAA9lC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,kBAAAzB,EAAA6B,SAAA,WACA,aACA,GAFA;AAGA2iC,IAAA,MAAA/lC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,sBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA4iC,IAAA,MAAAhmC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA6iC,IAAA,MAAAjmC,OAAAmD,EAAA1I,KAAA;AACA,WAAA0O,GACAC,SAAAC,WACA5O,KAAAyrC,WACA,CACA,eAAAA,GACA,MAAA7+B,QAAA,EAAA5L,EAAAQ,MAAA,oDACAC,KAAA,CACA6K,WAAA3G,OAAA3F,KAAAirC,WAAArlC,OAAA,cACA2G,SAAA5G,OAAA3F,KAAAmrC,SAAAvlC,OAAA,cACAkhB,QAAA9mB,KAAAorC,gBACAhlC,MAAApG,KAAAqrC;AAGArrC,KAAAyB,KAAAmL,EACA5M,KAAAwrC,aAAA,EACAxrC,KAAA0rC,gBAAA,KACA1rC,KAAA2rC,cAAA,IACA,CACAtlC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,aAAAtB,EAAAiF,SAAA;AACA,oBAAAkd,SACAppB,KAAAyrC,WACA,CACAplC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,gBAAA0/B,CAAAjsC,GACAK,KAAAorC,gBAAAzrC,EACAK,KAAAopB,gBACA,CACA/iB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,oBAAAtB,EAAAiF,SAAA;AACA,cAAA2/B,CAAAlsC,GACAK,KAAAqrC,cAAA1rC,EACAK,KAAAopB,gBACA,CACA/iB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,eAAA4/B,CAAAziC,GACAA,EAAAM,iBAAA,uBAAAgH,QAAA0X,IACA,GAAAA,EAAA0jB,UAAAxjB,UAAA,EAAAtgB,EAAAoC,MAAA,sCACA,MAAA2hC,EAAA3jB,EAAA4jB,QAAA,iBAAA1iC,cAAA;AACAyiC,IACAA,EAAAD,UAAA,IAAAC,EAAAD,YAEA,GAEA,CACA1lC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,SAAAggC,CAAAC,EAAAC,GACA,OAAApsC,KAAAyB,KAAA8W,MAAAoN,MAAAwmB,EAAAC,EACA,CACA/lC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,aAAAqzB,EAAA7sB,OAAA;AACA,uBAAAs9B,CAAA5qC,GACA,IAAAA,GAAAgC,OACA;AAEA,MAAAwnC,EAAAtlC,OAAA3F,KAAAirC,WACAE,EAAAxlC,OAAA3F,KAAAmrC,SACAmB,EAAA;AACA,IAAAC,EACA3mC;AACA,SAAA5F,KAAAyB,KAAA+qC,QACAD,EAAA,OACA3mC,EAAA,uBACA,QAAA5F,KAAAyB,KAAA+qC,QACAD,EAAA,MACA3mC,EAAA,eAEA2mC,EAAA,QACA3mC,EAAA;AAEA,MAAA6mC,EAAA,IAAAC,IAAAjrC,EAAA1B,IAAA4sC,GAAA,CAAAhnC,OAAAgnC,EAAAH,QAAA5mC,UAAA+mC;AACA,QAAAC,EAAAjnC,OAAAslC,GAAA2B,EAAAC,eAAA1B,GAAAyB,EAAAnjC,IAAA,EAAA8iC,GAAA,CACA,MAAAO,EAAAF,EAAAhnC,UACAmnC,EAAAN,EAAA9nB,IAAAmoB;AACAR,EAAA5oC,KAAAqpC,GAAA,CACAP,OAAAI,EAAAhnC,SACAonC,aAAA,EACAC,oBAAA,EACAC,qBAAA,EACAC,sBAAA,GAEA,CACA,OAAAb,CACA,CACA,WAAA3F,GACA,QACAte,OAAA,EAAApgB,EAAAoC,MAAA,qCACA1K,MAAAK,KAAAyB,KAAAmnC,QAAAwE,eACAjR,SAAA,EAAAl0B,EAAAoC,MAAA,oDACA,CACAge,OAAA,EAAApgB,EAAAoC,MAAA,mCACA1K,MAAAK,KAAAyB,KAAAmnC,QAAAoE,aACA7Q,SAAA,EAAAl0B,EAAAoC,MAAA,kDACA,CACAge,OAAA,EAAApgB,EAAAoC,MAAA,qCACA1K,MAAAK,KAAAyB,KAAAmnC,QAAAsE,qBACA/Q,SAAA,EAAAl0B,EAAAoC,MAAA,oDACA,CACAge,OAAA,EAAApgB,EAAAoC,MAAA,sCACA1K,MAAAK,KAAAyB,KAAAmnC,QAAAuE,sBACAhR,SAAA,EAAAl0B,EAAAoC,MAAA,qDACA,CACAge,OAAA,EAAApgB,EAAAoC,MAAA,oCACA1K,MAAAK,KAAAyB,KAAAmnC,QAAAqE,oBACA9Q,SAAA,EAAAl0B,EAAAoC,MAAA,mDACA,CACAge,OAAA,EAAApgB,EAAAoC,MAAA,qCACA1K,MAAAK,KAAAyB,KAAAmnC,QAAAyE,eACAlR,SAAA,EAAAl0B,EAAAoC,MAAA,oDAEA,CACA,eAAAijC,GACA,IAAAttC,KAAAyB,WACA;AAEA,MAAA8rC,EAAAvtC,KAAAqsC,wBAAArsC,KAAAyB,WACA+rC,EAAAn5B,SAAA9K,cAAA,oBACAkkC,EAAAtzB,iBAAAqzB,GACA7iC,EAAA,CACAiC,SAAA6gC,EAAAC,iBAAA,0BAAAnlB,OACAolB,QAAAF,EAAAC,iBAAA,yBAAAnlB,OACAnH,OAAAqsB,EAAAC,iBAAA,wBAAAnlB;AAEA,OACA9nB,KAAA,MACAgB,KAAA,CACAmsC,OAAAL,EAAAxtC,IAAA8tC,IACA,MAAAnoC,EAAAC,OAAAkoC,EAAArB;AACA,eAAAxsC,KAAAyB,KAAA+qC,OACA9mC,EAAAE,OAAA,SACA,QAAA5F,KAAAyB,KAAA+qC,OACA9mC,EAAAE,OAAA,UAEAF,EAAAE,OAAA,YAGAkoC,SAAA,EACAzlB,OAAA,EAAApgB,EAAAoC,MAAA,sCACA5I,KAAA8rC,EAAAxtC,IAAA8tC,KAAAV,uBACAY,gBAAApjC,EAAAiC,UACA,CACAyb,OAAA,EAAApgB,EAAAoC,MAAA,yCACA5I,KAAA8rC,EAAAxtC,IAAA8tC,KAAAX,qBAAAW,EAAAZ,qBACAc,gBAAApjC,EAAAgjC,SACA,CACAtlB,OAAA,EAAApgB,EAAAoC,MAAA,4CACA5I,KAAA8rC,EAAAxtC,IAAA8tC,KAAAZ,qBACAc,gBAAApjC,EAAAyW,UAGAje,QAAA,CACA6qC,YAAA,EACAC,OAAA,CACAC,EAAA,CACAC,SAAA,GAEAC,EAAA,CACAD,SAAA,EACAE,aAAA,KAKA,CACA,qBAAAC,GAOA,OAJAtuC,KAAA0rC,gBAAA1rC,KAAA0rC,kBAAA1rC,KAAAyB,MAAAwmB,UAAA,IAAAloB,IAAAmoB,IAAA,CACA5mB,GAAA4mB,EAAAqmB,aACAhhC,KAAA2a,EAAAqmB,gBAEAvuC,KAAA0rC,eACA,CACA,mBAAA8C,GAKA,OAJAxuC,KAAA2rC,cAAA3rC,KAAA2rC,gBAAA3rC,KAAAyB,MAAA6sB,QAAA,IAAAvuB,IAAA0vB,IAAA,CACAnuB,GAAAmuB,EAAA1G,IACAxb,KAAAkiB,EAAA1G,OAEA/oB,KAAA2rC,aACA,CACA,iBAAA8C,GACA,QACAntC,GAAA,MACAiM,MAAA,EAAAtF,EAAAoC,MAAA,wCACA,CACA/I,GAAA,OACAiM,MAAA,EAAAtF,EAAAoC,MAAA,yCACA,CACA/I,GAAA,QACAiM,MAAA,EAAAtF,EAAAoC,MAAA,0CAEA,CACA,cAAAqkC,CAAAlC,GACA,MAAAmC,EAAAhpC;AACA,OAAA6mC,GACA,UACAxsC,KAAAirC,UAAA0D,EAAAC,QAAA7oC,SAAA,SAAAilC,SACAhrC,KAAAmrC,QAAAwD,EAAA3D;AACA;AACA,WACAhrC,KAAAirC,UAAA0D,EAAAC,QAAA7oC,SAAA,UAAAilC,SACAhrC,KAAAmrC,QAAAwD,EAAA3D;AACA;AACA,YACAhrC,KAAAirC,UAAA0D,EAAAC,QAAA7oC,SAAA,WAAAilC,SACAhrC,KAAAmrC,QAAAwD,EAAA3D,SAGA,CACA3kC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,cAAA2iC,CAAArC,GACAxsC,KAAAsrC,eAAAkB,EACAxsC,KAAAurC,oBAAA,EACAvrC,KAAA0uC,eAAAlC,GACAxsC,KAAAyrC,WACA,CACAplC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,iBAAA4iC,GACA9uC,KAAAurC,oBAAAvrC,KAAAurC,mBACAvrC,KAAAurC,qBACAvrC,KAAAsrC,eAAA,KAEA,CACAjlC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,qBAAAtB,EAAAiF,SAAA;AACA,YAAA6iC,GACA/uC,KAAAurC,oBAAA,EACAvrC,KAAAsrC,eAAA,KACAtrC,KAAAyrC,WACA,CACAplC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,gBAAAtB,EAAAiF,SAAA;AACA,iBAAA8iC,CAAAp+B,GACA,IAAAqB,KACAA,EAAAg9B,GACAA,GACAr+B;AACA5Q,KAAAkvC,WAAAj9B,EACAjS,KAAAmvC,SAAAF,CACA,CACA5oC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,qBAAAtB,EAAAiF,SAAA;AACA,kBAAAkjC,GACApvC,KAAAirC,UAAAjrC,KAAAkvC,WACAlvC,KAAAmrC,QAAAnrC,KAAAmvC,SACAnvC,KAAAyrC,WACA,CACAplC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,sBAAAtB,EAAAiF,SAAA;AACA,aAAAmjC,CAAAC,EAAAC,EAAAC,GAEA,WADAF,EAAAC,EAAAC,GACAC,QAAA,IACA,CACAppC,UAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAwTA,CACAjF,GAAA,WACAkF,MAAA,8uYACAC,WAAA,sHACAC,MAAA,KAAAoe,EAAAllB,QAAAqI,EAAAoC,KAAA/C,EAAA1H,QAAAyH,EAAAud,GAAA7d,EAAAmH,GAAA08B,EAAAhrC,QAAA+wB,EAAA/wB,QAAAmH,EAAAwiB,KAAApJ,EAAAvgB,QAAAilC,EAAAjlC,QAAAglC,EAAAhlC,QAAAsH,EAAAtH,QAAAyR,EAAAzR,QAAAkrC,EAAAlrC,QAAAmlB,EAAAnlB,QAAAirC,EAAA5U,OAAAzkB,EAAA5R,QAAAyH,EAAAqoC,GAAAtqB,EAAAmC,OAAA2O,EAAAt2B,QAAAyH,EAAAmpB,IACA7pB,cAAA,IACA3G,MA9TA,GAgUAR,EAAAI,QAAAmrC,C,GC5lBAxrC,OAAA,yMAAAC,EAAAwF,EAAA8B,EAAAgkC,EAAA7lC,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA+vC,UAAA3qC,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAinC,IAAA,MAAArqC,OAAAmD,EAAA1I,KAAA;AACA,UAAA6vC,GACA,MAAAC,EAAA9vC,KAAAyK,KAAAqlC,YAAA;AACA,OACArvC,KAAA,WACAgB,KAAA,CACAmsC,OAAA5tC,KAAAyK,KAAAmjC,OACAE,SAAA,EACArsC,KAAAzB,KAAAyK,KAAAhJ,KACAssC,gBAAA/tC,KAAAyK,KAAAE,OACAolC,OAAA,MACAC,OAAA,OAGA7sC,QAAA,CACA6qC,YAAA,EACAiC,qBAAA,EACAC,QAAA,CACAC,OAAA,CACAxY,QAAA33B,KAAAyK,KAAA2lC,gBAAA,EACAC,SAAA,YAIAH,QAAA,EACA5uC,GAAA,aACAgvC,UAAA,SAAAC,GACA,MAAAC,EAAAr2B,iBAAA9F,SAAAo8B,iBAAA/C,iBAAA,0BACAgD,EAAAv2B,iBAAA9F,SAAAo8B,iBAAA/C,iBAAA,wBACAiD,EAAAx2B,iBAAA9F,SAAAo8B,iBAAA/C,iBAAA,gCACAkD,IACAA,EAAAC,UACAA,GACAN,EACAO,GAAAD,EAAAE,KAAAF,EAAAG,OAAA,EACAC,GAAAJ,EAAAK,IAAAL,EAAAM,QAAA;AACAP,EAAAQ,UACAR,EAAAS,UAAA,SACAT,EAAAU,aAAA,SACAV,EAAAW,UAAAf,EAAAjoB,OACAqoB,EAAAY,KAAA,QAAAd,EAAAnoB,UAAAooB,EAAApoB,SACAqoB,EAAAa,SAAA3B,EAAAgB,EAAAG,GACAL,EAAAntB,MACA,GACA,CAEAniB,GAAA,iBACA,SAAAgvC,CAAAC,GACA,MAAAK,EAAAL,EAAAK,IACAc,EAAAnB,EAAA9uC,KAAAqsC,SAAA,GACA6D,EAAApB,EAAAqB,eAAA,GACAlB,EAAAv2B,iBAAA9F,SAAAo8B,iBAAA/C,iBAAA,0BACAiD,EAAAx2B,iBAAA9F,SAAAo8B,iBAAA/C,iBAAA;AACAkD,EAAAY,KAAA,GAAAd,EAAAnoB,UAAAooB,EAAApoB,SACAqoB,EAAAW,UAAA,UACAX,EAAAS,UAAA,SACAT,EAAAU,aAAA,SACAK,EAAAlwC,KAAAkP,QAAA,CAAAtH,EAAA4c,KACA,MAAAioB,EACAA,EAAAE,EACAA,GACA/kC,EAAAwoC,kBACAlyC,EAAA+xC,EAAAjwC,KAAAwkB,GACA6rB,EAAAJ,EAAAjwC,KAAAsJ,OAAAuY,KAAA,GAAA7f;AACA,IAAA9D,GAAA,IAAAmyC,GAGAlB,EAAAa,SAAA9xC,EAAAuuC,EAAAE,IAEA,IAGA,CACA/nC,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBASA,CACAjF,GAAA,WACAkF,MAAA,wRACAC,WAAA,4HACAC,MAAA,KAAAokC,EAAAlrC,SACA+G,cAAA,IACA3G,MAfA,GAiBAR,EAAAI,QAAA+vC,C,GCrGApwC,OAAA,8aAAAC,EAAAwF,EAAA8B,EAAAC,EAAAE,EAAAE,EAAA4qC,EAAA3xB,EAAAnY,EAAA8pB,EAAAlE,EAAA5oB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAoyC,UAAAhtC,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAApB,EAAAqB,UAAA;AACAuL,GAAA,MAAAxO,OAAAmD,EAAA1I,KAAA;AACA,IAAAyjB,CAAAhiB,GACA,MAAAwwC,EAAA,IACAxwC;AAEAwwC,EAAAC,WAAAlyC,KAAA+T,KAAAiT,OAAApE,OAAA,KAAAnhB,EAAA0wC,UAAA5kC,KACA0kC,EAAA1L,aAAAvmC,KAAAyK,KAAArE,MAAA9E,GACAtB,KAAAyK,KAAArE,MAAA+pB,oBAAA8hB,GACAjyC,KAAAyK,KAAA2nC,aACApyC,KAAAyK,KAAArE,MAAAisC,QACAryC,KAAAyK,KAAArE,MAAAisC,QAEA,CACAhsC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,QAAAtB,EAAAiF,SAAA;AACA,mBAAAomC,GACA,MAAAC,EAAAvyC,KAAAyK,KAAArE,MAAA2iB,IAAAhnB,WAAAhC,IAAAurB,KAAA6mB,WAAA;AACA,OAAAnyC,KAAA+T,KAAAiT,OAAAjc,OAAAsc,IAAAkrB,EAAAzvC,SAAAukB,EAAA/lB,KAAA,IAAA+lB,EAAA/lB,GACA,CACA,SAAA2wC,GACA,OACAE,SAAA,KACA5L,aAAA,KACAiM,WAAA,KACAC,WAAA,KACAC,iBAAA/sC,OAAAkZ,SAAA,SAAA8zB,YAEA,CACAtsC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,SAAAzB,EAAAsa,SAAA;AACA,UAAAwxB,CAAAxvB,EAAA4D,GACA5D,EAAAN,IAAAkE,EAAA,GACA,CACA3gB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,cAAAtB,EAAAiF,SAAA;AACA,YAAA2mC,CAAApxC,EAAAmP,GACA,IAAAkiC,SACAA,EAAAC,YACAA,GACAniC;AACAnP,EAAA+wC,YAAA/wC,EAAAgxC,YAUAM,EAAA,cACAA,EAAA,gBAVAD,EAAA,cACAznC,OAAA,EAAApD,EAAAoC,MAAA,uCACA0U,SAAA,EAAA9W,EAAAoC,MAAA,kDAEAyoC,EAAA,cACAznC,OAAA,EAAApD,EAAAoC,MAAA,uCACA0U,SAAA,EAAA9W,EAAAoC,MAAA,kDAMA,CACAhE,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,gBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBA4EA,CACAjF,GAAA,WACAkF,MAAA,2uEACAC,WAAA,sIACAC,MAAA,KAAAqrC,EAAAnyC,QAAAqI,EAAAoC,KAAA+V,EAAAxgB,QAAAmyB,EAAAnyB,QAAAmH,EAAAmH,GAAAnH,EAAAwiB,KAAAsE,EAAAjuB,SACA+G,cAAA,IACA3G,MAlFA,GAoFAR,EAAAI,QAAAoyC,C,GCjJAzyC,OAAA,oVAAAC,EAAAwF,EAAA8B,EAAAC,EAAAE,EAAAI,EAAA2rC,EAAAnI,EAAA5iC,EAAAhD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAqzC,UAAAjuC,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,uBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAuqC,IAAA,MAAA3tC,OAAAmD,EAAA1I,KAAA;AACAmzC,WAAA,OACA1yC,KAAA,QACA2yC,aAAA,EACA/nC,OAAA,EAAApD,EAAAoC,MAAA,4DACAob,MAAA,CACAhlB,KAAA,SACA4K,OAAA,EAAApD,EAAAoC,MAAA,2DACAgpC,WAAA,CACA9jC,IAAA,CACA9O,KAAA,UAEAA,KAAA,CACAA,KAAA,SACAsE,KAAA,wCAEAuuC,WAAA,CACA7yC,KAAA,SACAsE,KAAA,+BACA5B,QAAA,CACAowC,aAAA,CACA9yC,KAAA,YAKA+yC,SAAA,kBAzBA;AA4BA,eAAAC,GACA,SAAAxrC,EAAAoC,MAAA,gDACA,CACA,wBAAAqpC,GACA,OAAA5vC,KAAAE,UAAAhE,KAAAyK,KAAAhJ,KAAA4C,gBACA,CACA,eAAAsvC,GACA,MAAAC,EAAA;AAQA,OAPA5zC,KAAAyK,KAAAhJ,KAAA4C,gBAAAsM,QAAAkjC,IACA,UAAAA,EAAApzC,KACAmzC,EAAAC,EAAAtkC,KAAA,IAAAskC,EAAAP,cAEAM,EAAAC,EAAAtkC,KAAAskC,EAAApzC,QAGA,EAAAoqC,EAAAiJ,YAAAF,EACA,CACA,SAAAG,GACA/zC,KAAAkzC,qBAAA,CACA,CACA7sC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,aAAAtB,EAAAiF,SAAA;AACA,UAAAkmC,GACApyC,KAAAkzC,qBAAA,CACA,CACA7sC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,cAAAtB,EAAAiF,SAAA;AACA,oBAAA8nC,CAAApgB,EAAAj0B,GACAi0B,EAAA9Q,IAAA,kBAAAhf,KAAAC,MAAApE,GACA,CACA0G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,wBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAqCA,CACAjF,GAAA,WACAkF,MAAA,kxCACAC,WAAA,qJACAC,MAAA,KAAAW,EAAAmpB,GAAAvoB,EAAAoC,KAAA2oC,EAAApzC,QAAAmH,EAAAwiB,KAAAxiB,EAAAmH,IACAvH,cAAA,IACA3G,MA3CA,GA6CAR,EAAAI,QAAAqzC,C,GClHA1zC,OAAA,w0BAAAC,EAAAwF,EAAA8B,EAAAC,EAAAE,EAAAC,EAAAmK,EAAAC,EAAAnK,EAAAE,EAAAo0B,EAAAn0B,EAAAyqC,EAAAvgC,EAAAtM,EAAAmJ,EAAArN,EAAA46B,EAAAiP,EAAA5iC,EAAAC,EAAA+rC,EAAAlY,EAAA92B,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAs0C,UAAAlvC,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAApB,EAAAqB,UAAA;AACAyzB,IAAA,MAAA12B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAApB,EAAAqB,UAAA;AACAqL,GAAA,MAAAtO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAApB,EAAAqB,UAAA;AACAuL,GAAA,MAAAxO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAApB,EAAAqB,UAAA;AACAsU,GAAA,MAAAvX,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAyB,IAAA,MAAA7E,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAwrC,IAAA,MAAA5uC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAyrC,IAAA,MAAA7uC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,wBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGA0rC,IAAA,MAAA9uC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA2rC,IAAA,MAAA/uC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,iBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA4rC,IAAA,MAAAhvC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA6N,IAAA,MAAAjR,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA6rC,IAAA,MAAAjvC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,kBAAAzB,EAAA6B,SAAA,WACA,WAAAozB,EAAAn8B,QAAA,IAAAI,KAAAoK,KAAA2qB,GAAA/0B,KAAAoK,KAAA2qB,EACA,GAFA;AAGAiI,IAAA,MAAAz3B,OAAAmD,EAAA1I,KAAA;AACA,8BAAAy0C,GACA,IAAAC,GAAA,EAAAzsC,EAAAoC,MAAA;AAOA,OANArK,KAAA20C,0BAAA30C,KAAAq0C,qBAAA,IACAK,GAAA,IACAA,IAAA,EAAAzsC,EAAAoC,MAAA,0BACAyb,MAAA9lB,KAAAq0C,wBAGAK,CACA,CACA,YAAAE,GACA50C,KAAAg9B,eAAA0F,iBACA1iC,KAAAw0C,aAAA,EACAx0C,KAAAoK,KAAA,GACApK,KAAAm0C,aAAA,KACAn0C,KAAAo0C,aAAA,KACAp0C,KAAAq0C,qBAAA,KACAr0C,KAAAs0C,UAAA,EACAt0C,KAAAu0C,eAAA,EACAv0C,KAAAwW,SAAA,EACAxW,KAAA60C,SAAA,IACA,CACA,4BAAAF,GACA,OAAA30C,KAAAyK,KAAArE,MAAA0uC,WAAAlM,OACA,CACA,WAAAmM,GACA,OAAA/0C,KAAAyK,KAAArE,MAAAm+B,MAAAjjC,EACA,CACA,wBAAA0zC,GACA,uCAAAh1C,KAAA+0C,SACA,CACA,SAAAxW,GACA,MAAA0W,EAAA,iCAAAj1C,KAAAyK,KAAArE,MAAAm+B,MAAAjjC;AACAtB,KAAA60C,SAAAI,EACAj1C,KAAAi8B,WAAAsC,UAAA0W,EAAAj1C,KAAAk1C,eACA,CACA7uC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,aAAAqzB,EAAA7sB,OAAA;AACA,WAAAuvB,GACAt+B,KAAAi8B,WAAAqC,YAAA,kCAAAt+B,KAAAk1C,gBACAl1C,KAAA40C,cACA,CACAvuC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,eAAAqzB,EAAA7sB,OAAA;AACA,eAAAomC,GACA,IAAAC,EAAAp1C,KAAAg1C;AAIA,OAHAh1C,KAAA6T,cACAuhC,GAAA,gBAEAp1C,KAAAq1C,gBAAAD,EACA,CACA/uC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,iBAAAopC,GACA,IAAAF,EAAAp1C,KAAAg1C;AASA,OARAh1C,KAAA6T,cACAuhC,GAAA,eACAp1C,KAAAu0C,gBACAa,GAAA,yBAIAp1C,KAAA40C,eACA50C,KAAAq1C,gBAAAD,EACA,CACA/uC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,qBAAAtB,EAAAiF,SAAA;AACA,eAAAmpC,CAAAxnC,GACA,KAAA7N,KAAAwW,SAAAxW,KAAAoK,OAAApK,KAAAu0C,eAKA,OAFAv0C,KAAAwW,SAAA,EACAxW,KAAAm0C,aAAA,MACA,EAAAnzC,EAAAQ,MAAAqM,GAAAwK,KAAA5W,IACAA,GAAA8zC,kBAAAC,kBACA/zC,EAAAg9B,MAAA,EACAz+B,KAAAk1C,eAAAzzC,KAGA,CACA4E,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,oBAAAgpC,CAAAjgB,GACA,MAAAwgB,EAAA,CACAhX,KAAAxJ,EAAAwJ,KACA+B,IAAAvL,EAAAsgB,kBAAAC,mBACAvgB,EAAAsgB;AAEAv1C,KAAAwW,SAAA,EACAxW,KAAAg9B,eAAA0B,aAAA+W,EAAA,OACAxgB,EAAAwJ,OACAz+B,KAAAm0C,cAAA,EAAAtJ,EAAA6K,iBAAA/vC,OAAA8vC,EAAAE,WAAA,0BACA31C,KAAAo0C,aAAAqB,EAAAG,UACA51C,KAAAq0C,qBAAAoB,EAAAI,wBACA71C,KAAAs0C,SAAAmB,EAAAnB,SACAt0C,KAAAu0C,cAAAkB,EAAAnB,UAAAmB,EAAAK,eAEA,CACAzvC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAqzB,EAAA7sB,OAAA;AACA,aAAAsd,CAAAC,GACAtsB,KAAAusB,MAAAD,CACA,CACAjmB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,WAAA6pC,GACA/1C,KAAA8c,MAAAk5B,eAAA,KACAh2C,KAAAyK,KAAA2nC,YACA,CACA/rC,UAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,eAAAtB,EAAAiF,SAAA;AACA7F,UAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBA4DA,CACAjF,GAAA,WACAkF,MAAA,ykEACAC,WAAA,oIACAC,MAAA,KAAAqrC,EAAAnyC,QAAAqI,EAAAoC,KAAAhD,EAAAqd,IAAAxd,EAAAtH,QAAAyR,EAAAzR,QAAA0R,EAAA1R,QAAAyO,EAAAzO,QAAA4R,EAAA5R,QAAAq0C,EAAAr0C,QAAA67B,EAAA77B,QAAAsI,EAAAtI,QAAAmH,EAAAkvC,MAAA/wC,EAAAtF,QAAA0H,EAAA1H,SACA+G,cAAA,IACA3G,MAlEA,GAoEAR,EAAAI,QAAAs0C,C,GCjOA30C,OAAA,qaAAAC,EAAAwF,EAAA8B,EAAAC,EAAAC,EAAAC,EAAAK,EAAAyqC,EAAA/wC,EAAA4G,EAAAK,EAAAH,EAAA7C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAs2C,UAAAlxC,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,UAAA;AACAkY,IAAA,MAAAtb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAwtC,IAAA,MAAA5wC,OAAAmD,EAAA1I,KAAA;AACAo2C,gBAAA;AACA,eAAAC,CAAA9oC,EAAA+B,GACAtP,KAAAo2C,gBAAA7oC,GAAA+B,EAAA4H,OAAAvX,KACA,CACA0G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,aAAAoqC,GACAt2C,KAAAm2C,WAAA;AACA,IACA,MAAAvpC,QAAA,EAAA5L,EAAAQ,MAAA,wCAAAxB,KAAAyK,KAAArE,MAAAnD,KAAA3B,eAAA,CACAb,KAAA,OACAgB,KAAAqC,KAAAE,UAAA,CACAimC,QAAAjqC,KAAAyK,KAAArE,MAAAnD,KACAyB,WAAA1E,KAAAo2C,kBAEA1d,YAAA;AAEA14B,KAAA6gB,YAAA,EAAA/Y,EAAAyuC,YAAA3pC,EAAA4pC,OACA,OAAAz8B,IACA,EAAAnS,EAAAoF,gBAAA+M,EACA,SACA/Z,KAAAm2C,WAAA,CACA,CACA,CACA9vC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,WAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAwCA,CACAjF,GAAA,WACAkF,MAAA,qwCACAC,WAAA,sIACAC,MAAA,KAAAqrC,EAAAnyC,QAAAqI,EAAAoC,KAAArD,EAAAiH,GAAAlH,EAAAmH,GAAA5G,EAAA1H,SACA+G,cAAA,IACA3G,MA9CA,GAgDAR,EAAAI,QAAAs2C,C;ACtFA32C,OAAA,8bAAAC,EAAAwF,EAAA8B,EAAAG,EAAAE,EAAAsvC,EAAA1E,EAAA2E,EAAA11C,EAAA4G,EAAAK,EAAA0oB,EAAA1rB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA+2C,UAAA3xC,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAApB,EAAAqB,UAAA;AACAouC,IAAA,MAAArxC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAkuC,IAAA,MAAAtxC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA6N,IAAA,MAAAjR,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAigC,IAAA,MAAArjC,OAAAmD,EAAA1I,KAAA;AACA82C,mBAAA;AACAC,aAAA,qBAAAh3C,IAAAi3C,IACA,CACAzpC,MAAA,EAAAtF,EAAAoC,MAAA,yCACAyb,MAAAkxB,IAEAr3C,MAAAq3C;AAGA,aAAAC,GACA,OAAAj3C,KAAAyK,KAAArE,MAAA6wC,SACA,CACA,SAAAC,CAAAC,GAGA,OAFAn3C,KAAA62C,WAAAM,EACAn3C,KAAAwW,SAAA,EACAxW,KAAA82C,mBAAAK,IACAn3C,KAAA4oC,QAAA5oC,KAAA82C,mBAAAK,QACAn3C,KAAAwW,SAAA,KAGA,EAAAxV,EAAAQ,MAAA,wCAAAxB,KAAAi3C,iBAAA,CACAx2C,KAAA,MACAgB,KAAA,CACA01C,WAEA9+B,KAAA5W,IACAzB,KAAA82C,mBAAA92C,KAAA62C,YAAAp1C,EAAAmnC,QACA5oC,KAAA4oC,QAAA5oC,KAAA82C,mBAAA92C,KAAA62C,cACAtyB,MAAA3c,EAAAoF,gBAAA2e,QAAA,IAAA3rB,KAAAwW,SAAA,EACA,CACAnQ,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,aAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBA2BA,CACAjF,GAAA,WACAkF,MAAA,wzBACAC,WAAA,8IACAC,MAAA,KAAAqrC,EAAAnyC,QAAAqI,EAAAoC,KAAAsmB,EAAA/wB,QAAA62C,EAAA72C,QAAA82C,EAAA92C,SACA+G,cAAA,IACA3G,MAjCA,GAmCAR,EAAAI,QAAA+2C,C,GCxFAp3C,OAAA,oeAAAC,EAAAwF,EAAA8B,EAAAE,EAAAC,EAAAsK,EAAAnD,EAAA9G,EAAAyqC,EAAA/wC,EAAA4G,EAAAC,EAAAC,EAAAG,EAAAmvC,EAAAnyC,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAy3C,UAAAryC,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAwlB,IAAA,MAAA5oB,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,kBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA2uC,IAAA,MAAA/xC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,eACA,GAFA;AAGA4uC,IAAA,MAAAhyC,OAAAmD,EAAA1I,KAAA;AACA,WAAA0O,GACAC,SAAAC,YACA,EAAA2C,EAAAmoB,MAAA,KACA15B,KAAAw3C,sBAEA,CACA,eAAAC,GACA,IAAAz3C,KAAAmuB,KACA;AAEA,IAAAupB;AACA,IACA,eAAA13C,KAAAu3C,UAGA,OAAAv3C,KAAA23C,kBAAA33C,KAAAmuB,KAAAypB;AAFAF,EAAA5zC,KAAAC,MAAA/D,KAAAmuB,KAAA0pB,oBAIA,OACA,OAAA73C,KAAAmuB,KAAA0pB,mBACA,CACA,SAAAT,EAAAb,YAAAmB,EACA,CACA,iBAAAC,CAAA/qC,GAEA,MACAkrC,EADAlrC,EAAAshB,MAAA,MACAnuB,IAAAg4C,IAAA,EAAAjwC,EAAAkwC,kBAAAD,IAAAroB,KAAA;AACA,SAAAthB,EAAA+C,UAAA2mC,EACA,CACA,WAAAG,GACAj4C,KAAAk4C,KAAAl4C,KAAAmuB,KAAA0pB,oBACA,CACAxxC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,eAAAtB,EAAAiF,SAAA;AACA,YAAAisC,GACAn4C,KAAAk4C,KAAAl4C,KAAAmuB,KAAAypB,qBACA,CACAvxC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,gBAAAtB,EAAAiF,SAAA;AACA,aAAAksC,CAAAC,GACA,UACA,EAAAr3C,EAAAQ,MAAA,wCAAA62C,UAAAhgC,KAAA/V,IACAtC,KAAAmuB,KAAA7rB,GAEA,OAAAyK,IACA,EAAAnF,EAAAoF,gBAAAD,EACA,CACA,CACA,OAAAurC,GACAt4C,KAAAo4C,QAAAp4C,KAAAmuB,KAAAoqB,YACA,CACAlyC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,WAAAtB,EAAAiF,SAAA;AACA,OAAAssC,GACAx4C,KAAAo4C,QAAAp4C,KAAAmuB,KAAAsqB,YACA,CACApyC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,WAAAtB,EAAAiF,SAAA;AACA,IAAAgsC,CAAA9tC,IACA,EAAAtC,EAAAiG,eAAA3D,GACApK,KAAAs3C,gBAAA,EAAArvC,EAAAoC,MAAA,4CACA,EAAAxC,EAAAjI,SAAA,KACAI,KAAAs3C,eAAA,IACA,IACA,CACA,kBAAAE,IACA,EAAAx2C,EAAAQ,MAAA,6BAAAxB,KAAAyK,KAAArE,MAAA9E,2BAAA+W,KAAA/V,IACAtC,KAAAmuB,KAAA7rB,IACAiiB,MAAAxX,KACA,EAAAnF,EAAAoF,gBAAAD,IAEA,CACA,iBAAA2rC,GACA,kBAAA14C,KAAAu3C,UAAA,WACA,CACA,kBAAAoB,GACA,mBAAA34C,KAAAu3C,UAAA,WACA,CACA,cAAAqB,CAAA7rC,GACA/M,KAAAu3C,UAAA,UACAxqC,EAAA8rC,gBACA,CACAxyC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,eAAA4sC,CAAA/rC,GACA/M,KAAAu3C,UAAA,WACAxqC,EAAA8rC,gBACA,CACAxyC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAsEA,CACAjF,GAAA,WACAkF,MAAA,k3EACAC,WAAA,kIACAC,MAAA,KAAAqrC,EAAAnyC,QAAAqI,EAAAoC,KAAArD,EAAAiH,GAAA3G,EAAA1H,SACA+G,cAAA,IACA3G,MA5EA,GA8EAR,EAAAI,QAAAy3C,C,GCrLA93C,OAAA,iuBAAAC,EAAAwF,EAAA8B,EAAAG,EAAAqK,EAAAnK,EAAAiH,EAAA/G,EAAAo0B,EAAAn0B,EAAAyqC,EAAAvgC,EAAAxQ,EAAA4G,EAAAg0B,EAAA9zB,EAAAG,EAAA8wC,EAAAhd,EAAApS,EAAA1kB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAo5C,UAAAh0C,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAApB,EAAAqB,UAAA;AACAqL,GAAA,MAAAtO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAApB,EAAAqB,UAAA;AACAyzB,IAAA,MAAA12B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA6N,IAAA,MAAAjR,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAswC,IAAA,MAAA1zC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,uBAAAzB,EAAA6B,SAAA,WACA,SAAAb,EAAAkwC,kBAAAh4C,KAAAyK,KAAArE,MAAA+Y,aACA,GAFA;AAGA+5B,IAAA,MAAA3zC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAAzB,EAAA6B,SAAA,WACA,WAAAowC,EAAAn5C,QAAAI,KAAAyK,KAAArE,MAAA+Y,aACA,GAFA;AAGAg6B,IAAA,MAAA5zC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA2zB,IAAA,MAAA/2B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,kBAAAzB,EAAA6B,SAAA,WACA,WAAAozB,EAAAn8B,QAAA,IAAAI,KAAAs8B,WAAAvH,GAAA/0B,KAAAs8B,WAAAvH,EACA,GAFA;AAGAiI,IAAA,MAAAz3B,OAAAmD,EAAA1I,KAAA;AACA,WAAA0O,GACAC,SAAAC,WACA5O,KAAAgf,gBACA,CACA,cAAAo6B,GACA,OAAAp5C,KAAAwW,QACAxW,KAAAk5C,oBAEAl5C,KAAAm5C,aAAAn8B,MAAAvZ,OAAA,EACAzD,KAAAm5C,aAAAn8B,KAIAhd,KAAAk5C,mBACA,CACA,wBAAAG,GACA,OAAAr5C,KAAAwW,QACAxW,KAAAk5C,oBAEAl5C,KAAAg9B,eAAAuG,YACA,CACA,eAAAO,GAGA,OAAA9jC,KAAAyK,KAAArE,MAAAkZ,kBACAtf,KAAAm5C,aAAAG,OAEAt5C,KAAAg9B,eAAA8G,WACA,CACA,mBAAAyV,GACA,OAAAv5C,KAAAwW,SAAA,EAAAvO,EAAAoC,MAAA,kDAAApC,EAAAoC,MAAA,8CACA,CACA,sBAAAmvC,GACA,OAAAx5C,KAAAwW,SAAAxW,KAAA8jC,WACA,CACA,mBAAA1F,CAAAz+B,GACAK,KAAAq+B,kBACAr+B,KAAAi8B,WAAAqC,YAAAt+B,KAAAq+B,iBAAAr+B,KAAA0+B,cAEA1+B,KAAAq+B,iBAAA1+B,EACAK,KAAAu+B,WACA,CACA,SAAAA,GAEAv+B,KAAAi8B,WAAAsC,UAAAv+B,KAAAq+B,iBAAAr+B,KAAA0+B,aAAA,EACA,CACA,OAAA+a,GAEAz5C,MAAA05C,KACA15C,KAAAq+B,kBACAr+B,KAAAi8B,WAAAqC,YAAAt+B,KAAAq+B,iBAAAr+B,KAAA0+B,aAEA,CACAr4B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,WAAAqzB,EAAA7sB,OAAA;AACA,YAAA2vB,CAAAp8B,GACAtC,KAAAwW,SAAA,EACAlU,EAAAm8B,OACAz+B,KAAAi5C,YAAA32C,SACAtC,KAAAwW,SAAA,GAEAxW,KAAAyK,KAAArE,MAAAkZ,iBACAtf,KAAAm5C,aAAAza,aAAAp8B,EAAA,UAEAtC,KAAAg9B,eAAA0B,aAAAp8B,EAAA,SAEA,CACA+D,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,gBAAAtB,EAAAiF,SAAA;AACA,oBAAA8S,GACAhf,MAAA05C;AACA,IACA15C,KAAAwW,SAAA;AACA,MAAAlU,QAAA,EAAAtB,EAAAQ,MAAA,6CACAy9B,OAAA,OACAx9B,KAAA,CACA2O,SAAA,WACA8O,KAAAlf,KAAAyK,KAAArE,MAAA8Y,KACA9U,KAAApK,KAAAyK,KAAArE,MAAA+Y,aACAigB,cAAAp/B,KAAAyK,KAAArE,MAAA6W,kBACA08B,sBAAA,EACAja,UAAA1/B,KAAAi8B,WAAA0D;AAGA3/B,KAAAo+B,gBAAA97B,EAAA08B,gBACA,OAAAjyB,IACA,EAAAnF,EAAAoF,gBAAAD,EACA,CACA,CACA1G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,qBAAA0tC,GACA55C,KAAAyK,KAAA2nC,aACApyC,KAAAs8B,YACAt8B,KAAAyK,KAAArE,MAAAiX,aAAAw8B,YAAA75C,KAAAyK,KAAArE,MAAA+Y,aAAAnf,KAAAs8B;AAEA,MAAA2c,EAAAj5C,KAAAi5C,aAAAx1C,OAAA,EAAAzD,KAAAi5C,YAAAj5C,KAAAm5C,aAAA7c;AACAt8B,KAAAyK,KAAArE,MAAAkZ,kBAAA25B,GACAj5C,KAAAyK,KAAArE,MAAAiX,aAAAw8B,YAAA75C,KAAAyK,KAAArE,MAAA+Y,aAAA85B,EAEA,CACA5yC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,yBAAAtB,EAAAiF,SAAA;AACA,eAAA4tC,GACA95C,MAAA05C,KACA15C,KAAAwW,SAAA,EACAxW,KAAAyK,KAAA2nC,YACA,CACA/rC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,GAAAwtC,GACA15C,KAAAs8B,WAAA,GACAt8B,KAAAi5C,YAAA,GACAj5C,KAAAg9B,eAAA0F,iBACA1iC,KAAAm5C,aAAAY,OACA,CACA1zC,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAsEA,CACAjF,GAAA,WACAkF,MAAA,ymEACAC,WAAA,8HACAC,MAAA,KAAAqrC,EAAAnyC,QAAAqI,EAAAoC,KAAAiH,EAAA1R,QAAA4R,EAAA5R,QAAAwO,EAAA+C,SAAA9J,EAAAmuB,GAAAiG,EAAA77B,QAAA0H,EAAA1H,QAAA+pB,EAAA/pB,SACA+G,cAAA,IACA3G,MA5EA,GA8EAR,EAAAI,QAAAo5C,C,GCjOAz5C,OAAA,qbAAAC,EAAAwF,EAAA8B,EAAAE,EAAAC,EAAAE,EAAAiH,EAAA9G,EAAAyqC,EAAA/wC,EAAA4G,EAAAxC,EAAA0C,EAAAG,EAAAhD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAo6C,UAAAh1C,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAgY,IAAA,MAAAjb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAsxC,IAAA,MAAA10C,OAAAmD,EAAA1I,KAAA;AACA,WAAA0O,GACAC,SAAAC,WACA5O,KAAAi6C,SAAAj6C,KAAAyK,KAAArE,MAAA8zC,SACA,CACA,eAAAzC,GACA,IAAAtT,EAAA;AAKA,OAJAnkC,KAAAyK,KAAArE,MAAA+9B,QAAAxzB,QAAA5E,IACAo4B,EAAAzgC,KAAA,SAAAqI,EAAA8K,qBACAstB,EAAAzgC,KAAAqI,EAAAu7B,WAEA,EAAAl5B,EAAA+C,UAAAgzB,EAAAzU,KAAA,MACA,CACA,sBAAAyqB,GACA,IACA,MAAAvtC,QAAA,EAAA5L,EAAAQ,MAAA,gDACAf,KAAA,OACAgB,KAAA,CACA6iC,SAAAtkC,KAAAyK,KAAArE,MAAAk+B,YAGAz2B,GAAA,EAAAzI,EAAA4I,gBAAA,gDAAApB,EAAAstC;AAEA,OADAl6C,KAAAi6C,SAAArtC,EAAAstC,UACA,IAAAE,KAAA,CAAAvsC,GAAA,CACApN,KAAA,cAEA,OAAAsM,GAEA,YADA,EAAAnF,EAAAoF,gBAAAD,EAEA,CACA,CACA,gBAAAstC,GACA,OAAAr6C,KAAAi6C,SAAA,sGACA,CACA,gBAAAK,GACA,UACA,EAAAt5C,EAAAQ,MAAA,gDAAAxB,KAAAi6C,gBAAA,CACAx5C,KAAA,WAEAT,KAAAi6C,SAAA,IACA,OAAAltC,IACA,EAAAnF,EAAAoF,gBAAAD,EACA,CACA,CACA1G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,cAAAtB,EAAAiF,SAAA;AACA,WAAAquC,SACA,EAAAzyC,EAAA0yC,oBAAAx6C,KAAAm6C,iBAAAprC,KAAA/O,OACAA,KAAAwgB,OAAAsD,QAAA,CACAjF,SAAA,QACApd,KAAA,CACAsd,SAAA,EAAA9W,EAAAoC,MAAA,6CAGA,CACAhE,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,SAAAtB,EAAAiF,SAAA;AACA,oBAAAuuC,CAAAnrC,GACA,IAAAA,EAAA4H,OAAA1N,UAAAkxC,SAAA,cACA;AAEAprC,EAAAqrC,kBACArrC,EAAAupC;AACA,IAAA+B,EAAA;AACAtrC,EAAA4H,OAAAw6B,QAAA1hC,kBACA4qC,EAAA,6BAAAtrC,EAAA4H,OAAAw6B,QAAA1hC;AAEA,MAAA6qC,EAAA,4BAAAD,0BAAAtrC,EAAA4H,OAAAw6B,QAAA/hC,qBACAmrC,EAAA,IAAAC,QAAAC,IACAA,EAAAH;MAEA,EAAA/yC,EAAA0yC,oBAAA,IAAAM,GACA96C,KAAAwgB,OAAAsD,QAAA,CACAjF,SAAA,QACApd,KAAA,CACAsd,SAAA,EAAA9W,EAAAoC,MAAA,sCAGA,CACAhE,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAsCA,CACAjF,GAAA,WACAkF,MAAA,o2BACAC,WAAA,0IACAC,MAAA,KAAAqrC,EAAAnyC,QAAAqI,EAAAoC,KAAArD,EAAAiH,GAAA3G,EAAA1H,SACA+G,cAAA,IACA3G,MA5CA,GA8CAR,EAAAI,QAAAo6C,C,GCzIAz6C,OAAA,4dAAAC,EAAAwF,EAAA8B,EAAA7B,EAAA+B,EAAAC,EAAAE,EAAAiH,EAAA9G,EAAAyqC,EAAAlqC,EAAAI,EAAAoS,EAAA4gC,EAAA51C,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAo6C,UAAAh1C,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAApB,EAAAqB,UAAA;AACAsU,GAAA,MAAAvX,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAApB,EAAAqB,UAAA;AACAqL,GAAA,MAAAtO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAuyC,IAAA,MAAA31C,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA8uC,IAAA,MAAAlyC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAwyC,IAAA,MAAA51C,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAyyC,IAAA,MAAA71C,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,kBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA2uC,IAAA,MAAA/xC,OAAAmD,EAAA1I,KAAA;AACA,WAAA0O,GACAC,SAAAC;AACA,MAAAkmC,EAAA90C,KAAAyK,KAAArE,MAAAm+B,MAAA5f,IAAA;AACA,IAAA02B,EAAA;AAEA,QAAA3yC,EAAA,EAAAA,GAAA1I,KAAAyK,KAAArE,MAAAk1C,YAAA5yC,IACA2yC,EAAA33C,KAAAgF;AAEA1I,KAAAo7C,SAAAC,EAAAt7C,IAAAw7C,IACA,IAAA9b,EAAAqV,EAAA0G,wBAAAD;AACA,GAAA9b,EACA,OAAAqV,EAAA2G,eAAAhc,KAEA10B,OAAAgB,MACA/L,KAAAm7C,WAAAn7C,KAAAo7C,SAAA33C,OAAA,EACAzD,KAAAk7C,aAAA,EACAl7C,KAAA07C,mBACA,CACA,iBAAAA,GACA,IAAAvX,EAAA;AAEA,QAAAz7B,EADA1I,KAAAo7C,SAAA33C,OAAA,EAAAzD,KAAAk7C,aACAxyC,EAAA1I,KAAAo7C,SAAA33C,OAAAiF,IAAA,CACA,MAAAqD,EAAA/L,KAAAo7C,SAAA1yC;AACAy7B,EAAAzgC,KAAA,SAAAqI,EAAA8K,qBACAstB,EAAAzgC,KAAAqI,EAAAu7B,OACA,CACAtnC,KAAAy3C,aAAA,EAAArpC,EAAA+C,UAAAgzB,EAAAzU,KAAA,MACA,CACArpB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,qBAAAtB,EAAAiF,SAAA;AACA,iBAAAyvC,GACA,MAAA1pC,EAAAjS,KAAAo7C,SAAAp7C,KAAAo7C,SAAA33C,OAAA,EAAAzD,KAAAk7C,cAAAI,YACArM,EAAAjvC,KAAAyK,KAAArE,MAAAk1C;MACA,EAAAL,EAAAr7C,SAAAI,KAAAyK,KAAArE,MAAAm+B,MAAAtyB,EAAAg9B,GACAjvC,KAAAs3C,gBAAA,EAAArvC,EAAAoC,MAAA,4CACA,EAAAxC,EAAAjI,SAAA,KACAI,KAAAs3C,eAAA,IACA,IACA,CACAjxC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,eAAAtB,EAAAiF,SAAA;AACA,sBAAA0vC,CAAAtsC,GAIA,OAHAA,GAAAupC,iBACA74C,KAAAyK,KAAA2nC,cACA,EAAA/3B,EAAAwhC,4BAAA77C,KAAA8c,MAAA9c,KAAAyK,KAAArE,MAAAk+B,WACA,CACA,CACAj+B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,0BAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBA8CA,CACAjF,GAAA,WACAkF,MAAA,qiDACAC,WAAA,+HACAC,MAAA,KAAAqrC,EAAAnyC,QAAAqI,EAAAoC,KAAApF,EAAA62C,MAAA90C,EAAAiH,GAAA3G,EAAA1H,SACA+G,cAAA,IACA3G,MApDA,GAsDAR,EAAAI,QAAAo6C,C,GCtIAz6C,OAAA,sdAAAC,EAAAwF,EAAA8B,EAAAC,EAAAC,EAAAC,EAAAK,EAAAyqC,EAAArlB,EAAA1rB,EAAA4G,EAAAK,EAAA0hB,EAAA1kB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAm8C,UAAA/2C,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,UAAA;AACAkY,IAAA,MAAAtb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAwtC,IAAA,MAAA5wC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAqzC,IAAA,MAAAz2C,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAszC,IAAA,MAAA12C,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAAzB,EAAA6B,UAAA;AACAuzC,IAAA,MAAA32C,OAAAmD,EAAA1I,KAAA;AACA,aAAAs2C,GACAt2C,KAAAm2C,WAAA;AACA,IACA,MAAAvpC,QAAA,EAAA5L,EAAAQ,MAAA,iDACAf,KAAA,OACAgB,KAAA,CACA06C,SAAAn8C,KAAAg8C,QACA5V,oBAAApmC,KAAAyK,KAAArE,MAAAq/B,mBACAQ,OAAAjmC,KAAAyK,KAAArE,MAAA40B;AAGAh7B,KAAAk8C,OAAAtvC,EAAAwvC,QACAp8C,KAAA6gB,WAAAjU,EAAAwvC,SAAA,EAAAn0C,EAAAoC,MAAA,wCAAApC,EAAAoC,MAAA,yCACArK,KAAAi8C,QAAArvC,EAAAyvC,GACA,OAAAtiC,IACA,EAAAnS,EAAAoF,gBAAA+M,EACA,SACA/Z,KAAAm2C,WAAA,CACA,CACA,CACA9vC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,WAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAqDA,CACAjF,GAAA,WACAkF,MAAA,ozDACAC,WAAA,mIACAC,MAAA,KAAAqrC,EAAAnyC,QAAAqI,EAAAoC,KAAArD,EAAAiH,GAAAye,EAAA9sB,QAAAmH,EAAAmH,GAAA5G,EAAA1H,QAAA+pB,EAAA/pB,SACA+G,cAAA,IACA3G,MA3DA,GA6DAR,EAAAI,QAAAm8C,C,GC1GAx8C,OAAA,sfAAAC,EAAAwF,EAAA8B,EAAAG,EAAAkZ,EAAA7Y,EAAAyqC,EAAA2E,EAAA11C,EAAA4G,EAAAK,EAAAq0C,EAAAr3C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA28C,UAAAv3C,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA6N,IAAA,MAAAjR,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,kBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA6zC,IAAA,MAAAj3C,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAyW,IAAA,MAAA7Z,OAAAmD,EAAA1I,KAAA;AACA,WAAA0O,GACAC,SAAAC,WACA5O,KAAAy8C,gBACA,CACA,cAAAC,GACA,WAAA18C,KAAAw8C,eAAA/4C,MACA,CACA,oBAAAg5C,GACAz8C,KAAAwW,SAAA;AACA,IACA,MAAA4I,QAAA,EAAApe,EAAAQ,MAAA,mCACAy9B,OAAA,OACAx9B,KAAA,CACAyd,KAAAlf,KAAAyK,KAAArE,MAAA8Y,KACA9U,KAAApK,KAAAyK,KAAArE,MAAA+Y,aACAw6B,sBAAA;AAGA35C,KAAAof,uBACA,OAAArF,IACA,EAAAnS,EAAAoF,gBAAA+M,EACA,SACA/Z,KAAAwW,SAAA,CACA,CACA,CACA,YAAAmmC,CAAAC,GACA,MAAAC,EAAA,KAAAD,EAAAE,qBAAAF,EAAAlkC,SAAAkkC,EAAA5rC,WAAA4rC,EAAAG;AACA/8C,KAAAw8C,eAAA,IAAAx8C,KAAAw8C,eAAAK,EACA,CACAx2C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,gBAAAtB,EAAAiF,SAAA;AACA,eAAA8wC,CAAAJ,GACA,MAAAC,EAAA,KAAAD,EAAAE,qBAAAF,EAAAlkC,SAAAkkC,EAAA5rC,WAAA4rC,EAAAG;AACA/8C,KAAAw8C,eAAAx8C,KAAAw8C,eAAAzxC,OAAAkyC,IACA,GAAAA,IAAAJ,EACA,OAAAI,GAGA,CACA52C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,oBAAAgxC,GACA,MAAAC,EAAA,OAAAn9C,KAAAw8C,eAAA9sB,KAAA,MACA0tB,EAAA/oC,SAAA9K,cAAA;AACA6zC,EAAAC,kBAAAD,EAAAz9C,MAAA8D,OAAA25C,EAAAz9C,MAAA8D,QACA25C,EAAAzlC,QACAtD,SAAAipC,YAAA,gBAAAH,GACAn9C,KAAAyK,KAAA2nC,YACA,CACA/rC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,wBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAkCA,CACAjF,GAAA,WACAkF,MAAA,q+BACAC,WAAA,yIACAC,MAAA,KAAAqrC,EAAAnyC,QAAAqI,EAAAoC,KAAA8V,EAAAvgB,QAAA08C,EAAA18C,QAAA0H,EAAA1H,QAAA82C,EAAA92C,SACA+G,cAAA,IACA3G,MAxCA,GA0CAR,EAAAI,QAAA28C,C,GC9GAh9C,OAAA,2LAAAC,EAAAyI,EAAAjD,EAAAK,EAAA0W,GACA;AAEAtc,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA29C,GAAA,EAAAv4C,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBAmBA,CACAjF,GAAA,WACAkF,MAAA,wvBACAC,WAAA,8HACAC,MAAA,KAAAuB,EAAAoC,MACA1D,cAAA,KACA,EAAAoV,EAAAnc,cAAAiS,EAAA;AACArS,EAAAI,QAAA29C,C,GCjCAh+C,OAAA,kRAAAC,EAAAwF,EAAAiC,EAAAK,EAAAtG,EAAA4G,EAAA3C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA49C,UAAAx4C,EAAApF,QACA,qBAAA69C,GACA,MAAA1xC,EAAA/L,KAAAyK,KAAAsB;AACA,UACA,EAAA/K,EAAAQ,MAAA,6BAAAuK,EAAAzK,oBAAA,CACAb,KAAA,SAEA4T,SAAA9K,cAAA,SAAAwC,EAAAuvC,eAAA9xC,UAAAK,OAAA,YACA,OAAAkD,IACA,EAAAnF,EAAAoF,gBAAAD,EACA,CACA,CACA1G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAYA,CACAjF,GAAA,WACAkF,MAAA,wPACAC,WAAA,kJACAC,MAAA,KAAAY,EAAA1H,SACA+G,cAAA,IACA3G,MAlBA,GAoBAR,EAAAI,QAAA49C,C,GCxCAj+C,OAAA,gXAAAC,EAAAwF,EAAAiC,EAAAE,EAAAG,EAAA+S,EAAAqjC,EAAAz4C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA+9C,UAAA34C,EAAApF,QACA,mBAAAqc,CAAAxR,GACA,SAAA4P,EAAAujC,iBAAAnzC,EAAAsB,KAAAtB,EAAAiF,MAAAmE,YACA,CACAxN,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAApB,EAAAqB,UAAA;AACAsU,GAAA,MAAAvX,OAAAmD,EAAA1I,KAAA;AACA,eAAA69C,GACA79C,KAAA8c,MAAApL,KAAAgsC,EAAA99C,QAAA,CACAwG,MAAApG,KAAAyK,KAAAsB,MAEA,CACA1F,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAYA,CACAjF,GAAA,WACAkF,MAAA,mNACAC,WAAA,uIACAC,MAAA,KAAAY,EAAA1H,SACA+G,cAAA,IACA3G,MAlBA,GAoBAR,EAAAI,QAAA+9C,C,GCvCAp+C,OAAA,8aAAAC,EAAAwF,EAAAiC,EAAAE,EAAAG,EAAA+S,EAAA4gC,EAAA6C,EAAA74C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AAEA,MAAA+9C,UAAA34C,EAAApF,QACA,mBAAAqc,CAAAxR,GACA,SAAA4P,EAAAujC,iBAAAnzC,EAAAsB,KAAAtB,EAAAiF,MAAAmE,YACA,CACAxN,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAApB,EAAAqB,UAAA;AACAsU,GAAA,MAAAvX,OAAAmD,EAAA1I,KAAA;AACA,qBAAA+9C,GACA,MAAAhyC,EAAA/L,KAAAyK,KAAAsB;AACAA,EAAAuvC,aATA,SAUA,EAAAL,EAAAr7C,SAAAmM,EAAAw4B,MAAA,EAAAx4B,EAAAuvC,aACAt7C,KAAAyK,KAAAuzC,aAAA,4CAEAh+C,KAAA8c,MAAApL,KAAAosC,EAAAl+C,QAAA,CACAwG,MAAA2F,GAGA,CACA1F,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAYA,CACAjF,GAAA,WACAkF,MAAA,oNACAC,WAAA,uIACAC,MAAA,KAAAY,EAAA1H,SACA+G,cAAA,IACA3G,MAlBA,GAoBAR,EAAAI,QAAA+9C,C,GC9CAp+C,OAAA,gOAAAC,EAAAwF,EAAAqV,EAAApV,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAq+C,UAAAj5C,EAAApF,QACA,mBAAAqc,CAAAxR,GACA,SAAA4P,EAAA6jC,UAAAzzC,EAAAsB,KAAAxJ,KACA,CACA8D,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAQA,CACAjF,GAAA,WACAkF,MAAA,6KACAC,WAAA,mIACAE,cAAA,IACA3G,MAbA,GAeAR,EAAAI,QAAAq+C,C,GC1BA1+C,OAAA,ySAAAC,EAAAwF,EAAA8B,EAAAE,EAAAC,EAAAgB,EAAAgqB,EAAAhtB,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAu+C,UAAAn5C,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,uBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAy1C,IAAA,MAAA74C,OAAAmD,EAAA1I,KAAA;AACA,qBAAAq+C,CAAA/uC,GACAtP,KAAAo+C,qBAAAp+C,KAAAo+C,oBACA9uC,EAAAupC,iBACAvpC,EAAAqrC,iBACA,CACAt0C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,yBAAAtB,EAAAiF,SAAA;AACA,uBAAAoyC,GACA,OAAAt+C,KAAAo+C,qBAAA,EAAAn2C,EAAAoC,MAAA,qDAAApC,EAAAoC,MAAA,iDACA,CACA,cAAAk0C,GACA,OAAAv+C,KAAAyK,KAAA2jB,KAAArjB,OAAAge,KAAAmG,eACA,CACA7oB,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAwDA,CACAjF,GAAA,WACAkF,MAAA,mxDACAC,WAAA,4HACAC,MAAA,KAAAM,EAAAiH,GAAAhG,EAAAoC,KAAA4nB,EAAAryB,SACA+G,cAAA,IACA3G,MA9DA,GAgEAR,EAAAI,QAAAu+C,C,GCxFA5+C,OAAA,4UAAAC,EAAAwF,EAAA8B,EAAAG,EAAAC,EAAAC,EAAAjC,EAAA02B,EAAA3zB,EAAAhD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA4+C,UAAAx5C,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAApB,EAAAqB,UAAA;AACAyzB,IAAA,MAAA12B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,mBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGA81C,IAAA,MAAAl5C,OAAAmD,EAAA1I,KAAA;AACA,WAAAoP,GACAT,MAAAS,eAAAR,WACA5O,KAAAi8B,WAAAqC,YAAA,qBAAAt+B,KAAAyK,KAAA0L,OAAA7U,KACA,CACA,aAAAo9C,GACA1+C,KAAAi8B,WAAAsC,UAAA,qBAAAv+B,KAAAyK,KAAA0L,OAAA7U,KAAAtB,KAAA2+C,iBACA,CACAt4C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,gBAAAyyC,CAAAl9C,KAEAzB,KAAAy+C,iBAAA,IAAAz+C,KAAAy+C,gBAAA1N,MAAA/wC,KAAAy+C,gBAAA1N,KAAAtvC,EAAAsvC,MAAAtvC,EAAAm9C,QAAAn9C,EAAAo9C,WACA7+C,KAAAy+C,gBAAAh9C,EAEA,CACA4E,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,oBAAAqzB,EAAA7sB,OAAA;AACA,qBAAA+vC,GACA,WAAA9+C,KAAA++C,SAAAH,MACA,EAEA7d,KAAAie,KAAA,IAAAh/C,KAAA++C,SAAAF,QAAA7+C,KAAA++C,SAAAH,MACA,CACA,gBAAAK,GACA,OAAAj/C,KAAA++C,UAAA,IAAA/+C,KAAA++C,SAAAH,OAAA,IAAA5+C,KAAA++C,SAAAhO,IACA,CACA,YAAAgO,GACA,OAAA/+C,KAAAy+C,gBACAz+C,KAAAy+C,gBACAz+C,KAAAyK,KAAAy0C,oBACAl/C,KAAAyK,KAAAy0C,oBAAAl/C,KAAAyK,KAAA0L,OAAA7U,IAEA,EAEA,CACA+E,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAyBA,CACAjF,GAAA,WACAkF,MAAA,w1BACAC,WAAA,iIACAC,MAAA,KAAAQ,EAAAtH,QAAAsF,EAAAtF,QAAAqI,EAAAoC,MACA1D,cAAA,IACA3G,MA/BA,GAiCAR,EAAAI,QAAA4+C,C,GChFAj/C,OAAA,+fAAAC,EAAAsH,EAAA9B,EAAA+B,EAAAC,EAAAC,EAAA+L,EAAA9L,EAAAC,EAAAG,EAAApC,EAAAlE,EAAAm+C,EAAA7rC,EAAArL,EAAAm3C,EAAA/5C,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAy/C,UAAAr6C,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAApB,EAAAqB,UAAA;AACAgS,GAAA,MAAAjV,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAuP,IAAA,MAAA3S,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,mBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGA22C,IAAA,MAAA/5C,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,uBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAu2C,IAAA,MAAA35C,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGA42C,IAAA,MAAAh6C,OAAAmD,EAAA1I,KAAA;AACAkU,WAAA,SAAAZ,EAAA1T,SAAA,EAAAoT,EAAAgC,UAAAhV,MAAA,CACAsB,GAAA,4BACAk+C,SAAA,GACA/+C,KAAA,0BACAg/C,UAAA,kEACAC,wBAAA,EACAxpC,WAAAypC,IACA,MAAAC,EAAAD,EAAAxpC;AACAypC,EAAA9mB,OAAA,WACA8mB,EAAAC,YAAA,EAAA53C,EAAAoC,MAAA,qCACArK,KAAAu/C,WAAAtW,WAAA2W,GACA5/C,KAAA8/C,qBAXA;AAcA,WAAA1wC,GACAT,MAAAS,eAAAR,WACA5O,KAAAwa,UAAA6P,IAAA,gBAAArqB,KAAAkU,WAAA27B,8BAAA7vC,KAAA,2BACA,CACA,eAAA+/C,GACApxC,MAAAoxC,mBAAAnxC,WACA5O,KAAAkU,WAAA4B,mBAAArS,OAAA,GACAzD,KAAAkU,WAAA8rC,mBAEAhgD,KAAAu/C,WAAAv/C,KAAAkX,QAAAoc,aAAA3N,SAAA,GACA3lB,KAAAs/C,gBAAAt/C,KAAAu/C;AACA,MAAAU,EAAAjgD,KAAAigD,YAAAjgD,KAAAkX,QAAAxI,aAAAnB;AACAvN,KAAAu/C,YAAA97C,QAAAzD,KAAAkX,QAAA5V,KACA,EAAAN,EAAAQ,MAAA,oFAAAy+C,eAAAjgD,KAAAkX,OAAA5V,MAAA+W,KAAA6nC,IACAlgD,KAAA8iB,IAAA,sBAAAo9B,KAGAlgD,KAAAwa,UAAAvM,GAAA,gBAAAjO,KAAAkU,WAAA27B,OAAAvuC,0BAAAtB,KAAA,2BACA,CACA,wBAAAmgD,GACAngD,KAAA6zB,cAAA7zB,KAAAu/C,WACA,CACA,qBAAAa,GACA,OAAApgD,KAAAyK,MAAA41C,YACA,2BAEA,eAEA,CACA,WAAAC,GACAtgD,KAAAkU,WAAAqsC,YACA,CACAl6C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,eAAAtB,EAAAiF,SAAA;AACA,eAAAs0C,CAAArqC,GACAnW,KAAAkU,WAAAyF,mBAAA,CACAC,OAAAzD,EAAA7U,IAEA,CACA+E,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,MAAA61B,GACA/hC,KAAAkY,KACAlY,KAAAs/C,gBAAAt/C,KAAAu/C,WAAAx0C,OAAA0O,GACAA,EAAAqjC,kBAAA2D,cAAA1tC,QAAA/S,KAAAkY,KAAAuoC,gBAAA,GAGAzgD,KAAAs/C,gBAAAt/C,KAAAu/C,UAEA,CACAl5C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,UAAAtB,EAAAiF,SAAA;AACA,eAAA4zC,IACA,EAAAX,EAAAv/C,SAAAI,UAAA+hC,OAAA,IACA,CACA17B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,YAAAsN,CAAArD,GACAnW,KAAAu/C,WAAAj7B,aAAAnO,GACAnW,KAAA0gD,SAAAvqC,GACAnW,KAAA8/C,iBACA,CACAz5C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,gBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAArB,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBA2FA,CACAjF,GAAA,WACAkF,MAAA,+0GACAC,WAAA,0HACAC,MAAA,KAAAuB,EAAAoC,KAAAnF,EAAAtF,QAAAoF,EAAA82C,MAAA90C,EAAAiH,GAAAmxC,EAAAx/C,QAAA0H,EAAA1H,QAAAmH,EAAAmH,GAAAhH,EAAAtH,SACA+G,cAAA,IACA3G,MAjGA,GAmGAR,EAAAI,QAAAy/C,C,GCtMA9/C,OAAA,qgBAAAC,EAAAwF,EAAA+B,EAAAqe,EAAAhX,EAAA/G,EAAAs5C,EAAAC,EAAAC,EAAAC,EAAAC,EAAA97C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAohD,UAAAh8C,EAAApF,QACA,eAAAqhD,GACA,GAAAjhD,KAAAyK,KAAAy2C,WAAAC,aAGA,OAAAL,EAAAlhD,QAAAsE,OAAAlE,KAAAyK,KAAAy2C,WAAAC,aACA,CACA96C,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBA2CA,CACAjF,GAAA,WACAkF,MAAA,grCACAC,WAAA,wIACAC,MAAA,KAAA0e,EAAAmC,OAAAxgB,EAAAkvC,MAAA4K,EAAAjhD,QAAA+gD,EAAA/gD,QAAAghD,EAAAhhD,QAAAwO,EAAA+C,SAAA9J,EAAAmuB,GAAAurB,EAAAnhD,SACA+G,cAAA,IACA3G,MAjDA,GAmDAR,EAAAI,QAAAohD,C,GCjEAzhD,OAAA,2cAAAC,EAAA4O,EAAAuyC,EAAAS,EAAAR,EAAAS,EAAAp5C,EAAA84C,EAAA/7C,EAAAK,EAAA0W,GACA;AAEAtc,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA0hD,GAAA,EAAAt8C,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBA+BA,CACAjF,GAAA,WACAkF,MAAA,6gCACAC,WAAA,gIACAC,MAAA,KAAA26C,EAAAzhD,QAAAwhD,EAAAxhD,QAAA+gD,EAAA/gD,QAAAghD,EAAAhhD,QAAAqI,EAAAoC,KAAA+D,EAAA+C,SAAA4vC,EAAAnhD,SACA+G,cAAA,KACA,EAAAoV,EAAAnc,cAAAiS,EAAA;AACArS,EAAAI,QAAA0hD,C,GC7CA/hD,OAAA,uhBAAAC,EAAAwF,EAAA8B,EAAAC,EAAAC,EAAAC,EAAAE,EAAAG,EAAAukB,EAAAnkB,EAAA1G,EAAA4G,EAAAK,EAAA6jB,EAAAy1B,EAAAt8C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA4hD,UAAAx8C,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA6N,IAAA,MAAAjR,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGA02B,IAAA,MAAA95B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA84C,IAAA,MAAAl8C,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,0BACA,GAFA;AAGA+4C,IAAA,MAAAn8C,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGA+oB,IAAA,MAAAnsB,OAAAmD,EAAA1I,KAAA;AACA,wBAAA2hD,GACA,MAAAC,EAAAvtC,SAAA9K,cAAA;AACAvJ,KAAA0xB,QAAA1xB,KAAAyK,KAAAgQ,UAAAonC;AACA,MAAAC,EAAA9hD,KAAA0xB,SAAAjuB,OAAA89C,EAAAQ,qBAAA,SAAA/hD,KAAAyK,KAAAu3C;AAQA,OAPAJ,IACAE,EACAF,EAAAp4C,UAAAC,IAAA,0BAEAm4C,EAAAp4C,UAAAK,OAAA,2BAGA7J,KAAAuO,aAAA0zC,uBAAAH,CACA,CACA,gBAAAI,GAIA,OAHAliD,KAAAq/B,aAAA57B,QAAA,GACAzD,KAAAusB,MAAA3N,SAEA5e,KAAAwW,SAAAxW,KAAAq/B,aAAA57B,OAAA,CACA,CACA,qBAAA+jC,GACA,GAAAxnC,KAAAq/B,aAAAr/B,KAAAq/B,aAAA57B,OAAA,IAAAzD,KAAAusB,MAAA/d,SACA,OAAAxO,KAAAq/B;AAEAr/B,KAAAwW,SAAA,EACAxW,KAAA0hD,YAAA;AACA,MAAAjgD,EAAA;AACAzB,KAAA0xB,QACAjwB,EAAA2I,KAAApK,KAAA0xB,QAEAjwB,EAAA6iC,SAAAtkC,KAAAyK,KAAA03C,SAAAzwB,QAAApwB;AAEA,IACA,MAAAomC,UACAA,SACA,EAAA1mC,EAAAQ,MAAA,4CACAy9B,OAAA,OACAx9B;AAGA,GADAzB,KAAAq/B,YAAAqI,EACA1nC,KAAAq/B,aAAA57B,QAAA,EAEA,YADA,EAAA89C,EAAAa,sBAAApiD,UAAAwnC,gBAAAz4B,KAAA/O,MAGA,OAAA+Z,IACA,EAAAnS,EAAAoF,gBAAA+M,EACA,SACA/Z,KAAAwW,SAAA,EACAxW,KAAA0hD,YAAA,QACA,CACA,OAAA1hD,KAAAq/B,WACA,CACAh5B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,eAAA47B,CAAAxL,GACA,MAAA7hB,EAAAza,KAAAyK,KAAAgQ,SACA0nC,EAAAniD,KAAAyK,KAAA03C;AAQA,OAPA1nC,IACAA,EAAAqI,IAAA,aAAAwZ,EAAAh7B,IACAmZ,EAAAkK,IAAA,eAEAw9B,GACAniD,KAAAyK,KAAA03C,SAAAr/B,IAAA,cAAAwZ,EAAAh7B,IAEAtB,KAAAusB,MAAA3N,OACA,CACAvY,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,aAAAmgB,CAAAC,GACAtsB,KAAAusB,MAAAD,CACA,CACAjmB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,OAAA8M,GACAhZ,KAAAq/B,aAAA57B,OAAA,IAKAzD,KAAA0hD,YAAA,qBAEA,CACAr7C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,WAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBA8CA,CACAjF,GAAA,WACAkF,MAAA,6kDACAC,WAAA,oJACAC,MAAA,KAAAolB,EAAAlsB,QAAAqI,EAAAoC,KAAArD,EAAAiH,GAAA4d,EAAAjsB,QAAA0H,EAAA1H,QAAAmH,EAAAmH,GAAAxG,EAAA9H,SACA+G,cAAA,IACA3G,MApDA,GAsDAR,EAAAI,QAAA4hD,C,GCnKAjiD,OAAA,ihBAAAC,EAAAwF,EAAA8B,EAAAC,EAAAC,EAAAC,EAAAE,EAAAG,EAAAukB,EAAAw2B,EAAArhD,EAAA4G,EAAAK,EAAA6jB,EAAAy1B,EAAAt8C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA0iD,UAAAt9C,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAgY,IAAA,MAAAjb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAApB,EAAAqB,UAAA;AACAiS,GAAA,MAAAlV,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA6N,IAAA,MAAAjR,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGA02B,IAAA,MAAA95B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA84C,IAAA,MAAAl8C,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,0BACA,GAFA;AAGA+4C,IAAA,MAAAn8C,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGA+oB,IAAA,MAAAnsB,OAAAmD,EAAA1I,KAAA;AACA,wBAAA2hD,GACA,GAAA3hD,KAAAya,SAAA8nC,mBACA;AAEA,MAAAX,EAAAvtC,SAAA9K,cAAA;AACAvJ,KAAA0xB,QAAA1xB,KAAAyK,KAAAgQ,UAAAonC;AACA,MAAAC,EAAA9hD,KAAA0xB,SAAAjuB,OAAA89C,EAAAQ,qBAAA,SAAA/hD,KAAAyK,KAAAu3C;AAQA,OAPAJ,IACAE,EACAF,EAAAp4C,UAAAC,IAAA,0BAEAm4C,EAAAp4C,UAAAK,OAAA,2BAGA7J,KAAAuO,aAAA0zC,uBAAAH,CACA,CACA,gBAAAI,GAIA,OAHAliD,KAAAq/B,aAAA57B,QAAA,GACAzD,KAAAusB,MAAA3N,SAEA5e,KAAAwW,SAAAxW,KAAAq/B,aAAA57B,OAAA,CACA,CACA,qBAAA+jC,GACA,GAAAxnC,KAAAq/B,aAAAr/B,KAAAq/B,aAAA57B,OAAA,IAAAzD,KAAAusB,MAAA/d,SACA,OAAAxO,KAAAq/B;AAEAr/B,KAAAwW,SAAA,EACAxW,KAAA0hD,YAAA;AACA,MAAAjgD,EAAA;AACAzB,KAAA0xB,QACAjwB,EAAA2I,KAAApK,KAAA0xB,QAEAjwB,EAAA6iC,SAAAtkC,KAAAyK,KAAA03C,SAAAzwB,QAAApwB;AAEA,IACA,MAAAomC,UACAA,SACA,EAAA1mC,EAAAQ,MAAA,wCACAy9B,OAAA,OACAx9B;AAEAzB,KAAAq/B,YAAAqI;AACA,MAAAthC,EAAApG,KAAAyK,KAAAgQ,SAAAza,KAAAyK,KAAAgQ,SAAAza,KAAAyK,KAAA03C;AAIA,GAHAniD,MAAAwiD,OACAxiD,KAAAq/B,YAAAr/B,KAAAq/B,YAAAt0B,OAAA48B,IAAAvhC,EAAAue,IAAA,QAAA7hB,SAAA6kC,EAAAp6B,QAEAvN,KAAAq/B,aAAA57B,QAAA,EAEA,YADA,EAAA89C,EAAAa,sBAAApiD,UAAAwnC,gBAAAz4B,KAAA/O,MAGA,OAAA+Z,IACA,EAAAnS,EAAAoF,gBAAA+M,EACA,SACA/Z,KAAAwW,SAAA,EACAxW,KAAA0hD,YAAA,QACA,CACA,OAAA1hD,KAAAq/B,WACA,CACAh5B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,GAAAs2C,GACA,MAAAp8C,EAAApG,KAAAyK,KAAAgQ,SAAAza,KAAAyK,KAAAgQ,SAAAza,KAAAyK,KAAA03C;AACA,OAAA/7C,EAAAue,IAAA,SAAAve,EAAAue,IAAA,QAAAlhB,OAAA,CACA,CACA,GAAAg/C,CAAAnmB,GACA,OAAAt8B,KAAAq/B,YAAAr/B,KAAAq/B,YAAAt0B,OAAA48B,KAAArmC,KAAAg7B,EAAAh7B,GACA,CACA,eAAAwmC,CAAAxL,GACA,MAAAomB,EAAA1iD,KAAAuO,aAAAo0C,mBACAv8C,EAAApG,KAAAyK,KAAAgQ,SAAAza,KAAAyK,KAAAgQ,SAAAza,KAAAyK,KAAA03C;AACA,IAAA/7C,EACA;AAEA,MAAAw8C,EAAAx8C,EAAAue,IAAA;AACA,OAAAi+B,EAKAA,GAAAn/C,QAAAi/C,EACA1iD,KAAAwgB,OAAAzG,MAAA,CACA8oC,MAAA,sBACAhkC,SAAA,QACApd,KAAA,CACAsd,SAAA,EAAA9W,EAAAoC,MAAA,uDACAyb,MAAA48B,QAKAE,EAAAl/C,KAAA44B,EAAA/uB,MACAnH,EAAA0c,IAAA,WAAA8/B,IACAtmB,EAAAiL,UAAA,OACAvnC,MAAAyiD,GAAAnmB,KAlBAl2B,EAAA0c,IAAA,QAAAwZ,EAAA/uB,YACAvN,MAAAyiD,GAAAnmB,GAkBA,CACAj2B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,aAAAmgB,CAAAC,GACAtsB,KAAAusB,MAAAD,CACA,CACAjmB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,OAAA8M,GACAhZ,KAAAq/B,aAAA57B,OAAA,IAKAzD,KAAA0hD,YAAA,qBAEA,CACAr7C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,WAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAgDA,CACAjF,GAAA,WACAkF,MAAA,69CACAC,WAAA,+IACAC,MAAA,KAAAolB,EAAAlsB,QAAAqI,EAAAoC,KAAArD,EAAAiH,GAAA4d,EAAAjsB,QAAA0H,EAAA1H,QAAAmH,EAAAmH,GAAAm0C,EAAAziD,SACA+G,cAAA,IACA3G,MAtDA,GAwDAR,EAAAI,QAAA0iD,C,GCvMA/iD,OAAA,geAAAC,EAAAwF,EAAA8B,EAAAC,EAAAC,EAAAC,EAAAK,EAAAukB,EAAA7qB,EAAA4G,EAAAK,EAAA6jB,EAAAy1B,EAAAt8C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAkjD,UAAA99C,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA6N,IAAA,MAAAjR,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGA02B,IAAA,MAAA95B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA84C,IAAA,MAAAl8C,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,0BACA,GAFA;AAGA+4C,IAAA,MAAAn8C,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGA+oB,IAAA,MAAAnsB,OAAAmD,EAAA1I,KAAA;AACA,wBAAA2hD,GACA,MAAAC,EAAAvtC,SAAA9K,cAAA,oBACAw5C,EAAA1uC,SAAA9K,cAAA;AACAvJ,KAAA0xB,QAAA1xB,KAAAyK,KAAAgQ,UAAAonC;AACA,MAAAC,EAAA9hD,KAAA0xB,SAAAjuB,OAAA89C,EAAAQ,qBAAA,SAAA/hD,KAAAyK,KAAAu3C;AAeA,OAdAJ,IACAE,EACAF,EAAAp4C,UAAAC,IAAA,0BAEAm4C,EAAAp4C,UAAAK,OAAA,2BAGAk5C,IACAjB,EACAiB,EAAAv5C,UAAAC,IAAA,0BAEAs5C,EAAAv5C,UAAAK,OAAA,2BAGAi4C,CACA,CACA,gBAAAI,GAIA,OAHAliD,KAAAq/B,aAAA57B,QAAA,GACAzD,KAAAusB,MAAA3N,SAEA5e,KAAAwW,SAAAxW,KAAAq/B,aAAA57B,OAAA,CACA,CACA,qBAAA+jC,GACA,GAAAxnC,KAAAq/B,aAAAr/B,KAAAq/B,aAAA57B,OAAA,IAAAzD,KAAAusB,MAAA/d,SACA,OAAAxO,KAAAq/B;AAEAr/B,KAAAwW,SAAA,EACAxW,KAAA0hD,YAAA;AACA,MAAAjgD,EAAA;AACAzB,KAAA0xB,QACAjwB,EAAA2I,KAAApK,KAAA0xB,QAEAjwB,EAAA6iC,SAAAtkC,KAAAyK,KAAA03C,SAAAzwB,QAAApwB;AAEA,IACA,MAAA+9B,YACAA,SACA,EAAAr+B,EAAAQ,MAAA,yCACAy9B,OAAA,OACAx9B;AAGA,GADAzB,KAAAq/B,cACAr/B,KAAAq/B,aAAA57B,QAAA,EAEA,YADA,EAAA89C,EAAAa,sBAAApiD,UAAAwnC,gBAAAz4B,KAAA/O,MAGA,OAAA+Z,IACA,EAAAnS,EAAAoF,gBAAA+M,EACA,SACA/Z,KAAAwW,SAAA,EACAxW,KAAA0hD,YAAA,QACA,CACA,OAAA1hD,KAAAq/B,WACA,CACAh5B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,eAAA47B,CAAAxL,GACA,MAAAl2B,EAAApG,KAAAyK,KAAAgQ,SAAAza,KAAAyK,KAAAgQ,SAAAza,KAAAyK,KAAA03C;AACA/7C,IAGAA,EAAA0c,IAAA,QAAAwZ,GACAt8B,KAAAusB,MAAA3N,QACA,CACAvY,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA,aAAAmgB,CAAAC,GACAtsB,KAAAusB,MAAAD,CACA,CACAjmB,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,OAAA8M,GACAhZ,KAAAq/B,aAAA57B,OAAA,IAKAzD,KAAA0hD,YAAA,qBAEA,CACAr7C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,WAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAyCA,CACAjF,GAAA,WACAkF,MAAA,kyCACAC,WAAA,iJACAC,MAAA,KAAAolB,EAAAlsB,QAAAqI,EAAAoC,KAAArD,EAAAiH,GAAA4d,EAAAjsB,QAAA0H,EAAA1H,QAAAmH,EAAAmH,IACAvH,cAAA,IACA3G,MA/CA,GAiDAR,EAAAI,QAAAkjD,C,GChKAvjD,OAAA,2PAAAC,EAAAwF,EAAA8B,EAAAC,EAAAE,EAAAK,EAAArC,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAojD,UAAAh+C,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAs6C,IAAA,MAAA19C,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,kBACA,GAFA;AAGAu6C,IAAA,MAAA39C,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,2DACA,GAFA;AAGAw6C,IAAA,MAAA59C,OAAAmD,EAAA1I,KAAA;AACA,eAAAojD,CAAAnG,GACA,OAAAj9C,KAAAijD,UACAjjD,KAAAkjD,WAAA,aACAljD,KAAAmjD,YAAA,sDACAnjD,KAAAijD,UAAA,EACAjjD,KAAAyK,KAAAuyC,gBAAAC,KAEAj9C,KAAAkjD,WAAA,eACAljD,KAAAmjD,YAAA,wDACAnjD,KAAAijD,UAAA,EACAjjD,KAAAyK,KAAAkyC,aAAAM,GACA,CACA52C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAmBA,CACAjF,GAAA,WACAkF,MAAA,6fACAC,WAAA,uIACAC,MAAA,KAAAY,EAAA1H,QAAAmH,EAAAmH,IACAvH,cAAA,IACA3G,MAzBA,GA2BAR,EAAAI,QAAAojD,C,GC5DAzjD,OAAA,qOAAAC,EAAAwF,EAAAogB,EAAAnd,EAAAhD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAyjD,UAAAr+C,EAAApF,QACA,mBAAAqc,CAAAxR,EAAA05B,GACA,OAAAA,EAAA51B,aAAA+0C,oBACA,CACAj9C,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAUA,CACAjF,GAAA,WACAkF,MAAA,2UACAC,WAAA,mKACAC,MAAA,KAAA0e,EAAAmC,OAAAtf,EAAAoC,MACA1D,cAAA,IACA3G,MAhBA,GAkBAR,EAAAI,QAAAyjD,C,GC7BA9jD,OAAA,8WAAAC,EAAAwF,EAAAmC,EAAAo8C,EAAAC,EAAAv+C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA6jD,UAAAz+C,EAAApF,QACA,mBAAAqc,CAAAxR,EAAA05B,GACA,SAAAqf,EAAAE,sBAAAj5C,GAAAgQ,SAAA0pB,EAAA51B,aAAA41B,EAAAtwB,YAAA,cACA,CACAxN,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAApB,EAAAqB,UAAA;AACAiS,GAAA,MAAAlV,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAWA,CACAjF,GAAA,WACAkF,MAAA,mOACAC,WAAA,kKACAC,MAAA,KAAA68C,EAAA3jD,SACA+G,cAAA,IACA3G,MAjBA,GAmBAR,EAAAI,QAAA6jD,C,GChCAlkD,OAAA,8UAAAC,EAAAwF,EAAA2+C,EAAAH,EAAAv+C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAgkD,UAAA5+C,EAAApF,QACA,mBAAAqc,CAAAxR,EAAA05B,GACA,SAAAqf,EAAAE,sBAAAj5C,GAAAgQ,SAAA0pB,EAAA51B,aAAA41B,EAAAtwB,YAAA,cACA,CACAxN,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAMA,CACAjF,GAAA,WACAkF,MAAA,wIACAC,WAAA,wJACAC,MAAA,KAAAi9C,EAAA/jD,SACA+G,cAAA,IACA3G,MAZA,GAcAR,EAAAI,QAAAgkD,C,GCzBArkD,OAAA,oVAAAC,EAAAwF,EAAA6+C,EAAAL,EAAAv+C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAkkD,UAAA9+C,EAAApF,QACA,mBAAAqc,CAAAxR,EAAA05B,GACA,SAAAqf,EAAAE,sBAAAj5C,GAAAgQ,SAAA0pB,EAAA51B,aAAA41B,EAAAtwB,YAAA,cACA,CACAxN,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAQA,CACAjF,GAAA,WACAkF,MAAA,8NACAC,WAAA,4JACAC,MAAA,KAAAm9C,EAAAjkD,SACA+G,cAAA,IACA3G,MAdA,GAgBAR,EAAAI,QAAAkkD,C,GC3BAvkD,OAAA,2PAAAC,EAAAwF,EAAAiC,EAAAE,EAAAM,EAAAQ,EAAAhD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAmkD,UAAA/+C,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAApB,EAAAqB,UAAA;AACAqL,GAAA,MAAAtO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACA,iBAAAgkD,GACA,OAAAhkD,KAAAyK,MAAA6R,YAAA7B,QACA,CACA,qBAAAwpC,GACA,OAAAjkD,KAAAuO,aAAA21C,0BACA,CACA,gBAAAC,GACA,OAAAnkD,KAAAgkD,eAAA34C,SAAA,EAAApD,EAAAoC,MAAA,yCACA,cAEA,WAEA,CACAhE,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,mBAAAtB,EAAAm9C,UAAA;AACA,eAAAC,GACA,GAAArkD,KAAAgkD,eAAAhkD,KAAAgkD,cAAAM,kBAAAtkD,KAAA6T,YAAAiH,qBAAA,CACA,IAAAypC,EAAAvkD,KAAAgkD,cAAAM,iBAAAp2B,MAAA;AACA,OAAAluB,KAAA6T,YAAAiH,qBAAA+e,IAAA9e,GAAAwpC,EAAA1qB,IAAAhjB,OAAAkE,EAAAlE,UACA,CACA,QACA,CACAxQ,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAm9C,UAAA;AACA/9C,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAaA,CACAjF,GAAA,WACAkF,MAAA,oUACAC,WAAA,0IACAC,MAAA,KAAAe,EAAA7H,QAAAqI,EAAAoC,MACA1D,cAAA,IACA3G,MAnBA,GAqBAR,EAAAI,QAAAmkD,C,GCvDAxkD,OAAA,wPAAAC,EAAA0F,EAAA+C,EAAAjD,EAAAK,EAAA0W,GACA;AAEAtc,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA4kD,GAAA,EAAAx/C,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBAWA,CACAjF,GAAA,WACAkF,MAAA,sOACAC,WAAA,gKACAC,MAAA,KAAAuB,EAAAoC,KAAAnF,EAAAtF,SACA+G,cAAA,KACA,EAAAoV,EAAAnc,cAAAiS,EAAA;AACArS,EAAAI,QAAA4kD,C,GCzBAjlD,OAAA,qRAAAC,EAAAwF,EAAAmC,EAAAs9C,EAAAx/C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA0qC,UAAAtlC,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,mBAAApB,EAAAqB,UAAA;AACAk8C,IAAA,MAAAn/C,OAAAmD,EAAA1I,KAAA;AACA,cAAAuqC,GACA,OAAAvqC,KAAA0kD,iBAAAC,eACA,CACAt+C,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAIA,CACAjF,GAAA,WACAkF,MAAA,4CACAC,WAAA,+JACAC,MAAA,KAAA+9C,EAAA7kD,SACA+G,cAAA,IACA3G,MAVA,GAYAR,EAAAI,QAAA0qC,C,GCzBA/qC,OAAA,iSAAAC,EAAAwF,EAAAiC,EAAAE,EAAAuM,EAAAzO,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AAQA,MAAAglD,UAAA5/C,EAAApF,QACA,mBAAAqc,CAAAxR,EAAA05B,GACA,OAAAA,GAAAtwB,aAAAimB,qBATA,SAAArf,EAAA5G,GACA,GAAA4G,KAAA6pC,kBAAAzwC,EAAAiH,qBAAA,CACA,MAAA+pC,EAAApqC,EAAA6pC,iBAAAp2B,MAAA;AACA,OAAAra,EAAAiH,qBAAA/P,OAAAgQ,KAAAlE,UAAAgjB,IAAA9e,GAAA8pC,EAAAhrB,IAAAhjB,OAAAkE,EAAAlE,UACA,CACA,QACA,CAGAiuC,CAAAr6C,EAAArE,MAAA+9B,EAAAtwB,YACA,CACAxN,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAApB,EAAAqB,UAAA;AACAqL,GAAA,MAAAtO,OAAAmD,EAAA1I,KAAA;AACA,sBAAA+kD,CAAAzjD,GACAtB,KAAAyK,KAAA6R,WAAAlW,MAAA4+C,SAAA,CACA3e,cAAA/kC,EAEA,CACA+E,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,0BAAAtB,EAAAiF,SAAA;AACA,6BAAA+4C,CAAApuC,GACA7W,KAAAyK,KAAA6R,WAAAlW,MAAA0c,IAAA,mBAAAjM,EACA,CACAxQ,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iCAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBASA,CACAjF,GAAA,WACAkF,MAAA,wLACAC,WAAA,kJACAC,MAAA,KAAAgN,EAAA9T,SACA+G,cAAA,IACA3G,MAfA,GAiBAR,EAAAI,QAAAglD,C,GC/CArlD,OAAA,0VAAAC,EAAAwF,EAAAu+C,EAAAC,EAAAv+C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA6jD,UAAAz+C,EAAApF,QACA,mBAAAqc,CAAAxR,EAAA05B,GACA,SAAAqf,EAAAE,sBAAAj5C,GAAAgQ,SAAA0pB,EAAA51B,aAAA41B,EAAAtwB,YAAA,cACA,CACAxN,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBASA,CACAjF,GAAA,WACAkF,MAAA,yIACAC,WAAA,+JACAC,MAAA,KAAA68C,EAAA3jD,SACA+G,cAAA,IACA3G,MAfA,GAiBAR,EAAAI,QAAA6jD,C;AC5BAlkD,OAAA,4UAAAC,EAAAwF,EAAA2+C,EAAAH,EAAAv+C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA6jD,UAAAz+C,EAAApF,QACA,mBAAAqc,CAAAxR,EAAA05B,GACA,SAAAqf,EAAAE,sBAAAj5C,GAAAgQ,SAAA0pB,EAAA51B,aAAA41B,EAAAtwB,YAAA,cACA,CACAxN,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAMA,CACAjF,GAAA,WACAkF,MAAA,yIACAC,WAAA,sJACAC,MAAA,KAAAi9C,EAAA/jD,SACA+G,cAAA,IACA3G,MAZA,GAcAR,EAAAI,QAAA6jD,C,GCzBAlkD,OAAA,iVAAAC,EAAAwF,EAAA6+C,EAAAL,EAAAv+C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAkkD,UAAA9+C,EAAApF,QACA,mBAAAqc,CAAAxR,EAAA05B,GACA,SAAAqf,EAAAE,sBAAAj5C,GAAAgQ,SAAA0pB,EAAA51B,aAAA41B,EAAAtwB,YAAA,cACA,CACAxN,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAMA,CACAjF,GAAA,WACAkF,MAAA,yIACAC,WAAA,yJACAC,MAAA,KAAAm9C,EAAAjkD,SACA+G,cAAA,IACA3G,MAZA,GAcAR,EAAAI,QAAAkkD,C,GCzBAvkD,OAAA,2jBAAAC,EAAAwF,EAAAgC,EAAAC,EAAAC,EAAAmK,EAAAC,EAAAnK,EAAAgZ,EAAA7Y,EAAA49C,EAAAhgD,EAAAigD,EAAAl9C,EAAAhD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAwlD,UAAApgD,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,qBAAApB,EAAAqB,UAAA;AACA68C,IAAA,MAAA9/C,OAAAmD,EAAA1I,KAAA;AACA,aAAAslD,CAAAh2C,GACAA,EAAAupC,iBACA74C,KAAAqlD,kBAAAE,WAAAj2C,EAAA4H,OAAAvX,KACA,CACA0G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAtB,EAAAiF,SAAA;AACA,WAAAs5C,GACAxlD,KAAAqlD,kBAAAC,gBACAtlD,KAAAylD,WACA,CACAp/C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,eAAAtB,EAAAiF,SAAA;AACA,cAAAw5C,CAAAxuC,GACA,MAAA8C,EAAA9K,OAAAiL,iBAAAjD,GAGAyuC,EAAA10C,SAAA+I,EAAA2rC,eAAA,IACAC,EAAA30C,SAAA+I,EAAA4rC,kBAAA;AACA1uC,EAAA2uC,UAAA,EACA3uC,EAAA8C,MAAAhJ,OAAA,GAAAkG,EAAA+C,aAAA0rC,EAAAC,KACA,CACAv/C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,kBAAAtB,EAAAiF,SAAA;AACA,SAAAu5C,GACAzlD,KAAAqlD,kBAAAS,WAAA,EACA9lD,KAAAqlD,kBAAAU,WACA/lD,KAAAqlD,kBAAAU,SAAAhmB,QACA//B,KAAAqlD,kBAAAU,SAAA,KACA/lD,KAAAqlD,kBAAAW,oBAAA,GAEA,CACA3/C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,aAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBA0CA,CACAjF,GAAA,WACAkF,MAAA,8xCACAC,WAAA,uJACAC,MAAA,KAAA4K,EAAA1R,QAAAugB,EAAAvgB,QAAAslD,EAAAtlD,QAAAsH,EAAAtH,QAAAyR,EAAAzR,QAAAoH,EAAAiH,GAAAk3C,EAAAvlD,QAAA0H,EAAA1H,QAAAsF,EAAAtF,QAAAqI,EAAAoC,MACA1D,cAAA,IACA3G,MAhDA,GAkDAR,EAAAI,QAAAwlD,C,GCzFA7lD,OAAA,iYAAAC,EAAAwF,EAAA8B,EAAAG,EAAAE,EAAAG,EAAAtG,EAAA4G,EAAA47C,EAAAv+C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAqmD,UAAAjhD,EAAApF,QACA,mBAAAqc,CAAAxR,EAAA05B,GACA,SAAAqf,EAAA0C,kBAAAz7C,EAAA05B,EACA,CACA99B,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAApB,EAAAqB,UAAA;AACAqL,GAAA,MAAAtO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA6N,IAAA,MAAAjR,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA2zB,IAAA,MAAA/2B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,oBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAw9C,IAAA,MAAA5gD,OAAAmD,EAAA1I,KAAA;AACA,YAAAunC,GACA,OAAAvnC,KAAAwW,SAAAxW,KAAAs8B,YAAA74B,OAAA,CACA,CACA,QAAAyb,GACA,OAAAlf,KAAA6T,aAAA2J,kBAAA1S,KAAAs7C,GAAA,cAAAA,EAAA74C,KACA,CACA,OAAA84C,GAmBA,OAlBArmD,KAAAwW,SAAA,EACAxW,KAAAmmD,kBAAA,EAAAnlD,EAAAQ,MAAA,mCACAy9B,OAAA,OACAx9B,KAAA,CACAyd,KAAAlf,KAAAkf,KAAA3R,KACAnD,KAAApK,KAAAyK,KAAA6R,WAAAsjB,aACAR,cAAA,MAGAp/B,KAAAmmD,iBAAA9tC,KAAAzH,IACA,IAAAyuB,YACAA,GACAzuB;AACA5Q,KAAAs8B,WAAA+C,EAAA,GAAA9W,OACAvoB,KAAAyK,KAAA6R,WAAA+kB,YAAArhC,KAAAs8B,cACA/X,MAAA3c,EAAAoF,gBAAA2e,QAAA,KACA3rB,KAAAwW,SAAA,IAEAxW,KAAAmmD,gBACA,CACA9/C,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,WAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAeA,CACAjF,GAAA,WACAkF,MAAA,+WACAC,WAAA,8JACAC,MAAA,KAAAY,EAAA1H,SACA+G,cAAA,IACA3G,MArBA,GAuBAR,EAAAI,QAAAqmD,C,GC5EA1mD,OAAA,gdAAAC,EAAAwF,EAAAmC,EAAAM,EAAAvC,EAAA+C,EAAAq+C,EAAAC,EAAAthD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA4mD,UAAAxhD,EAAApF,QACA,mBAAAqc,CAAAxR,EAAAmG,GACA,IAAArC,aACAA,EAAAsF,YACAA,GACAjD;AACA,OAAArC,EAAAq1B,yBAAA/vB,GAAA4yC,iCAAA5yC,GAAA6yC,aAAAC,qBACA,CACAtgD,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACAguB,IAAA,MAAAjxB,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,uBAAApB,EAAAqB,UAAA;AACAi5B,IAAA,MAAAl8B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAApB,EAAAqB,UAAA;AACAuL,GAAA,MAAAxO,OAAAmD,EAAA1I,KAAA;AACA,iBAAA4mD,GACA,OAAA5mD,KAAAw2B,aAAAqwB,SAAAC,GAGA,IAFA,EAIA,CACAzgD,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBA0BA,CACAjF,GAAA,WACAkF,MAAA,w2BACAC,WAAA,oLACAC,MAAA,KAAAe,EAAA7H,QAAAsF,EAAAtF,QAAAqI,EAAAoC,KAAAk8C,EAAA3mD,QAAA0mD,EAAA1mD,SACA+G,cAAA,IACA3G,MAhCA,GAkCAR,EAAAI,QAAA4mD,C,GC9DAjnD,OAAA,gRAAAC,EAAAwF,EAAA+hD,EAAA9hD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAonD,UAAAhiD,EAAApF,QACA,mBAAAqc,CAAAxR,EAAAmG,GACA,IAAArC,aACAA,GACAqC;AACA,OAAArC,EAAA04C,qCACA,CACA5gD,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAWA,CACAjF,GAAA,WACAkF,MAAA,oOACAC,WAAA,sKACAC,MAAA,KAAAqgD,EAAAnnD,SACA+G,cAAA,IACA3G,MAjBA,GAmBAR,EAAAI,QAAAonD,C,GCjCAznD,OAAA,6aAAAC,EAAAwF,EAAA8B,EAAAG,EAAAE,EAAAG,EAAAQ,EAAAo/C,EAAA1D,EAAAv+C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAunD,UAAAniD,EAAApF,QACA,mBAAAqc,CAAAxR,EAAA05B,GACA,SAAAqf,EAAA0C,kBAAAz7C,EAAA05B,EACA,CACA99B,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAApB,EAAAqB,UAAA;AACA0zB,IAAA,MAAA32B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,mBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAy+C,IAAA,MAAA7hD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,OAAA3I,KAAAk8B,KAAAqD,gBAAA,8BACA,GAFA;AAGA8nB,IAAA,MAAA9hD,OAAAmD,EAAA1I,KAAA;AAIAsnD,SAAA,UACAtnD,KAAAyK,KAAA6R,WAAA7a,KACAy9B,WAAA,CACAC,OAAAn/B,KAAAyK,KAAA6R,WAAA7a,KAAAy9B,WAAAC,OACA5pB,KAAAvV,KAAAyK,KAAA6R,WAAA7a,KAAAy9B,WAAA3pB,KACAkqB,OAAAz/B,KAAAyK,KAAA6R,WAAA7a,KAAAy9B,WAAAO,QAEA1zB,KAAA/L,KAAAyK,KAAA6R,WAAAvQ,KACAw7C,eAAA,EAAAz/C,EAAAy/C,mBARA;AAUA,qBAAAC,GACA,MAAA/nB,EAAAz/B,KAAAyK,KAAA6R,WAAA7a,KAAAy9B,WAAAO;AAEA,IADAprB,SAAA9K,cAAA,yBAAAk2B,eAEA;AAEA,MAAAgoB,EAAAznD,KAAAsnD,SAAAC;AAEA,GAAAE,EAAAC,eAAAC,WAAAC,KAAAC,WAAAJ,EAAAK,YAAA,GACA,MAAAC,EAAAN,EAAAC,eAAAM,UAAAP,EAAAK;AACAL,EAAAQ,SAAAF,EAAA,EACA,CACAN,EAAAS,aAAAP,WAAAC,KAAAC,WAAAJ,EAAAU,UAAAV,EAAAS,aAAAzkD,QACAgkD,EAAAS,aAAAF,UAAAP,EAAAU;AAGA,MAAAC,EAAA/zC,SAAAg0C,iBAAAZ,EAAAa,wBAAAC,WAAAC,UAAA,CACAC,WAAAC,GAAAjB,EAAAkB,eAAAD,GAAAH,WAAAK,cAAAL,WAAAM,gBAEAC,EAAA;AACA,GAAAV,EAAAW,aAAApB,WAAAC,KAAAC,UACAiB,EAAAplD,KAAA0kD,EAAAW;KAEA,KAAAX,EAAAY,YACAF,EAAAplD,KAAA0kD,EAAAW;AAGA,QAAAE,KAAAH,EAAA,CACA,MAAAI,EAAA70C,SAAAojB,cAAA;AACAyxB,EAAA1/C,UAAAC,IAAA;AAEA,MAAAmlC,EAAAqa,EAAAE,WAAA;AACAD,EAAAnxB,YAAA6W,GACAqa,EAAAG,WAAAC,aAAAH,EAAAD,EACA,CACA/5C,OAAAo6C,eAAAC,kBACAvpD,KAAAonD,iBAAA,CACA,CACA,qBAAAoC,GACA,IAAAxpD,KAAAonD,gBACA;AAEA/yC,SAAA1K,iBAAA,wCACAgH,QAAA84C,IACA,MAAAR,EAAA50C,SAAAq1C,eAAAD,EAAAE;AACAF,EAAAL,WAAAC,aAAAJ,EAAAQ,KAEAzpD,KAAAonD,iBAAA,CACA,CACA,0BAAAwC,SACA5pD,KAAAqnD,YAAAzoC,cACA5e,KAAAk8B,KAAAxqB,KAAA1R,KAAAqnD,YAAAxrC,QAAA,CACAuhB,WAAA,sBACAysB,UAAA3C,EAAAtnD,QACAkqD,aAAA,EACAC,SAAA,EACAC,eAAA,EACAC,gBAAA,EACAxoD,KAAAzB,KAAAsnD,SACAjqB,UAAA,YACA6sB,mBAAA,iBACAC,gBAAA,EACAnxC,QAAA,KACAhZ,KAAAwpD,iCAGAxpD,KAAAqnD,YAAA9pB,UACAv9B,KAAAwnD,uBACA,CACAnhD,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,wBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAgBA,CACAjF,GAAA,WACAkF,MAAA,gaACAC,WAAA,sJACAC,MAAA,KAAAY,EAAA1H,SACA+G,cAAA,IACA3G,MAtBA,GAwBAR,EAAAI,QAAAunD,C,GChIA5nD,OAAA,4PAAAC,EAAAwF,EAAAmC,EAAAijD,EAAAnlD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAyqD,UAAArlD,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAApB,EAAAqB,UAAA;AACA8hD,IAAA,MAAA/kD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAUA,CACAjF,GAAA,WACAkF,MAAA,iNACAC,WAAA,uKACAC,MAAA,KAAA0jD,EAAAxqD,SACA+G,cAAA,IACA3G,MAhBA,GAkBAR,EAAAI,QAAAyqD,C,GC5BA9qD,OAAA,qXAAAC,EAAAwF,EAAAiC,EAAAE,EAAAojD,EAAAvpD,EAAA4G,EAAA4iD,EAAAviD,EAAAhD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA6qD,UAAAzlD,EAAApF,QACA,mBAAAqc,CAAAxR,EAAAmG,GACA,IAAArC,aACAA,GACAqC;AACA,OAAArC,EAAAm8C,2CACA,CACArkD,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAu5B,IAAA,MAAAx8B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAApB,EAAAqB,UAAA;AACA8hD,IAAA,MAAA/kD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACA,uBAAA2qD,GACA,GAAA3qD,KAAA+hC,OAAAoB,uBAKA,QAAAqnB,EAAAx/B,mBAAAhrB,KAAA+hC,OAAAoB,uBAAAnjC,KAAAuO,cAKA,OAJAvO,KAAA+hC,OAAAlX,WAAA,EACA7qB,KAAA+hC,OAAAtW,QAAA,GACAzrB,KAAAsqD,YAAA9zC,SAAA,OACAxW,KAAAsqD,YAAAM,aAAA;MAGA5qD,KAAA6qD,eACA,MAZA7qD,KAAA+hC,OAAAlX,WAAA,EACA7qB,KAAA+hC,OAAAtW,QAAA,GACAzrB,KAAAsqD,YAAA9zC,SAAA,EACAxW,KAAAsqD,YAAAM,aAAA,CAUA,CACAvkD,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,qBAAAtB,EAAAiF,SAAA;AACA,mBAAA2+C,GACA7qD,KAAAsqD,YAAA9zC,SAAA,EACAxW,KAAAsqD,YAAAM,aAAA;AACA,IACA,MAAAn/B,QAAA,EAAAzqB,EAAAQ,MAAA,yCACAC,KAAA,CACA6pB,EAAAtrB,KAAA+hC,OAAAoB,0BAGA2nB,QAAA,EAAAN,EAAAh/B,kBAAAC;AACAq/B,IACA9qD,KAAA+hC,OAAAlX,UAAA,IAAAY,EAAAs/B,YAAAtnD,OACAzD,KAAA+hC,OAAAtW,QAAAq/B,EAEA,OAAA/wC,IACA,EAAAnS,EAAAoF,gBAAA+M,EACA,SACA/Z,KAAAsqD,YAAA9zC,SAAA,CACA,CACA,CACAnQ,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAgBA,CACAjF,GAAA,WACAkF,MAAA,8bACAC,WAAA,kKACAC,MAAA,KAAA6jD,EAAA3qD,QAAAqI,EAAAoC,MACA1D,cAAA,IACA3G,MAtBA,GAwBAR,EAAAI,QAAA6qD,C,GCjFAlrD,OAAA,0ZAAAC,EAAAwF,EAAAmC,EAAAjC,EAAA+C,EAAAq+C,EAAAC,EAAAthD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAorD,UAAAhmD,EAAApF,QACA,mBAAAqc,CAAAxR,EAAAmG,GACA,IAAArC,aACAA,EAAAsF,YACAA,GACAjD;AACA,OAAArC,EAAAq1B,yBAAA/vB,GAAA4yC,iCAAA5yC,GAAA6yC,aAAAC,qBACA,CACAtgD,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,uBAAApB,EAAAqB,UAAA;AACAi5B,IAAA,MAAAl8B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAu5B,IAAA,MAAAx8B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBA8BA,CACAjF,GAAA,WACAkF,MAAA,8iCACAC,WAAA,6JACAC,MAAA,KAAAxB,EAAAtF,QAAAqI,EAAAoC,KAAAk8C,EAAA3mD,QAAA0mD,EAAA1mD,SACA+G,cAAA,IACA3G,MApCA,GAsCAR,EAAAI,QAAAorD,C,GCzDAzrD,OAAA,mPAAAC,EAAAwF,EAAAmC,EAAAqjD,EAAAviD,EAAAhD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAqrD,UAAAjmD,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAu5B,IAAA,MAAAx8B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAApB,EAAAqB,UAAA;AACA8hD,IAAA,MAAA/kD,OAAAmD,EAAA1I,KAAA;AACA,gBAAAkrD,GAIA,QADA,EAAAV,EAAAx/B,mBAAAhrB,KAAA+hC,OAAAoB,uBAAAnjC,KAAAuO,eACAvO,KAAAsqD,YAAAM,aAAA5qD,KAAA+hC,OAAAoB,wBAAA1/B,OAAA,CACA,CACA4C,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAQA,CACAjF,GAAA,WACAkF,MAAA,wLACAC,WAAA,0JACAC,MAAA,KAAAuB,EAAAoC,MACA1D,cAAA,IACA3G,MAdA,GAgBAR,EAAAI,QAAAqrD,C,GCpCA1rD,OAAA,iWAAAC,EAAAwF,EAAAmC,EAAAgkD,EAAA3H,EAAAv+C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA6jD,UAAAz+C,EAAApF,QACA,mBAAAqc,CAAAxR,EAAA05B,GACA,SAAAqf,EAAA0C,kBAAAz7C,EAAA05B,EACA,CACA99B,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAYA,CACAjF,GAAA,WACAkF,MAAA,0RACAC,WAAA,mKACAC,MAAA,KAAAykD,EAAAvrD,SACA+G,cAAA,IACA3G,MAlBA,GAoBAR,EAAAI,QAAA6jD,C,GCjCAlkD,OAAA,uVAAAC,EAAAwF,EAAAmC,EAAAgkD,EAAA3H,EAAAv+C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAgkD,UAAA5+C,EAAApF,QACA,mBAAAqc,CAAAxR,EAAA05B,GACA,SAAAqf,EAAA0C,kBAAAz7C,EAAA05B,EACA,CACA99B,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAaA,CACAjF,GAAA,WACAkF,MAAA,gTACAC,WAAA,yJACAC,MAAA,KAAAykD,EAAAvrD,SACA+G,cAAA,IACA3G,MAnBA,GAqBAR,EAAAI,QAAAgkD,C,GClCArkD,OAAA,0UAAAC,EAAAwF,EAAAmmD,EAAA3H,EAAAv+C,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAkkD,UAAA9+C,EAAApF,QACA,mBAAAqc,CAAAxR,EAAA05B,GACA,SAAAqf,EAAA0C,kBAAAz7C,EAAA05B,EACA,CACA99B,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAUA,CACAjF,GAAA,WACAkF,MAAA,iMACAC,WAAA,6JACAC,MAAA,KAAAykD,EAAAvrD,SACA+G,cAAA,IACA3G,MAhBA,GAkBAR,EAAAI,QAAAkkD,C,GC7BAvkD,OAAA,oQAAAC,EAAAwF,EAAAomD,EAAAnmD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAyrD,UAAArmD,EAAApF,QACA,mBAAAqc,CAAAxR,EAAA05B,GACA,MAAAvU,EAAAuU,EAAA51B;AACA,OAAAqhB,EAAA07B,sBAAA17B,EAAA27B,wBACA,CACAllD,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAIA,CACAjF,GAAA,WACAkF,MAAA,oFACAC,WAAA,gKACAC,MAAA,KAAA0kD,EAAAxrD,SACA+G,cAAA,IACA3G,MAVA,GAYAR,EAAAI,QAAAyrD,C,GCxBA9rD,OAAA,uUAAAC,EAAAwF,EAAAiC,EAAAE,EAAAG,EAAAkkD,EAAAvmD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA6rD,UAAAzmD,EAAApF,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAApB,EAAAqB,UAAA;AACAsU,GAAA,MAAAvX,OAAAmD,EAAA1I,KAAA;AACA,oBAAA0rD,GACA,OAAA1rD,KAAAyK,KAAA6R,WAAAioB,MAAAonB,SACA,CACA,kBAAAC,GACA5rD,KAAA8c,MAAApL,KAAA85C,EAAA5rD,QAAA,CACAwG,MAAA,CACAm+B,MAAAvkC,KAAAyK,KAAA6R,WAAAioB,MACAuQ,WAAA90C,KAAAyK,KAAA6R,WAAAw4B,aAGA,CACAzuC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,sBAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAiBA,CACAjF,GAAA,WACAkF,MAAA,+dACAC,WAAA,yJACAC,MAAA,KAAAY,EAAA1H,SACA+G,cAAA,IACA3G,MAvBA,GAyBAR,EAAAI,QAAA6rD,C,GC/CAlsD,OAAA,mXAAAC,EAAAwF,EAAAiC,EAAAE,EAAAE,EAAAC,EAAAukD,EAAAC,EAAA7mD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAmsD,UAAA/mD,EAAApF,QACA,mBAAAqc,CAAAxR,GACA,OAAAA,EAAA85B,MAAAonB,SACA,CACAtlD,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAApB,EAAAqB,UAAA;AACAuL,GAAA,MAAAxO,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAApB,EAAAqB,UAAA;AACAsU,GAAA,MAAAvX,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAwjD,IAAA,MAAAzmD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACAmS,GAAA,MAAApV,OAAAmD,EAAA1I,KAAA;AACA,gBAAAisD,GAEA,MADA,IAAAjsD,KAAAgsD,OAAAE,UAAAC,SAAAC,eAAA,MAAApsD,KAAAgsD,OAAAE,UAAAC,SAAA/kC,gBAAA,GAEA,CACA,UAAAilC,GACArsD,KAAA8c,MAAApL,KAAAo6C,EAAAlsD,QAAA,CACAwG,MAAA,CACAiF,MAAA,mDACAihD,YAAAtsD,KAAAyK,KAAA6R,WAAAioB,QAGA,CACAl+B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,cAAAtB,EAAAiF,SAAA;AACA7F,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAqBA,CACAjF,GAAA,WACAkF,MAAA,gpBACAC,WAAA,iKACAC,MAAA,KAAAY,EAAA1H,QAAAisD,EAAAjsD,QAAAyH,EAAAmuB,IACA7uB,cAAA,IACA3G,MA3BA,GA6BAR,EAAAI,QAAAmsD,C,GC7DAxsD,OAAA,8OAAAC,EAAAwF,EAAAogB,EAAAlgB,EAAA+C,EAAAhD,EAAAI,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA2sD,UAAAvnD,EAAApF,QACA,mBAAAqc,CAAAxR,EAAA05B,GACA,OAAAA,EAAA51B,aAAA+8C,oBACA,CACAjlD,SAAA,QAAApB,EAAAqB,uBAAA,EAAAjB,EAAAkB,uBAWA,CACAjF,GAAA,WACAkF,MAAA,oWACAC,WAAA,iJACAC,MAAA,KAAA0e,EAAAmC,OAAAriB,EAAAtF,QAAAqI,EAAAoC,MACA1D,cAAA,IACA3G,MAjBA,GAmBAR,EAAAI,QAAA2sD,C,GC9BAhtD,OAAA,8JAAAC,EAAAyH,EAAAulD,GACA;AAEA/sD,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA6sD,UAAAD,EAAA5sD,QACA,WAAAyN,GACA,OACA49B,UAAAjrC,KAAAirC,UACAE,QAAAnrC,KAAAmrC,QAEA,CACA9kC,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,cAAAtB,EAAAm9C,UAAA;AACA,kBAAAsI,GACA,OACAzhB,UAAAtlC,SAAAI,SAAA,WAAAH,OAAA,cACAulC,QAAAxlC,SAAAC,OAAA,cAEA,CACA,YAAA+mD,GAEA,MADA,kTAEA,EAEAntD,EAAAI,QAAA6sD,C,GC1BAltD,OAAA,mJAAAC,EAAAsH,EAAA8lD,GACA;AAEAntD,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAitD,UAAAD,EAAAhtD,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,OAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAogB,IAAA,MAAAxjB,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGA1E,IAAA,MAAAsB,OAAAmD,EAAA1I,KAAA;AACA0M,YAAA,kBAEAlN,EAAAI,QAAAitD,C,GClBAttD,OAAA,2NAAAC,EAAAsH,EAAA8lD,EAAA3lD,EAAAE,EAAAS,EAAAklD,GACA;AAEArtD,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAmtD,UAAAH,EAAAhtD,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAqkD,IAAA,MAAAznD,OAAAmD,EAAA1I,KAAA;AACA,mBAAAitD,GACA,QACA19C,IAAA,wBACA8Y,MAAA,iDACA6kC,YAAA,wBACAC,QAAAntD,KAAAoG,MAAAsgD,YAAAC,sBACAyG,WAAA,KACAptD,KAAAuO,aAAAq1B,yBAAA5jC,KAAAoG,OAAAqgD,iCAAAzmD,KAAAuO,aAAA8+C,eADA,IAIA,CACA,yBAAAC,GACA,MAAAjsD,EAAA;AAMA,OALArB,KAAAitD,gBAAAt8C,QAAAsP,IACAA,EAAAmtC,YACA/rD,EAAAqC,KAAAuc,EAAA1Q,OAGAlO,CACA,CACA,IAAAoiB,GAEA,OADAzjB,KAAAgtD,OAAA,EACAhtD,KAAAoG,MAAAqd,KAAAzjB,KAAAstD,uBAAAj1C,KAAA,KACArY,KAAAgtD,OAAA,GACA,EAAAF,EAAAS,cACAn9C,SAAA21B,WAEAxhB,MAAA3c,EAAAoF,eACA,CACA3G,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,QAAAtB,EAAAiF,SAAA,GAEA1M,EAAAI,QAAAmtD,C,GC7CAxtD,OAAA,qGAAAC,GACA;AAEAC,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,QACA,WACAI,KAAAC,MAAA,kCACAH,KAAA,sCAEA,C,GCXAP,OAAA,gHAAAC,GACA;AAEAC,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,QACA,WACAI,KAAAC,MAAA,yCACAH,KAAA,2DAEA,C,GCXAP,OAAA,uIAAAC,EAAAkiC,GACA;AAEAjiC,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACAJ,EAAAI,QAAA,CACA2N,KAAA,8CACA,UAAAigD,CAAAC,GACA,MAAA55C,EAAA45C,EAAAv8B,OAAA;AACArd,KAAA+xB,QAGA,EAAAlE,EAAAiB,eAAArW,IACAA,EAAAohC,+BAAA,iBACArlC,MAAA,oCACApoB,MAAA,0CACAisB,YAAA,qCACA,CACA7D,MAAA,iCACApoB,MAAA,uCACAisB,YAAA,4CACA,CACA7D,MAAA,gCACApoB,MAAA,sCACAisB,YAAA,+CACA,CACA7D,MAAA,sCACApoB,MAAA,0CACAisB,YAAA,+CACA,CACA7D,MAAA,sCACApoB,MAAA,4CACAisB,YAAA,uCACA,CACA7D,MAAA,iCACApoB,MAAA,uCACAisB,YAAA,4CACA,CACA7D,MAAA,gCACApoB,MAAA,sCACAisB,YAAA,yCAGA,E,GC7CA3sB,OAAA,iMAAAC,EAAAkiC,EAAAisB,GACA;AAEAluD,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACAJ,EAAAI,QAAA,CACA2N,KAAA,6BACA,UAAAigD,CAAAC,GACA,MAAA55C,EAAA45C,EAAAv8B,OAAA;AACA,IAAArd,MAAA+xB,MACA;AAMA,MAAAv9B,EAAAulD,QAAA,uFAAAhuD,SACA,EAAA8hC,EAAAiB,eAAArW,IACAA,EAAAuhC,4BAAA,UAAAF,EAAA/tD,SACA0sB,EAAAuhC,4BAAA,qBAAAxlD,GACAikB,EAAAwhC,yBAAA,kCAAAl9C,IACA,IAAAjR,MACAA,GACAiR;AACA,UAAAjR,EAAA,oBAGA,E,GC7BAJ,OAAA,qQAAAC,EAAAkiC,EAAAqsB,EAAA/oD,EAAAK,EAAA0W,GACA;AAMA,SAAAiyC,EAAA1hC,GACAA,EAAA2hC,sBAAA,CAAA5kD,EAAA6kD,KACAA,EAAAC,eAGA,IAAA9kD,EAAAM,iBAAA,oBAAAgH,QAAAy9C,IACA,MAAAz+C,EAAAy+C,EAAAC,aAAA,uBACAr+C,EAAAo+C,EAAAC,aAAA,4BACAt9C,EAAAq9C,EAAAC,aAAA,2BACAv+C,EAAAs+C,EAAAC,aAAA,6BAAAD,EAAAE,aAAA,4BACA/9C,EAAA69C,EAAAC,aAAA,8BAAAD,EAAAE,aAAA,6BACA79C,EAAA;AACA,UAAA89C,KAAAH,EAAAI,WACAD,EAAAhhD,KAAAkhD,WAAA,kCAAAF,EAAAhhD,MAAA,6BAAAghD,EAAAhhD,MAAA,4BAAAghD,EAAAhhD,MAAA,6BAAAghD,EAAAhhD,MAAA,8BAAAghD,EAAAhhD,OACAkD,EAAA89C,EAAAhhD,MAAAghD,EAAA5uD;AAGAuuD,EAAAC,cAAAC,GAAA,EAAAppD,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBAaA,CACAjF,GAAA,WACAkF,MAAA,iOACAC,WAAA,4HACAC,MAAA,KAAAqnD,EAAAnuD,QAAA+P,EAAAK,EAAAe,EAAAjB,EAAAS,EAAAE,GACA9J,cAAA,KACA,EAAAoV,EAAAnc,cAAAiS,eAEA,CACAvQ,GAAA,cACAotD,YAAA,GAEA,CA9CAjvD,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AA4CAJ,EAAAI,QAAA,CACA2N,KAAA,cACA,UAAAigD,IACA,EAAA9rB,EAAAiB,eAAAqrB,EACA,E,GCtDAzuD,OAAA,yuBAAAC,EAAAmvD,EAAAjtB,EAAAktB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA50C,EAAA60C,EAAA7pD,GACA;AAEA5F,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,IAAAuvD,GAAA;AAIA,SAAAC,EAAA9iC,IAoDA,SAAAA,GACAA,EAAAwhC,yBAAA,oBAAA3qC,IACA,IACAxjB,MAAA0vD,EACAlrB,SAAAp4B,KACAA,EAAAujD,eACAA,IAEAnsC,GACA,EAAA9I,EAAA6jC,UAAAnyC,EAAAxJ,OACA8sD,EAAA5lD,IAAA,gBAAAslD,EAAAnvD,QAAA,CACA2vD,OAAAD,EACAE,MAAA,2BAIA,EAnEAC,CAAAnjC,GACAA,EAAAojC,YAAA,oBACAC,SAAA,eACAC,qBAAA,SAAAnuD,IACA,EAAAytD,EAAAW,gBAAA7vD,KAAAoG,MAAA0uC,WAAArzC,EACA,EACA88B,UAAA,WACAv+B,KAAA8vD,SACA9vD,KAAAoG,MAAA2pD,kBAAA/vD,KAAAoG,MAAA+lD,QAAAC,eAAApsD,KAAAoG,MAAA+lD,QAAAC,cAAArhD,OAAAsP,EAAA6jC,UAAAz6C,QAAA,GAGAzD,KAAAi8B,WAAAsC,UAAA,6BAAAv+B,KAAAoG,MAAA9E,KAAAtB,KAAA4vD,qBAAA7gD,KAAA/O,OAAA,EAEA,EACAs+B,YAAA,WACAt+B,KAAAi8B,WAAAqC,YAAA,+BACAt+B,KAAA8vD,QACA,GAEA,CACA,SAAAE,EAAA1jC,GACAA,EAAA2jC,yBAAA,6BAAAnB,EAAAlvD,UACA,EAAA+uD,EAAAuB,0BAAA,6CAEA,SAAA5jC,GACAA,EAAA6jC,eAAA,oBAAAC,IACA,MAAAC,GAAA,EAAAh2C,EAAAi2C,YAAAF,EAAA/uD,MAAAkB;AAIA,cAAA8tD,EACAD,EAAAG,OAAAC,OAAA,iBACA51B,YAAAw1B,EAAAhqD,OAAAm+B,OAAAksB,kBAEA,YAAAJ,EACAD,EAAAG,OAAAC,OAAA,iBACA51B,YAAAw1B,EAAAhqD,OAAAsqD,gBAFA,KAMA,EAAA9B,EAAA+B,oBAAA,wCAAAtrD,EAAAkB,uBAIA,CACAjF,GAAA,WACAkF,MAAA,oDACAC,WAAA,8HACAE,cAAA,IAEA,CA5BAiqD,CAAAtkC,GACA,CAwGA9sB,EAAAI,QAAA,CACA2N,KAAA,2BACA,UAAAigD,CAAAC,GACA,MAAAlrD,EAAAkrD,EAAAv8B,OAAA;AACA3uB,GAAAuY,uBACAq0C,EAAA5sD,EAAAsuD,gCACA,EAAAnvB,EAAAiB,eAAArW,KAzIA,SAAAA,GACAA,EAAAwkC,YAAArnD,IAAA,KAAAolD,EAAAjvD,QACA,EAwIAmxD,CAAAzkC,GACA8iC,EAAA9iC,GACA0jC,EAAA1jC,GApEA,SAAAA,GACA,MAAAzY,EAAAyY,EAAA0kC;AACAn9C,KAAAiH,sBAAAq0C,GAGA7iC,EAAAwhC,yBAAA,oBAAAx9B,IACA,IACA3wB,MAAA0vD,EACAlrB,SAAAp4B,KACAA,EAAAujD,eACAA,IAEAh/B;AACA,oBAAAvkB,EAAAw4B,OAAA0sB,WACA5B,EAAA5lD,IAAA,WAAAulD,EAAApvD,QAAA,CACA2vD,OAAAD,EACAE,MAAA,cAIA,CAiDA0B,CAAA5kC,GAhDA,SAAAA,GACA,MAAAzY,EAAAyY,EAAA0kC;AACAn9C,KAAAiH,sBAGAwR,EAAAwhC,yBAAA,oBAAAqD,IACA,IACAxxD,MAAA0vD,EACAlrB,SAAAp4B,KACAA,EAAAujD,eACAA,IAEA6B;AACA,oBAAAplD,EAAAw4B,OAAA0sB,WACA5B,EAAA5lD,IAAA,WAAAwlD,EAAArvD,QAAA,CACA2vD,OAAAD,KAIA,CA8BA8B,CAAA9kC,GA7BA,SAAAA,GACA,MAAAxP,EAAAwP,EAAAmhC,UAAAv8B,OAAA,iBACArd,EAAAyY,EAAAmhC,UAAAv8B,OAAA;AACA5E,EAAA+kC,0BAAA,CACA/vD,GAAA,wBACAgJ,KAAA,cACA+d,MAAA,iDACAhd,MAAA,kDACA,MAAAa,IACA,EAAAmO,EAAAwhC,4BAAA/+B,EAAA9c,KAAAukC,MAAAjjC,GACA,EACAuF,WAAA,iCACAyqD,cAAA,0BACA,SAAAC,GACA,OAAA19C,GAAA29C,gCAAAxxD,KAAAukC,MAAAksB,eACA,GAEA,CAaAgB,CAAAnlC,KAGA,E,GC1JA/sB,OAAA,8MAAAC,EAAAkyD,EAAAC,GACA;AAEAlyD,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACAJ,EAAAI,SAAA,EAAA8xD,EAAAE,gBAAAtlC,IACA,MAAA/d,EAAA+d,EAAAmhC,UAAAv8B,OAAA,yBACArd,EAAAyY,EAAA0kC,iBACAa,EAAAvlC,EAAAmhC,UAAAv8B,OAAA,gBACApU,EAAAwP,EAAAmhC,UAAAv8B,OAAA,iBACA4gC,EAAAj+C,KAAAk+C;AACAxjD,EAAAqkB,cAAAi/B,GAAAG,aAAAF,GAGAxlC,EAAA2lC,2BAAA,CACAC,gBAAA,wCACA5wD,GAAA,kBACAgJ,KAAA,qBACA+lC,SAAA,WACAnkC,OAAA,KACA4Q,EAAApL,KAAAigD,EAAA/xD,QAAA,CACAwG,MAAA,CACA6wC,UAAA4a,EAAAM,eAAA7wD,U,GCxBA/B,OAAA,4SAAAC,EAAAkiC,EAAA0wB,EAAA93C,GACA;AAEA7a,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACAJ,EAAAI,QAAA,CACA2N,KAAA,2BACA,UAAAigD,IACA,EAAA9rB,EAAAiB,eAAArW,IAEA,IADAA,EAAAmhC,UAAAv8B,OAAA,yBACA1V,2BACA;AAEA,MAAA3H,EAAAyY,EAAAmhC,UAAAv8B,OAAA;AACA,IAAArd,EACA;AAEA,MAAAw+C,EAAA/lC,EAAAmhC,UAAAv8B,OAAA;AACAmhC,EAAA/lC,MACAA,EAAAgmC,gBAAAC,GAAA,cAAAA,EACAhjD,IAAA,KAAA+K,EAAAoB,uBAAA;AACA82C,QAAA;AACAC,eAAA;AACAC,qBAAA,IAEApmC,EAAAqmC,eAAA,0BAAAP,EAAAxyD;AAaA0sB,EAAAmhC,UAAAv8B,OAAA,kBAAAjjB,GAAA,iBAZA2kD,IACA,sCAAAA,GAAA3jB,IAAA1hC,KACA,OAAA8kD,EAAAQ;AAEA,MAAAtuB,EAAAjY,EAAAmhC,UAAAv8B,OAAA,oBAAA9qB;AAGA,uBAAAm+B,GAAA0sB,WAAA1sB,EAAA/hC,UAAAqR,EAAAvS,IAAAijC,EAAAonB,UACA,OAAA0G,EAAAQ;AAEAR,EAAAS,8BAIA,E,GC1CAvzD,OAAA,0HAAAC,EAAAkyD,GACA;AAEAjyD,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACAJ,EAAAI,SAAA,EAAA8xD,EAAAE,gBAAAtlC,IACA,MAAAymC,EAAAzmC,EAAAmhC,UAAAv8B,OAAA;AACA5E,EAAAwhC,yBAAA,wBAAAl9C,IACA,IAAAjR,MACAA,EAAAwkC,QACAA,GACAvzB;AACA,MAAA25B,EAAA,aAAAwoB,EAAAvoB,YAAAuoB,EAAAxoB;AAIA,OAHApG,EAAAI,MAAA5f,IAAA,kBAAA4lB,GACA5qC,EAAA+D,KAAA,oBAEA/D,K;AClBAJ,OAAA,sVAAAC,EAAAkiC,EAAAz5B,EAAA+qD,EAAAr2C,EAAA6mC,GACA;AAEA/jD,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AA6DAJ,EAAAI,QAAA,CACA2N,KAAA,sBACA,UAAAigD,IACA,EAAA9rB,EAAAiB,eAAArW,KA/DA,SAAAA,GACAA,EAAA2mC,gBAAAC,IACA,MAAAr/C,EAAAyY,EAAA0kC,iBACAl0C,EAAAwP,EAAAmhC,UAAAv8B,OAAA,iBACA/R,EAAA9B,IACA,MAAA81C,EAAA91C,EAAAC,UACA2lC,EAAA5lC,EAAA4lC,SAAAtjD;AACA,OAAAsjD,KAAAx/C,OAAA,EACAw/C,EAEAkQ,KAAA1vD,OAAA,EACA0vD,OADA;AAIAD,EAAAE,UAAA,CACA9xD,GAAA,oBACA+lB,MAAA,SACA/c,KAAA,qBACAe,MAAA,8CACAgoD,cAAA,EACAC,qBAAA,EACAhmC,SAAA,QACAimC,eAAAl2C,IACA,OAAAA,EAAAC,UAAA7Z,OAEA,OADA6oB,EAAAmhC,UAAAv8B,OAAA,kBACAnX,MAAA,CACA8oC,MAAA,2BACAhkC,SAAA,QACApd,KAAA,CACAsd,SAAA,EAAA9W,EAAAoC,MAAA;AAIA,MAAA6U,EAAArL,GAAA2J,kBAAA1S,KAAAlG,GAAA,cAAAA,EAAA2I;AACAuP,EAAApL,KAAAiL,EAAA/c,QAAA,CACAwG,MAAA,CACA8Y,OACAC,eAAA9B,GACAA,eACAiC,kBAAA,MAIAk0C,UAAA,OAAAhQ,EAAAE,sBAAAp3B,EAAAmhC,UAAAv8B,OAAA,oBAAA9qB,MAAAkmB,EAAAmhC,UAAAv8B,OAAA,yBAAArd,EAAA,gBACA4/C,WAAAnkD,IACAgd,EAAAmhC,UAAAv8B,OAAA,gBACAxf,KAAA2C,SAAA9K,cAAA,uBACA6zB,WAAA,0BACAysB,UAAAmJ,EAAApzD,QACAqqD,gBAAA,EACAH,aAAA,EACAroD,KAAA,CACA4b,aAAA/N,EACA6P,eAAA7P,UAMA,EAKAokD,CAAApnC,IAEA,E,GCzEA/sB,OAAA,mLAAAC,EAAAwB,EAAA4G,EAAA8pD,EAAAzpD,GACA;AAEAxI,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACAJ,EAAAI,SAAA,EAAA8xD,EAAAE,gBAAAtlC,IACA,MAAAqnC,EAAA,CACAtrC,OAAA,EAAApgB,EAAAoC,MAAA,qDACAC,KAAA,qBACAu4C,MAAA,oBAEAjzB,EAAAtD,EAAAmhC,UAAAv8B,OAAA,yBACArd,EAAAyY,EAAA0kC;AACAphC,EAAAgkC,2BAAA9wD,SAAA,kBAAA+Q,GAAAggD,mBAGAvnC,EAAAwnC,8BAAAH,EAAAtrC,MAAAsrC,EAAA9Q,MAAA8Q,EAAArpD,KAAAgF,IACA,MAAA+1C,EAAA/4B,EAAAmhC,UAAAv8B,OAAA;AAEA,GADAm0B,EAAA0O,aAAAzkD,EAAA4H,OACAmuC,EAAA0O,aAAAvqD,UAAAkxC,SAAA,qBACA,MAAAsZ,EAAA1kD,EAAA4H,OAAA+0B,QAAA,mBACAgoB,EAAAhjD,SAAA+iD,EAAA3F,aAAA,wBACA6F,EAAA5kD,EAAA4H,OAAA+0B,QAAA,kBAAA1iC,cAAA,OAAA8kD,aAAA;AACAhJ,EAAAW,oBAAA;AACA,MAAAjyC,EAAAuY,EAAAmhC,UAAAv8B,OAAA;AACAnd,EAAAogD,aACA9O,EAAAS,WAAAT,EAAAS,WAEAT,EAAAU,UAAA,EAAA/kD,EAAAQ,MAAA,yCACAy9B,OAAA,OACAx9B,KAAA,CACA2yD,UAAAF,EACAG,eAAA,cAGAhP,EAAAU,SAAA1tC,KAAAzH,IACA,IAAA0jD,QACAA,GACA1jD;AACAy0C,EAAA6O,WACA7O,EAAA4O,aACA5O,EAAAE,WAAA+O,EACAvgD,EAAAogD,YAEA9O,EAAAC,kBAEA/gC,MAAA3c,EAAAoF,gBAAA2e,QAAA,KACA05B,EAAAW,oBAAA,IAEA,K,GCnDAzmD,OAAA,uHAAAC,EAAAkyD,GACA;AAEAjyD,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACAJ,EAAAI,SAAA,EAAA8xD,EAAAE,gBAAAtlC,IACA,MAAAzY,EAAAyY,EAAA0kC;AACA1kC,EAAAmhC,UAAAv8B,OAAA,yBACAm8B,gBAAAx5C,GAAA4yC,iCAGAn6B,EAAAioC,2BAAA,0B,GCbAh1D,OAAA,oHAAAC,EAAAkyD,GACA;AAEAjyD,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACAJ,EAAAI,SAAA,EAAA8xD,EAAAE,gBAAAtlC,IACAA,EAAAojC,YAAA,iCACAC,SAAA,eACA6E,kBAAA,wD,GCVAj1D,OAAA,wHAAAC,EAAAkyD,GACA;AAEAjyD,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACAJ,EAAAI,SAAA,EAAA8xD,EAAAE,gBAAAtlC,IACA,MAAAzY,EAAAyY,EAAA0kC;AACAn9C,KAAA+xB,OAAA/xB,EAAA4gD,4BAGAnoC,EAAAooC,2BAAA,WACAnnD,KAAA,qBACAtN,MAAA,2BACAooB,MAAA,2CACA/d,KAAA,iBAEAgiB,EAAAooC,2BAAA,WACAnnD,KAAA,qBACAtN,MAAA,oBACA00D,YAAA,uBACAtsC,MAAA,2CACA/d,KAAA,gB,GCvBA/K,OAAA,6SAAAC,EAAAsH,EAAA8tD,EAAA1vD,EAAAw8B,EAAAz5B,EAAAjD,EAAAK,EAAA0W,GACA;AAEAtc,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAi1D,GAAA,EAAA7vD,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBAkBA,CACAjF,GAAA,WACAkF,MAAA,2jBACAC,WAAA,8HACAC,MAAA,KAAAxB,EAAAtF,QAAAqI,EAAAoC,KAAAuqD,EAAAh1D,SACA+G,cAAA,KACA,EAAAoV,EAAAnc,cAAAiS,EAAA;AACArS,EAAAI,QAAA,CACA2N,KAAA,8BACA,UAAAigD,CAAAC,GACA,MAAA79B,EAAA69B,EAAAv8B,OAAA;AACAtB,EAAAqyB,uBAAAryB,EAAAklC,gDAGA,EAAApzB,EAAAiB,eAAArW,IACAA,EAAAyoC,sBAAA,CACAzzD,GAAA,iBACAiM,MAAA,EAAAtF,EAAAoC,MAAA,oCACAC,KAAA,qBACAu/C,UAAAgL,EACArB,UAAA5iD,IACA,IAAA2zB,MACAA,GACA3zB;AACA,OAAA2zB,EAAAywB,eAAAvxD,UAGA6oB,EAAAojC,YAAA,cAAAuF,GAAA,cAAAA,EACA5uD,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,kBAAAzB,EAAA6B,UAAA;AACAusD,IAAA,MAAA3vD,OAAAmD,EAAA1I,KAAA;AACAm1D,mBAAA;AACA,iBAAAH,GAMA,OAHAh1D,KAAAk1D,iBACAl1D,KAAAm1D,mBAAAn1D,KAAAk1D,gBAEAl1D,KAAAm1D,oBAAAp1D,IAAAwkC,GAAAvkC,KAAAQ,MAAAoB,aAAA,QAAA2iC,GACA,CACAl+B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,iBAAAzB,EAAAsa,SAAA,KAEAkL,EAAAojC,YAAA,oBAAAuF,GAAA,cAAAA,EACA,mBAAAG,CAAA9yD,GACAqM,MAAAymD,uBAAAxmD,WACA5O,KAAAukC,MAAA2wB,eAAA5yD,EAAA4yD,cACA,KAGA,E,GCzEA31D,OAAA,oIAAAC,EAAAkyD,EAAA2D,GACA;AAEA51D,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACAJ,EAAAI,SAAA,EAAA8xD,EAAAE,gBAAAtlC,IACA,MAAAsD,EAAAtD,EAAAmhC,UAAAv8B,OAAA;AACAtB,EAAA07B,sBAAA17B,EAAA0lC,wBAGAhpC,EAAAipC,kCAAA,aAAAC,EAAA/zD,KACA,OAAA4zD,EAAAz1D,SAAA,uCACA41D,EAAA7wC,IAAA,oBACA8wC,mBAAAh0D,EAAAH,GAAAG,EAAAk0C,YAAAt9B,KAAA,KACAm9C,EAAAh7C,UAAAqB,QAAA,uBACAva,GAAAG,EAAAH,MAGA,K,GCpBA/B,OAAA,4RAAAC,EAAAwB,EAAA4G,EAAA8tD,EAAAC,EAAA1tD,EAAA2tD,GACA;AAEAn2D,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAsc,oBA4CAyP,eAAAsqC,EAAAp7C,GACA,IAAAtX,EAAAyL,UAAAnL,OAAA,QAAAoO,IAAAjD,UAAA,GAAAA,UAAA,IACAknD,WAAA,EACAC,UAAA,GACAC,gBAAA;AAEA,MAAAniD,EAAA4G,EAAA5G,YACAoiD,EAAA,+BAAA/qB,MAAAgrB;AACA,IAAA17B;AAEAA,EADAq7B,EACAhiD,EAAAiH,qBAAAhQ,KAAAiQ,KAAAI,aAAA06C,IAAAh/C,SACA1T,EAAA6yD,gBACA7yD,EAAA6yD,gBAEAniD,EAAAiH,qBAAA,GAAAjE;AAEA,MAAApV,EAAA,CACAyK,OAAAypD,EAAA/1D,QAAAu2D,gBACA5R,WAAA/pB,EACA47B,YAAA,EAAAnuD,EAAAoC,MAAA,yCACAgsD,YAAA,kBACAJ,WACApvC,WAAA,EACAyvC,kBAAA;AAEAnzD,EAAA2yD,WACAr0D,EAAAs0D,UAAA5yD,EAAA4yD,gBACAt7C,EAAA87C,KAAA90D,IAEAgZ,EAAAiqB,cAAA,CACA8xB,oBAAA,EACAC,SAAAh1D,GAGA,EA7EAjC,EAAA8wD,WAsBA,SAAA/tD,GACA,IAAAA,EACA;AAEAm0D;AACA,MAAA37C,EAAA47C,EAAAp0D,EAAAjB;AACA,IAAAyZ,EACA;AAEA,OAAAA,EAAAC,WAAA,eACA,EA/BAxb,EAAA0+C,SAcA,SAAA37C,GACA,IAAAA,EACA;AAGA,OADAm0D,MACAC,EAAAp0D,EAAAjB,GACA,EAnBA9B,EAAAo+C,gBA+BA,SAAA7xC,EAAA8H,GACA,OAAA9H,EAAAvJ,SAAAo0D,KAAA/iD,GAAAiH,sBAAA+e,IAAA9e,GAAAhP,EAAA8K,WAAAkE,EAAAlE,SACA,EAhCArX,EAAAq8C,2BAiCA,SAAA/+B,EAAAi4B,IACA,EAAA/zC,EAAAQ,MAAA,wDAAAuzC,UAAA18B,KAAAogB,IACA3b,EAAApL,KAAAkkD,EAAAh2D,QAAA,CACAwG,MAAAqyB,MAEAlU,MAAA3c,EAAAoF,eACA;AAtCA,MAAA4pD,GAAA;AACA,IAAAD,EAAA;AACA,SAAAD,IACA,IAAAC,EAAA,CACA,MAAA9iD,GAAA,EAAA6hD,EAAAmB,sBAAA72D,MAAAkxB,OAAA;AACAylC,EAAA,GACA9iD,EAAAiH,qBAAAnK,QAAAoK,IACA47C,EAAA57C,EAAAzZ,IAAAyZ,GAEA,CACA,C,GCrBAxb,OAAA,iJAAAC,EAAAs3D,EAAAvlD,EAAAtJ,GACA;AAEAxI,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAuiD,yBAAA,EACAviD,EAAA4iD,qBAEA,SAAAje,EAAA4yB,IACA,EAAAD,EAAA9hD,UAAAmvB,GAAAjT,OAAA,kBACAnX,MAAA,CACA8oC,MAAA,sBACAhkC,SAAA,OACAm4C,iBAAA,EACAv1D,KAAA,CACAsd,SAAA,EAAA9W,EAAAoC,MAAA,wDACA4sD,QAAA,EACA5uC,OAAA,EAAApgB,EAAAoC,MAAA,6CACAC,KAAA,SACAu4C,MAAA,gBACA32C,OAAAqf,UACA7M,EAAAE,cACAm4C,IACA5yB,EAAA5X,OAAA7a,MAAAyyB,EAAA9E,aAAA57B,OAAA,IACA,EAAA8N,EAAAwS,OAAA,IAAAogB,EAAA5X,MAAA7a,OAAA,SAMA;AAvBAlS,EAAAuiD,oBAAA,E,GCRAxiD,OAAA,oMAAAC,EAAA+R,EAAA2lD,GACA;AAEAz3D,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAA23D,8BAAA,EACA33D,EAAA43D,eAgCA,SAAA/tD,GACA,IAAAguD,EAAAhuD;AACA,QACA,IAAAiuD,EAAAC,EAAAF;AACA,IAAAC,EACA;AAEA,GAAAA,EAAA3P,WAAAC,KAAA4P,aAGA;AAFAH,EAAAC,CAIA,CACA,MAAAG,EAAApjD,SAAAojB,cAAA;AACAggC,EAAAjuD,UAAAC,IAAA,gBACA4tD,EAAAt/B,YAAA0/B,EACA,EA/CAj4D,EAAAk4D,gBACAl4D,EAAAI,QA2KA,SAAA+3D,EAAAl2D,EAAA0iC,GACA,MAAAyzB,EAAA,IAAAD,EAAAl2D,EAAA0iC;AACA0zB,IACAA,GAAA,EAAAtmD,EAAAwS,OAAAwH,gBACAmsC,EAAAj2D,EAAAm2D,GACAC,EAAA,KACAp2D,EAAAg9B,YACAi5B,EAAAj2D,EAAAm2D,IAEAE,GAEA,EArLAt4D,EAAAqwD,eAwJA,SAAA/a,EAAArzC,GACA,GAAAA,EAAAs2D,KACA,QAEAjjB,EAAAkjB,kBAAAljB,EAAAkjB,mBAAA,IACAv2D,EAAA+9B,SAAA/9B,EACAw2D,EAAAnjB,EACA;AA9JA,MAAAgjB,EAAA,GACAI,EAAA,IACAf,EAAA33D,EAAA23D,yBAAA,EACAgB,EAAA;AACA,IAAAN,EAAA;AASA,SAAAN,EAAAluD,GACA,IAAAiuD,EAAAjuD,EAAAiuD;AACA,KAAAA,KAAA3P,WAAAC,KAAAC,YAAA,KAAA7jC,KAAAszC,EAAA3N,cACA2N,IAAAc;AAEA,OAAAd,CACA,CAmCA/rC,eAAAmsC,EAAA5+B,EAAAu/B,GAEA,GADAv/B,EAAAw/B,UAAAx/B,EAAAw/B,WAAAptB,KAAAyD,MACAzD,KAAAyD,MAAA7V,EAAAw/B,UAAAJ,EAEA,OADAG,EAAA17B,WAAA,GACA;AAEA,IAAA07B,EAAAhvD,QAEA;AAEA,MAAAkvD,EAAAF,EAAA73B;AACA,GAAA1H,EAAA0H,MAAA+3B,IAAAz/B,EAAA2F,KAAA,CAEA,GADA45B,EAAAhvD,QAAAE,cAAA,iBAEA,QAEA,CACA,QAAAsI,IAAAinB,EAAA0H,IAAA,CACA,IAAAD,EAAAzH,EAAA0H;AACA,IAAA1H,EAAA2F,KAEA,OAAA85B,EAAA90D,SAAA,IAAA88B,EAAAxtB,QAAA,cACAwtB,EAAAzH,EAAA0H;IACA,CACA,MAAAxjB,EAAAujB,EAAA98B,OAAA80D,EAAA90D;AAKA,IAAA+0D,EAAAz3B,KAAA03B,MAAAz7C,GAAAm7C,EAAAL;AACAU,EAAArB,IACAqB,EAAArB,GAEA52B,EAAAzH,EAAA0H,IAAAk4B,UAAA,EAAAH,EAAA90D,OAAA+0D,EACA,OAEAH,EAAAM,OAAAp4B,EAAAzH,EAAA2F,KACA,CAOA,OANA3F,EAAA2F,OACA3F,EAAAwO,cACA+wB,EAAAO,UAAA9/B,EAAAwO,QAEA+wB,EAAA17B,WAAA,GAEA7D,EAAA2F,IACA,CAiCA,SAAAw5B,EAAAnjB,GACA+iB,IACAA,GAAA,EAAAtmD,EAAAwS,OAAAwH,UACA,MAAAstC,QA1BAttC,eAAAupB,GACA,MAAAhc,EAAAgc,EAAAkjB;AACA,IAAAa,GAAA;AACA,MAAAC,EAAAr5D,OAAA+D,KAAAs1B,GAAA/4B,IAAAwrB,UACA,IAAAwtC,EAAAjgC,EAAA2G;AACA,MAAAu5B,EAAA,IAAA9B,EAAAt3D,QAAAk1C,EAAAikB,EAAAv5B;MACAk4B,EAAAqB,EAAAC,UAEAlgC,EAAA2G,GAEAo5B,GAAA;AAIA,aADA9d,QAAAke,IAAAH,GACAD,CACA,CAWAK,CAAApkB;AACA+iB,EAAA,KACAgB,GACAZ,EAAAnjB,IAEAgjB,GAEA,C,GCzJAv4D,OAAA,yTAAAC,EAAA25D,EAAAt9B,EAAAqzB,EAAAkK,GACA;AAEA35D,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAy5D,UAAAD,EAAAx5D,QACA05D,gBAAA,CACAC,uBAAA,CAAAlwD,EAAAmwD,MACA,YAAAnwD,EAAA+N,SAAA,SAAAoiD;AAGA,WAAA9qD,CAAAomC,EAAArV,GACA9wB,QACA3O,KAAA80C,aACA90C,KAAAy/B,SACAz/B,KAAA+L,KAAA+oC,EAAA2G,eAAAhc;AACA,MAAAsV,EAAAD,EAAAvQ,MAAAjjC;AACAtB,KAAA+L,OACA/L,KAAAy5D,YAAAplD,SAAA9K,cAAA,8BAAAwrC,aAAA/0C,KAAA+L,KAAAuvC,eAEA,CACA,WAAAjyC,GACA,OAAArJ,KAAAy5D,WACA,CACA,aAAA98B,CAAAh9B,GACAK,KAAAy5D,cACA95D,EACAK,KAAAy5D,YAAAjwD,UAAAC,IAAA,aAEAzJ,KAAAy5D,YAAAjwD,UAAAK,OAAA,aAGA,CACA,YAAA8uD,CAAAh5D,EAAA8+B,GACAz+B,KAAA+L,KAAA+W,IAAA,MAAAnjB;AACA,MAAA2nC,QAAA,EAAAzL,EAAA69B,MAAA/5D;AAGAK,KAAAqJ,QAAAG,UAAAK,OAAA,aACA7J,KAAAqJ,QAAAswD,YACA35D,KAAAqJ,QAAAG,UAAAC,IAAA;AACA,MAAAmwD,EAAAvlD,SAAAojB,cAAA;AACAmiC,EAAAC,UAAAvyB,EACA7I,IACA,EAAAywB,EAAAkI,gBAAAwC,SAEA55D,KAAA44D,UAAAgB,EAAAC,UACA,CACA,eAAAjB,CAAAj5D,GACAK,KAAAy5D,cAGAz5D,KAAA+L,KAAA+W,IAAA,SAAAnjB,UACA,EAAAw5D,EAAAv5D,YAAAk6D,WAAA95D,KAAAy5D,YAAAlwD,cAAA,mBAAA5J,UAAAK,KAAAs5D,iBACA,CACA,OAAA94B,GACA,OAAAxgC,KAAA+L,KAAA4Y,IAAA,UACA,EAEAnlB,EAAAI,QAAAy5D,C,GC7DA95D,OAAA,wGAAAC,GACA;AAEAC,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AAqBAJ,EAAAI,QAjBA,MACA,aAAA+8B,CAAAh9B,GACA,sBACA,CACA,eAAAi5D,GACA,sBACA,CACA,YAAAD,GACA,sBACA,CACA,WAAAtvD,GACA,sBACA,CACA,OAAAm3B,GACA,sBACA,E,GCzBAjhC,OAAA,6KAAAC,EAAAsH,EAAA9F,EAAA6pC,EAAAkvB,GACA;AAEAt6D,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAo6D,EACA3zD,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAyB,IAAA,MAAA7E,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAwrC,IAAA,MAAA5uC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAyrC,IAAA,MAAA7uC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,wBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGA0rC,IAAA,MAAA9uC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA2rC,IAAA,MAAA/uC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,iBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA4rC,IAAA,MAAAhvC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAsxD,IAAA,MAAA10D,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,kBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAuxD,IAAA,MAAA30D,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,sBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAwxD,IAAA,MAAA50D,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,kBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAyxD,IAAA,MAAA70D,OAAAmD,EAAA1I,KAAA;AACA,aAAAq6D,CAAAplC,GACA,MAAAwgB,EAAAxgB,EAAAsgB;AACA,SAAAwkB,EAAAL,MAAAjkB,EAAAD,iBAAAn9B,KAAAivB,IACAtnC,KAAAoK,KAAAk9B,EACAtnC,KAAAwW,SAAA,IACA6B,KAAA,KACA4c,EAAAwJ,OACAz+B,KAAAm0C,cAAA,EAAAtJ,EAAA6K,iBAAAD,EAAA6kB,eACAt6D,KAAAo0C,aAAAqB,EAAAG,UACA51C,KAAAq0C,qBAAAoB,EAAAI,wBACA71C,KAAAs0C,SAAAmB,EAAAnB,SACAt0C,KAAAq0C,qBAAAoB,EAAAI,wBACA71C,KAAAu0C,cAAAkB,EAAAnB,UAAAmB,EAAAK,iBAGA,CACA,QAAAykB,GACAv6D,KAAAk6D,gBAAA,EACAl6D,KAAAm6D,oBAAA,CACA,CACA,eAAAhlB,CAAAthC,EAAAkhC,GAEA,GADA/0C,KAAAk6D,gBAAA,EACAl6D,KAAAoK,OAAApK,KAAAu0C,cAEA,YADAv0C,KAAAm6D,oBAAA;AAGA,IAAA/kB,EAAA,iCAAAL;AAQA,OAPAlhC,IACAuhC,GAAA,cACAp1C,KAAAu0C,gBACAa,GAAA,yBAGAp1C,KAAAwW,SAAA,GACA,EAAAxV,EAAAQ,MAAA4zC,GAAA/8B,KAAA5W,IACAoS,IACApS,EAAAg9B,MAAA,EACAz+B,KAAAq6D,cAAA54D,KAGA,EAEAjC,EAAAI,QAAAo6D,C,GC1FAz6D,OAAA,sJAAAC,EAAAwB,EAAA8G,EAAAG,GACA;AAEAxI,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,QACA2rB,eAAAgZ,EAAAi2B,EAAAC,SACA,EAAA3yD,EAAA0yC,oBAAAjvB,UACA,MAAAnhB,QAMAmhB,eAAAgZ,EAAAi2B,EAAAC,GACA,MAAAC,EAAAn2B,EAAA5f,IAAA;AACA,IAAA02B,EAAA;AAEA,QAAA3yC,EAAA8xD,EAAA9xD,GAAA+xD,EAAA/xD,IACA2yC,EAAA33C,KAAAgF;AAEA,MAAAiyD,EAAAtf,EAAAt7C,IAAAw7C,GACAmf,EAAAlf,wBAAAD,IAKA1tC,EAAA,MAAA02B,EAAAjjC,gBACAG,EAAA,CACAm5D,SAAAD,EACAE,aAAA,GAEAjuD,QAAA,EAAA5L,EAAAQ,MAAAqM,EAAA,CACApM;AAEA,IAAA09B,EAAA;AACAA,EAAAz7B,KAAA,8BACAy7B,EAAAz7B,KAAA,aACAy7B,EAAAz7B,KAAA,SAAA6gC,EAAAl5B,gBACA8zB,EAAAz7B,KAAA,mBAAAuE,EAAAoC,MAAA,uCAAApC,EAAAoC,MAAA,0CACA80B,EAAAz7B,KAAA,cACAkJ,EAAAkuD,YAAAjyD,MAAA8H,QAAA5E,IACAozB,EAAAz7B,KAAA,IACAy7B,EAAAz7B,KAAA,KAAAqI,EAAA8K,eACAsoB,EAAAz7B,KAAA,IACAy7B,EAAAz7B,KAAAqI,EAAAy0B,OAEArB,EAAAz7B,KAAA;AACA,MAAA0G,EAAA+0B,EAAAzP,KAAA;AACA,OAAAtlB,CACA,CA1CA2wD,CAAAx2B,EAAAi2B,EAAAC;AACA,WAAArgB,KAAA,CAAAhwC,GAAA,CACA3J,KAAA,gBAGA,C,GCdAlB,OAAA,8KAAAC,EAAAsH,EAAAyK,EAAAypD,EAAAlzD,GACA;AAEArI,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AAMA,MAAAq7D,EACA50D,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAm7B,IAAA,MAAAv+B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,SAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAuyD,IAAA,MAAA31D,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,kBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAwyD,IAAA,MAAA51D,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,QAAAzB,EAAA6B,SAAA,WACA,OAAA3I,KAAAmf,YACA,GAFA;AAGAnC,GAAA,MAAAzX,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA2zB,IAAA,MAAA/2B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA2wC,IAAA,MAAA/zC,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAyyD,IAAA,MAAA71D,OAAAmD,EAAA1I,KAAA;AACAq7D,YAAA;AACAC,iBAAA;AACAC,iBAAA;AACAC,OAAA;AACAC,cAAA;AACAC,UAAA;AACAC,cAAA;AACAC,cAAA;AACAC,qBAAA;AAMA,WAAAntD,CAAAyQ,EAAA28C,GACA97D,KAAAmf,eACAnf,KAAA87D,eAlDA,GAmDA97D,KAAA+7D,YACA,CAIA,gBAAAA,GACA/7D,KAAAw7D,aAAA,EAAAR,EAAAp7D,UACA,CAOA,kBAAA8+B,CAAAp8B,EAAA05D,GACA,GAAAh8D,KAAA67D,oBACA;AAEA77D,KAAAw7D,cACAx7D,KAAA+7D,aAEA/7D,KAAAo7D,YAAA;AACA,MAAAa,EAAA35D,EAAA05D;AAEA,KADA15D,GAAAm8B,KACA,CACAz+B,KAAA67D,qBAAA,EACA77D,KAAAq7D,eACA,EAAA9pD,EAAAqB,QAAA5S,KAAAq7D,aACAr7D,KAAAq7D,YAAA,MAGAr7D,KAAAy7D,gBACAz7D,KAAAk7D,MAAAx3D,KAAA1D,KAAAy7D,eACAz7D,KAAAy7D,cAAA;AAGA,MAAAS,EAAAD,EAAAt2C,MAAA3lB,KAAAm7D,eAAA13D;AACAy4D,EAAAz4D,QACAzD,KAAAk7D,MAAAx3D,QAAA1D,MAAAm8D,GAAAD;AAEA,MAAAE,EAAAH,EAAAx4D,OAAAzD,KAAAs8B,WAAA74B;AACA,OAAA24D,GAAA,GACAp8D,KAAAs8B,WAAA2/B,EACAj8D,KAAAgd,KAAAhd,MAAAq8D,GAAAr8D,KAAAw7D,OAAAc,mBAAAt8D,KAAAmf,aAAA88C,IAAA,GACAj8D,KAAA8jC,aAAA,OACA9jC,KAAAs5C,QAAA,KAGAt5C,KAAA27D,cAAA56B,KAAAie,KAAAod,EAhGA,IAiGAp8D,KAAA47D,cAjGA,GAkGA57D,KAAA07D,UAAA,EACA17D,KAAA8jC,aAAA,EACA9jC,KAAAm7D,eAAAc,OACAj8D,MAAAu8D,KAEA,CACA,MAAAC,EAAAP,EAAAt2C,MAAA3lB,KAAAm7D,eAAA13D;AACA,IAAA+4D,EAEA,YADAx8D,KAAAm7D,eAAAc;AAIA,MAAAQ,GAAAz8D,KAAAy7D,eAAA,IAAAe,EACAhuC,EAAAxuB,MAAAm8D,GAAAM;AACAz8D,KAAAy7D,cAAAjtC,EAAAkuC,OAAA,KACAluC,EAAA/qB,QACAzD,KAAAk7D,MAAAx3D,QAAA8qB,GAEAxuB,KAAA8jC,aAAA,EACA9jC,KAAAq7D,aACAr7D,MAAAu8D,KAEAv8D,KAAAm7D,eAAAc,CACA,CAIA,KAAAliB,GACA/5C,KAAAgd,KAAA,GACAhd,KAAAs8B,WAAA,GACAt8B,KAAAm7D,eAAA,GACAn7D,KAAAk7D,MAAA,GACAl7D,KAAAs7D,iBAAA,EACAt7D,KAAAu7D,iBAAA,EACAv7D,KAAAy7D,cAAA,KACAz7D,KAAA8jC,aAAA,EACA9jC,KAAAs5C,QAAA,EACAt5C,KAAA67D,qBAAA,EACA77D,KAAAo7D,YAAA,EACAp7D,KAAA07D,UAAA,EACA17D,KAAA27D,cAAA,EACA37D,KAAA47D,cAAA,EACA57D,KAAAq7D,eACA,EAAA9pD,EAAAqB,QAAA5S,KAAAq7D,aACAr7D,KAAAq7D,YAAA,KAEA,CAOA,aAAAsB,CAAAC,EAAAtgC,GACA,MAAAugC,EAAA97B,KAAA03B,MAAAn8B,EAAA74B,OA1JA,GA0JA64B,EAAA74B,OAzJA,IA0JAq5D,EAAAF,EAAAj3C,MAAA,EAAAk3C,GACAX,EAAAU,EAAAj3C,MAAAk3C,GACArmB,EAAAx2C,KAAAw7D,OAAAc,mBAAAQ,EAAAxgC;AACA,GAAA4/B,EAAAz4D,OAAA,CACA,IAAAs5D,EAAAvmB,EAAAwmB,IAAA,GACAC,EAAAzmB,EAAAwmB,IAAA;AACAD,EAAAG,OAAAD,GAAAE,UACA3mB,EAAAp4B,QAAA,IAAA2+C,EAAAE,GACAF,EAAAE,GAEAF,EAAAI,UACAJ,EAAA,CACAG,OAAA,EACAC,SAAA,EACAx9D,MAAA,IAEA62C,EAAA9yC,KAAAq5D,IAEAA,EAAAp9D,OAAAu8D,CACA,CACA,OAAA1lB,CACA,CAKA,GAAA+lB,GACA,IAAAv8D,KAAA8jC,YACA;AAEA,MAAAs5B,EAAAp9D,KAAA07D,SAAA17D,KAAA27D,cAAA;AACA,IAAA0B,EAAA;AACA,KAAAA,EAAAD,GAAAp9D,KAAAs7D,iBAAAt7D,KAAAk7D,MAAAz3D,QAAA,CACA,MAAA65D,EAAAt9D,KAAAk7D,MAAAl7D,KAAAs7D;AACAt7D,KAAAs8B,YAAAghC,EAAAC,OAAAv9D,KAAAu7D,kBACAv7D,KAAAu7D,mBACA8B,IACAr9D,KAAAu7D,kBAAA+B,EAAA75D,SACAzD,KAAAs7D,mBACAt7D,KAAAu7D,iBAAA,EAEA,CACA,IAAAiC,GAAA;AASA,GARAx9D,KAAA07D,SACA17D,KAAA47D,cAAA,IACA57D,KAAA47D,gBACA4B,GAAA,GAGAA,EAAA,IAAAx9D,KAAAu7D,iBAEAiC,GAAAx9D,KAAAs7D,kBAAAt7D,KAAAk7D,MAAAz3D,OAAA,CACA,MAAAg6D,EAAAz9D,KAAAs7D,iBAAAt7D,KAAAk7D,MAAAz3D,QAAAzD,KAAA07D;AACA17D,KAAAgd,KAAAhd,MAAAq8D,GAAAoB,EAAAz9D,KAAA28D,cAAA38D,KAAAmf,aAAAnf,KAAAs8B,YAAAt8B,KAAAw7D,OAAAc,mBAAAt8D,KAAAmf,aAAAnf,KAAAs8B,aAAAt8B,KAAA07D,SACA,CAEA,GADA17D,KAAAs7D,kBAAAt7D,KAAAk7D,MAAAz3D,OAEAzD,KAAA8jC,aAAA,EACA9jC,KAAA07D,UAAA,EACA17D,KAAAq7D,YAAA,KACAr7D,KAAA67D,sBACA77D,KAAAs5C,QAAA;IAEA,CACA,MAAAokB,EAAA19D,KAAA07D,SAxNA,IAwNA17D,KAAA87D;AACA97D,KAAAq7D,aAAA,EAAA9pD,EAAAwS,OAAA/jB,WAAAu8D,GAAAmB,EACA,CACA,CAMA,GAAAvB,CAAA/xD,GACA,OAAAA,EAAA8jB,MAAA,gBACA,CAOA,GAAAyvC,CAAAvzD,EAAA3J,GACA,gBAAAA,EACA,QAAA2J,UAEA,YAAA3J,EACA,QAAAujB,KAAA5Z,GAAA,WAAAA,UAEA,SAAAA,UACA,CAOA,GAAAiyD,CAAAuB,GACA,IAAAC,IAAAjvD,UAAAnL,OAAA,QAAAoO,IAAAjD,UAAA,KAAAA,UAAA;AACA,MAAAssD,EAAA;AACA0C,EAAAjtD,QAAAmtD,MAAAn+D,MAAAo+D,MAAA,iBAAAptD,QAAAqtD,GAAA9C,EAAAx3D,KAAA,CACA0G,KAAA4zD,EACAv9D,KAAAq9D,EAAAZ,MAAA,QAAAY,EAAAX,QAAA;AAEA,IAAAc,GAAA;AACA,GAAAJ,EACA,QAAAn1D,EAAAwyD,EAAAz3D,OAAA,EAAAiF,GAAA,EAAAA,IACA,eAAAwyD,EAAAxyD,GAAAjI,MAAA,KAAAujB,KAAAk3C,EAAAxyD,GAAA0B,MAAA,CACA6zD,EAAAv1D;AACA,KACA,CAGA,MAAA8tC,EAAA;AACA,QAAA9tC,EAAA,EAAAA,GAAAu1D,EAAAv1D,IAAA,CACA,IAAA0B,KACAA,EAAA3J,KACAA,GACAy6D,EAAAxyD;AAEA,GADA0B,GAAA,EAAAtC,EAAAkwC,kBAAA5tC,GACA,QAAA4Z,KAAA5Z,GAAA,CACAosC,EAAA9yC,KAAA0G;AACA,QACA,CACA,IAAA8zD,EAAAl+D,MAAA29D,GAAAvzD,EAAA3J;AACAo9D,GAAAn1D,IAAAu1D,IACAC,EAAA,2BAAAA,YAEA1nB,EAAA9yC,KAAAw6D,EACA,CACA,QAAAx1D,EAAAu1D,EAAA,EAAAv1D,EAAAwyD,EAAAz3D,QAAA,CACA,MAAAhD,EAAAy6D,EAAAxyD,GAAAjI;AACA,IAAA09D,EAAA;AACA,KAAAz1D,EAAAwyD,EAAAz3D,QAAAy3D,EAAAxyD,GAAAjI,UACA09D,GAAAjD,EAAAxyD,KAAA0B;AAEAosC,EAAA9yC,KAAA1D,MAAA29D,IAAA,EAAA71D,EAAAkwC,kBAAAmmB,GAAA19D,GACA,CACA,OAAA+1C,EAAA9mB,KAAA,GACA,EAEAlwB,EAAAI,QAAAq7D,C,GChTA17D,OAAA,mFAAAC,GACA;AAoBA,SAAA4+D,EAAA7vD,GACA,OAAAA,EAAA+8C,sBAAA/8C,EAAA8vD,iBACA,CApBA5+D,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAkkD,qBAEA,SAAAM,EAAAz1C,EAAAsF,EAAAyqD,GACA,MAAAC,EAAAH,EAAA7vD,GACAiwD,EAAA3qD,EAAAggD,kBACA4K,EAAAlwD,EAAAmwD,wBACAC,EAAApwD,EAAAqlD,2BAAA9wD,SAAAw7D;AACA,GAAAta,GAAA4a,eACA,OAAAL,GAAAC,GAAAC,GAAAE;AAEA,OAAAJ,GAAAC,GAAAG,CACA,EAVAn/D,EAAA0mD,iBAWA,SAAA5pC,EAAA6nB,GACA,OAAAi6B,EAAAj6B,EAAA51B,eAAA41B,EAAAtwB,aAAAgrD,yBACA,C,GCpBAt/D,OAAA,yHAAAC,EAAAsH,EAAAyK,GACA;AAEA9R,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AAKA,MAAAk/D,EACAz4D,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAm7B,IAAA,MAAAv+B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAo2D,IAAA,MAAAx5D,OAAAmD,EAAA1I,KAAA;AACAq7D,YAAA;AACA2D,mBAAA;AAMA,WAAAtwD,CAAAuwD,EAAAC,EAAApD,GACA97D,KAAAi/D,kBACAj/D,KAAAk/D,kBACAl/D,KAAA87D,eAvBA,EAwBA,CAKA,gBAAAv4B,GACA,OAAAvjC,KAAA8jC,YAAA9jC,KAAA++D,aAAA/+D,KAAAm/D,YACA,CAKA,gBAAAA,GACA,OAAAn/D,KAAAi/D,iBACA,CAKA,gBAAAE,CAAAx/D,GACAK,KAAAk/D,gBAAAv/D,EACA,CAIA,cAAA+iC,GACA1iC,MAAAo/D,KACAp/D,KAAA8jC,aAAA,EACA9jC,KAAA++D,aAAA,GACA/+D,KAAAg/D,mBAAA,CACA,CAOA,kBAAAtgC,CAAAp8B,EAAA05D,GACA,MAAAC,EAAA35D,EAAA05D;AACA15D,GAAAm8B,MACAz+B,KAAA++D,aAAA9C,EACAj8D,KAAAm/D,aAAAlD,EACAj8D,KAAA8jC,aAAA,EAEA9jC,MAAAo/D,MACAnD,EAAAx4D,OAAAzD,KAAAm/D,aAAA17D,SACAzD,KAAAm/D,aAAAlD,EACAj8D,KAAA8jC,aAAA,QACA9jC,MAAAq/D,KAEA,CAKA,GAAAC,GACAt/D,KAAAg/D,mBAAAh/D,KAAAm/D,aAAA17D,QACAzD,KAAA++D,cAAA/+D,KAAAm/D,aAAA5B,OAAAv9D,KAAAg/D,oBACAh/D,KAAAg/D,qBACAh/D,KAAAq7D,aAAA,EAAA9pD,EAAAwS,OAAA/jB,WAAAs/D,GAAAt/D,KAAA87D,cAEA97D,KAAAq7D,YAAA,IAEA,CAKA,GAAAgE,GACAr/D,MAAAo/D,KACAp/D,MAAAs/D,IACA,CAKA,GAAAF,GACAp/D,KAAAq7D,cACA,EAAA9pD,EAAAqB,QAAA5S,KAAAq7D,YAEA,EAEA77D,EAAAI,QAAAk/D,C,GCjHAv/D,OAAA,0HAAAC,EAAA4O,EAAAtG,GACA;AAEArI,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAA+2C,WACA,SAAAA,EAAAne,GACA,UAAAA,EACA;AAEA,oBAAAA,EACA,SAAAtwB,EAAAkwC,kBAAA5f;AAEA,IAAAmnC,EAAA;AACA,QAAAhwD,EAAA5P,KAAAF,OAAAiR,QAAA0nB,GACAmnC,GAAA,OACAhwD,GAAA,EAAAzH,EAAAkwC,kBAAAzoC,GACA,iBAAA5P,GAAAqS,MAAAi2B,QAAAtoC,GACA4/D,GAAA,WAAAhwD,eAAAgnC,EAAA52C,KACA,iBAAAA,EACA4/D,GAAA,WAAAhwD,uBAAAgnC,EAAA52C,gBAEA,iBAAAA,IACAA,GAAA,EAAAmI,EAAAkwC,kBAAAr4C,GAAAsxB,QAAA,eAEAsuC,GAAA,WAAAhwD,eAAA5P,KAEA4/D,GAAA;AAGA,OADAA,GAAA,SACA,EAAAnxD,EAAA+C,UAAAouD,EACA,C,GChCAhgE,OAAA,yFAAAC,GACA;AAEAC,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACAJ,EAAAI,QAAA,CACAC,SAAA,mBACA,GAAAE,GACAC,KAAAC,MAAA,KACA,E,GCXAV,OAAA,2JAAAC,EAAA2H,EAAAq4D,GACA;AAEA//D,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA6/D,UAAAD,EAAA5/D,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAApB,EAAAqB,UAAA;AACAqL,GAAA,MAAAtO,OAAAmD,EAAA1I,KAAA;AACA,WAAA0/D,CAAA9M,GACA5yD,KAAA6T,aAAA6yC,aAAAiZ,0BACAzwD,OAAAqnD,KAAA3D,EAAAgN,OAAA/xD,IAAA,UAEA7N,KAAA6/D,SAAAjN,EAAAgN,OAAA/xD,KAEA+kD,EAAA7yB,OACA,CACA,QAAA8/B,CAAAhyD,GACAqB,OAAAkB,SAAAvC,CACA,EAEArO,EAAAI,QAAA6/D,C,GCtBAlgE,OAAA,oKAAAC,EAAA2H,EAAAW,EAAAg4D,GACA;AAEArgE,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAmgE,UAAAD,EAAAlgE,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACA,eAAAggE,CAAAC,EAAA19D,GACA,IAAAvC,KAAAuO,aAAA+8C,qBACA,OAAAtrD,KAAAyI,OAAA6E,aAAA,gBAAAxF,EAAA8T;AAEAqkD,EAAAn9C,IAAA,QAAAvgB,EACA,EAEA/C,EAAAI,QAAAmgE,C,GCjBAxgE,OAAA,8PAAAC,EAAAyH,EAAAsK,EAAApK,EAAA5C,EAAAvD,EAAAk/D,EAAAj4D,GACA;AAEAxI,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAugE,UAAAh5D,EAAAvH,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,iCAAApB,EAAAqB,UAAA;AACA6pD,IAAA,MAAA9sD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAApB,EAAAqB,UAAA;AACAgS,GAAA,MAAAjV,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAApB,EAAAqB,UAAA;AACAiS,GAAA,MAAAlV,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAiY,IAAA,MAAAlb,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAC,GAAA,MAAAlD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACA+F,GAAA,MAAAhJ,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAhE,EAAAoE,SAAA,WACA,QACA,GAFA;AAGA6N,IAAA,MAAAjR,OAAAmD,EAAA1I,KAAA;AACA2W;AACAG;AACAG,WAAA;AACA,UAAAmpD,GACApgE,KAAAya,SAAA4lD,eACArgE,KAAAya,SAAAmE,SACA,EAAArN,EAAAmoB,MAAA,KACArlB,SAAA8H,eAAA,8BAAAxE,SAEA,CACAtR,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,cAAAtB,EAAAiF,SAAA;AACA,iBAAA2N,CAAAymD,GACA,GAAAtgE,KAAAiX,WAAAxT,OAAAzD,KAAAuO,aAAAgyD,iCACA,OAAAvgE,KAAAygB,OAAA6X,MAAA,CACAvZ,SAAA,EAAA9W,EAAAoC,MAAA,8DACAyb,MAAA9lB,KAAAuO,aAAAgyD,mCAEAn8C,WAAA,IAAApkB,KAAAogE,aACAI,UAAA,IAAAxgE,KAAAogE;AAKA,GAAAE,EAAAxmD,uBAAA,EACA,OAAA9Z,KAAAygB,OAAA6X,MAAA,CACAvZ,SAAA,EAAA9W,EAAAoC,MAAA;AAGArK,KAAAwW,SAAA;AACA,MAAAnL,GAAA,EAAApD,EAAAoC,MAAA;AAGA,IAAAo2D,EAAAzgE,KAAAiX;AAGAqpD,EAAAtsD,SAAAssD,EAAAtsD,QAAAvQ,OAAA,IACAg9D,GAAA,OACAH,EAAAtsD,QAAArD,QAAAwF,IACA,MAAAuqD,GAAA,EAAAR,EAAAS,mBAAAxqD;AACAsqD,GAAAC,EAAA;AAGA,IACA,MAAA9zD,QAAA,EAAA5L,EAAAQ,MAAA,eACAy9B,OAAA,OACAx9B,KAAA,CACA++B,IAAAigC,EACAp1D,QACA4lD,UAAA,kBACA2P,kBAAA5gE,KAAA8W,eACA+pD,UAAA,CACAx6B,cAAArmC,KAAA2W;AAMA3W,KAAAiX,WAAA,GACAjX,KAAAwa,UAAAqB,QAAA,+BACAva,GAAAsL,EAAA03B,SACAw8B,KAAAl0D,EAAAm0D,WACA11D,UAEArL,KAAAyI,OAAA6E,aAAAV,EAAAuvC,SACA,SACAn8C,KAAAwW,SAAA,CACA,CACA,CACAnQ,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,eAAAtB,EAAAiF,SAAA,GAEA1M,EAAAI,QAAAugE,C,GC9FA5gE,OAAA,6ZAAAC,EAAAsH,EAAAyK,EAAApK,EAAAiH,EAAA7J,EAAAvD,EAAAm+C,EAAAtU,EAAAm2B,EAAA/4D,EAAAg5D,GACA;AAEAxhE,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,QAAAJ,EAAAkc,4BAAA;AACA,MAAAA,EAAAlc,EAAAkc,uBAAA;AAGA,MAAAwlD,UAAA/5D,EAAAvH,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAApB,EAAAqB,UAAA;AACAgS,GAAA,MAAAjV,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAApB,EAAAqB,UAAA;AACAmS,GAAA,MAAApV,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAApB,EAAAqB,UAAA;AACAyzB,IAAA,MAAA12B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAw4D,IAAA,MAAA57D,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAAzB,EAAA6B,SAAA,WACA,WAAApE,EAAAI,YACA,GAFA;AAGAy8D,IAAA,MAAA77D,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAwtC,IAAA,MAAA5wC,OAAAmD,EAAA1I,KAAA;AACAssB,IAAA;AACA+0C,YAAA;AACAC,KAAA;AACA97C,SAAA;AACA+7C,YAAA,SAAAr6C,IAAA;AACAs6C,oBAAA;AACAC,eAAA;AACAC,UAAA;AACAC,wBAAA,MACA,EAAAxiB,EAAAv/C,SAAAI,KAAA,KACA,MAAAqJ,EAAArJ,KAAAyhE;AACA,IAAAp4D,EACA;AAEA,MAAAw8C,UACAA,EAAA5rC,aACAA,EAAA2nD,aACAA,GACAv4D;AACA4Q,EAAA4rC,EAAA+b,EAxCA,IAwCA,MAAA5hE,KAAAqhE,YAAArhE,KAAAwlB,SACAxlB,KAAA6hE,iBAxCA;AA4CA,WAAAnzD,GACAC,SAAAC,WACA5O,KAAAwa,UAAAvM,GAAA,8BAAAjO,UAAA8hE,iBACA9hE,KAAAwa,UAAAvM,GAAA,6CAAAjO,UAAA+hE,sBACA,CACA,WAAA3yD,GACAT,MAAAS,eAAAR,WACA5O,KAAAwa,UAAA6P,IAAA,8BAAArqB,UAAA8hE,iBACA9hE,KAAAwa,UAAA6P,IAAA,6CAAArqB,UAAA+hE,sBACA,CACA,kBAAAC,GACA3tD,SAAAyjB,KAAAtuB,UAAAy4D,OAAA,sCAAAjiE,KAAAmhE,OAAA19D,OACA,CACA,kBAAAovD,GAcA,OAbAx+C,SAAAyjB,KAAAtuB,UAAAC,IAAA,gCACAzJ,KAAA2a,aAAAunD,kBACAliE,KAAAwa,UAAAqB,QAAA,4CAEA7b,KAAA2a,aAAAunD,kBAAA,EAIAliE,KAAA2a,aAAAwnD,SAAAzmD,GACA1b,KAAA2a,aAAAynD,mBACApiE,KAAA2a,aAAA0nD,yBAGAriE,KAAA0hE,UACA1hE,KAAAgiE,sBACA,IAEAhiE,KAAA0hE,UAAA,EACA1hE,KAAA6hE,gBAAAxpD,KAAA,KACArY,KAAA2a,aAAAwnD,SAAAzmD,GACA1b,KAAAgiE,wBAEA,EACA,CACA,qBAAAD,GACA,MAAAX,EAAA/sD,SAAA9K,cAAA;AACAvJ,KAAAyhE,eAAAL,GACAphE,KAAAwhE,oBAAAxhE,KAAAyhE,iBAGAL,EAAAjyD,iBAAA,SAAAnP,KAAA2hE,yBACA3hE,KAAAwhE,oBAAA,EACA,CACA,qBAAAc,GACAtiE,KAAAwhE,qBACAxhE,KAAAyhE,eAAApyD,oBAAA,SAAArP,KAAA2hE,yBACA3hE,KAAAwhE,oBAAA,EACAxhE,KAAAyhE,eAAA,KAEA,CACA,wBAAA3O,GACAz+C,SAAAyjB,KAAAtuB,UAAAK,OAAA,gCACAwK,SAAAyjB,KAAAtuB,UAAAK,OAAA;AACA,MAAA04D,EAAAviE,KAAA2a,aAAAc,cAAAlM,MAAAyxD,EAAAwB;AACAxiE,KAAA2a,aAAAunD,mBAAAK,IACAviE,KAAA2a,aAAAwnD,SAAAnB,EAAAyB,YACAziE,KAAA2a,aAAAunD,kBAAA,EACAliE,KAAAwa,UAAAqB,QAAA,oDAEA7b,KAAAsiE,uBACA,CACA,mBAAAT,GACA,GAAA7hE,KAAAqhE,aAAArhE,KAAAwlB,QACA;AAEA,MAAAk9C,EAAA,IAAA1iE,KAAAshE;AACAthE,KAAAqhE,YAAA;AACA,IACA,IAAAsB,cACAA,EAAAhxB,KACAA,SACA,EAAA3wC,EAAAQ,MAAA,2CACAC,KAAA,CACA6/D,KAAAthE,KAAAshE,KACAsB,SAAA;AAGAF,EACA1iE,KAAAmhE,OAAAwB,GAEA3iE,KAAAmhE,OAAA,IAAAnhE,KAAAmhE,UAAAwB,GAEA3iE,KAAA2a,aAAAwnD,SAAAzmD,IAEA1b,KAAAshE,MAAA,EACAthE,KAAAwlB,QAAAmsB,EAAA9kC,SACA7M,KAAA6iE,kBACA,SACA7iE,KAAAqhE,YAAA,EACArhE,KAAAm2C,WAAA,CACA,CACA,CACA,eAAA2rB,CAAAv9B,GACAvkC,KAAAmhE,OAAA,CAAA58B,KAAAvkC,KAAAmhE,QACAnhE,KAAA6iE,mBACA7iE,KAAA8iE,qBAAAv+B,EAAAjjC,GACA,CACA,oBAAAwhE,CAAA/tB,GACA,GAAA/0C,KAAA+iE,qBAAAz7C,IAAAytB,GACA;AAEA/0C,KAAA+iE,oBAAA/iE,KAAA+iE,qBAAA,IAAA77C,IACAlnB,KAAA+iE,oBAAAt5D,IAAAsrC;AACA,MAAAE,EAAA,8BAAAF;AACA/0C,KAAAi8B,WAAAsC,UAAA0W,EAAAxc,IACAz4B,KAAAgjE,kBAAAjuB,EAAAtc,EAAAptB,OACArL,KAAAi8B,WAAAqC,YAAA2W,IAEA,CACA,iBAAA+tB,CAAAjuB,EAAAkuB,GACAjjE,KAAAmhE,OAAAnhE,KAAAmhE,OAAAphE,IAAA6hB,KAAAtgB,KAAAyzC,EAAA,IACAnzB,EACAvW,MAAA43D,GACArhD,GACA5hB,KAAA6iE,kBACA,CAGA,gBAAAA,GACA,MAAAl0B,EAAAzD,KAAAyD,MACAu0B,EAAA,GACAC,EAAA,CACA51D,KAAA,QACAlC,OAAA,EAAApD,EAAAoC,MAAA,2CACA+4D,MAAA,IAAA7+D,EAAAI;AAEAu+D,EAAAx/D,KAAAy/D,GACAnjE,KAAAmhE,OAAAxwD,QAAAiR,IACA,MAAAyhD,EAAA,IAAAn4B,KAAAtpB,EAAA0hD,gBAAA30B,GAAA40B,UACAC,EAAAziC,KAAA03B,OAAA9pB,EAAA00B,GAAA;AACA,IAAAI,EAYAC;AAXA,GAAAF,GAAA,EACAC,EAAA;KACA,GAAAD,GAAA,EACAC,EAAA;KACA,GAAAD,GAAA,GACAC,EAAA;IACA,CACA,MAAA92B,EAAA,IAAAzB,KAAAm4B,GACA9zD,EAAA,GAAAo9B,EAAAg3B,iBAAAh3B,EAAAi3B;AACAH,EAAAl0D,CACA,CAOA,GAJAm0D,EADA,UAAAD,EACAN,EAEAD,EAAAp4D,KAAA68B,KAAAp6B,OAAAk2D,IAEAC,EAAA,CACA,IAAAr4D;AACA,OAAAo4D,GACA,kBACAp4D,GAAA,EAAApD,EAAAoC,MAAA;AACA;AACA,mBACAgB,GAAA,EAAApD,EAAAoC,MAAA;AACA;AACA,QACAgB,GAAA,EAAAw/B,EAAAg5B,yBAAA,IAAA34B,KAAAtpB,EAAA0hD,iBAEAI,EAAA,CACAn2D,KAAAk2D,EACAp4D,QACA+3D,MAAA,IAAA7+D,EAAAI,cAEAu+D,EAAAx/D,KAAAggE,EACA,CACAA,EAAAN,MAAA1/D,KAAA,CACA6L,IAAAqS,EAAAtgB,GACArB,MAAA,uBACAquB,OAAA,CAAA1M,EAAAk/C,KAAAl/C,EAAAtgB,GAAAsgB,EAAAkiD,uBAAA,GACAz4D,MAAAuW,EAAAvW,MACAjB,KAAAwX,EAAAvW,MACAxE,WAAA,mBAAA+a,EAAAtgB,SAGAtB,KAAAohE,SAAA,IAAA78D,EAAAI,aAAAu+D;AAGA,QAAAQ,KAAAR,EACAljE,KAAAuhE,YAAAj6C,IAAAo8C,EAAAn2D,QAGAvN,KAAAuhE,YAAA93D,IAAAi6D,EAAAn2D,MACAvN,KAAAssB,IAAAy3C,kBAAAC,GACA,cAAAA,EACA39D,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAApB,EAAAqB,SAAA;AACAy7D,IAAA,MAAA1+D,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAApB,EAAAqB,SAAA;AACA07D,IAAA,MAAA3+D,OAAAmD,EAAA1I,KAAA;AACA,WAAA0O,GACAC,SAAAC,YACA,EAAA2C,EAAAkG,cAAA,cAAAzX,UAAAmkE,aACA,CACA,YAAAA,GACAnkE,KAAAkkE,OAAAroD,QAAA,6CACA,CACA,QAAAtO,GACA,OAAAm2D,EAAAn2D,IACA,CACA,SAAAlC,GACA,OAAAq4D,EAAAr4D,KACA,CACA,QAAAjB,GACA,SAAAgE,EAAA+C,UAAAuyD,EAAAr4D,MACA,CACA,SAAA+3D,GACA,OAAApjE,KAAAikE,QAAA7C,SAAAt2D,KAAA68B,KAAAp6B,OAAAm2D,EAAAn2D,OAAA61D,OAAA,EACA,CACA,uBAAAgB,GACA,IAAApkE,KAAAikE,QAAA9tB,WAAA,IAAAn2C,KAAAojE,MAAA3/D,OACA,OAAAw9D,EAAArhE,OAEA,GAEA8b,GAEA,EAEAlc,EAAAI,QAAAshE,C,GCpRA3hE,OAAA,mJAAAC,EAAAsH,EAAAG,EAAAE,GACA;AAEA1H,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAykE,UAAAl9D,EAAAvH,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAApB,EAAAqB,UAAA;AACAqL,GAAA,MAAAtO,OAAAmD,EAAA1I,KAAA;AAEAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAy5B,IAAA,MAAA78B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAm6B,IAAA,MAAAv9B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,qBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA+6B,IAAA,MAAAn+B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAq6B,IAAA,MAAAz9B,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,sBAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAu6B,IAAA,MAAA39B,OAAAmD,EAAA1I,KAAA;AACA,cAAAyiC,GACAziC,KAAAkjC,oBAAA,EACAljC,KAAAoiC,UAAA,GACApiC,KAAA0jC,mBAAA,EACA1jC,KAAAgjC,UAAA,EACA,CACA,sBAAAshC,GACA,OAAAtkE,KAAAoiC,UAAA3+B,OAAA,GAAAzD,KAAAkjC,oBAAAljC,KAAA0jC,iBACA,CACA,wBAAA6gC,GACAvkE,KAAA6T,YAAA6yC,YAAAC,uBAAA,QACA3mD,KAAA6T,YAAA4P,KAAA,2BACArT,SAAA21B,QACA,CACA1/B,SAAA,KAAAd,OAAA0H,EAAAjN,KAAAuI,UAAA,sBAAAtB,EAAAiF,SAAA,GAEA1M,EAAAI,QAAAykE,C,GC/CA9kE,OAAA,oHAAAC,EAAAsH,EAAAK,GACA;AAEA1H,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAA4kE,UAAAr9D,EAAAvH,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,UAAApB,EAAAqB,UAAA;AACAC,GAAA,MAAAlD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,OAAA87D,aAAA1pC,QAAA,kBACA,GAFA;AAGAyP,IAAA,MAAAjlC,OAAAmD,EAAA1I,KAAA;AACA,cAAAuqC,GACA,OAAAvqC,KAAAyI,OAAAkE,aAAA6hD,YAAAkW,MAAAvD,QAAAv4C,KAAA2b,KAAAogC,cACA,CACA,aAAAl4C,CAAA9sB,GACAK,KAAAwqC,WAAA7qC,EACA8kE,aAAAtqC,QAAA,kBAAAx6B,GACA,aAAAK,KAAAwqC,YACAi6B,aAAAtqC,QAAA,iBAEA,EAEA36B,EAAAI,QAAA4kE,C,GCzBAjlE,OAAA,0JAAAC,EAAAsH,EAAAK,EAAA+4D,GACA;AAEAzgE,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAglE,UAAAz9D,EAAAvH,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAApB,EAAAqB,UAAA;AACAiS,GAAA,MAAAlV,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAApB,EAAAqB,UAAA;AACAgS,GAAA,MAAAjV,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,aAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAm9C,IAAA,MAAAvgD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAsrD,IAAA,MAAA1uD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAurD,IAAA,MAAA3uD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,cAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGA48C,IAAA,MAAAhgD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA6N,IAAA,MAAAjR,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,gBAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAorD,IAAA,MAAAxuD,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,YAAAzB,EAAA6B,SAAA,WACA,WACA,GAFA;AAGAo9C,IAAA,MAAAxgD,OAAAmD,EAAA1I,KAAA;AACA,aAAAslD,GACA,MAAAuf,EAAA7kE,KAAAya,SAAArU,MAAAy7C,MAAAkc,MAAAmC,EAAA4E;AACA,GAAAD,EAAA,CACA,MAAA9G,EAAA8G,EAAA7kE,KAAAi0D,YACA8Q,EAAAhH,EAAA9sC,QAAAivC,EAAA4E,qBAAA,KAAA9kE,KAAAulD;AACAwY,GACA/9D,KAAAwa,UAAAqB,QAAA,wBAAAkiD,EAAAgH,EAEA,CACA,CACA,kBAAA/e,CAAAxvC,GACA,OAAAA,GACAxW,KAAA+zD,cAAAvqD,UAAAC,IAAA,YACAzJ,KAAAwW,SAAA,IAEAxW,KAAA+zD,cAAAvqD,UAAAK,OAAA,YACA7J,KAAAwW,SAAA,EACA,EAEAhX,EAAAI,QAAAglE,C,GC3DArlE,OAAA,2HAAAC,EAAAsH,EAAAK,GACA;AAEA1H,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACA,MAAAolE,UAAA79D,EAAAvH,QACAyG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,WAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGA6N,IAAA,MAAAjR,OAAAmD,EAAA1I,KAAA;AACAqG,SAAA,KAAAd,OAAA+C,EAAAtI,KAAAuI,UAAA,eAAAzB,EAAA6B,SAAA,WACA,QACA,GAFA;AAGAiiD,IAAA,MAAArlD,OAAAmD,EAAA1I,KAAA,mBAEAR,EAAAI,QAAAolE,C,GCjBAzlE,OAAA,oXAAAC,EAAA4lB,EAAA6/C,EAAA//D,EAAA+C,EAAAi9D,EAAAC,EAAAj9D,EAAAlD,EAAAK,EAAA0W,GACA;AAEAtc,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACAJ,EAAAI,SAAA,EAAAqlE,EAAArlE,UAAA,EAAAoF,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBAgFA,CACAjF,GAAA,WACAkF,MAAA,i9FACAC,WAAA,sIACAC,MAAA,KAAAuB,EAAAoC,KAAA86D,EAAAvlE,QAAAslE,EAAAtlE,QAAAwlB,EAAAmC,OAAArf,EAAAtI,QAAAsF,EAAAtF,SACA+G,cAAA,KACA,EAAAoV,EAAAnc,cAAAiS,W,GC7FAtS,OAAA,yRAAAC,EAAAylE,EAAAG,EAAApgE,EAAAK,EAAA0W,GACA;AAEAtc,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACAJ,EAAAI,SAAA,EAAAqlE,EAAArlE,UAAA,EAAAoF,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBAIA,CACAjF,GAAA,WACAkF,MAAA,+EACAC,WAAA,2IACAC,MAAA,KAAA0+D,EAAAxlE,SACA+G,cAAA,KACA,EAAAoV,EAAAnc,cAAAiS,W,GCjBAtS,OAAA,+TAAAC,EAAAuH,EAAAk+D,EAAA59D,EAAAg+D,EAAAC,EAAAr9D,EAAAjD,EAAAK,EAAA0W,GACA;AAEAtc,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,aAAA;AACAJ,EAAAI,SAAA,EAAAqlE,EAAArlE,UAAA,EAAAoF,EAAAsB,uBAAA,EAAAjB,EAAAkB,uBAkCA,CACAjF,GAAA,WACAkF,MAAA,6pCACAC,WAAA,2HACAC,MAAA,KAAAuB,EAAAoC,KAAAg7D,EAAAzlE,QAAAmH,EAAA4d,IAAAtd,EAAAud,GAAA0gD,EAAA1lE,SACA+G,cAAA,KACA,EAAAoV,EAAAnc,cAAAiS,W;AC/CAtS,OAAA,qFAAAC,GACA;AAEAC,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAA6Z,MACA,SAAA60C,GACAA,EAAAqX,UAAA,6BACArX,EAAAqX,UAAA,mLACA,C","ignoreList":[]}