@e-llm-studio/instant-learning 1.3.3 → 1.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/ILMarketplaceWrapper.js +3 -0
  2. package/dist/ILMarketplaceWrapper.js.map +1 -1
  3. package/dist/cjs/ILMarketplaceWrapper.js +3 -0
  4. package/dist/cjs/ILMarketplaceWrapper.js.map +1 -1
  5. package/dist/cjs/features/IL-OTJ/_components/ChatComponents/ChatComponent.js +2 -1
  6. package/dist/cjs/features/IL-OTJ/_components/ChatComponents/ChatComponent.js.map +1 -1
  7. package/dist/cjs/features/IL-OTJ/_components/ChatComponents/NormalChat.js +2 -1
  8. package/dist/cjs/features/IL-OTJ/_components/ChatComponents/NormalChat.js.map +1 -1
  9. package/dist/cjs/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.js +41 -4
  10. package/dist/cjs/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.js.map +1 -1
  11. package/dist/cjs/features/IL-marketplace/PromoteFlow/PromoteFlow.js +444 -169
  12. package/dist/cjs/features/IL-marketplace/PromoteFlow/PromoteFlow.js.map +1 -1
  13. package/dist/cjs/features/IL-marketplace/PromoteFlow/PromoteFlow.module.css.js +2 -2
  14. package/dist/cjs/features/IL-marketplace/PromoteFlow/promote-flow.api.js +19 -2
  15. package/dist/cjs/features/IL-marketplace/PromoteFlow/promote-flow.api.js.map +1 -1
  16. package/dist/cjs/features/IL-marketplace/PromoteFlow/promote-flow.store.js +7 -0
  17. package/dist/cjs/features/IL-marketplace/PromoteFlow/promote-flow.store.js.map +1 -1
  18. package/dist/cjs/features/InstantLearning/InstantLearning.js +1 -0
  19. package/dist/cjs/features/InstantLearning/InstantLearning.js.map +1 -1
  20. package/dist/cjs/features/InstantLearning/_components/ChatComponent.js +3 -1
  21. package/dist/cjs/features/InstantLearning/_components/ChatComponent.js.map +1 -1
  22. package/dist/cjs/features/InstantLearning/_components/ContextualChatComponent.js +3 -1
  23. package/dist/cjs/features/InstantLearning/_components/ContextualChatComponent.js.map +1 -1
  24. package/dist/features/IL-OTJ/_components/ChatComponents/ChatComponent.js +2 -1
  25. package/dist/features/IL-OTJ/_components/ChatComponents/ChatComponent.js.map +1 -1
  26. package/dist/features/IL-OTJ/_components/ChatComponents/NormalChat.js +2 -1
  27. package/dist/features/IL-OTJ/_components/ChatComponents/NormalChat.js.map +1 -1
  28. package/dist/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.js +41 -4
  29. package/dist/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.js.map +1 -1
  30. package/dist/features/IL-marketplace/PromoteFlow/PromoteFlow.js +446 -171
  31. package/dist/features/IL-marketplace/PromoteFlow/PromoteFlow.js.map +1 -1
  32. package/dist/features/IL-marketplace/PromoteFlow/PromoteFlow.module.css.js +2 -2
  33. package/dist/features/IL-marketplace/PromoteFlow/promote-flow.api.js +17 -3
  34. package/dist/features/IL-marketplace/PromoteFlow/promote-flow.api.js.map +1 -1
  35. package/dist/features/IL-marketplace/PromoteFlow/promote-flow.store.js +7 -0
  36. package/dist/features/IL-marketplace/PromoteFlow/promote-flow.store.js.map +1 -1
  37. package/dist/features/InstantLearning/InstantLearning.js +1 -0
  38. package/dist/features/InstantLearning/InstantLearning.js.map +1 -1
  39. package/dist/features/InstantLearning/_components/ChatComponent.js +3 -1
  40. package/dist/features/InstantLearning/_components/ChatComponent.js.map +1 -1
  41. package/dist/features/InstantLearning/_components/ContextualChatComponent.js +3 -1
  42. package/dist/features/InstantLearning/_components/ContextualChatComponent.js.map +1 -1
  43. package/dist/types/src/ILMarketplaceWrapper.d.ts.map +1 -1
  44. package/dist/types/src/features/IL-OTJ/_components/ChatComponents/ChatComponent.d.ts.map +1 -1
  45. package/dist/types/src/features/IL-OTJ/_components/ChatComponents/NormalChat.d.ts.map +1 -1
  46. package/dist/types/src/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.d.ts.map +1 -1
  47. package/dist/types/src/features/IL-marketplace/PromoteFlow/PromoteFlow.d.ts.map +1 -1
  48. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.api.d.ts +5 -2
  49. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.api.d.ts.map +1 -1
  50. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.interfaces.d.ts +26 -1
  51. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.interfaces.d.ts.map +1 -1
  52. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.store.d.ts +3 -1
  53. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.store.d.ts.map +1 -1
  54. package/dist/types/src/features/InstantLearning/InstantLearning.d.ts.map +1 -1
  55. package/dist/types/src/features/InstantLearning/_components/ChatComponent.d.ts.map +1 -1
  56. package/dist/types/src/features/InstantLearning/_components/ContextualChatComponent.d.ts.map +1 -1
  57. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"ChatComponent.js","sources":["../../../../src/features/InstantLearning/_components/ChatComponent.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { startChatStream } from '@e-llm-studio/streaming-response';\n// import { startChatStreamSSE } from '@e-llm-studio/streaming-response';\nimport { v4 as uuidv4 } from 'uuid';\nimport { http } from '../../../api/transport';\nimport ReactMarkdown from 'react-markdown';\nimport rehypeRaw from 'rehype-raw';\nimport MinimizedThinkingSteps from './MinimizedThinkingSteps';\nimport NewChatIcon from './_svg/NewChatIcon';\nimport defaultStyles from '../InstantLearning.module.css';\nimport Tooltip from '@mui/material/Tooltip';\nimport JSON5 from 'json5';\nimport AudioWaveform from './AudioWaveform';\nimport './ChatComponent.css'\nimport MessageRendering from './MessageRendering';\nimport { sanitizePythonDictToJSON } from '../../../utils/instantLearning.utils';\nimport { publishAgenticFeedbackForVariantIngestion } from \"../../../service/InstantLearningService\";\nimport { Box, keyframes } from '@mui/material';\nimport { parseValidationRecommendations, FormattedValidationRecommendation } from '../../../utils/recommendationParser';\n\n// interface RecommendationDetails {\n// when_to_apply?: string[];\n// when_not_to_apply?: string[];\n// reason: string;\n// confidence_score: number;\n// }\n\n// interface ValidationRecommendation {\n// wta: RecommendationDetails;\n// wnta: RecommendationDetails;\n// }\n\ninterface IntermediateStep {\n responseFrom: string;\n responseMessage: string;\n \n}\ninterface Message {\n requestId?: string;\n role: string;\n content: string;\n time: any;\n id?: string;\n reply?: string;\n citations?: Array<any>\n resourceId?: string;\n citationDisplayType?: string;\n orchestratorAndAgentsMessages?: any[];\n intermediateSteps?: IntermediateStep[];\n isFirstQuestionSent?: boolean;\n}\n\ninterface ChatComponentProps {\n chatAssistantLogoUrl: string\n chatAssistantName: string\n authToken?: string\n organizationName: string\n baseUrl: string\n setInstantLearningSuggestions: any\n formDataState: any,\n setFormDataState: any,\n hasUserFilledForm: boolean\n setHasUserFilledForm: React.Dispatch<React.SetStateAction<boolean>>\n baseWebsocketUrl: string\n setIsNewChatClicked: React.Dispatch<React.SetStateAction<boolean>>\n selectedText: string\n ChatIconComponent: React.ReactNode\n ggcAssistantName: string\n ThinkingBulbIconComponent: React.ReactNode\n hasUserWrittenModification: boolean\n setExtractedModification: React.Dispatch<React.SetStateAction<string>> | React.Dispatch<React.SetStateAction<null>>\n setSave: React.Dispatch<React.SetStateAction<boolean>>\n setExtractedTooltip: React.Dispatch<React.SetStateAction<string>>\n setIsSaveLoading: React.Dispatch<React.SetStateAction<boolean>>\n isSaveLoading: boolean\n save: boolean\n instantLearningSuggestions: any\n template?: string\n setShouldTriggerSave: React.Dispatch<React.SetStateAction<boolean>>,\n isFormSaveClicked: boolean,\n setIsFormSavedClicked: React.Dispatch<React.SetStateAction<boolean>>,\n validationWtaResponse?: any,\n setValidationWtaResponse?: any,\n learningWtaResponse?: any,\n setLearningWtaResponse?: any,\n onDeleteLearning?: (label: string) => void,\n deleteLearningTrigger?: string | null,\n setDeleteLearningTrigger?: React.Dispatch<React.SetStateAction<string | null>>,\n onMergeLearning?: (learningId: string) => void,\n mergeLearningTrigger?: string | null,\n setMergeLearningTrigger?: React.Dispatch<React.SetStateAction<string | null>>,\n onResetLearningData?: () => void,\n setEditConflictingLearningTrigger: React.Dispatch<React.SetStateAction<string | null>>,\n setEditSimilarLearningTrigger: React.Dispatch<React.SetStateAction<string | null>>,\n sendMessageInChat: string,\n setSendMessageInChat: React.Dispatch<React.SetStateAction<string>>,\n setIsMergeLoading: React.Dispatch<React.SetStateAction<boolean>>,\n sendValidationMessage: string,\n setSendValidationMessage : React.Dispatch<React.SetStateAction<string>>;\n setValidationRecommendations: (recommendations: FormattedValidationRecommendation | null) => void;\n isFormValidating: boolean;\n validationRecommendations: FormattedValidationRecommendation | null; \n isFromDashboard?: boolean;\n fullMessageText?: string;\n\n}\n\ninterface Config {\n GGCLLMASSISTANTNAME: string;\n ORGANIZATION_NAME: string;\n API_KEY?: string;\n}\n\ninterface LLMRequestParams {\n config: Config;\n user_prompt: string;\n check_similarity: boolean;\n system_prompt: string;\n primary_type: string;\n fallback_type: string;\n primary_model: string;\n fallback_model: string;\n region: string;\n temperature: number;\n max_tokens: number;\n primary_retries: number;\n}\n\nconst SendButton = () => {\n return (\n <svg\n width=\"20px\"\n height=\"20px\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9.91158 12H7.45579H4L2.02268 4.13539C2.0111 4.0893 2.00193 4.04246 2.00046 3.99497C1.97811 3.27397 2.77209 2.77366 3.46029 3.10388L22 12L3.46029 20.8961C2.77983 21.2226 1.99597 20.7372 2.00002 20.0293C2.00038 19.9658 2.01455 19.9032 2.03296 19.8425L3.5 15\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nconst ChatHeader = ({ resetChatHistory, isStreamEnd }: { resetChatHistory: () => void; isStreamEnd: boolean }) => {\n return (\n <div\n className={defaultStyles.customFont}\n style={{\n width: '100%',\n padding: '0.75rem 0rem',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n backgroundColor: '#fff',\n borderBottom: '1px solid #e5e7eb',\n boxShadow: '0 1px 2px rgba(0, 0, 0, 0.04)'\n }}\n >\n <span\n style={{\n fontSize: '1.25rem',\n fontWeight: 700,\n color: '#1f2937',\n flex: 1,\n marginLeft: '0.5rem',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n <span style={{ color: '#5928ED' }}>InstantLearning.AI</span> Chat\n {/* Tell me more about this learning */}\n </span>\n\n <Tooltip\n title={'New chat'}\n placement=\"top\"\n arrow\n componentsProps={{\n tooltip: {\n sx: {\n fontSize: '0.875rem',\n padding: '0.5rem',\n fontFamily: 'Plus Jakarta Sans, sans-serif'\n },\n },\n }}\n >\n <div\n onClick={() => {\n console.log(NewChatIcon, 'hello')\n if (isStreamEnd) resetChatHistory(); // Prevent click if disabled\n }}\n style={{\n height: '1.8rem',\n width: '1.8rem',\n marginLeft: '1rem',\n marginRight: '0.5rem',\n cursor: !isStreamEnd ? 'not-allowed' : 'pointer',\n backgroundColor: 'transparent',\n transition: 'transform 0.2s ease-in-out, opacity 0.2s',\n opacity: !isStreamEnd ? 0.4 : 0.8,\n pointerEvents: !isStreamEnd ? 'none' : 'auto', // prevents any interaction\n }}\n onMouseOver={(e) => {\n if (isStreamEnd) {\n // e.currentTarget.style.transform = 'scale(1.1)';\n e.currentTarget.style.opacity = '1';\n }\n }}\n onMouseOut={(e) => {\n if (isStreamEnd) {\n // e.currentTarget.style.transform = 'scale(1)';\n e.currentTarget.style.opacity = '0.8';\n }\n }}\n >\n <NewChatIcon />\n </div>\n </Tooltip>\n </div>\n );\n};\n\nconst constructUserQuery = (formDataState: any) => {\n return `Hey generate wta and wnta based on: \\n The issue user is facing is: ${formDataState.issue_with_response}. The user feedback is: Replace ${formDataState.original} with ${formDataState.modification}${formDataState.tooltip}`\n}\n\n\n// Handle delete tool calls from LLM responses\nconst handleDeleteToolCall = async (deleteToolData: any, baseUrl: string, organizationName: string, chatAssistantName: string) => {\n const { delete_current_learning, deleted_similar_learning_ids, deleted_conflicting_learning_ids } = deleteToolData;\n\n console.log('Processing delete tool call:', deleteToolData);\n\n // Combine all learning IDs to delete\n const allLearningIdsToDelete = [\n ...(deleted_similar_learning_ids || []),\n ...(deleted_conflicting_learning_ids || [])\n ];\n\n // Process each learning ID for deletion\n for (const learningId of allLearningIdsToDelete) {\n try {\n // Create delete payload (similar to ConflictingLearningWarnCardDB.tsx)\n const deletePayload = {\n status: \"approved\",\n metadata: {\n userName: \"M Kathyayani\",\n userEmailId: \"madumbu.kathyayani@techolution.com\",\n llm: \"claude-3.5-sonnet\",\n isVariantFlow: true,\n isDeleteAction: true,\n isAgentsFeedback: true,\n variant: {\n id: learningId,\n scope: {\n name: \"User\",\n value: [{\n name: \"M Kathyayani\",\n email: \"madumbu.kathyayani@techolution.com\",\n userId: \"8059658c-a65c-4e14-89aa-a5195f5d09f5\"\n }]\n },\n topic: {\n id: null,\n value: \"default\"\n },\n variant: `Learning ID: ${learningId}`,\n question: \"\",\n categories: [],\n created_at: new Date().toLocaleString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true\n }),\n originalQuestion: \"\",\n parameterizedQuestion: \"\",\n conditions_whentoapply: \"\",\n conditions_whennottoapply: \"\",\n parentId: null\n }\n }\n };\n\n console.log(`Deleting learning with ID: ${learningId}`);\n\n const response = await publishAgenticFeedbackForVariantIngestion({\n baseUrl,\n organizationName,\n chatAssistantName,\n payload: deletePayload,\n });\n\n if (!response.ok) {\n console.error(`Failed to delete learning ${learningId}:`, response.status, response.statusText);\n } else {\n console.log(`Successfully deleted learning ${learningId}`);\n }\n\n } catch (error) {\n console.error(`Error deleting learning ${learningId}:`, error);\n }\n }\n\n // Handle delete_current_learning flag (for future implementation)\n if (delete_current_learning) {\n console.log('Delete current learning flag is true - this will be handled later');\n // TODO: Implement current learning deletion when needed\n }\n}\n\ntype WhenToApplyCondition = {\n when_to_apply: string;\n};\n\ntype InstantLearningSuggestion = {\n conditions_whentoapply: WhenToApplyCondition[];\n conditions_whennottoapply: WhenToApplyCondition[];\n};\n\nconst ToggleSelector = ({ label, onToggle }: any) => {\n const [selected, setSelected] = useState(false);\n const spanRef = useRef<HTMLSpanElement>(null);\n\n const handleChange = () => {\n const newState = !selected;\n setSelected(newState);\n onToggle(label, newState);\n };\n\n useEffect(() => {\n const el = spanRef.current;\n if (el && selected) {\n el.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.1)';\n el.style.transform = 'scale(1)';\n el.style.backgroundColor = '#E8F5E9'; // selected bg\n el.style.color = '#2E7D32'; // selected text\n }\n }, [selected]);\n\n return (\n <span ref={spanRef} onClick={handleChange}\n style={{\n cursor: 'pointer',\n backgroundColor: selected ? '#E8F5E9' : '#fbfaff',\n color: selected ? '#2E7D32' : '#000000de',\n transition: 'all 0.2s ease-in-out',\n boxShadow: '0 2px 4px rgba(0, 0, 0, 0.2)', // default shadow\n transform: 'scale(1)', // make sure it resets after hover\n }}\n\n onMouseEnter={(e) => {\n if (!selected) {\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(30, 136, 229, 0.3)';\n e.currentTarget.style.transform = 'scale(1.02)';\n e.currentTarget.style.backgroundColor = '#f0f7ff'; // light blue hover\n e.currentTarget.style.color = '#1E88E5'; // primary blue text\n }\n }}\n onMouseLeave={(e) => {\n if (!selected) {\n e.currentTarget.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.2)';\n e.currentTarget.style.transform = 'scale(1)';\n e.currentTarget.style.backgroundColor = '#fbfaff';\n e.currentTarget.style.color = '#000000de';\n }\n }}>\n <span\n style={{\n fontWeight: 'bold',\n fontSize: '16px',\n // color: selected ? '#2E7D32' : '#888',\n transition: 'all 0.3s ease',\n transform: selected ? 'scale(1.2)' : 'scale(1)',\n opacity: selected ? 1 : 0.9,\n paddingLeft: '0.25rem',\n paddingRight: '0.25rem',\n }}\n >\n {selected ? '✓' : '+'}\n </span>\n <span>{label}</span>\n </span>\n );\n};\n\nfunction SuggestionChips({ onSelect, original, modification, tooltip }: any) {\n const themeColor = '#5928ed';\n const hoverBg = '#eae4fd';\n const suggestions = [`I want to modify \"${original}\" ${modification !== '' ? `to ${modification}` : ''}`, `I want to add a tooltip ${tooltip !== '' ? `which says ${tooltip}` : ''} to \"${original}\"`]; //\"I want to modify this and add a tooltip\"\n\n return (\n <div style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '8px',\n marginTop: '8px',\n // paddingLeft: '1rem',\n }}>\n {suggestions.map((text, index) => (\n <div\n key={index}\n onClick={() => onSelect(text)}\n style={{\n padding: '6px 12px',\n borderRadius: '16px',\n backgroundColor: '#f9f9ff',\n border: `1px solid ${themeColor}`,\n cursor: 'pointer',\n fontSize: '14px',\n color: themeColor,\n fontWeight: 500,\n transition: 'background-color 0.2s ease, color 0.2s ease',\n userSelect: 'none'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = hoverBg;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = '#f9f9ff';\n }}\n >\n {text}\n </div>\n ))}\n </div>\n );\n}\n\nconst SuggestionArea = ({ formDataState, handleStream }: any) => {\n const [isExpanded, setIsExpanded] = useState(false);\n\n return (\n <span\n style={{\n // paddingLeft: '1rem',\n fontSize: '1rem',\n color: '#1f2937',\n lineHeight: '1.75rem',\n fontFamily: 'Plus Jakarta Sans, sans-serif',\n display: 'inline'\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px', flexWrap: 'wrap' }}>\n <span style={{ fontSize: '1rem' }}>\n You can also try some options from the\n </span>\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n aria-expanded={isExpanded}\n style={{\n backgroundColor: '#f3f0ff',\n color: '#5928ed',\n padding: '4px 12px',\n borderRadius: '9999px',\n border: 'none',\n cursor: 'pointer',\n fontSize: '0.9rem',\n fontWeight: 500,\n transition: 'all 0.2s ease-in-out',\n boxShadow: '0 1px 3px rgba(0,0,0,0.05)',\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontFamily: 'Plus Jakarta Sans, sans-serif',\n }}\n onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = '#ebe4ff')}\n onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = '#f3f0ff')}\n >\n suggestions\n <span style={{ fontSize: '0.7rem' }}>{isExpanded ? <svg width=\"12px\" height=\"12px\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1 10L7.5 3L14 10\" stroke=\"#5928ed\" stroke-linecap=\"square\" />\n </svg> : <svg width=\"12px\" height=\"12px\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 5L7.5 12L1 5\" stroke=\"#5928ed\" stroke-linecap=\"square\" />\n </svg>}</span>\n </button>\n </div>\n\n {isExpanded && (\n <div\n style={{\n // marginTop: '0.75rem',\n // padding: '0.75rem',\n backgroundColor: '#f9fafb',\n // border: '1px solid #e5e7eb',\n borderRadius: '0.75rem',\n display: 'flex',\n justifyContent: 'start',\n // boxShadow: '0 1px 3px rgba(0,0,0,0.05)',\n animation: 'fadeIn 0.3s ease-in-out',\n transition: 'opacity 0.4s ease',\n opacity: 1,\n }}\n >\n\n <SuggestionChips\n onSelect={(text: string) => {\n handleStream(\n new KeyboardEvent('keydown', { key: 'Enter' }),\n false,\n `${text}`\n );\n }}\n original={formDataState?.original}\n tooltip={formDataState?.tooltip}\n modification={formDataState?.modification}\n />\n </div>\n )}\n </span>\n );\n};\n\n\nconst ChatComponent: React.FC<ChatComponentProps> = ({ chatAssistantLogoUrl, chatAssistantName, organizationName, baseUrl, setInstantLearningSuggestions, formDataState, setFormDataState, hasUserFilledForm, setHasUserFilledForm, baseWebsocketUrl, setIsNewChatClicked, selectedText, ChatIconComponent, ggcAssistantName, ThinkingBulbIconComponent, hasUserWrittenModification, setExtractedModification, setSave, setExtractedTooltip, setIsSaveLoading, isSaveLoading, save, instantLearningSuggestions, template = '', setShouldTriggerSave, validationWtaResponse, setValidationWtaResponse, learningWtaResponse, setLearningWtaResponse, isFormSaveClicked,\n setIsFormSavedClicked, onDeleteLearning, deleteLearningTrigger, setDeleteLearningTrigger, onMergeLearning, mergeLearningTrigger, setMergeLearningTrigger, onResetLearningData, setEditConflictingLearningTrigger, setEditSimilarLearningTrigger\n\n , sendMessageInChat,\n setSendMessageInChat,\n setIsMergeLoading,\n sendValidationMessage,\n setSendValidationMessage,\n setValidationRecommendations,\n isFormValidating,\n validationRecommendations,\n isFromDashboard,\n fullMessageText,\n\n}) => {\n const chatAssistant = chatAssistantName;\n const guestSessionIdRef = useRef(`${chatAssistant}-${organizationName}-${uuidv4()}`);\n const chatPreviewIdRef = useRef(`${uuidv4()}`);\n const url = baseUrl\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n const [selectedWTA, setSelectedWTA] = useState<string[]>([]);\n const [showSelectedWTA, setShowSelectedWTA] = useState(false);\n // const isFirstQuestionSent = useRef<boolean>(false)\n const [userInput, setUserInput] = useState<null | string>('');\n const [welcomeMessage, setWelcomeMessage] = useState('');\n const [messages, setMessages] = useState<any[]>([]);\n const [messageLoading, setMessageLoading] = useState(false);\n const [waitMessageLoading, setWaitMessageLoading] = useState(false);\n const [isStreamEnd, setIsStreamEnd] = useState(true);\n const [showWelcomeMessage, setShowWelcomeMessage] = useState(true);\n const [chatInitialMessage, setChatInitialMessage] = useState('');\n const [initialLoadingMessage, setInitialLoadingMessage] = useState('');\n const [isStreaming, setIsStreaming] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [isVisible, setIsVisible] = useState(false);\n const [suggestedWta, setSuggestedWta] = useState<string[]>([]);\n const [deletedLearningIds, setDeletedLearningIds] = useState<Set<string>>(new Set());\n const [mergedLearningIds, setMergedLearningIds] = useState<Set<string>>(new Set());\n const lastProcessedResponseRef = useRef<string>('');\n const lastProcessedMergeResponseRef = useRef<string>('');\n const processedDeleteToolsRef = useRef<Set<string>>(new Set());\n const isInputEmpty = useMemo(() => { return userInput?.trim() === '' || isStreaming }, [userInput, isStreaming]);\n\n const isTextareaDisabled = useMemo(() => isStreaming || isFormValidating, [isStreaming, isFormValidating]);\n const isSendButtonDisabled = useMemo(() => isInputEmpty || isStreaming || isFormValidating, [isInputEmpty, isStreaming, isFormValidating]);\n\n const chatHeaderRef = useRef<HTMLDivElement>(null);\n const [availableHeight, setAvailableHeight] = useState('100%');\n const processedDeleteCommandsRef = useRef<Set<string>>(new Set());\n\n const areAllrequiredFieldsFilled = useMemo(() => {\n return formDataState?.original?.trim() !== \"\" &&\n (!formDataState?.isTooltipEnabled || formDataState?.tooltip?.trim() !== \"\") &&\n (!formDataState?.isModificationEnabled ||\n formDataState?.modification?.trim() !== \"\");\n }, [formDataState])\n\n const thinkingBounce = keyframes`\n 0%, 80%, 100% {\n transform: scale(0);\n }\n 40% {\n transform: scale(1.0);\n }\n `;\n const [isAwaitingValidationResponse, setIsAwaitingValidationResponse] = useState(false);\n\n // const makeLLMRequest = async ({\n // config,\n // user_prompt,\n // check_similarity,\n // system_prompt,\n // primary_type,\n // fallback_type,\n // primary_model,\n // fallback_model,\n // region,\n // temperature,\n // max_tokens,\n // primary_retries\n // }: LLMRequestParams): Promise<any> => {\n // const payload = {\n // name: ggcAssistantName,\n // organizationName: organizationName,\n // prompt: user_prompt,\n // overrideAgentConfig: {\n // GGCLLMAgent: {\n // properties: {\n // check_similarity: { value: check_similarity }\n // },\n // tools: {\n // LLMConfigurationTool: {\n // properties: {\n // context: { value: system_prompt },\n // llm_provider: { value: primary_type },\n // fallback1_provider: { value: fallback_type },\n // add_citations_in_response: { value: false }\n // },\n // integrations: {\n // VertexAIIntegration: {\n // properties: {\n // llm_model: { value: primary_model },\n // region: { value: region },\n // temperature: { value: temperature },\n // max_output_tokens: { value: max_tokens },\n // retries: { value: primary_retries },\n // chat_history: { value: [] },\n // fallback1_model_name: { value: fallback_model },\n // fallback1_region: { value: region }\n // }\n // },\n // AnthropicIntegration: {\n // properties: {\n // llm_model: { value: primary_model },\n // region: { value: region },\n // temperature: { value: temperature },\n // max_tokens: { value: max_tokens },\n // retries: { value: primary_retries },\n // chat_history: { value: [] },\n // fallback1_model_name: { value: fallback_model },\n // fallback1_region: { value: region }\n // }\n // },\n // OpenAIIntegration: {\n // properties: {\n // llm_model: { value: primary_model },\n // temperature: { value: temperature },\n // max_tokens: { value: max_tokens },\n // retries: { value: primary_retries },\n // chat_history: { value: [] },\n // fallback1_model_name: { value: fallback_model }\n // }\n // }\n // }\n // }\n // }\n // }\n // }\n // };\n\n // try {\n // const response = await http.post(`${baseUrl}/api/chat/chatResponse`, payload, {\n // headers: {\n // 'Content-Type': 'application/json',\n // ...(config.API_KEY && { Authorization: `Bearer ${config.API_KEY}` })\n // }\n // });\n\n // const message = response?.data?.result?.Answer + '\\n Tell me more about this learning.';\n // const messageSplit = message.split(' ');\n // let concatStr = '';\n\n // for (let index = 0; index < messageSplit.length; index++) {\n // setTimeout(() => {\n // concatStr += messageSplit[index] + ' ';\n // setChatInitialMessage(concatStr.trim());\n // }, 25 * index);\n // }\n\n // // setChatInitialMessage(concatStr)\n // return response.data;\n // } catch (error: any) {\n // console.error('Error making LLM request:', error.response?.data || error.message);\n // }\n // };\n\n // useEffect(() => {\n // // const staticWelcomeMessage = `👋 Welcome! I'm here to help suggest when to apply and when not to apply for your learning. Looks like you want to teach some learning about \"${selectedText}\"... \\n\\nCould you share in which scenarios you would like this learning to be applied?`\n // const staticWelcomeMessage = `Please tell me how I should correct \"${selectedText}\"? `\n\n // const welcomeMessageWords = staticWelcomeMessage.split(' ');\n // let concatStr = '';\n\n // for (let index = 0; index < welcomeMessageWords.length; index++) {\n // setTimeout(() => {\n // concatStr += welcomeMessageWords[index] + ' ';\n // setWelcomeMessage(concatStr.trim());\n // }, 45 * index);\n // }\n // }, [])\n \n\n useEffect(() => {\n let staticWelcomeMessage = `Please tell me how I should correct \"${formDataState?.original || ''}\"? `\n // if (template === 'TemplateRetrieval') {\n // staticWelcomeMessage = `Hey, I see you did not get you expected template in Stormee. So what do you want to really select for \"***${formDataState?.userQuery}***\" ?`\n // }\n setWelcomeMessage(staticWelcomeMessage)\n }, [formDataState])\n\n // const promptToTest = `You're a warm, conversational assistant helping someone explore when to apply and when not to apply a learning.\n\n // The user has just shared something they're thinking about—this could be a word, a phrase, or a full sentence:\n // \"{original}\"\n\n // At this stage, we don't know what this learning means to them or how they're thinking about using it.\n\n // Write one friendly message using the CARE framework, with a tone that blends curiosity, empathy, and acknowledgment:\n\n // Curiosity: Gently ask what prompted them to explore this learning—what made it stand out?\n\n // Acknowledge: Let them know it's thoughtful of them to reflect before jumping into action.\n\n // Respond with Empathy: Reassure them it's completely natural to pause and check if something fits before applying it.\n\n // Keep the tone warm, conversational, and supportive.\n // Don't suggest when to apply it yet—just invite them to share more.`\n\n\n // useEffect(() => {\n // if (!messages?.length) {\n // makeLLMRequest({\n // config: {\n // GGCLLMASSISTANTNAME: ggcAssistantName,\n // ORGANIZATION_NAME: organizationName\n // },\n // user_prompt: `Original Word: ${selectedText}`,\n // check_similarity: false,\n // system_prompt: promptToTest,\n // primary_type: 'Google VertexAI',\n // fallback_type: 'Azure OpenAI',\n // primary_model: 'gemini-2.0-flash',\n // fallback_model: 'gpt-4o',\n // region: 'us-central1',\n // temperature: 0,\n // max_tokens: 8192,\n // primary_retries: 3\n // })\n // }\n // }, [messages])\n\n // useEffect(() => {\n // if (sendValidationMessage) {\n // // Use the existing handleStream function to send the message\n // const isValidationMsg = sendValidationMessage === \"Validation failed. Do you have any recommendations for me?\";\n // handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, sendValidationMessage, isValidationMsg);\n \n // // Reset the state to prevent re-triggering\n // setSendValidationMessage('');\n // }\n // }, [sendValidationMessage]);\n \n useEffect(() => {\n const messageToSend = sendMessageInChat || sendValidationMessage;\n\n if (messageToSend) {\n // Check if the message is the specific validation failure message.\n const isValidationFailure = messageToSend === \"Validation failed. Do you have any recommendations for me?\";\n \n // Call handleStream with the correct flag.\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, messageToSend, isValidationFailure);\n \n // Reset both state setters to prevent re-triggering.\n setSendMessageInChat('');\n setSendValidationMessage('');\n }\n }, [sendMessageInChat, sendValidationMessage]); \n\n useEffect(() => {\n const scrollContainer = scrollContainerRef.current;\n\n const handleScroll = () => {\n const scrollContainer = scrollContainerRef.current;\n if (!scrollContainer) return;\n\n const scrollTop = scrollContainer.scrollTop; // Distance scrolled\n const scrollHeight = scrollContainer.scrollHeight; // Total height of content\n const clientHeight = scrollContainer.clientHeight; // Visible height\n\n // Calculate if the user is at the bottom\n const isAtBottom = scrollHeight - (scrollTop + clientHeight) <= 35; // 0px threshold\n setIsVisible(!isAtBottom);\n };\n\n if (scrollContainer) {\n scrollContainer.addEventListener('scroll', handleScroll);\n handleScroll();\n }\n\n return () => {\n if (scrollContainer) {\n scrollContainer.removeEventListener('scroll', handleScroll);\n }\n };\n }, [isVisible, isStreamEnd, messages]);\n\n // useEffect(() => {\n // if (hasUserFilledForm) {\n // isFirstQuestionSent.current = true;\n // // const constructedUserQuery = constructUserQuery(formDataState);\n // // // setUserInput(constructUserQuery(formDataState))\n // // setTimeout(() => {\n // // const keyBoardEvent = new KeyboardEvent('keydown', { key: 'Enter' });\n // // handleStream(keyBoardEvent, true, constructedUserQuery)\n // // }, 200)\n // }\n // }, [hasUserFilledForm])\n\n\n // const useParsedHeaderSuggestions = (messages: any[]) => {\n // return useMemo(() => {\n // const results: object[] = [];\n\n // // Regex to extract code block that starts with ```json and ends with ```\n // const codeBlockRegex = /```json\\s*([\\s\\S]*?)\\s*```/;\n\n // const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n // for (const msg of orchestratorAndAgentsMessages) {\n // const responseData = msg?.responsedata || '';\n // const match = responseData.match(codeBlockRegex);\n // if (match) {\n // try {\n // const parsed = JSON.parse(match[1]); // match[1] contains the inner JSON block\n // results.push(parsed);\n // } catch (e) {\n // console.error(\"Failed to parse JSON inside code block:\", e);\n // }\n // }\n // }\n\n // return results;\n // }, [messages]);\n // };\n\n const useParsedHeaderSuggestions = (messages: any[], onRecommendationFound: (recommendations: FormattedValidationRecommendation | null) => void ,onDeleteToolCall?: (deleteToolData: any) => void, onMergeToolCall?: (mergeToolData: any) => void) => {\n return useMemo(() => {\n const results: object[] = [];\n\n // const pattern = /\"conditions_whentoapply\"\\s*:\\s*\\[\\s*\\{\\s*\"when_to_apply\"\\s*:\\s*\"[^\"]*\"\\s*,\\s*\"confidence_score\"\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*\"when_to_apply\"\\s*:\\s*\"[^\"]*\"\\s*,\\s*\"confidence_score\"\\s*:\\s*\\d+\\s*\\})*\\s*\\]\\s*,\\s*\"conditions_whennottoapply\"\\s*:\\s*\\[\\s*\\{\\s*\"when_not_to_apply\"\\s*:\\s*\"[^\"]*\"\\s*,\\s*\"confidence_score\"\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*\"when_not_to_apply\"\\s*:\\s*\"[^\"]*\"\\s*,\\s*\"confidence_score\"\\s*:\\s*\\d+\\s*\\})*\\s*\\]/;\n // const pattern = /['\"]conditions_whentoapply['\"]\\s*:\\s*\\[\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\1).)*\\1\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\2).)*\\2\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\]\\s*,\\s*['\"]conditions_whennottoapply['\"]\\s*:\\s*\\[\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\3).)*\\3\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\4).)*\\4\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\]/;\n // const pattern = /['\"]conditions_whentoapply['\"]\\s*:\\s*\\[\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\1).)*\\1\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\2).)*\\2\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\]\\s*,\\s*['\"]conditions_whennottoapply['\"]\\s*:\\s*(\\[\\s*\\]|\\[\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\4).)*\\4\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\5).)*\\5\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\])/;\n \n //suggestion tool\n const pattern = /['\"]conditions_whentoapply['\"]\\s*:\\s*(\\[\\s*\\]|\\[\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\2).)*\\2\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\3).)*\\3\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\])\\s*,\\s*['\"]conditions_whennottoapply['\"]\\s*:\\s*(\\[\\s*\\]|\\[\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\5).)*\\5\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\6).)*\\6\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\])/;\n\n // const validationPattern = /['\"]is_valid['\"]\\s*:\\s*(true|false)\\s*,\\s*['\"]conflictingConditions['\"]\\s*:\\s*\\[(\\s*\\{[\\s\\S]*?['\"]conflictType['\"]\\s*:\\s*['\"][^'\"]+['\"][\\s\\S]*?\\}\\s*,?)*\\s*\\]/i;\n \n // validation tool \n const validationPattern = /['\"]is_valid['\"]\\s*:\\s*(true|false|True|False)\\s*,\\s*['\"]conflictingConditions['\"]\\s*:\\s*\\[\\s*(?:\\{[\\s\\S]*?['\"]conflictType['\"]\\s*:\\s*['\"][^'\"]+['\"][\\s\\S]*?\\}\\s*,?\\s*)*\\]\\s*,\\s*['\"]save['\"]\\s*:\\s*(true|false|True|False)/;\n\n // retrieval tool regex\n const dbValidationPattern = /['\"]is_valid_db['\"]\\s*:\\s*(true|false|True|False)[\\s\\S]*?['\"]conflicting_learnings['\"]\\s*:\\s*([\\s\\S]*?)\\s*,\\s*['\"]similar_learnings['\"]\\s*:\\s*([\\s\\S]*?)(?:,\\s*['\"]save['\"]|\\}$)/\n\n\n // Delete tool pattern to match delete tool JSON structure\n const deleteToolPattern = /['\"]delete_current_learning['\"]\\s*:\\s*(true|false|True|False)\\s*,\\s*['\"]deleted_similar_learning_ids['\"]\\s*:\\s*\\[[\\s\\S]*?\\]\\s*,\\s*['\"]deleted_conflicting_learning_ids['\"]\\s*:\\s*\\[[\\s\\S]*?\\]/;\n\n // Robust merge tool pattern that handles Python dictionary format with single quotes and True\n const mergeToolPattern = /{\\s*['\"]merge_learnings['\"]\\s*:\\s*(?:True|true)[\\s\\S]+?}/;\n\n\n //Edit tool pattern \n // REGEX FOR MATCHING: (NOTE: DO INCLUDE A string check for edit_actions)\n\n // const regex = /({[\\s\\S]*}|\\[[\\s\\S]*\\])/;\n // const match = text.match(regex);\n // let jsonLike = match[1];\n // const jsonStr = jsonLike.replace(/'/g, '\"');\n\n const editToolPattern = /({[\\s\\S]*}|\\[[\\s\\S]*\\])/;\n\n const jsonFinderPattern = /({[\\s\\S]*})/;\n\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n console.log('🔍 RESPONSE DATA:', String(responseData));\n \n // Check if response contains merge_learnings\n if (String(responseData).includes('merge_learnings')) {\n console.log('🔍 FOUND merge_learnings in response!');\n console.log('🔍 Full response:', String(responseData));\n }\n \n // Check if response contains merge_learnings\n if (String(responseData).includes(\"'merge_learnings'\")) {\n console.log('🔍 FOUND merge_learnings in response!');\n console.log('🔍 Full response:', String(responseData));\n }\n const match = responseData.match(pattern);\n if (match) {\n try {\n const extracted = JSON5.parse(`{${match[0]}}`);\n \n // Sanitize conditions to remove entries with only punctuation\n const hasTextContent = (str: string) => str && /[a-zA-Z]/.test(str);\n\n if (extracted.conditions_whentoapply && Array.isArray(extracted.conditions_whentoapply)) {\n extracted.conditions_whentoapply = extracted.conditions_whentoapply.filter(\n (item: any) => item.when_to_apply && hasTextContent(item.when_to_apply)\n );\n }\n\n if (extracted.conditions_whennottoapply && Array.isArray(extracted.conditions_whennottoapply)) {\n extracted.conditions_whennottoapply = extracted.conditions_whennottoapply.filter(\n (item: any) => item.when_not_to_apply && hasTextContent(item.when_not_to_apply)\n );\n }\n \n results.push(extracted);\n } catch (e) {\n console.error(\"Failed to parse JSON:\", e);\n }\n }\n const validationMatch = responseData.match(validationPattern);\n console.log('validationObj before cond ');\n if (validationMatch) {\n try {\n let cleanedValidation = sanitizePythonDictToJSON(validationMatch[0] || '')\n\n const validationObj = JSON5.parse(`{${cleanedValidation}}`);\n\n console.log('validationObj before set ', validationObj);\n setValidationWtaResponse(validationObj);\n console.log('validationObj after set in chat', validationWtaResponse);\n } catch (e) {\n console.error(\"Failed to parse validation JSON:\", e);\n }\n }\n // Try to parse the entire responseData as JSON to handle nested objects properly\n try {\n let cleanedResponse = sanitizePythonDictToJSON(responseData || '')\n\n // Try to parse as a complete JSON object first\n let parsedData = JSON5.parse(cleanedResponse);\n\n // Check if this contains our expected validation structure\n if (parsedData && typeof parsedData === 'object' &&\n 'is_valid_db' in parsedData &&\n 'conflicting_learnings' in parsedData &&\n 'similar_learnings' in parsedData) {\n\n console.log('Found validation data in response:', parsedData);\n setLearningWtaResponse(parsedData);\n console.log('dbVal after set in chat', learningWtaResponse);\n } \n else {\n // Fallback to regex\n const dbValidationMatch = responseData.match(dbValidationPattern);\n if (dbValidationMatch) {\n try {\n console.log(\"🔍 Regex Match Found. Attempting reconstruction...\");\n \n // Extract captured groups\n const isValidDbRaw = dbValidationMatch[1]; \n const conflictingRaw = dbValidationMatch[2]; \n const similarRaw = dbValidationMatch[3];\n\n // Helper to clean Python Booleans\n const cleanPythonBool = (str: string) => \n str.replace(/\\bTrue\\b/g, \"true\")\n .replace(/\\bFalse\\b/g, \"false\")\n .replace(/\\bNone\\b/g, \"null\");\n\n // Reconstruct manually to avoid global quote replacement issues\n const reconstructedJSON = `{\n \"is_valid_db\": ${cleanPythonBool(isValidDbRaw)},\n \"conflicting_learnings\": ${cleanPythonBool(conflictingRaw)},\n \"similar_learnings\": ${cleanPythonBool(similarRaw)}\n }`;\n\n console.log(\"📝 Reconstructed JSON (First 100 chars):\", reconstructedJSON.substring(0, 100) + \"...\");\n\n const dbValidationObj = JSON5.parse(reconstructedJSON);\n setLearningWtaResponse(dbValidationObj);\n console.log('✅ [Fix] dbVal parsed successfully via Group Capture');\n\n } catch (regexError) {\n console.error(\"❌ Failed to parse validation JSON with regex fallback:\", regexError);\n console.log(\"❌ Failed Match Groups:\", dbValidationMatch);\n }\n }\n }\n } catch (e) {\n // If JSON parsing fails, fallback to the original regex approach\n console.log('JSON parsing failed, trying regex fallback for validation data');\n // Fixed Code (Working)\n const dbValidationMatch = responseData.match(dbValidationPattern);\n if (dbValidationMatch) {\n try {\n // Extract captured groups from the Regex\n // Group 1: is_valid_db (true/false)\n // Group 2: conflicting_learnings content\n // Group 3: similar_learnings content\n const isValidDbRaw = dbValidationMatch[1]; \n const conflictingRaw = dbValidationMatch[2]; \n const similarRaw = dbValidationMatch[3];\n\n // Helper to clean Python Booleans ONLY. \n // We do NOT touch quotes here, letting JSON5 handle the raw string structure.\n const cleanPythonBool = (str: string) => \n str.replace(/\\bTrue\\b/g, \"true\")\n .replace(/\\bFalse\\b/g, \"false\")\n .replace(/\\bNone\\b/g, \"null\");\n\n // Reconstruct the JSON object manually\n const reconstructedJSON = `{\n \"is_valid_db\": ${cleanPythonBool(isValidDbRaw)},\n \"conflicting_learnings\": ${cleanPythonBool(conflictingRaw)},\n \"similar_learnings\": ${cleanPythonBool(similarRaw)}\n }`;\n\n console.log(\"🛠️ Reconstructed DB Validation JSON:\", reconstructedJSON.substring(0, 100) + \"...\");\n\n const dbValidationObj = JSON5.parse(reconstructedJSON);\n setLearningWtaResponse(dbValidationObj);\n console.log('✅ [App] dbVal set via Regex Fallback:', dbValidationObj);\n\n } catch (regexError) {\n console.error(\"Failed to parse validation JSON with regex fallback:\", regexError);\n console.log(\"Failed string:\", dbValidationMatch[0]);\n }\n }\n }\n const deleteToolMatch = responseData.match(deleteToolPattern);\n if (deleteToolMatch) {\n try {\n let cleanedDeleteTool = sanitizePythonDictToJSON(deleteToolMatch[0] || '')\n\n const deleteToolObj = JSON5.parse(`{${cleanedDeleteTool}}`);\n\n console.log('Delete tool detected:', deleteToolObj);\n\n // Call the callback with the delete tool data (deduplication happens in the callback)\n if (onDeleteToolCall) {\n onDeleteToolCall(deleteToolObj);\n }\n } catch (e) {\n console.error(\"Failed to parse delete tool JSON:\", e);\n }\n }\n\n\n console.log('🔍 Testing merge tool regex on response data...');\n \n const mergeToolMatch = responseData.match(mergeToolPattern);\n console.log('🔍 Merge tool regex match result:', mergeToolMatch);\n \n if (mergeToolMatch) {\n console.log('🔍 MERGE TOOL REGEX MATCHED!');\n try {\n // get python-like dictionary string.\n const pythonLikeString = mergeToolMatch[0];\n\n // sanitize the string into valid JSON format.\n const jsonString = sanitizePythonDictToJSON(pythonLikeString);\n\n // parse the sanitized JSON string into an object.\n const mergeToolObj = JSON5.parse(jsonString);\n\n console.log('✅ Correctly parsed merge tool object:', mergeToolObj);\n\n //pass the complete, correctly parsed object to the callback.\n // The arrays inside mergeToolObj are now perfect and require no splitting.\n if (onMergeToolCall) {\n onMergeToolCall(mergeToolObj);\n }\n } catch (e) {\n console.error(\"Failed to parse merge tool JSON:\", e);\n }\n }\n //edit tool \n const editToolMatch = responseData.match(editToolPattern);\n if (editToolMatch && responseData.includes('edit_actions')) { // Check for a keyword to be more specific\n try {\n console.log('Edit tool match found:', editToolMatch[0]);\n \n // Sanitize the Python-like string into valid JSON\n const jsonString = sanitizePythonDictToJSON(editToolMatch[0]);\n \n const editToolObj = JSON5.parse(jsonString);\n console.log('Edit tool detected and parsed successfully:', editToolObj);\n\n if (editToolObj.conflicting_learnings) {\n setEditConflictingLearningTrigger(editToolObj.conflicting_learnings);\n console.log('Setting edit conflicting learning trigger:', editToolObj.conflicting_learnings);\n }\n if (editToolObj.similar_learnings) {\n setEditSimilarLearningTrigger(editToolObj.similar_learnings);\n console.log('Setting edit similar learning trigger:', editToolObj.similar_learnings);\n }\n \n } catch (e) {\n console.error(\"Failed to parse edit tool JSON:\", e);\n }\n }\n \n const jsonMatch = responseData.match(jsonFinderPattern);\n\n if (jsonMatch) {\n try {\n const jsonString = sanitizePythonDictToJSON(jsonMatch[0]);\n const parsedObject = JSON5.parse(jsonString);\n\n // Check if it's the recommendation object\n if (parsedObject.recommended_whentoapply || parsedObject.recommended_whennottoapply) {\n // 3. Use the new parser function\n const recommendations = parseValidationRecommendations(parsedObject);\n onRecommendationFound(recommendations);\n }\n } catch (e) {\n console.error(\"Failed to parse validation recommendations:\", e);\n }\n }\n }\n \n return results;\n }, [messages, onDeleteToolCall]);\n};\n // const editToolMatch = responseData.match(editToolPattern);\n // if (editToolMatch) {\n // try {\n // console.log('Edit tool match:', editToolMatch);\n // let cleanedEditTool = sanitizePythonDictToJSON(editToolMatch[1].replace(/'/g, '\"') || '')\n // const editToolObj = JSON5.parse(`${cleanedEditTool}`);\n // console.log('Edit tool detected:', editToolObj);\n // setEditConflictingLearningTrigger(editToolObj.conflicting_learnings);\n // setEditSimilarLearningTrigger(editToolObj.similar_learnings);\n // console.log('Edit conflicting learning trigger:', editToolObj.conflicting_learnings);\n // console.log('Edit similar learning trigger:', editToolObj.similar_learnings);\n // } catch (e) {\n // console.error(\"Failed to parse edit tool JSON:\", e);\n // }\n // }\n // }\n\n // return results;\n // }, [messages, onDeleteToolCall]);\n // };\n\n // Apply the same methodology of extracting content from header message\n // Have a additional check of edit_actions as well, if they are there then use edit similar and conflicting states to set the value\n\n const clearCurrentLearningUI = useCallback(() => {\n console.log('🧹 Performing UI Cleanup for \"Delete Current Learning\"');\n\n // Reset Form Data (Keep original, clear the rest)\n setFormDataState((prev: any) => ({\n ...prev,\n original: isFromDashboard ? '' : prev.original, \n modification: '',\n tooltip: '',\n whenToApply: '',\n whenNotToApply: '',\n isTooltipEnabled: false,\n isModificationEnabled: true,\n _mergeUpdate: false\n }));\n\n // Clear Conflict Cards\n if (setValidationWtaResponse) setValidationWtaResponse(null);\n if (setLearningWtaResponse) setLearningWtaResponse(null);\n if (setValidationRecommendations) setValidationRecommendations(null);\n\n // Reset internal form state\n if (onResetLearningData) onResetLearningData();\n\n // Clear Chat extractions\n // setExtractedModification && setExtractedModification('');\n setExtractedTooltip && setExtractedTooltip('');\n setSuggestedWta([]);\n }, [setFormDataState, setValidationWtaResponse, setLearningWtaResponse, onResetLearningData, setExtractedModification, setExtractedTooltip, setSuggestedWta]);\n\n\n useEffect(() => {\n if (!messages || messages.length === 0) return;\n\n const lastMessage = messages[messages.length - 1];\n const orchestratorMessages = lastMessage?.orchestratorAndAgentsMessages || [];\n\n // The exact pattern you identified\n const deleteToolPattern = /['\"]delete_current_learning['\"]\\s*:\\s*(true|false|True|False)/;\n\n orchestratorMessages.forEach((msg: any, index: number) => {\n const responseData = msg?.responsedata || '';\n \n // [FIX] Generate ID using Parent Message ID + Index\n // This ensures if the SAME content appears in a NEW message, it generates a NEW ID.\n const parentId = lastMessage.requestId || lastMessage.id || `msg-${messages.length}`;\n const uniqueTriggerId = `${parentId}_orch_${index}`; \n\n // Check against the unique trigger ID, not the content content\n if (processedDeleteCommandsRef.current.has(uniqueTriggerId)) return;\n\n const match = responseData.match(deleteToolPattern);\n if (match) {\n // Check if the value is explicitly true\n const isTrue = match[1].toLowerCase() === 'true';\n\n if (isTrue) {\n console.log(\"✅ Delete detected in Effect - Triggering Cleanup for:\", uniqueTriggerId);\n processedDeleteCommandsRef.current.add(uniqueTriggerId); // Mark this specific message event as processed\n clearCurrentLearningUI(); // Call the cleanup function\n }\n }\n });\n }, [messages, clearCurrentLearningUI]);\n\n const handleDeleteToolCallback = useCallback(async (deleteToolData: any) => {\n // Create a unique identifier for this delete operation\n const deleteOperationId = JSON.stringify({\n deleted_similar_learning_ids: deleteToolData.deleted_similar_learning_ids || [],\n deleted_conflicting_learning_ids: deleteToolData.deleted_conflicting_learning_ids || [],\n delete_current_learning: deleteToolData.delete_current_learning || false\n });\n\n // Check if we've already processed this exact delete operation\n if (processedDeleteToolsRef.current.has(deleteOperationId)) {\n console.log('Delete operation already processed, skipping callback execution:', deleteOperationId);\n return; // Early return - don't execute any work\n }\n\n // Mark this operation as processed BEFORE doing any work\n processedDeleteToolsRef.current.add(deleteOperationId);\n console.log('Processing new delete operation:', deleteOperationId);\n\n try {\n // First, perform the database deletion\n await handleDeleteToolCall(deleteToolData, baseUrl, organizationName, chatAssistant);\n\n // Then, update the UI state by adding deleted IDs to the tracking set\n const { deleted_similar_learning_ids = [], deleted_conflicting_learning_ids = [] } = deleteToolData;\n\n // Combine all IDs to delete\n const allDeletedIds = [\n ...(deleted_similar_learning_ids || []),\n ...(deleted_conflicting_learning_ids || [])\n ];\n\n // Add deleted IDs to the tracking set (this will trigger UI filtering in LearningDetailsForm)\n setDeletedLearningIds(prev => {\n const newSet = new Set(prev);\n allDeletedIds.forEach(id => newSet.add(id));\n console.log('Added deleted learning IDs to tracking set:', Array.from(newSet));\n return newSet;\n });\n\n console.log('UI state updated after deletion of learnings:', allDeletedIds);\n } catch (error) {\n // If there's an error, remove from processed set so it can be retried\n processedDeleteToolsRef.current.delete(deleteOperationId);\n console.error('Error processing delete operation:', error);\n throw error;\n }\n }, [baseUrl, organizationName, chatAssistant, setDeletedLearningIds]);\n\n // Callback function to handle merge tool calls\n const handleMergeToolCallback = useCallback(async (mergeToolData: any) => {\n\n setIsMergeLoading(true);\n console.log('🔴 MERGE CALLBACK - Processing merge tool call:', mergeToolData);\n try { \n const { merge_learnings, similar_learnings, conditions_whentoapply, conditions_whennottoapply } = mergeToolData;\n \n console.log('🔴 MERGE CALLBACK - Extracted data:');\n console.log('merge_learnings:', merge_learnings);\n console.log('similar_learnings:', similar_learnings);\n console.log('conditions_whentoapply:', conditions_whentoapply);\n console.log('conditions_whennottoapply:', conditions_whennottoapply);\n\n if (!merge_learnings || !similar_learnings || !Array.isArray(similar_learnings)) {\n console.log('Invalid merge tool data, skipping');\n return;\n }\n\n \n console.log(' MERGE CALLBACK - Current formDataState before replacement:', formDataState);\n console.log(' MERGE CALLBACK - Current whenToApply:', formDataState?.whenToApply);\n console.log(' MERGE CALLBACK - Current whenNotToApply:', formDataState?.whenNotToApply);\n \n // UNCONDITIONALLY replace conditions in formDataState with whatever is in the response header\n // need to update both formDataState and the arrays simultaneously to prevent override\n if (conditions_whentoapply && Array.isArray(conditions_whentoapply)) {\n console.log(' MERGE CALLBACK - UNCONDITIONALLY replacing whenToApply conditions:', conditions_whentoapply);\n // Join conditions with 'OR' to match the expected format\n const whenToApplyString = conditions_whentoapply.join(' OR ');\n console.log(' MERGE CALLBACK - New whenToApply string:', whenToApplyString);\n \n // Update formDataState with a flag to indicate this is a merge update\n setFormDataState((prev: any) => {\n console.log(' MERGE CALLBACK - Previous formDataState:', prev);\n const newState = {\n ...prev,\n whenToApply: whenToApplyString,\n _mergeUpdate: true, // Flag to indicate this is a merge update\n _mergeWTA: conditions_whentoapply // Store the array for LearningDetailsForm to use\n };\n console.log('MERGE CALLBACK - New formDataState:', newState);\n return newState;\n });\n }\n\n if (conditions_whennottoapply && Array.isArray(conditions_whennottoapply)) {\n console.log(' MERGE CALLBACK - UNCONDITIONALLY replacing whenNotToApply conditions:', conditions_whennottoapply);\n // Join conditions with 'OR' to match the expected format\n const whenNotToApplyString = conditions_whennottoapply.join(' OR ');\n console.log(' MERGE CALLBACK - New whenNotToApply string:', whenNotToApplyString);\n \n setFormDataState((prev: any) => {\n console.log(' MERGE CALLBACK - Previous formDataState for WNTA:', prev);\n const newState = {\n ...prev,\n whenNotToApply: whenNotToApplyString,\n _mergeUpdate: true, // Flag to indicate this is a merge update\n _mergeWNTA: conditions_whennottoapply // Store the array for LearningDetailsForm to use\n };\n console.log(' MERGE CALLBACK - New formDataState for WNTA:', newState);\n return newState;\n });\n }\n\n // Add merged learning IDs to the tracking set (this will trigger UI re-keying similar to delete)\n setMergedLearningIds(prev => {\n const newSet = new Set(prev);\n similar_learnings.forEach(id => newSet.add(id));\n console.log('Added merged learning IDs to tracking set:', Array.from(newSet));\n return newSet;\n });\n\n // Send delete request for similar_learnings IDs\n for (const learningId of similar_learnings) {\n console.log(`Sending delete request for merged learning ID: ${learningId}`);\n \n // // Call the delete API for each similar learning ID\n // if (onDeleteLearning) {\n // onDeleteLearning(learningId);\n // }\n\n //make the delete payload here again.\n const deletePayload = {\n status: \"approved\",\n metadata: {\n userName: \"M Kathyayani\",\n userEmailId: \"madumbu.kathyayani@techolution.com\",\n llm: \"claude-3.5-sonnet\",\n isVariantFlow: true,\n isDeleteAction: true,\n isAgentsFeedback: true,\n variant: {\n id: learningId,\n scope: {\n name: \"User\",\n value: [{\n name: \"M Kathyayani\",\n email: \"madumbu.kathyayani@techolution.com\",\n userId: \"8059658c-a65c-4e14-89aa-a5195f5d09f5\"\n }]\n },\n topic: {\n id: null,\n value: \"default\"\n },\n variant: `Learning ID: ${learningId}`,\n question: \"\",\n categories: [],\n created_at: new Date().toLocaleString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true\n }),\n originalQuestion: \"\",\n parameterizedQuestion: \"\",\n conditions_whentoapply: \"\",\n conditions_whennottoapply: \"\",\n parentId: null\n }\n }\n };\n\n const response = await publishAgenticFeedbackForVariantIngestion({\n baseUrl,\n organizationName,\n chatAssistantName: chatAssistant, \n payload: deletePayload,\n });\n\n if(!response.ok){\n console.error(`Failed to delete merged learning ID ${learningId}:`, response.statusText);\n } else {\n \n console.log(`Successfully deleted merged learning ID ${learningId}`);\n }\n \n }\n } catch (error) {\n console.error('Error processing merge operation:', error);\n } finally { \n console.log('switched off');\n setIsMergeLoading(false);\n }\n \n }, [onDeleteLearning, setMergedLearningIds, setFormDataState, setIsMergeLoading]);\n\n const parsedSuggestions = useParsedHeaderSuggestions(messages, setValidationRecommendations,handleDeleteToolCallback, handleMergeToolCallback );\n\n useEffect(() => {\n const latestSuggestions = parsedSuggestions?.[parsedSuggestions?.length - 1] || null;\n if (latestSuggestions) {\n setInstantLearningSuggestions(latestSuggestions);\n console.log(\"Parsed suggestions:\", parsedSuggestions);\n }\n\n }, [parsedSuggestions]);\n\n\n\n // Filter learningWtaResponse when deletedLearningIds changes (similar to LearningDetailsForm logic)\n useEffect(() => {\n if (!learningWtaResponse || deletedLearningIds.size === 0) return;\n\n // Check if we have any learnings that need to be filtered out\n const hasConflictingToFilter = learningWtaResponse.conflicting_learnings &&\n Object.values(learningWtaResponse.conflicting_learnings).some((learning: any) =>\n deletedLearningIds.has(learning.id)\n );\n\n const hasSimilarToFilter = learningWtaResponse.similar_learnings &&\n Object.values(learningWtaResponse.similar_learnings).some((learning: any) =>\n deletedLearningIds.has(learning.id)\n );\n\n // Only proceed if there are actually learnings to filter\n if (!hasConflictingToFilter && !hasSimilarToFilter) return;\n\n // Create a unique identifier for the current response to prevent infinite loops\n const currentResponseId = JSON.stringify({\n deletedIds: Array.from(deletedLearningIds).sort()\n });\n\n // Skip if we've already processed this set of deleted IDs\n if (lastProcessedResponseRef.current === currentResponseId) {\n return;\n }\n\n const filteredResponse = { ...learningWtaResponse };\n\n // Filter out deleted learnings from conflicting learnings and re-key using index (0th = A, 1st = B, etc.)\n if (filteredResponse.conflicting_learnings) {\n const remainingConflicting = Object.values(filteredResponse.conflicting_learnings)\n .filter((learning: any) => !deletedLearningIds.has(learning.id));\n\n console.log('[ChatComponent] Re-keying conflicting learnings:', {\n originalKeys: Object.keys(filteredResponse.conflicting_learnings),\n remainingCount: remainingConflicting.length,\n remainingLearnings: remainingConflicting.map((l: any) => ({ id: l.id, variant: l.feedback.variant }))\n });\n\n const rekeyedConflicting: any = {};\n remainingConflicting.forEach((learning: any, index: number) => {\n const key = String.fromCharCode(65 + index); // 65 is ASCII for 'A'\n rekeyedConflicting[key] = learning;\n console.log(`[ChatComponent] Conflicting learning ${index} gets key '${key}':`, learning.feedback.variant);\n });\n filteredResponse.conflicting_learnings = rekeyedConflicting;\n console.log('[ChatComponent] Final conflicting learnings keys:', Object.keys(rekeyedConflicting));\n }\n\n // Filter out deleted learnings from similar learnings and re-key using index (0th = A, 1st = B, etc.)\n if (filteredResponse.similar_learnings) {\n const remainingSimilar = Object.values(filteredResponse.similar_learnings)\n .filter((learning: any) => !deletedLearningIds.has(learning.id));\n\n console.log('[ChatComponent] Re-keying similar learnings:', {\n originalKeys: Object.keys(filteredResponse.similar_learnings),\n remainingCount: remainingSimilar.length,\n remainingLearnings: remainingSimilar.map((l: any) => ({ id: l.id, variant: l.feedback.variant }))\n });\n\n const rekeyedSimilar: any = {};\n remainingSimilar.forEach((learning: any, index: number) => {\n const key = String.fromCharCode(65 + index); // 65 is ASCII for 'A'\n rekeyedSimilar[key] = learning;\n console.log(`[ChatComponent] Similar learning ${index} gets key '${key}':`, learning.feedback.variant);\n });\n filteredResponse.similar_learnings = rekeyedSimilar;\n console.log('[ChatComponent] Final similar learnings keys:', Object.keys(rekeyedSimilar));\n }\n\n // Update the ref to mark this set of deleted IDs as processed\n lastProcessedResponseRef.current = currentResponseId;\n\n console.log('Filtered learningWtaResponse after deletion:', filteredResponse);\n setLearningWtaResponse(filteredResponse);\n }, [deletedLearningIds, learningWtaResponse, setLearningWtaResponse]);\n\n // Filter learningWtaResponse when mergedLearningIds changes (similar to delete logic)\n useEffect(() => {\n if (!learningWtaResponse || mergedLearningIds.size === 0) return;\n\n // Check if we have any similar learnings that need to be filtered out (merge only affects similar learnings)\n const hasSimilarToFilter = learningWtaResponse.similar_learnings &&\n Object.values(learningWtaResponse.similar_learnings).some((learning: any) =>\n mergedLearningIds.has(learning.id)\n );\n\n // Only proceed if there are actually learnings to filter\n if (!hasSimilarToFilter) return;\n\n // Create a unique identifier for the current merge response to prevent infinite loops\n const currentMergeResponseId = JSON.stringify({\n mergedIds: Array.from(mergedLearningIds).sort()\n });\n\n // Skip if we've already processed this set of merged IDs\n if (lastProcessedMergeResponseRef.current === currentMergeResponseId) {\n return;\n }\n\n const filteredResponse = { ...learningWtaResponse };\n\n // Filter out merged learnings from similar learnings and re-key using index (0th = A, 1st = B, etc.)\n if (filteredResponse.similar_learnings) {\n const remainingSimilar = Object.values(filteredResponse.similar_learnings)\n .filter((learning: any) => !mergedLearningIds.has(learning.id));\n\n console.log('[ChatComponent] Re-keying similar learnings after merge:', {\n originalKeys: Object.keys(filteredResponse.similar_learnings),\n remainingCount: remainingSimilar.length,\n remainingLearnings: remainingSimilar.map((l: any) => ({ id: l.id, variant: l.feedback.variant }))\n });\n\n const rekeyedSimilar: any = {};\n remainingSimilar.forEach((learning: any, index: number) => {\n const key = String.fromCharCode(65 + index); // 65 is ASCII for 'A'\n rekeyedSimilar[key] = learning;\n console.log(`[ChatComponent] Similar learning ${index} gets key '${key}':`, learning.feedback.variant);\n });\n filteredResponse.similar_learnings = rekeyedSimilar;\n console.log('[ChatComponent] Final similar learnings keys after merge:', Object.keys(rekeyedSimilar));\n }\n\n // Update the ref to mark this set of merged IDs as processed\n lastProcessedMergeResponseRef.current = currentMergeResponseId;\n\n console.log('Filtered learningWtaResponse after merge:', filteredResponse);\n setLearningWtaResponse(filteredResponse);\n }, [mergedLearningIds, learningWtaResponse, setLearningWtaResponse]);\n\n const useParsedHeaderModification = (messages: any[]) => {\n return useMemo(() => {\n const results: object[] = [];\n\n const pattern = /['\"](\\w+)['\"]\\s*:\\s*(['\"])((?:\\\\.|(?!\\2).)*)\\2/g;\n\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n \n let match;\n while ((match = pattern.exec(responseData)) !== null) {\n try {\n const key = match[1]; \n let value = match[3]; \n if ((value.startsWith(\"'\") && value.endsWith(\"'\")) || (value.startsWith('\"') && value.endsWith('\"'))) {\n // If so, strip those outer quotes\n value = value.substring(1, value.length - 1);\n }\n\n const extracted = { [key]: value };\n results.push(extracted);\n\n } catch (e) {\n console.error(\"Failed to parse regex match for header message:\", e);\n }\n }\n }\n\n return results;\n }, [messages]);\n };\n\n const parsedModification = useParsedHeaderModification(messages);\n\n useEffect(() => {\n const modificationObj: any = parsedModification?.find((item: any) => 'modification' in item);\n \n if (modificationObj) {\n setExtractedModification(modificationObj.modification)\n }\n\n const tooltipObj:any = parsedModification?.find((item: any) => 'tooltip' in item);\n if (tooltipObj) {\n setExtractedTooltip(tooltipObj.tooltip)\n }\n\n const originalObj: any = parsedModification?.find((item: any) => 'original' in item);\n if (originalObj) {\n console.log(\"✅ Original Extracted:\", originalObj.original); \n setFormDataState((prev: any) => { \n if (prev.question === originalObj.original) return prev;\n \n return {\n ...prev, \n original: originalObj.original,\n _extractedOriginalUpdate: true\n };\n });\n }\n\n }, [parsedModification]);\n\n\n const useParsedWtaSuggestions = (\n messages: any[],\n setSuggestedWta: (wta: string[]) => void\n ) => {\n useEffect(() => {\n const orchestratorAndAgentsMessages =\n messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n const regex = /<wta>([\\s\\S]*?)<\\/wta>/gi;\n const matches: string[] = [];\n let match;\n while ((match = regex.exec(responseData)) !== null) {\n console.log('match wta suggestion', match)\n matches.push(match[1]);\n }\n\n if (matches.length) {\n setSuggestedWta(matches);\n }\n }\n }, [messages, setSuggestedWta]);\n };\n\n useParsedWtaSuggestions(messages, setSuggestedWta);\n\n const useParsedHeaderTooltip = (messages: any[]) => {\n return useMemo(() => {\n const results: object[] = [];\n\n const pattern = /^\\{\\s*(['\"])(\\w+)\\1\\s*:\\s*(['\"])(.*?)\\3\\s*\\}$/;\n\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n const match: string[] = responseData.match(pattern);\n if (match) {\n console.log('match: ', match[0])\n try {\n const extracted = JSON5.parse(match[0]);\n results.push(extracted);\n } catch (e) {\n console.error(\"Failed to parse JSON:\", e);\n }\n }\n }\n\n return results;\n }, [messages]);\n };\n\n const parseTooltip = useParsedHeaderTooltip(messages);\n\n useEffect(() => {\n const latestParseTooltip: any = parseTooltip?.[parseTooltip?.length - 1] || null;\n if (latestParseTooltip) {\n console.log('latestParseTooltip: ', latestParseTooltip)\n setExtractedTooltip(latestParseTooltip?.tooltip)\n }\n\n }, [parseTooltip]);\n\n // const useParsedHeaderSave = (messages: any[]) => {\n // return useMemo(() => {\n // const results: object[] = [];\n\n // const pattern = /\\{\\s*'save'\\s*:\\s*(True|False|true|false)\\s*\\}/;\n\n // const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n // for (const msg of orchestratorAndAgentsMessages) {\n // const responseData = msg?.responsedata || '';\n // const match = responseData.match(pattern);\n // if (match) {\n // try {\n // // Transform and store the fixed version\n // const fixed = match[0]\n // .replace(/\\bTrue\\b/, 'true')\n // .replace(/\\bFalse\\b/, 'false')\n // .replace(/'/g, '\"'); // single to double quotes\n\n // console.log('corrected: ', fixed);\n\n // const extracted = JSON5.parse(fixed);\n // results.push(extracted);\n // } catch (e) {\n // console.error(\"Failed to parse JSON:\", e);\n // }\n // }\n // }\n\n // return results;\n // }, [messages]);\n // };\n\n const useParsedHeaderSave = (messages: any[]) => {\n const [parsedSave, setParsedSave] = useState<object[]>([]);\n\n useEffect(() => {\n const results: object[] = [];\n const pattern = /\\{\\s*['\"]save['\"]\\s*:\\s*(True|False|true|false)\\s*\\}/;\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n const match = responseData.match(pattern);\n\n if (match) {\n try {\n const fixed = match[0]\n .replace(/\\bTrue\\b/, 'true')\n .replace(/\\bFalse\\b/, 'false')\n .replace(/'/g, '\"');\n\n console.log('corrected:', fixed);\n\n const extracted = JSON5.parse(fixed);\n if (extracted.save === true) {\n setShouldTriggerSave(true);\n }\n results.push(extracted);\n } catch (e) {\n console.error(\"Failed to parse JSON:\", e);\n }\n }\n }\n\n setParsedSave(results);\n }, [messages]);\n\n return parsedSave;\n };\n\n const parsedSave = useParsedHeaderSave(messages);\n\n // useEffect(() => {\n // const latestParsedSave: any = parsedSave?.[parsedSave?.length - 1] || null;\n\n // let timeoutId: NodeJS.Timeout;\n\n // if (latestParsedSave && latestParsedSave?.save && !isSaveLoading) {\n // setIsSaveLoading(true)\n // timeoutId = setTimeout(() => {\n // setIsSaveLoading(false)\n // setSave(latestParsedSave.save);\n // }, 200); // delay in milliseconds\n // }\n\n // return () => {\n // clearTimeout(timeoutId);\n // };\n // }, [parsedSave]);\n useEffect(() => {\n const latestParsedSave: any = parsedSave?.[parsedSave?.length - 1] || null;\n // Guard: ensure it's a boolean value\n if (!latestParsedSave || typeof latestParsedSave.save !== 'boolean') return;\n\n setIsSaveLoading(true);\n\n const timeoutId = setTimeout(() => {\n setIsSaveLoading(false);\n setSave(latestParsedSave.save);\n }, 200);\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [parsedSave]);\n\n useEffect(() => {\n if (isFormSaveClicked) {\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, 'Save it')\n setIsFormSavedClicked(false)\n }\n }, [isFormSaveClicked])\n\n useEffect(() => {\n if (deleteLearningTrigger && onDeleteLearning) {\n const deleteMessage = `Delete learning ${deleteLearningTrigger}`;\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, deleteMessage)\n if (setDeleteLearningTrigger) {\n setDeleteLearningTrigger(null);\n }\n }\n }, [deleteLearningTrigger, onDeleteLearning, setDeleteLearningTrigger])\n\n // useEffect(() => {\n // if(sendMessageInChat) {\n // handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, sendMessageInChat)\n // setSendMessageInChat('');\n // }\n // }, [sendMessageInChat])\n\n useEffect(() => {\n getChatSettings();\n getChatHistory()\n\n const updateHeight = () => {\n const headerHeight = chatHeaderRef?.current?.clientHeight || 0;\n\n const newHeight = `calc(100% - ${headerHeight}px - 10px`;\n setAvailableHeight(newHeight);\n };\n updateHeight();\n window.addEventListener('resize', updateHeight);\n return () => window.removeEventListener('resize', updateHeight);\n\n }, []);\n\n const scrollToBottom = useCallback(() => {\n const scrollContainer = scrollContainerRef.current;\n if (scrollContainer) {\n setTimeout(() => {\n scrollContainer.scrollTo({\n top: scrollContainer.scrollHeight,\n behavior: \"smooth\",\n });\n setIsVisible(false)\n }, 100);\n }\n }, []);\n\n useEffect(() => {\n if (selectedWTA?.length > 0) {\n scrollToBottom()\n }\n }, [selectedWTA]);\n\n const getChatSettings = () => {\n let config = {\n method: 'get',\n maxBodyLength: Infinity,\n url: `${url}/api/chatbot/getChatSettings?name=${chatAssistant}&organizationName=${organizationName}`,\n headers: {},\n };\n\n http\n .request(config)\n .then((response) => {\n if (response?.data?.chatSettings) {\n // setChatInitialMessage(\n // response?.data?.chatSettings?.chatInitialMessage\n // );\n\n if (response?.data?.chatSettings?.chatInitialMessage !== '') {\n setShowWelcomeMessage(true);\n }\n }\n })\n .catch((error) => {\n console.error(error);\n });\n };\n\n const getChatHistory = async () => {\n const getHistoryURL = `${url}/api/chat/history?name=${chatAssistant}&organizationName=${organizationName}`;\n\n try {\n const requestOptions = {\n method: 'GET',\n params: { guestSessionId: guestSessionIdRef.current },\n withCredentials: true, // Send cookies along with the request\n };\n http\n .get(getHistoryURL, requestOptions)\n .then((response) => {\n const data = response.data;\n\n if (data.length > 0) {\n setMessages(data)\n // addDateDividerToMessages(data);\n scrollToBottom();\n } else {\n setShowWelcomeMessage(true);\n }\n })\n .catch((error) => {\n console.error(error);\n });\n } catch (error) {\n setMessageLoading(false);\n console.error(error);\n }\n };\n\n const resetChatHistory = () => {\n const resetChatHistoryURL = `${url}/api/chat/resetHistory?name=${chatAssistant}&organizationName=${organizationName}`;\n setValidationWtaResponse(null)\n setLearningWtaResponse(null)\n try {\n const requestOptions = {\n method: 'GET',\n params: { guestSessionId: guestSessionIdRef.current },\n withCredentials: true, // Send cookies along with the request\n };\n http\n .get(resetChatHistoryURL, requestOptions)\n .then(() => {\n //@ts-ignore\n setExtractedModification('')\n setExtractedTooltip('');\n setIsNewChatClicked(true)\n setShowSelectedWTA(false)\n setSelectedWTA([])\n setChatInitialMessage('');\n setDeletedLearningIds(new Set()); // Clear deleted learning IDs for new chat\n lastProcessedResponseRef.current = ''; // Reset processing ref for new chat\n processedDeleteToolsRef.current.clear(); // Clear processed delete tools for new chat\n processedMergeTriggers.current.clear(); // Clear processed merge triggers for new chat\n if (setMergeLearningTrigger) {\n setMergeLearningTrigger(null); // Clear any pending merge triggers\n }\n chatPreviewIdRef.current = `${uuidv4()}`;\n setHasUserFilledForm(false)\n setMessages([]);\n setShowWelcomeMessage(true);\n\n // Reset learning data in LearningDetailsForm\n if (onResetLearningData) {\n console.log('[ChatComponent] 🔄 Calling onResetLearningData callback');\n onResetLearningData();\n } else {\n console.log('[ChatComponent] ❌ onResetLearningData callback not available');\n }\n\n setFormDataState((prev: any) => ({\n ...prev,\n original: isFromDashboard ? '' : prev.original,\n modification: '',\n tooltip: '',\n whenToApply: '',\n whenNotToApply: '',\n isTooltipEnabled: false,\n isModificationEnabled: true\n }));\n })\n .catch((error) => {\n console.error(error);\n });\n } catch (error) {\n setMessageLoading(false);\n console.error(error);\n }\n };\n\n function replaceAsteriskInAnchor(inputString: string): string {\n // Regular expression to match an anchor tag with asterisk inside\n const regex = /<a [^>]*>.*?<\\/a>/g;\n // Check if the inputString contains an anchor tag with asterisk and replace it\n const replacedString = inputString?.replace(regex, (match) => {\n // Replace asterisk inside the anchor tag with &ast;\n return match?.replace(/\\*/g, '&ast;');\n });\n return replacedString;\n }\n\n const getAssistantObj = (event: any, accordianMessageArray: any, explainabilityMap: any) => {\n console.log('event', event, Object.keys(event));\n console.log('content: ', event?.data)\n let streamedresponse = { role: 'assistant', content: '', id: uuidv4() };\n //orchestrator is sending message, we initially set it as normal message\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === false &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === true &&\n event?.data?.chatStream?.continueChatResult?.isEnd === false) {\n streamedresponse.content = replaceAsteriskInAnchor(\n event?.data?.chatStream?.continueChatResult?.message?.content\n )?.replaceAll('WaitMessage: ', '');\n }\n //orchestrator is sending message and thinking break is there, we add it to accordian\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === true &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === true &&\n event?.data?.chatStream?.continueChatResult?.isEnd === false) {\n //check for wait message deletion\n streamedresponse.content = \"\";\n accordianMessageArray.push(\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: false,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: false\n }\n );\n\n }\n //orchestrator replied with the final message, this is the final response, no need for accordian\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === false &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === true &&\n event?.data?.chatStream?.continueChatResult?.isEnd === true) {\n streamedresponse.content = replaceAsteriskInAnchor(\n event?.data?.chatStream?.continueChatResult?.message?.content\n )?.replaceAll('WaitMessage: ', '');\n }\n\n //agent responded it will directly be shown in collapsed form\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === false &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === false &&\n event?.data?.chatStream?.continueChatResult?.isEnd === false) {\n const continueChatResult = event?.data?.chatStream?.continueChatResult;\n // Check for explainability_id and responded_by, and update the map\n if (continueChatResult.explainability_id && continueChatResult.responded_by) {\n const explainabilityId = continueChatResult.explainability_id;\n const respondedBy = continueChatResult.responded_by;\n // Only set the value if the map does not already contain the explainabilityId\n if (!explainabilityMap.has(explainabilityId)) {\n explainabilityMap.set(explainabilityId, { responded_by: respondedBy, index: accordianMessageArray.length });\n }\n }\n\n if (explainabilityMap.has(event?.data?.chatStream?.continueChatResult.explainability_id)) {\n const targetedIndexId = explainabilityMap.get(event?.data?.chatStream?.continueChatResult?.explainability_id)\n const index = targetedIndexId?.index;\n //@ts-ignore\n accordianMessageArray[index] =\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: true,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: true\n }\n\n } else {\n accordianMessageArray = [\n ...accordianMessageArray,\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: true,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: false\n }\n ]\n }\n }\n\n //final response from agent\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === true &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === false &&\n event?.data?.chatStream?.continueChatResult?.isEnd === false\n ) {\n const continueChatResult = event?.data?.chatStream?.continueChatResult;\n // Check for explainability_id and responded_by, and update the map\n if (continueChatResult.explainability_id && continueChatResult.responded_by) {\n const explainabilityId = continueChatResult.explainability_id;\n const respondedBy = continueChatResult.responded_by;\n // Only set the value if the map does not already contain the explainabilityId\n if (!explainabilityMap.has(explainabilityId)) {\n explainabilityMap.set(explainabilityId, { responded_by: respondedBy, index: accordianMessageArray.length });\n }\n }\n\n if (explainabilityMap.has(event?.data?.chatStream?.continueChatResult?.explainability_id)) {\n const targetedIndexId = explainabilityMap.get(event?.data?.chatStream?.continueChatResult?.explainability_id)\n const index = targetedIndexId?.index;\n //@ts-ignore\n accordianMessageArray[index] =\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: false,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: true\n }\n\n } else {\n accordianMessageArray.push(\n\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: false,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: false\n }\n );\n }\n\n }\n\n const annotations = event?.data?.chatStream?.continueChatResult?.message?.annotations;\n const userFeedbackId = event?.data?.chatStream?.continueChatResult?.message?.userFeedbackId || ''\n let assistantObj = {\n role: 'assistant',\n content: streamedresponse.content,\n orchestratorAndAgentsMessages: accordianMessageArray,\n time: new Date(),\n requestId: event?.data?.chatStream?.continueChatResult?.requestId ?? '',\n citations: event?.data?.chatStream?.continueChatResult?.message?.citations,\n guides_utilized: event?.data?.chatStream?.continueChatResult?.message?.guides_utilized ?? [],\n annotations: annotations,\n resourceId: event?.data?.chatStream?.continueChatResult?.resourceId,\n userFeedbackId,\n citationDisplayType: event?.data?.chatStream?.continueChatResult?.message?.citationDisplayType ?? \"\"\n }\n\n if (annotations) {\n for (let index = 0; index < annotations?.length; index++) {\n const annotation = annotations[index];\n assistantObj = { ...assistantObj, content: assistantObj?.content?.replace(annotation?.text, annotation?.text + `<sup>${index}</sup>`) }\n }\n }\n return assistantObj;\n }\n\n function extractWaitMessage(inputString: string) {\n const prefix = 'WaitMessage: ';\n const startIndex = inputString.indexOf(prefix);\n\n if (startIndex !== -1) {\n const extractedString = inputString.substring(\n startIndex + prefix.length\n );\n return extractedString?.replaceAll('WaitMessage: ', '');\n } else {\n return '';\n }\n }\n\n const handleMessages = (data: any, explainabilityMap: any, accordianMessageArray: any, userQuestionTime: any, userInputParam: string, isFirstQuestionSent?: boolean) => {\n console.log('userInput: ', userInputParam)\n let streamedresponse = { role: 'assistant', content: '', id: uuidv4() };\n if (data?.chatStream?.continueChatResult?.message?.content?.includes('WaitMessage: ')) {\n setMessageLoading(false);\n setWaitMessageLoading(true);\n streamedresponse.content = extractWaitMessage(\n data?.chatStream?.continueChatResult?.message?.content + '\\n\\n'\n );\n //@ts-ignore\n setMessages([...messages, { role: 'user', content: userInputParam, time: userQuestionTime, isFirstQuestionSent: isFirstQuestionSent || false, id: data?.chatStream?.continueChatResult?.requestId || '', reply: '' }, streamedresponse\n ]);\n } else {\n setMessageLoading(false);\n setWaitMessageLoading(false);\n streamedresponse.content = replaceAsteriskInAnchor(\n data?.chatStream?.continueChatResult?.message?.content\n )?.replaceAll('WaitMessage: ', '');\n\n const assistantObject = getAssistantObj({ data }, accordianMessageArray, explainabilityMap);\n console.log('assistantObject', assistantObject);\n setMessages([\n ...messages,\n { role: 'user', content: userInputParam || '', time: userQuestionTime, isFirstQuestionSent: isFirstQuestionSent || false, requestId: data?.chatStream?.continueChatResult?.requestId ?? '' },\n assistantObject,\n ]);\n setIsStreamEnd(data?.chatStream?.continueChatResult?.isEnd);\n }\n }\n\n const handleStream = (event?: any, isFirstQuestionSent?: boolean, userInputParam?: string,isValidationFailure: boolean = false) => {\n const finalInput = userInputParam?.trim() || userInput?.trim() || '';\n if (event.key !== 'Enter' || event.shiftKey || (userInputParam?.trim() === '' && userInput?.trim() === '') || isStreaming) { //!areAllrequiredFieldsFilled\n return;\n }\n setIsStreaming(true)\n\n if (isValidationFailure) {\n setIsAwaitingValidationResponse(true);\n }\n\n const userQuestionTime = new Date();\n setMessages([\n ...messages.map((m, index) => ({\n ...m,\n content: replaceAsteriskInAnchor(m.content)?.replace(\n 'WaitMessage: ',\n ''\n ),\n })),\n { role: 'user', content: finalInput, time: userQuestionTime, isFirstQuestionSent: false },\n ]);\n\n const explainabilityMap = new Map<string, { responded_by: string; index: number }>();\n let accordianMessageArray: any[] = [];\n setShowSelectedWTA(false);\n const params = {\n WEBSOCKET_URL: baseWebsocketUrl,\n organizationName: organizationName,\n chatAssistantName: chatAssistant,\n selectedAIModel: 'gpt-4',\n replyMessage: '',\n userName: 'Guest User',\n userEmailId: 'guestUser@example.com',\n userId: 'Guest User',\n query: userInputParam?.trim() || userInput?.trim() || '',\n requestId: `requestId-${uuidv4()}`,\n customPrompt: '',\n enableForBackend: false,\n guestSessionId: guestSessionIdRef.current,\n chatPreviewId: chatPreviewIdRef.current,\n customMetaData: {\n ...formDataState,\n whenToApply: formDataState?.whenToApply\n ?.split(' OR ')\n ?.filter((wta: string) => wta !== ''),\n whenNotToApply: formDataState?.whenNotToApply\n ?.split(' OR ')\n ?.filter((wnta: string) => wnta !== ''),\n isFirstQuestion: messages.length === 0,\n validation: isValidationFailure ? false : (validationWtaResponse ?? null),\n conflicting_learnings: learningWtaResponse?.conflicting_learnings ?? \"\",\n similar_learnings: learningWtaResponse?.similar_learnings ?? \"\",\n ...(validationRecommendations?.wta && {\n recommended_whentoapply: validationRecommendations.wta\n }),\n ...(validationRecommendations?.wnta && {\n recommended_whennottoapply: validationRecommendations.wnta\n }),\n send_metadata_to_orchestrator: true,\n\n ai_response: fullMessageText,\n },\n customMetaDataDebug: {\n conflicting_learnings_keys: learningWtaResponse?.conflicting_learnings ? Object.keys(learningWtaResponse.conflicting_learnings) : [],\n similar_learnings_keys: learningWtaResponse?.similar_learnings ? Object.keys(learningWtaResponse.similar_learnings) : [],\n conflicting_count: learningWtaResponse?.conflicting_learnings ? Object.keys(learningWtaResponse.conflicting_learnings).length : 0,\n similar_count: learningWtaResponse?.similar_learnings ? Object.keys(learningWtaResponse.similar_learnings).length : 0\n }, // howToRespond: formDataState?.howToRespond?.split('_').map((word:string) => word.charAt(0).toUpperCase() + word.slice(1)).join(' '),\n aiModel: '',\n onStreamEvent: (data: any) => handleMessages(data, explainabilityMap, accordianMessageArray, userQuestionTime, finalInput, isFirstQuestionSent),\n onStreamEnd: (data: any) => { setIsStreaming(false); setIsAwaitingValidationResponse(false);},\n onError: (error: any) => {\n console.error('Stream error:', error);\n setIsStreaming(false);\n setIsAwaitingValidationResponse(false);\n }\n };\n console.log(\"Custom MetaData Payload:\", params.customMetaData);\n\n if (userInput?.trim() !== '' || userInputParam?.trim()) {\n setMessageLoading(true);\n textAreaRef.current?.blur();\n setUserInput('');\n scrollToBottom()\n //Display initial message after entering the question in streaming fashion\n const loadingMessage = `Thanks for sharing your thoughts. I'm putting together the most helpful suggestions now, so we can make sure this really fits your needs.`;\n const loadingMessageWords = loadingMessage.split(' ');\n let concatStr = '';\n\n for (let index = 0; index < loadingMessageWords.length; index++) {\n setTimeout(() => {\n concatStr += loadingMessageWords[index] + ' ';\n setInitialLoadingMessage(concatStr.trim());\n }, 25 * index);\n }\n startChatStream(params);\n }\n }\n\n // Handle merge learning trigger - send message to chat when triggered\n const processedMergeTriggers = useRef<Set<string>>(new Set());\n\n useEffect(() => {\n if (mergeLearningTrigger && !isStreaming) {\n // Prevent duplicate processing of the same trigger\n if (processedMergeTriggers.current.has(mergeLearningTrigger)) {\n console.log('[ChatComponent] ⚠️ Duplicate merge trigger ignored:', mergeLearningTrigger);\n return;\n }\n\n console.log('[ChatComponent] 🔴 MERGE TRIGGER RECEIVED:', mergeLearningTrigger);\n processedMergeTriggers.current.add(mergeLearningTrigger);\n\n // Find the learning data to generate the merge message\n // Look in learningWtaResponse for the learning with this ID\n let learningToMerge = null;\n let sequentialLabel = 'A'; // default fallback\n\n if (learningWtaResponse?.similar_learnings) {\n const similarLearnings = Object.values(learningWtaResponse.similar_learnings);\n const learningIndex = similarLearnings.findIndex((learning: any) => learning?.id === mergeLearningTrigger);\n\n if (learningIndex !== -1) {\n learningToMerge = similarLearnings[learningIndex];\n sequentialLabel = String.fromCharCode(65 + learningIndex); // A, B, C, etc.\n }\n }\n\n if (learningToMerge) {\n // Generate the merge message\n const mergeMessage = `Merge Similar Learning ${sequentialLabel} with current learning`;\n console.log('[ChatComponent] ✅ Sending merge message to chat:', mergeMessage);\n\n // Send the merge message using handleStream\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, mergeMessage);\n console.log('[ChatComponent] Message sent successfully');\n } else {\n console.log('[ChatComponent] ❌ Learning not found for ID:', mergeLearningTrigger);\n }\n\n // Clear the trigger after processing\n if (setMergeLearningTrigger) {\n setMergeLearningTrigger(null);\n console.log('[ChatComponent] Trigger cleared');\n }\n } else if (mergeLearningTrigger && isStreaming) {\n console.log('[ChatComponent] ⚠️ Merge trigger received but streaming in progress:', mergeLearningTrigger);\n }\n }, [mergeLearningTrigger, isStreaming, setMergeLearningTrigger]);\n\n const markdownComponents = useMemo(() => ({\n img: ({ node, ...props }: any) => (\n <img\n {...props}\n style={{\n height: '100%',\n width: '100%',\n objectFit: 'contain', // To handle aspect ratio\n }}\n alt={props?.alt || ''}\n className=\"w-full sm:max-w-lg md:max-w-2xl lg:max-w-4xl mx-auto\"\n />\n ), p: ({ node, ...props }: any) => {\n return (\n <p\n {...props}\n style={{\n maxWidth: '100%',\n wordWrap: 'break-word', // Ensures long words wrap\n overflowWrap: 'break-word', // Alternative for word wrapping\n wordBreak: 'break-word', // Force breaking long unbreakable strings\n whiteSpace: 'normal', // Default wrapping behavior\n overflow: 'hidden', // Hides any unexpected overflow\n display: 'block', // Ensures proper behavior of p tags\n fontSize: '1rem', // Equivalent to Tailwind 'text-base'\n lineHeight: '1.625rem', // Equivalent to Tailwind 'leading-relaxed'\n marginBottom: '1rem', // Equivalent to Tailwind 'mb-4'\n marginTop: '10px',\n }}\n >\n {props?.children}\n </p>\n );\n },\n code: ({ node, ...props }: any) => {\n return (\n <span\n {...props}\n style={{\n maxWidth: '100%',\n wordWrap: 'break-word', // Ensures long words wrap\n overflowWrap: 'break-word', // Alternative for word wrapping\n wordBreak: 'break-word', // Force breaking long unbreakable strings\n whiteSpace: 'normal', // Default wrapping behavior\n overflow: 'hidden', // Hides any unexpected overflow\n display: 'inline-flex', // Ensures proper behavior of p tags\n fontSize: '1rem', // Equivalent to Tailwind 'text-base'\n lineHeight: '1.625rem', // Equivalent to Tailwind 'leading-relaxed'\n }}\n >\n {props?.children}\n </span>\n );\n },\n ol: ({ node, ...props }: any) => {\n return (\n <ol\n {...props}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n listStyle: 'decimal',\n paddingLeft: '2.5rem'\n }}\n >\n {props?.children}\n </ol>\n );\n },\n ul: ({ node, ...props }: any) => {\n return (\n <ul\n {...props}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n listStyle: 'decimal',\n paddingLeft: '2.5rem'\n }}\n >\n {props?.children}\n </ul>\n );\n },\n wta: ({ node, ...props }: any) => {\n const key = props.key || props['data-key']; // fallback\n const label = props.label || props.children || 'Unknown label';\n\n const addWhenToApplyCondition = (text: string, isToggleOn: boolean) => {\n const cleanText = Array.isArray(text) ? text[0] : text;\n\n if (selectedWTA?.length) {\n setShowSelectedWTA(true)\n } else {\n setShowSelectedWTA(true)\n }\n\n setSelectedWTA((prev: string[]) => {\n if (isToggleOn) {\n // Add only if not already present\n if (!prev.includes(cleanText)) {\n return [...prev, cleanText];\n }\n return prev;\n } else {\n // Remove if present\n return prev.filter((item) => item !== cleanText);\n }\n });\n }\n\n return (\n <ToggleSelector label={label} onToggle={(text: string, isToggleOn: any) => { addWhenToApplyCondition(text, isToggleOn) }} />\n );\n }\n\n }), []);\n\n\n return (\n <div className={defaultStyles.customFont} style={{ height: '100%', width: '100%', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', fontFamily: 'Plus Jakarta Sans, sans-serif', backgroundColor: '#fbfaff', border: '1px solid #d1d5db', overflow: 'hidden' }}>\n <div style={{ width: '100%', height: '100%', backgroundColor: '#fbfaff', maxWidth: '100%', overflow: 'hidden' }}>\n <div ref={chatHeaderRef}>\n <ChatHeader resetChatHistory={resetChatHistory} isStreamEnd={isStreamEnd} />\n </div>\n\n <div style={{ width: '100%', height: availableHeight, maxHeight: availableHeight, overflowY: 'auto', backgroundColor: '#fbfaff' }} ref={scrollContainerRef}>\n <div\n className='welcome-message'\n style={{\n alignItems: 'flex-start', // Align text to the top for better multi-line flow\n paddingLeft: '0.5rem', // Adds breathing space on all sides\n paddingTop: '1rem',\n maxWidth: '70%',\n fontSize: '1rem', // Base readable font\n lineHeight: '1.75rem', // Slightly more relaxed line height\n borderRadius: '0.5rem', // Subtle rounding for readability\n overflowWrap: 'break-word',\n wordBreak: 'break-word',\n whiteSpace: 'pre-wrap', // Preserves newlines while allowing wrap\n color: '#333', // Softer text color for contrast\n fontWeight: '700',\n textAlign: 'left'\n }}\n >\n <span>I'm here to help fine-tune your learning so it works as accurately as it should.</span>\n </div>\n\n {/* { //@ts-ignore\n <ReactMarkdown components={markdownComponents} rehypePlugins={[rehypeRaw]}>{markdown4}</ReactMarkdown>\n } */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'row',\n fontFamily: 'inherit',\n padding: '16px 10px 0px 16px',\n maxWidth: '80%'\n }}\n >\n <div style={{ maxHeight: `32px`, maxWidth: `32px`, marginTop: '0.3rem' }}>\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"bi:stars\" clip-path=\"url(#clip0_6004_60631)\">\n <path id=\"Vector\" d=\"M11.4867 9.37021C11.6517 8.87521 12.3507 8.87521 12.5157 9.37021L13.4832 12.2757C13.6961 12.9144 14.0549 13.4947 14.5311 13.9707C15.0073 14.4466 15.5879 14.8051 16.2267 15.0177L19.1307 15.9852C19.6257 16.1502 19.6257 16.8492 19.1307 17.0142L16.2252 17.9817C15.5865 18.1947 15.0062 18.5535 14.5302 19.0297C14.0543 19.5059 13.6958 20.0864 13.4832 20.7252L12.5157 23.6292C12.4801 23.7376 12.4112 23.832 12.3188 23.8989C12.2264 23.9658 12.1153 24.0019 12.0012 24.0019C11.8871 24.0019 11.7759 23.9658 11.6835 23.8989C11.5912 23.832 11.5223 23.7376 11.4867 23.6292L10.5192 20.7237C10.3064 20.0852 9.9478 19.505 9.47187 19.029C8.99594 18.5531 8.41572 18.1945 7.77718 17.9817L4.87168 17.0142C4.76329 16.9786 4.6689 16.9097 4.60198 16.8173C4.53506 16.725 4.49904 16.6138 4.49904 16.4997C4.49904 16.3856 4.53506 16.2745 4.60198 16.1821C4.6689 16.0897 4.76329 16.0208 4.87168 15.9852L7.77718 15.0177C8.41572 14.8049 8.99594 14.4463 9.47187 13.9704C9.9478 13.4945 10.3064 12.9142 10.5192 12.2757L11.4867 9.37021ZM5.69218 1.72171C5.71369 1.65675 5.75512 1.60022 5.8106 1.56016C5.86607 1.52009 5.93275 1.49853 6.00118 1.49853C6.06961 1.49853 6.13629 1.52009 6.19176 1.56016C6.24724 1.60022 6.28867 1.65675 6.31018 1.72171L6.89068 3.46471C7.15018 4.24171 7.75918 4.85071 8.53618 5.11021L10.2792 5.69071C10.3441 5.71222 10.4007 5.75365 10.4407 5.80912C10.4808 5.86459 10.5024 5.93128 10.5024 5.99971C10.5024 6.06813 10.4808 6.13482 10.4407 6.19029C10.4007 6.24576 10.3441 6.2872 10.2792 6.30871L8.53618 6.88921C8.15274 7.01647 7.80431 7.23149 7.51864 7.51717C7.23296 7.80284 7.01794 8.15127 6.89068 8.53471L6.31018 10.2777C6.28867 10.3427 6.24724 10.3992 6.19176 10.4393C6.13629 10.4793 6.06961 10.5009 6.00118 10.5009C5.93275 10.5009 5.86607 10.4793 5.8106 10.4393C5.75512 10.3992 5.71369 10.3427 5.69218 10.2777L5.11168 8.53471C4.98442 8.15127 4.7694 7.80284 4.48372 7.51717C4.19805 7.23149 3.84962 7.01647 3.46618 6.88921L1.72318 6.30871C1.65822 6.2872 1.60169 6.24576 1.56163 6.19029C1.52156 6.13482 1.5 6.06813 1.5 5.99971C1.5 5.93128 1.52156 5.86459 1.56163 5.80912C1.60169 5.75365 1.65822 5.71222 1.72318 5.69071L3.46618 5.11021C3.84962 4.98295 4.19805 4.76792 4.48372 4.48225C4.7694 4.19657 4.98442 3.84815 5.11168 3.46471L5.69218 1.72171ZM16.2957 0.148207C16.3105 0.105497 16.3382 0.068461 16.3751 0.0422495C16.4119 0.016038 16.456 0.00195312 16.5012 0.00195312C16.5464 0.00195313 16.5905 0.016038 16.6273 0.0422495C16.6641 0.068461 16.6919 0.105497 16.7067 0.148207L17.0937 1.30921C17.2662 1.82821 17.6727 2.23471 18.1917 2.40721L19.3527 2.79421C19.3954 2.80901 19.4324 2.83676 19.4586 2.87359C19.4848 2.91042 19.4989 2.9545 19.4989 2.99971C19.4989 3.04491 19.4848 3.08899 19.4586 3.12582C19.4324 3.16265 19.3954 3.1904 19.3527 3.20521L18.1917 3.59221C17.9361 3.67771 17.7039 3.82139 17.5134 4.01193C17.3229 4.20247 17.1792 4.43467 17.0937 4.69021L16.7067 5.85121C16.6919 5.89392 16.6641 5.93095 16.6273 5.95717C16.5905 5.98338 16.5464 5.99746 16.5012 5.99746C16.456 5.99746 16.4119 5.98338 16.3751 5.95717C16.3382 5.93095 16.3105 5.89392 16.2957 5.85121L15.9087 4.69021C15.8232 4.43467 15.6795 4.20247 15.489 4.01193C15.2984 3.82139 15.0662 3.67771 14.8107 3.59221L13.6512 3.20521C13.6085 3.1904 13.5714 3.16265 13.5452 3.12582C13.519 3.08899 13.5049 3.04491 13.5049 2.99971C13.5049 2.9545 13.519 2.91042 13.5452 2.87359C13.5714 2.83676 13.6085 2.80901 13.6512 2.79421L14.8122 2.40721C15.3312 2.23471 15.7377 1.82821 15.9102 1.30921L16.2957 0.148207Z\" fill=\"#5928ed\" />\n </g>\n <defs>\n <clipPath id=\"clip0_6004_60631\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', fontWeight: 400, color: '#000' }}>\n <div\n style={{\n display: 'inline-flex',\n flexDirection: 'column',\n alignItems: 'flex-start', // Align text to the top for better multi-line flow\n paddingLeft: '1rem', // Adds breathing space on all sides\n paddingRight: '1rem',\n width: '100%',\n maxWidth: '100%',\n fontSize: '1rem', // Base readable font\n lineHeight: '1.75rem', // Slightly more relaxed line height\n marginBottom: '1rem',\n borderRadius: '0.5rem', // Subtle rounding for readability\n overflowWrap: 'break-word',\n wordBreak: 'break-word',\n whiteSpace: 'pre-wrap', // Preserves newlines while allowing wrap\n color: '#333', // Softer text color for contrast\n }}\n >\n <span><ReactMarkdown components={{\n p: ({ node, ...props }: any) => {\n return (\n <p\n {...props}\n style={{\n margin: 0\n }}\n >\n {props?.children}\n </p>\n );\n }\n }}>{welcomeMessage}</ReactMarkdown></span>\n </div>\n </div>\n </div>\n {messages.length\n ? messages.map((message: any, index) => (\n <div style={{ display: 'flex', padding: '0.5rem 1rem', maxWidth: '100%' }}>\n {message?.role == 'assistant' && (<div style={{ maxHeight: `32px`, maxWidth: `32px`, marginTop: '0.5rem', marginRight: '1rem' }}>\n {/* {ChatIconComponent ? ChatIconComponent : <img\n src={chatAssistantLogoUrl}\n alt=\"Assistant Logo\"\n width=\"32px\"\n height=\"32px\"\n />} */}\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"bi:stars\" clip-path=\"url(#clip0_6004_60631)\">\n <path id=\"Vector\" d=\"M11.4867 9.37021C11.6517 8.87521 12.3507 8.87521 12.5157 9.37021L13.4832 12.2757C13.6961 12.9144 14.0549 13.4947 14.5311 13.9707C15.0073 14.4466 15.5879 14.8051 16.2267 15.0177L19.1307 15.9852C19.6257 16.1502 19.6257 16.8492 19.1307 17.0142L16.2252 17.9817C15.5865 18.1947 15.0062 18.5535 14.5302 19.0297C14.0543 19.5059 13.6958 20.0864 13.4832 20.7252L12.5157 23.6292C12.4801 23.7376 12.4112 23.832 12.3188 23.8989C12.2264 23.9658 12.1153 24.0019 12.0012 24.0019C11.8871 24.0019 11.7759 23.9658 11.6835 23.8989C11.5912 23.832 11.5223 23.7376 11.4867 23.6292L10.5192 20.7237C10.3064 20.0852 9.9478 19.505 9.47187 19.029C8.99594 18.5531 8.41572 18.1945 7.77718 17.9817L4.87168 17.0142C4.76329 16.9786 4.6689 16.9097 4.60198 16.8173C4.53506 16.725 4.49904 16.6138 4.49904 16.4997C4.49904 16.3856 4.53506 16.2745 4.60198 16.1821C4.6689 16.0897 4.76329 16.0208 4.87168 15.9852L7.77718 15.0177C8.41572 14.8049 8.99594 14.4463 9.47187 13.9704C9.9478 13.4945 10.3064 12.9142 10.5192 12.2757L11.4867 9.37021ZM5.69218 1.72171C5.71369 1.65675 5.75512 1.60022 5.8106 1.56016C5.86607 1.52009 5.93275 1.49853 6.00118 1.49853C6.06961 1.49853 6.13629 1.52009 6.19176 1.56016C6.24724 1.60022 6.28867 1.65675 6.31018 1.72171L6.89068 3.46471C7.15018 4.24171 7.75918 4.85071 8.53618 5.11021L10.2792 5.69071C10.3441 5.71222 10.4007 5.75365 10.4407 5.80912C10.4808 5.86459 10.5024 5.93128 10.5024 5.99971C10.5024 6.06813 10.4808 6.13482 10.4407 6.19029C10.4007 6.24576 10.3441 6.2872 10.2792 6.30871L8.53618 6.88921C8.15274 7.01647 7.80431 7.23149 7.51864 7.51717C7.23296 7.80284 7.01794 8.15127 6.89068 8.53471L6.31018 10.2777C6.28867 10.3427 6.24724 10.3992 6.19176 10.4393C6.13629 10.4793 6.06961 10.5009 6.00118 10.5009C5.93275 10.5009 5.86607 10.4793 5.8106 10.4393C5.75512 10.3992 5.71369 10.3427 5.69218 10.2777L5.11168 8.53471C4.98442 8.15127 4.7694 7.80284 4.48372 7.51717C4.19805 7.23149 3.84962 7.01647 3.46618 6.88921L1.72318 6.30871C1.65822 6.2872 1.60169 6.24576 1.56163 6.19029C1.52156 6.13482 1.5 6.06813 1.5 5.99971C1.5 5.93128 1.52156 5.86459 1.56163 5.80912C1.60169 5.75365 1.65822 5.71222 1.72318 5.69071L3.46618 5.11021C3.84962 4.98295 4.19805 4.76792 4.48372 4.48225C4.7694 4.19657 4.98442 3.84815 5.11168 3.46471L5.69218 1.72171ZM16.2957 0.148207C16.3105 0.105497 16.3382 0.068461 16.3751 0.0422495C16.4119 0.016038 16.456 0.00195312 16.5012 0.00195312C16.5464 0.00195313 16.5905 0.016038 16.6273 0.0422495C16.6641 0.068461 16.6919 0.105497 16.7067 0.148207L17.0937 1.30921C17.2662 1.82821 17.6727 2.23471 18.1917 2.40721L19.3527 2.79421C19.3954 2.80901 19.4324 2.83676 19.4586 2.87359C19.4848 2.91042 19.4989 2.9545 19.4989 2.99971C19.4989 3.04491 19.4848 3.08899 19.4586 3.12582C19.4324 3.16265 19.3954 3.1904 19.3527 3.20521L18.1917 3.59221C17.9361 3.67771 17.7039 3.82139 17.5134 4.01193C17.3229 4.20247 17.1792 4.43467 17.0937 4.69021L16.7067 5.85121C16.6919 5.89392 16.6641 5.93095 16.6273 5.95717C16.5905 5.98338 16.5464 5.99746 16.5012 5.99746C16.456 5.99746 16.4119 5.98338 16.3751 5.95717C16.3382 5.93095 16.3105 5.89392 16.2957 5.85121L15.9087 4.69021C15.8232 4.43467 15.6795 4.20247 15.489 4.01193C15.2984 3.82139 15.0662 3.67771 14.8107 3.59221L13.6512 3.20521C13.6085 3.1904 13.5714 3.16265 13.5452 3.12582C13.519 3.08899 13.5049 3.04491 13.5049 2.99971C13.5049 2.9545 13.519 2.91042 13.5452 2.87359C13.5714 2.83676 13.6085 2.80901 13.6512 2.79421L14.8122 2.40721C15.3312 2.23471 15.7377 1.82821 15.9102 1.30921L16.2957 0.148207Z\" fill=\"#5928ed\" />\n </g>\n <defs>\n <clipPath id=\"clip0_6004_60631\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </div>)}\n <div style={{ width: '100%' }}>\n {message.role === 'assistant' && message.orchestratorAndAgentsMessages && message.orchestratorAndAgentsMessages.length > 0 &&\n (<MinimizedThinkingSteps orchestratorAndAgentsMessages={message?.orchestratorAndAgentsMessages} isStreamEnd={isStreamEnd} isCurrentMessage={index === messages.length - 1} ThinkingBulbIconComponent={ThinkingBulbIconComponent} />)}\n {/* <div style={{border:'1px solid red'}}> */}\n\n {//@ts-ignore\n message?.role === 'assistant' ? <MessageRendering index={index} content={message?.content} messages={messages} handleStream={handleStream} /> : <span></span>}\n\n <div style={{\n display: 'flex', justifyContent: 'flex-end',\n // backgroundColor: '#8694A10D', padding: \"1rem\"\n }}>\n {(message.role === 'user') ?\n <div style={{ backgroundColor: '#8694A10D', padding: \"0 1rem\", borderRadius: '8px', maxWidth: '80%' }}>\n <MessageRendering index={index} content={message?.content} messages={messages} handleStream={handleStream} scrollToBottom={scrollToBottom} />\n </div> : <span></span>}\n </div>\n {/* </div> */}\n </div>\n\n </div>\n )) : showWelcomeMessage && (\n <></>\n )\n }\n\n {messageLoading && (\n <div style={{ display: \"flex\", padding: '16px 16px 0px 16px' }}>\n <div style={{ maxHeight: `32px`, maxWidth: `32px`, marginTop: '0.2rem' }}>\n {/* {ChatIconComponent ? ChatIconComponent : <img\n src={chatAssistantLogoUrl}\n alt=\"Assistant Logo\"\n width=\"32px\"\n height=\"32px\"\n />} */}\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"bi:stars\" clip-path=\"url(#clip0_6004_60631)\">\n <path id=\"Vector\" d=\"M11.4867 9.37021C11.6517 8.87521 12.3507 8.87521 12.5157 9.37021L13.4832 12.2757C13.6961 12.9144 14.0549 13.4947 14.5311 13.9707C15.0073 14.4466 15.5879 14.8051 16.2267 15.0177L19.1307 15.9852C19.6257 16.1502 19.6257 16.8492 19.1307 17.0142L16.2252 17.9817C15.5865 18.1947 15.0062 18.5535 14.5302 19.0297C14.0543 19.5059 13.6958 20.0864 13.4832 20.7252L12.5157 23.6292C12.4801 23.7376 12.4112 23.832 12.3188 23.8989C12.2264 23.9658 12.1153 24.0019 12.0012 24.0019C11.8871 24.0019 11.7759 23.9658 11.6835 23.8989C11.5912 23.832 11.5223 23.7376 11.4867 23.6292L10.5192 20.7237C10.3064 20.0852 9.9478 19.505 9.47187 19.029C8.99594 18.5531 8.41572 18.1945 7.77718 17.9817L4.87168 17.0142C4.76329 16.9786 4.6689 16.9097 4.60198 16.8173C4.53506 16.725 4.49904 16.6138 4.49904 16.4997C4.49904 16.3856 4.53506 16.2745 4.60198 16.1821C4.6689 16.0897 4.76329 16.0208 4.87168 15.9852L7.77718 15.0177C8.41572 14.8049 8.99594 14.4463 9.47187 13.9704C9.9478 13.4945 10.3064 12.9142 10.5192 12.2757L11.4867 9.37021ZM5.69218 1.72171C5.71369 1.65675 5.75512 1.60022 5.8106 1.56016C5.86607 1.52009 5.93275 1.49853 6.00118 1.49853C6.06961 1.49853 6.13629 1.52009 6.19176 1.56016C6.24724 1.60022 6.28867 1.65675 6.31018 1.72171L6.89068 3.46471C7.15018 4.24171 7.75918 4.85071 8.53618 5.11021L10.2792 5.69071C10.3441 5.71222 10.4007 5.75365 10.4407 5.80912C10.4808 5.86459 10.5024 5.93128 10.5024 5.99971C10.5024 6.06813 10.4808 6.13482 10.4407 6.19029C10.4007 6.24576 10.3441 6.2872 10.2792 6.30871L8.53618 6.88921C8.15274 7.01647 7.80431 7.23149 7.51864 7.51717C7.23296 7.80284 7.01794 8.15127 6.89068 8.53471L6.31018 10.2777C6.28867 10.3427 6.24724 10.3992 6.19176 10.4393C6.13629 10.4793 6.06961 10.5009 6.00118 10.5009C5.93275 10.5009 5.86607 10.4793 5.8106 10.4393C5.75512 10.3992 5.71369 10.3427 5.69218 10.2777L5.11168 8.53471C4.98442 8.15127 4.7694 7.80284 4.48372 7.51717C4.19805 7.23149 3.84962 7.01647 3.46618 6.88921L1.72318 6.30871C1.65822 6.2872 1.60169 6.24576 1.56163 6.19029C1.52156 6.13482 1.5 6.06813 1.5 5.99971C1.5 5.93128 1.52156 5.86459 1.56163 5.80912C1.60169 5.75365 1.65822 5.71222 1.72318 5.69071L3.46618 5.11021C3.84962 4.98295 4.19805 4.76792 4.48372 4.48225C4.7694 4.19657 4.98442 3.84815 5.11168 3.46471L5.69218 1.72171ZM16.2957 0.148207C16.3105 0.105497 16.3382 0.068461 16.3751 0.0422495C16.4119 0.016038 16.456 0.00195312 16.5012 0.00195312C16.5464 0.00195313 16.5905 0.016038 16.6273 0.0422495C16.6641 0.068461 16.6919 0.105497 16.7067 0.148207L17.0937 1.30921C17.2662 1.82821 17.6727 2.23471 18.1917 2.40721L19.3527 2.79421C19.3954 2.80901 19.4324 2.83676 19.4586 2.87359C19.4848 2.91042 19.4989 2.9545 19.4989 2.99971C19.4989 3.04491 19.4848 3.08899 19.4586 3.12582C19.4324 3.16265 19.3954 3.1904 19.3527 3.20521L18.1917 3.59221C17.9361 3.67771 17.7039 3.82139 17.5134 4.01193C17.3229 4.20247 17.1792 4.43467 17.0937 4.69021L16.7067 5.85121C16.6919 5.89392 16.6641 5.93095 16.6273 5.95717C16.5905 5.98338 16.5464 5.99746 16.5012 5.99746C16.456 5.99746 16.4119 5.98338 16.3751 5.95717C16.3382 5.93095 16.3105 5.89392 16.2957 5.85121L15.9087 4.69021C15.8232 4.43467 15.6795 4.20247 15.489 4.01193C15.2984 3.82139 15.0662 3.67771 14.8107 3.59221L13.6512 3.20521C13.6085 3.1904 13.5714 3.16265 13.5452 3.12582C13.519 3.08899 13.5049 3.04491 13.5049 2.99971C13.5049 2.9545 13.519 2.91042 13.5452 2.87359C13.5714 2.83676 13.6085 2.80901 13.6512 2.79421L14.8122 2.40721C15.3312 2.23471 15.7377 1.82821 15.9102 1.30921L16.2957 0.148207Z\" fill=\"#5928ed\" />\n </g>\n <defs>\n <clipPath id=\"clip0_6004_60631\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </div>\n <div\n style={{\n display: 'inline-flex',\n alignItems: 'flex-start', // Align text to the top for better multi-line flow\n paddingLeft: '1rem', // Adds breathing space on all sides\n paddingRight: '1rem',\n paddingBottom: '1rem',\n width: '100%',\n maxWidth: '100%',\n fontSize: '1rem', // Base readable font\n lineHeight: '1.75rem', // Slightly more relaxed line height\n marginBottom: '1rem',\n borderRadius: '0.5rem', // Subtle rounding for readability\n overflowWrap: 'break-word',\n wordBreak: 'break-word',\n whiteSpace: 'pre-wrap', // Preserves newlines while allowing wrap\n color: '#333', // Softer text color for contrast\n // fontWeight: 500\n }}\n >\n <span>{initialLoadingMessage}</span>\n </div>\n </div>\n )}\n </div>\n </div>\n <div\n style={{\n width: '95%',\n height: 'content-fit',\n backgroundColor: '#fbfaff',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'end',\n position: 'relative',\n }}\n >\n {/* Floating Down Button */}\n <div\n style={{\n visibility: isVisible ? 'visible' : 'hidden',\n position: 'absolute',\n top: '-3rem',\n zIndex: 0,\n pointerEvents: 'none', // allows clicks to pass through\n }}\n >\n <button\n onClick={scrollToBottom}\n style={{\n borderRadius: '9999px',\n padding: 0,\n backgroundColor: '#fff',\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\n border: '1px solid #d1d5db',\n pointerEvents: 'auto',\n cursor: 'pointer',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 1,\n height: '2.25rem',\n width: '2.25rem',\n margin: '0.3rem'\n }}\n >\n <svg\n fill=\"#000000\"\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 24 24\"\n id=\"down\"\n data-name=\"Flat Color\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n id=\"primary\"\n d=\"M19.71,13.29a1,1,0,0,0-1.42,0L13,18.59V3a1,1,0,0,0-2,0V18.59l-5.29-5.3a1,1,0,0,0-1.42,1.42l7,7a1,1,0,0,0,1.42,0l7-7A1,1,0,0,0,19.71,13.29Z\"\n ></path>\n </svg>\n </button>\n </div>\n \n {isAwaitingValidationResponse && (\n <Box sx={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n paddingBottom: '8px',\n paddingLeft: '4px',\n fontFamily: '\"Plus Jakarta Sans\", sans-serif',\n fontSize: '0.875rem',\n color: '#6b7280',\n width: '100%'\n }}>\n <span>Instant Learning AI is thinking</span>\n <Box sx={{\n width: \"5px\", height: \"5px\", bgcolor: \"#6b7280\", borderRadius: \"50%\",\n animation: `${thinkingBounce} 1.4s infinite ease-in-out both`,\n animationDelay: \"-0.32s\",\n }} />\n <Box sx={{\n width: \"5px\", height: \"5px\", bgcolor: \"#6b7280\", borderRadius: \"50%\",\n animation: `${thinkingBounce} 1.4s infinite ease-in-out both`,\n animationDelay: \"-0.16s\",\n }} />\n <Box sx={{\n width: \"5px\", height: \"5px\", bgcolor: \"#6b7280\", borderRadius: \"50%\",\n animation: `${thinkingBounce} 1.4s infinite ease-in-out both`,\n }} />\n </Box>\n )}\n\n <Tooltip title={isFormValidating ? \"Please wait for the validation to be completed.\" : \"\"}>\n {/* Textarea and Send Button */}\n <div\n style={{\n width: '100%',\n backgroundColor: '#fff',\n display: 'flex',\n alignItems: 'end',\n gap: '0.5rem',\n border: '1px solid #E5E7EB',\n borderRadius: '8px',\n cursor: isTextareaDisabled ? 'not-allowed' : 'default',\n }}\n >\n\n <div style={{ width: '100%', display: 'flex' }}>\n <textarea\n ref={textAreaRef}\n placeholder=\"Tell me more about this learning...\"\n value={userInput || ''}\n onChange={(e) => setUserInput(e.target.value)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={(e) => handleStream(e)}\n disabled={isTextareaDisabled} \n style={{\n flexGrow: 1,\n padding: '0.5rem',\n borderRadius: '0.5rem',\n border: 'none',\n fontSize: '1rem',\n lineHeight: '1.5rem',\n resize: 'none',\n backgroundColor: '#fff',\n color: 'inherit',\n // cursor: 'text',\n minHeight: isFocused ? '120px' : '50px',\n height: isFocused ? '120px' : '50px',\n maxHeight: '120px',\n overflowY: 'auto',\n fontFamily: 'inherit',\n outline: 'none',\n transition: 'min-height 0.3s ease, background-color 0.3s ease',\n boxSizing: 'border-box',\n cursor: isTextareaDisabled ? 'not-allowed' : 'text', // Correct cursor on textarea\n }}\n />\n <span style={{ display: 'flex', flexDirection: 'column', justifyContent: 'end', alignItems: 'end' }}> {/* span wrapper is required because Tooltip doesn't work on disabled buttons directly */}\n <button\n onClick={(e) => { handleStream(new KeyboardEvent('keydown', { key: 'Enter' })) }}\n disabled={isSendButtonDisabled} //!areAllrequiredFieldsFilled\n style={{\n padding: '0.5rem 0.75rem',\n borderRadius: '0.375rem',\n border: 'none',\n backgroundColor: 'white',\n color: isSendButtonDisabled ? '#d1d5db' : '#5928ed',\n fontWeight: 'bold',\n fontSize: '1rem',\n cursor: isSendButtonDisabled ? 'not-allowed' : 'pointer',\n transition: 'background-color 0.3s, color 0.3s',\n height: '50px',\n }}\n >\n <SendButton />\n </button>\n </span>\n </div>\n </div>\n </Tooltip>\n </div>\n <div style={{ width: '95%', display: 'flex', gap: '0.25rem', flexDirection: 'row' }}>\n <Tooltip\n title={'Coming soon'}\n placement=\"top\"\n arrow\n componentsProps={{\n tooltip: {\n sx: {\n fontSize: '0.875rem',\n padding: '0.5rem',\n fontFamily: 'Plus Jakarta Sans, sans-serif'\n },\n },\n }}\n >\n <span style={{ width: '50%' }}>\n <AudioWaveform amplitude={1}\n variant=\"speaker\"\n isActive={false}\n onClick={() => null}\n disabled={false} />\n </span>\n </Tooltip>\n <Tooltip\n title={'Coming soon'}\n placement=\"top\"\n arrow\n componentsProps={{\n tooltip: {\n sx: {\n fontSize: '0.875rem',\n padding: '0.5rem',\n fontFamily: 'Plus Jakarta Sans, sans-serif'\n },\n },\n }}\n >\n <span style={{ width: '50%' }}>\n <AudioWaveform amplitude={1}\n variant=\"microphone\"\n isActive={false}\n onClick={() => null}\n disabled={false} />\n </span>\n </Tooltip>\n </div>\n </div >\n )\n}\n\nexport default ChatComponent\n"],"names":["defaultStyles","uuidv4","scrollContainer","messages","setSuggestedWta","parsedSave","_a"],"mappings":";;;;;;;;;;;;;;;;;;AAgIA,MAAM,aAAa,MAAM;AACrB,EACI,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,KAAM,EAAA,MAAA;AAAA,MACN,MAAO,EAAA,MAAA;AAAA,MACP,OAAQ,EAAA,WAAA;AAAA,MACR,IAAK,EAAA,MAAA;AAAA,MACL,KAAM,EAAA,4BAAA;AAAA,MAEN,QAAA,kBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACG,CAAE,EAAA,kQAAA;AAAA,UACF,MAAO,EAAA,cAAA;AAAA,UACP,WAAY,EAAA,GAAA;AAAA,UACZ,aAAc,EAAA,OAAA;AAAA,UACd,cAAe,EAAA,OAAA;AAAA,SAAA;AAAA,OACnB;AAAA,KAAA;AAAA,GACJ,CAAA;AAER,CAAA,CAAA;AAEA,MAAM,UAAa,GAAA,CAAC,EAAE,gBAAA,EAAkB,aAA0E,KAAA;AAC9G,EACI,uBAAA,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAWA,MAAc,CAAA,UAAA;AAAA,MACzB,KAAO,EAAA;AAAA,QACH,KAAO,EAAA,MAAA;AAAA,QACP,OAAS,EAAA,cAAA;AAAA,QACT,OAAS,EAAA,MAAA;AAAA,QACT,UAAY,EAAA,QAAA;AAAA,QACZ,cAAgB,EAAA,eAAA;AAAA,QAChB,eAAiB,EAAA,MAAA;AAAA,QACjB,YAAc,EAAA,mBAAA;AAAA,QACd,SAAW,EAAA,+BAAA;AAAA,OACf;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,IAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACG,KAAO,EAAA;AAAA,cACH,QAAU,EAAA,SAAA;AAAA,cACV,UAAY,EAAA,GAAA;AAAA,cACZ,KAAO,EAAA,SAAA;AAAA,cACP,IAAM,EAAA,CAAA;AAAA,cACN,UAAY,EAAA,QAAA;AAAA,cACZ,QAAU,EAAA,QAAA;AAAA,cACV,YAAc,EAAA,UAAA;AAAA,cACd,UAAY,EAAA,QAAA;AAAA,aAChB;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,UAAK,KAAO,EAAA,EAAE,KAAO,EAAA,SAAA,IAAa,QAAkB,EAAA,oBAAA,EAAA,CAAA;AAAA,cAAO,OAAA;AAAA,aAAA;AAAA,WAAA;AAAA,SAEhE;AAAA,wBAEA,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACG,KAAO,EAAA,UAAA;AAAA,YACP,SAAU,EAAA,KAAA;AAAA,YACV,KAAK,EAAA,IAAA;AAAA,YACL,eAAiB,EAAA;AAAA,cACb,OAAS,EAAA;AAAA,gBACL,EAAI,EAAA;AAAA,kBACA,QAAU,EAAA,UAAA;AAAA,kBACV,OAAS,EAAA,QAAA;AAAA,kBACT,UAAY,EAAA,+BAAA;AAAA,iBAChB;AAAA,eACJ;AAAA,aACJ;AAAA,YAEA,QAAA,kBAAA,GAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACG,SAAS,MAAM;AACX,kBAAQ,OAAA,CAAA,GAAA,CAAI,aAAa,OAAO,CAAA,CAAA;AAChC,kBAAA,IAAI,aAA8B,gBAAA,EAAA,CAAA;AAAA,iBACtC;AAAA,gBACA,KAAO,EAAA;AAAA,kBACH,MAAQ,EAAA,QAAA;AAAA,kBACR,KAAO,EAAA,QAAA;AAAA,kBACP,UAAY,EAAA,MAAA;AAAA,kBACZ,WAAa,EAAA,QAAA;AAAA,kBACb,MAAA,EAAQ,CAAC,WAAA,GAAc,aAAgB,GAAA,SAAA;AAAA,kBACvC,eAAiB,EAAA,aAAA;AAAA,kBACjB,UAAY,EAAA,0CAAA;AAAA,kBACZ,OAAA,EAAS,CAAC,WAAA,GAAc,GAAM,GAAA,GAAA;AAAA,kBAC9B,aAAA,EAAe,CAAC,WAAA,GAAc,MAAS,GAAA,MAAA;AAAA;AAAA,iBAC3C;AAAA,gBACA,WAAA,EAAa,CAAC,CAAM,KAAA;AAChB,kBAAA,IAAI,WAAa,EAAA;AAEb,oBAAE,CAAA,CAAA,aAAA,CAAc,MAAM,OAAU,GAAA,GAAA,CAAA;AAAA,mBACpC;AAAA,iBACJ;AAAA,gBACA,UAAA,EAAY,CAAC,CAAM,KAAA;AACf,kBAAA,IAAI,WAAa,EAAA;AAEb,oBAAE,CAAA,CAAA,aAAA,CAAc,MAAM,OAAU,GAAA,KAAA,CAAA;AAAA,mBACpC;AAAA,iBACJ;AAAA,gBAEA,8BAAC,WAAY,EAAA,EAAA,CAAA;AAAA,eAAA;AAAA,aACjB;AAAA,WAAA;AAAA,SACJ;AAAA,OAAA;AAAA,KAAA;AAAA,GACJ,CAAA;AAER,CAAA,CAAA;AAQA,MAAM,oBAAuB,GAAA,OAAO,cAAqB,EAAA,OAAA,EAAiB,kBAA0B,iBAA8B,KAAA;AAC9H,EAAA,MAAM,EAAE,uBAAA,EAAyB,4BAA8B,EAAA,gCAAA,EAAqC,GAAA,cAAA,CAAA;AAEpG,EAAQ,OAAA,CAAA,GAAA,CAAI,gCAAgC,cAAc,CAAA,CAAA;AAG1D,EAAA,MAAM,sBAAyB,GAAA;AAAA,IAC3B,GAAI,gCAAgC,EAAC;AAAA,IACrC,GAAI,oCAAoC,EAAC;AAAA,GAC7C,CAAA;AAGA,EAAA,KAAA,MAAW,cAAc,sBAAwB,EAAA;AAC7C,IAAI,IAAA;AAEA,MAAA,MAAM,aAAgB,GAAA;AAAA,QAClB,MAAQ,EAAA,UAAA;AAAA,QACR,QAAU,EAAA;AAAA,UACN,QAAU,EAAA,cAAA;AAAA,UACV,WAAa,EAAA,oCAAA;AAAA,UACb,GAAK,EAAA,mBAAA;AAAA,UACL,aAAe,EAAA,IAAA;AAAA,UACf,cAAgB,EAAA,IAAA;AAAA,UAChB,gBAAkB,EAAA,IAAA;AAAA,UAClB,OAAS,EAAA;AAAA,YACL,EAAI,EAAA,UAAA;AAAA,YACJ,KAAO,EAAA;AAAA,cACH,IAAM,EAAA,MAAA;AAAA,cACN,OAAO,CAAC;AAAA,gBACJ,IAAM,EAAA,cAAA;AAAA,gBACN,KAAO,EAAA,oCAAA;AAAA,gBACP,MAAQ,EAAA,sCAAA;AAAA,eACX,CAAA;AAAA,aACL;AAAA,YACA,KAAO,EAAA;AAAA,cACH,EAAI,EAAA,IAAA;AAAA,cACJ,KAAO,EAAA,SAAA;AAAA,aACX;AAAA,YACA,OAAA,EAAS,gBAAgB,UAAU,CAAA,CAAA;AAAA,YACnC,QAAU,EAAA,EAAA;AAAA,YACV,YAAY,EAAC;AAAA,YACb,UAAY,EAAA,iBAAA,IAAI,IAAK,EAAA,EAAE,eAAe,OAAS,EAAA;AAAA,cAC3C,IAAM,EAAA,SAAA;AAAA,cACN,KAAO,EAAA,SAAA;AAAA,cACP,GAAK,EAAA,SAAA;AAAA,cACL,IAAM,EAAA,SAAA;AAAA,cACN,MAAQ,EAAA,SAAA;AAAA,cACR,MAAQ,EAAA,SAAA;AAAA,cACR,MAAQ,EAAA,IAAA;AAAA,aACX,CAAA;AAAA,YACD,gBAAkB,EAAA,EAAA;AAAA,YAClB,qBAAuB,EAAA,EAAA;AAAA,YACvB,sBAAwB,EAAA,EAAA;AAAA,YACxB,yBAA2B,EAAA,EAAA;AAAA,YAC3B,QAAU,EAAA,IAAA;AAAA,WACd;AAAA,SACJ;AAAA,OACJ,CAAA;AAEA,MAAQ,OAAA,CAAA,GAAA,CAAI,CAA8B,2BAAA,EAAA,UAAU,CAAE,CAAA,CAAA,CAAA;AAEtD,MAAM,MAAA,QAAA,GAAW,MAAM,yCAA0C,CAAA;AAAA,QAC7D,OAAA;AAAA,QACA,gBAAA;AAAA,QACA,iBAAA;AAAA,QACA,OAAS,EAAA,aAAA;AAAA,OACZ,CAAA,CAAA;AAED,MAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AACd,QAAA,OAAA,CAAQ,MAAM,CAA6B,0BAAA,EAAA,UAAU,KAAK,QAAS,CAAA,MAAA,EAAQ,SAAS,UAAU,CAAA,CAAA;AAAA,OAC3F,MAAA;AACH,QAAQ,OAAA,CAAA,GAAA,CAAI,CAAiC,8BAAA,EAAA,UAAU,CAAE,CAAA,CAAA,CAAA;AAAA,OAC7D;AAAA,aAEK,KAAO,EAAA;AACZ,MAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,wBAAA,EAA2B,UAAU,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA,CAAA;AAAA,KACjE;AAAA,GACJ;AAGA,EAAA,IAAI,uBAAyB,EAAA;AACzB,IAAA,OAAA,CAAQ,IAAI,mEAAmE,CAAA,CAAA;AAAA,GAEnF;AACJ,CAAA,CAAA;AAWA,MAAM,cAAiB,GAAA,CAAC,EAAE,KAAA,EAAO,UAAoB,KAAA;AACjD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAC9C,EAAM,MAAA,OAAA,GAAU,OAAwB,IAAI,CAAA,CAAA;AAE5C,EAAA,MAAM,eAAe,MAAM;AACvB,IAAA,MAAM,WAAW,CAAC,QAAA,CAAA;AAClB,IAAA,WAAA,CAAY,QAAQ,CAAA,CAAA;AACpB,IAAA,QAAA,CAAS,OAAO,QAAQ,CAAA,CAAA;AAAA,GAC5B,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,MAAM,KAAK,OAAQ,CAAA,OAAA,CAAA;AACnB,IAAA,IAAI,MAAM,QAAU,EAAA;AAChB,MAAA,EAAA,CAAG,MAAM,SAAY,GAAA,8BAAA,CAAA;AACrB,MAAA,EAAA,CAAG,MAAM,SAAY,GAAA,UAAA,CAAA;AACrB,MAAA,EAAA,CAAG,MAAM,eAAkB,GAAA,SAAA,CAAA;AAC3B,MAAA,EAAA,CAAG,MAAM,KAAQ,GAAA,SAAA,CAAA;AAAA,KACrB;AAAA,GACJ,EAAG,CAAC,QAAQ,CAAC,CAAA,CAAA;AAEb,EACI,uBAAA,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MAAK,GAAK,EAAA,OAAA;AAAA,MAAS,OAAS,EAAA,YAAA;AAAA,MACzB,KAAO,EAAA;AAAA,QACH,MAAQ,EAAA,SAAA;AAAA,QACR,eAAA,EAAiB,WAAW,SAAY,GAAA,SAAA;AAAA,QACxC,KAAA,EAAO,WAAW,SAAY,GAAA,WAAA;AAAA,QAC9B,UAAY,EAAA,sBAAA;AAAA,QACZ,SAAW,EAAA,8BAAA;AAAA;AAAA,QACX,SAAW,EAAA,UAAA;AAAA;AAAA,OACf;AAAA,MAEA,YAAA,EAAc,CAAC,CAAM,KAAA;AACjB,QAAA,IAAI,CAAC,QAAU,EAAA;AACX,UAAE,CAAA,CAAA,aAAA,CAAc,MAAM,SAAY,GAAA,oCAAA,CAAA;AAClC,UAAE,CAAA,CAAA,aAAA,CAAc,MAAM,SAAY,GAAA,aAAA,CAAA;AAClC,UAAE,CAAA,CAAA,aAAA,CAAc,MAAM,eAAkB,GAAA,SAAA,CAAA;AACxC,UAAE,CAAA,CAAA,aAAA,CAAc,MAAM,KAAQ,GAAA,SAAA,CAAA;AAAA,SAClC;AAAA,OACJ;AAAA,MACA,YAAA,EAAc,CAAC,CAAM,KAAA;AACjB,QAAA,IAAI,CAAC,QAAU,EAAA;AACX,UAAE,CAAA,CAAA,aAAA,CAAc,MAAM,SAAY,GAAA,8BAAA,CAAA;AAClC,UAAE,CAAA,CAAA,aAAA,CAAc,MAAM,SAAY,GAAA,UAAA,CAAA;AAClC,UAAE,CAAA,CAAA,aAAA,CAAc,MAAM,eAAkB,GAAA,SAAA,CAAA;AACxC,UAAE,CAAA,CAAA,aAAA,CAAc,MAAM,KAAQ,GAAA,WAAA,CAAA;AAAA,SAClC;AAAA,OACJ;AAAA,MACA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACG,KAAO,EAAA;AAAA,cACH,UAAY,EAAA,MAAA;AAAA,cACZ,QAAU,EAAA,MAAA;AAAA;AAAA,cAEV,UAAY,EAAA,eAAA;AAAA,cACZ,SAAA,EAAW,WAAW,YAAe,GAAA,UAAA;AAAA,cACrC,OAAA,EAAS,WAAW,CAAI,GAAA,GAAA;AAAA,cACxB,WAAa,EAAA,SAAA;AAAA,cACb,YAAc,EAAA,SAAA;AAAA,aAClB;AAAA,YAEC,qBAAW,QAAM,GAAA,GAAA;AAAA,WAAA;AAAA,SACtB;AAAA,wBACA,GAAA,CAAC,UAAM,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAAA,GACjB,CAAA;AAER,CAAA,CAAA;AAkIA,MAAM,gBAA8C,CAAC;AAAA,EAAE,oBAAA;AAAA,EAAsB,iBAAA;AAAA,EAAmB,gBAAA;AAAA,EAAkB,OAAA;AAAA,EAAS,6BAAA;AAAA,EAA+B,aAAA;AAAA,EAAe,gBAAA;AAAA,EAAkB,iBAAA;AAAA,EAAmB,oBAAA;AAAA,EAAsB,gBAAA;AAAA,EAAkB,mBAAA;AAAA,EAAqB,YAAA;AAAA,EAAc,iBAAA;AAAA,EAAmB,gBAAA;AAAA,EAAkB,yBAAA;AAAA,EAA2B,0BAAA;AAAA,EAA4B,wBAAA;AAAA,EAA0B,OAAA;AAAA,EAAS,mBAAA;AAAA,EAAqB,gBAAA;AAAA,EAAkB,aAAA;AAAA,EAAe,IAAA;AAAA,EAAM,0BAAA;AAAA,EAA4B,QAAW,GAAA,EAAA;AAAA,EAAI,oBAAA;AAAA,EAAsB,qBAAA;AAAA,EAAuB,wBAAA;AAAA,EAA0B,mBAAA;AAAA,EAAqB,sBAAA;AAAA,EAAwB,iBAAA;AAAA,EAC/mB,qBAAA;AAAA,EAAuB,gBAAA;AAAA,EAAkB,qBAAA;AAAA,EAAuB,wBAAA;AAAA,EAA0B,eAAA;AAAA,EAAiB,oBAAA;AAAA,EAAsB,uBAAA;AAAA,EAAyB,mBAAA;AAAA,EAAqB,iCAAA;AAAA,EAAmC,6BAAA;AAAA,EAEhN,iBAAA;AAAA,EACF,oBAAA;AAAA,EACA,iBAAA;AAAA,EACA,qBAAA;AAAA,EACA,wBAAA;AAAA,EACA,4BAAA;AAAA,EACA,gBAAA;AAAA,EACA,yBAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAEJ,CAAM,KAAA;AACF,EAAA,MAAM,aAAgB,GAAA,iBAAA,CAAA;AACtB,EAAM,MAAA,iBAAA,GAAoB,OAAO,CAAG,EAAA,aAAa,IAAI,gBAAgB,CAAA,CAAA,EAAIC,EAAO,EAAC,CAAE,CAAA,CAAA,CAAA;AACnF,EAAA,MAAM,gBAAmB,GAAA,MAAA,CAAO,CAAG,EAAAA,EAAA,EAAQ,CAAE,CAAA,CAAA,CAAA;AAC7C,EAAA,MAAM,GAAM,GAAA,OAAA,CAAA;AACZ,EAAM,MAAA,kBAAA,GAAqB,OAAuB,IAAI,CAAA,CAAA;AACtD,EAAM,MAAA,WAAA,GAAc,OAA4B,IAAI,CAAA,CAAA;AACpD,EAAA,MAAM,CAAC,WAAa,EAAA,cAAc,CAAI,GAAA,QAAA,CAAmB,EAAE,CAAA,CAAA;AAC3D,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAE5D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAwB,EAAE,CAAA,CAAA;AAC5D,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAS,EAAE,CAAA,CAAA;AACvD,EAAA,MAAM,CAAC,QAAU,EAAA,WAAW,CAAI,GAAA,QAAA,CAAgB,EAAE,CAAA,CAAA;AAClD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAC1D,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAClE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,IAAI,CAAA,CAAA;AACnD,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAI,SAAS,IAAI,CAAA,CAAA;AACjE,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAI,SAAS,EAAE,CAAA,CAAA;AAC/D,EAAA,MAAM,CAAC,qBAAA,EAAuB,wBAAwB,CAAA,GAAI,SAAS,EAAE,CAAA,CAAA;AACrE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AACpD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAChD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAChD,EAAA,MAAM,CAAC,YAAc,EAAA,eAAe,CAAI,GAAA,QAAA,CAAmB,EAAE,CAAA,CAAA;AAC7D,EAAA,MAAM,CAAC,kBAAoB,EAAA,qBAAqB,IAAI,QAAsB,iBAAA,IAAI,KAAK,CAAA,CAAA;AACnF,EAAA,MAAM,CAAC,iBAAmB,EAAA,oBAAoB,IAAI,QAAsB,iBAAA,IAAI,KAAK,CAAA,CAAA;AACjF,EAAM,MAAA,wBAAA,GAA2B,OAAe,EAAE,CAAA,CAAA;AAClD,EAAM,MAAA,6BAAA,GAAgC,OAAe,EAAE,CAAA,CAAA;AACvD,EAAA,MAAM,uBAA0B,GAAA,MAAA,iBAAwB,IAAA,GAAA,EAAK,CAAA,CAAA;AAC7D,EAAM,MAAA,YAAA,GAAe,QAAQ,MAAM;AAAE,IAAO,OAAA,CAAA,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAW,YAAW,EAAM,IAAA,WAAA,CAAA;AAAA,GAAe,EAAA,CAAC,SAAW,EAAA,WAAW,CAAC,CAAA,CAAA;AAEhH,EAAM,MAAA,kBAAA,GAAqB,QAAQ,MAAM,WAAA,IAAe,kBAAkB,CAAC,WAAA,EAAa,gBAAgB,CAAC,CAAA,CAAA;AACxG,EAAM,MAAA,oBAAA,GAAuB,OAAQ,CAAA,MAAM,YAAgB,IAAA,WAAA,IAAe,kBAAkB,CAAC,YAAA,EAAc,WAAa,EAAA,gBAAgB,CAAC,CAAA,CAAA;AAEzI,EAAM,MAAA,aAAA,GAAgB,OAAuB,IAAI,CAAA,CAAA;AACjD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,SAAS,MAAM,CAAA,CAAA;AAC7D,EAAA,MAAM,0BAA6B,GAAA,MAAA,iBAAwB,IAAA,GAAA,EAAK,CAAA,CAAA;AAEhE,EAAmC,QAAQ,MAAM;AA/jBrD,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAgkBQ,IAAA,OAAA,CAAA,CAAO,oDAAe,QAAf,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAyB,YAAW,EACtC,KAAA,EAAC,+CAAe,gBAAoB,CAAA,IAAA,CAAA,CAAA,EAAA,GAAA,aAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAe,YAAf,IAAwB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,EAAA,MAAW,QACvE,EAAC,aAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAe,4BACb,EAAe,GAAA,aAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAA,YAAA,KAAf,mBAA6B,IAAW,EAAA,MAAA,EAAA,CAAA,CAAA;AAAA,GACpD,EAAG,CAAC,aAAa,CAAC,EAAA;AAEjB,EAAA,MAAM,cAAiB,GAAA,SAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA,CAAA;AAQxB,EAAA,MAAM,CAAC,4BAAA,EAA8B,+BAA+B,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAqHtF,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,oBAAuB,GAAA,CAAA,sCAAA,EAAA,CAAyC,aAAe,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAA,QAAA,KAAY,EAAE,CAAA,GAAA,CAAA,CAAA;AAIjG,IAAA,iBAAA,CAAkB,oBAAoB,CAAA,CAAA;AAAA,GAC1C,EAAG,CAAC,aAAa,CAAC,CAAA,CAAA;AAsDlB,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,MAAM,gBAAgB,iBAAqB,IAAA,qBAAA,CAAA;AAE3C,IAAA,IAAI,aAAe,EAAA;AAEf,MAAA,MAAM,sBAAsB,aAAkB,KAAA,4DAAA,CAAA;AAG9C,MAAa,YAAA,CAAA,IAAI,aAAc,CAAA,SAAA,EAAW,EAAE,GAAA,EAAK,SAAS,CAAA,EAAG,KAAO,EAAA,aAAA,EAAe,mBAAmB,CAAA,CAAA;AAGtG,MAAA,oBAAA,CAAqB,EAAE,CAAA,CAAA;AACvB,MAAA,wBAAA,CAAyB,EAAE,CAAA,CAAA;AAAA,KAC/B;AAAA,GACD,EAAA,CAAC,iBAAmB,EAAA,qBAAqB,CAAC,CAAA,CAAA;AAE7C,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,MAAM,kBAAkB,kBAAmB,CAAA,OAAA,CAAA;AAE3C,IAAA,MAAM,eAAe,MAAM;AACvB,MAAA,MAAMC,mBAAkB,kBAAmB,CAAA,OAAA,CAAA;AAC3C,MAAA,IAAI,CAACA,gBAAiB,EAAA,OAAA;AAEtB,MAAA,MAAM,YAAYA,gBAAgB,CAAA,SAAA,CAAA;AAClC,MAAA,MAAM,eAAeA,gBAAgB,CAAA,YAAA,CAAA;AACrC,MAAA,MAAM,eAAeA,gBAAgB,CAAA,YAAA,CAAA;AAGrC,MAAM,MAAA,UAAA,GAAa,YAAgB,IAAA,SAAA,GAAY,YAAiB,CAAA,IAAA,EAAA,CAAA;AAChE,MAAA,YAAA,CAAa,CAAC,UAAU,CAAA,CAAA;AAAA,KAC5B,CAAA;AAEA,IAAA,IAAI,eAAiB,EAAA;AACjB,MAAgB,eAAA,CAAA,gBAAA,CAAiB,UAAU,YAAY,CAAA,CAAA;AACvD,MAAa,YAAA,EAAA,CAAA;AAAA,KACjB;AAEA,IAAA,OAAO,MAAM;AACT,MAAA,IAAI,eAAiB,EAAA;AACjB,QAAgB,eAAA,CAAA,mBAAA,CAAoB,UAAU,YAAY,CAAA,CAAA;AAAA,OAC9D;AAAA,KACJ,CAAA;AAAA,GACD,EAAA,CAAC,SAAW,EAAA,WAAA,EAAa,QAAQ,CAAC,CAAA,CAAA;AAyCrC,EAAA,MAAM,0BAA6B,GAAA,CAACC,SAAkB,EAAA,qBAAA,EAA4F,kBAAkD,eAAmD,KAAA;AACnP,IAAA,OAAO,QAAQ,MAAM;AAn1B7B,MAAA,IAAA,EAAA,CAAA;AAo1BY,MAAA,MAAM,UAAoB,EAAC,CAAA;AAO3B,MAAA,MAAM,OAAU,GAAA,0jBAAA,CAAA;AAKhB,MAAA,MAAM,iBAAoB,GAAA,6NAAA,CAAA;AAG1B,MAAA,MAAM,mBAAsB,GAAA,kLAAA,CAAA;AAI5B,MAAA,MAAM,iBAAoB,GAAA,+LAAA,CAAA;AAG1B,MAAA,MAAM,gBAAmB,GAAA,0DAAA,CAAA;AAWzB,MAAA,MAAM,eAAkB,GAAA,yBAAA,CAAA;AAExB,MAAA,MAAM,iBAAoB,GAAA,aAAA,CAAA;AAE1B,MAAM,MAAA,6BAAA,GAAA,CAAA,CAAgC,KAAAA,SAASA,CAAAA,SAAAA,CAAS,SAAS,CAAC,CAAA,KAA5B,IAA+B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,6BAAA,KAAiC,EAAC,CAAA;AAEvG,MAAA,KAAA,MAAW,OAAO,6BAA+B,EAAA;AAC7C,QAAM,MAAA,YAAA,GAAA,CAAe,2BAAK,YAAgB,KAAA,EAAA,CAAA;AAC1C,QAAA,OAAA,CAAQ,GAAI,CAAA,0BAAA,EAAqB,MAAO,CAAA,YAAY,CAAC,CAAA,CAAA;AAGrD,QAAA,IAAI,MAAO,CAAA,YAAY,CAAE,CAAA,QAAA,CAAS,iBAAiB,CAAG,EAAA;AAClD,UAAA,OAAA,CAAQ,IAAI,8CAAuC,CAAA,CAAA;AACnD,UAAA,OAAA,CAAQ,GAAI,CAAA,0BAAA,EAAqB,MAAO,CAAA,YAAY,CAAC,CAAA,CAAA;AAAA,SACzD;AAGA,QAAA,IAAI,MAAO,CAAA,YAAY,CAAE,CAAA,QAAA,CAAS,mBAAmB,CAAG,EAAA;AACpD,UAAA,OAAA,CAAQ,IAAI,8CAAuC,CAAA,CAAA;AACnD,UAAA,OAAA,CAAQ,GAAI,CAAA,0BAAA,EAAqB,MAAO,CAAA,YAAY,CAAC,CAAA,CAAA;AAAA,SACzD;AACA,QAAM,MAAA,KAAA,GAAQ,YAAa,CAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AACzC,QAAA,IAAI,KAAO,EAAA;AACN,UAAI,IAAA;AACA,YAAA,MAAM,YAAY,KAAM,CAAA,KAAA,CAAM,IAAI,KAAM,CAAA,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAG7C,YAAA,MAAM,iBAAiB,CAAC,GAAA,KAAgB,GAAO,IAAA,UAAA,CAAW,KAAK,GAAG,CAAA,CAAA;AAElE,YAAA,IAAI,UAAU,sBAA0B,IAAA,KAAA,CAAM,OAAQ,CAAA,SAAA,CAAU,sBAAsB,CAAG,EAAA;AACrF,cAAU,SAAA,CAAA,sBAAA,GAAyB,UAAU,sBAAuB,CAAA,MAAA;AAAA,gBAChE,CAAC,IAAc,KAAA,IAAA,CAAK,aAAiB,IAAA,cAAA,CAAe,KAAK,aAAa,CAAA;AAAA,eAC1E,CAAA;AAAA,aACJ;AAEA,YAAA,IAAI,UAAU,yBAA6B,IAAA,KAAA,CAAM,OAAQ,CAAA,SAAA,CAAU,yBAAyB,CAAG,EAAA;AAC3F,cAAU,SAAA,CAAA,yBAAA,GAA4B,UAAU,yBAA0B,CAAA,MAAA;AAAA,gBACtE,CAAC,IAAc,KAAA,IAAA,CAAK,iBAAqB,IAAA,cAAA,CAAe,KAAK,iBAAiB,CAAA;AAAA,eAClF,CAAA;AAAA,aACJ;AAEA,YAAA,OAAA,CAAQ,KAAK,SAAS,CAAA,CAAA;AAAA,mBACjB,CAAG,EAAA;AACR,YAAQ,OAAA,CAAA,KAAA,CAAM,yBAAyB,CAAC,CAAA,CAAA;AAAA,WAC5C;AAAA,SACJ;AACA,QAAM,MAAA,eAAA,GAAkB,YAAa,CAAA,KAAA,CAAM,iBAAiB,CAAA,CAAA;AAC5D,QAAA,OAAA,CAAQ,IAAI,4BAA4B,CAAA,CAAA;AACxC,QAAA,IAAI,eAAiB,EAAA;AACjB,UAAI,IAAA;AACA,YAAA,IAAI,iBAAoB,GAAA,wBAAA,CAAyB,eAAgB,CAAA,CAAC,KAAK,EAAE,CAAA,CAAA;AAEzE,YAAA,MAAM,aAAgB,GAAA,KAAA,CAAM,KAAM,CAAA,CAAA,CAAA,EAAI,iBAAiB,CAAG,CAAA,CAAA,CAAA,CAAA;AAE1D,YAAQ,OAAA,CAAA,GAAA,CAAI,6BAA6B,aAAa,CAAA,CAAA;AACtD,YAAA,wBAAA,CAAyB,aAAa,CAAA,CAAA;AACtC,YAAQ,OAAA,CAAA,GAAA,CAAI,mCAAmC,qBAAqB,CAAA,CAAA;AAAA,mBAC/D,CAAG,EAAA;AACR,YAAQ,OAAA,CAAA,KAAA,CAAM,oCAAoC,CAAC,CAAA,CAAA;AAAA,WACvD;AAAA,SACJ;AAEA,QAAI,IAAA;AACA,UAAI,IAAA,eAAA,GAAkB,wBAAyB,CAAA,YAAA,IAAgB,EAAE,CAAA,CAAA;AAGjE,UAAI,IAAA,UAAA,GAAa,KAAM,CAAA,KAAA,CAAM,eAAe,CAAA,CAAA;AAG5C,UAAI,IAAA,UAAA,IAAc,OAAO,UAAe,KAAA,QAAA,IACpC,iBAAiB,UACjB,IAAA,uBAAA,IAA2B,UAC3B,IAAA,mBAAA,IAAuB,UAAY,EAAA;AAEnC,YAAQ,OAAA,CAAA,GAAA,CAAI,sCAAsC,UAAU,CAAA,CAAA;AAC5D,YAAA,sBAAA,CAAuB,UAAU,CAAA,CAAA;AACjC,YAAQ,OAAA,CAAA,GAAA,CAAI,2BAA2B,mBAAmB,CAAA,CAAA;AAAA,WAEtD,MAAA;AAEJ,YAAM,MAAA,iBAAA,GAAoB,YAAa,CAAA,KAAA,CAAM,mBAAmB,CAAA,CAAA;AAChE,YAAA,IAAI,iBAAmB,EAAA;AACnB,cAAI,IAAA;AACA,gBAAA,OAAA,CAAQ,IAAI,2DAAoD,CAAA,CAAA;AAGhE,gBAAM,MAAA,YAAA,GAAe,kBAAkB,CAAC,CAAA,CAAA;AACxC,gBAAM,MAAA,cAAA,GAAiB,kBAAkB,CAAC,CAAA,CAAA;AAC1C,gBAAM,MAAA,UAAA,GAAa,kBAAkB,CAAC,CAAA,CAAA;AAGtC,gBAAA,MAAM,eAAkB,GAAA,CAAC,GACrB,KAAA,GAAA,CAAI,QAAQ,WAAa,EAAA,MAAM,CAC3B,CAAA,OAAA,CAAQ,YAAc,EAAA,OAAO,CAC7B,CAAA,OAAA,CAAQ,aAAa,MAAM,CAAA,CAAA;AAGnC,gBAAA,MAAM,iBAAoB,GAAA,CAAA;AAAA,mDACL,EAAA,eAAA,CAAgB,YAAY,CAAC,CAAA;AAAA,6DACnB,EAAA,eAAA,CAAgB,cAAc,CAAC,CAAA;AAAA,yDACnC,EAAA,eAAA,CAAgB,UAAU,CAAC,CAAA;AAAA,iCAAA,CAAA,CAAA;AAGtD,gBAAA,OAAA,CAAQ,IAAI,iDAA4C,EAAA,iBAAA,CAAkB,UAAU,CAAG,EAAA,GAAG,IAAI,KAAK,CAAA,CAAA;AAEnG,gBAAM,MAAA,eAAA,GAAkB,KAAM,CAAA,KAAA,CAAM,iBAAiB,CAAA,CAAA;AACrD,gBAAA,sBAAA,CAAuB,eAAe,CAAA,CAAA;AACtC,gBAAA,OAAA,CAAQ,IAAI,0DAAqD,CAAA,CAAA;AAAA,uBAE5D,UAAY,EAAA;AACjB,gBAAQ,OAAA,CAAA,KAAA,CAAM,+DAA0D,UAAU,CAAA,CAAA;AAClF,gBAAQ,OAAA,CAAA,GAAA,CAAI,+BAA0B,iBAAiB,CAAA,CAAA;AAAA,eAC3D;AAAA,aACJ;AAAA,WACJ;AAAA,iBACK,CAAG,EAAA;AAER,UAAA,OAAA,CAAQ,IAAI,gEAAgE,CAAA,CAAA;AAExE,UAAM,MAAA,iBAAA,GAAoB,YAAa,CAAA,KAAA,CAAM,mBAAmB,CAAA,CAAA;AAChE,UAAA,IAAI,iBAAmB,EAAA;AACnB,YAAI,IAAA;AAKA,cAAM,MAAA,YAAA,GAAe,kBAAkB,CAAC,CAAA,CAAA;AACxC,cAAM,MAAA,cAAA,GAAiB,kBAAkB,CAAC,CAAA,CAAA;AAC1C,cAAM,MAAA,UAAA,GAAa,kBAAkB,CAAC,CAAA,CAAA;AAItC,cAAA,MAAM,eAAkB,GAAA,CAAC,GACrB,KAAA,GAAA,CAAI,QAAQ,WAAa,EAAA,MAAM,CAC9B,CAAA,OAAA,CAAQ,YAAc,EAAA,OAAO,CAC7B,CAAA,OAAA,CAAQ,aAAa,MAAM,CAAA,CAAA;AAGhC,cAAA,MAAM,iBAAoB,GAAA,CAAA;AAAA,mDACL,EAAA,eAAA,CAAgB,YAAY,CAAC,CAAA;AAAA,6DACnB,EAAA,eAAA,CAAgB,cAAc,CAAC,CAAA;AAAA,yDACnC,EAAA,eAAA,CAAgB,UAAU,CAAC,CAAA;AAAA,iCAAA,CAAA,CAAA;AAGtD,cAAA,OAAA,CAAQ,IAAI,mDAAyC,EAAA,iBAAA,CAAkB,UAAU,CAAG,EAAA,GAAG,IAAI,KAAK,CAAA,CAAA;AAEhG,cAAM,MAAA,eAAA,GAAkB,KAAM,CAAA,KAAA,CAAM,iBAAiB,CAAA,CAAA;AACrD,cAAA,sBAAA,CAAuB,eAAe,CAAA,CAAA;AACtC,cAAQ,OAAA,CAAA,GAAA,CAAI,8CAAyC,eAAe,CAAA,CAAA;AAAA,qBAE/D,UAAY,EAAA;AACjB,cAAQ,OAAA,CAAA,KAAA,CAAM,wDAAwD,UAAU,CAAA,CAAA;AAChF,cAAA,OAAA,CAAQ,GAAI,CAAA,gBAAA,EAAkB,iBAAkB,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,aACtD;AAAA,WACJ;AAAA,SACR;AACA,QAAM,MAAA,eAAA,GAAkB,YAAa,CAAA,KAAA,CAAM,iBAAiB,CAAA,CAAA;AAC5D,QAAA,IAAI,eAAiB,EAAA;AACjB,UAAI,IAAA;AACA,YAAA,IAAI,iBAAoB,GAAA,wBAAA,CAAyB,eAAgB,CAAA,CAAC,KAAK,EAAE,CAAA,CAAA;AAEzE,YAAA,MAAM,aAAgB,GAAA,KAAA,CAAM,KAAM,CAAA,CAAA,CAAA,EAAI,iBAAiB,CAAG,CAAA,CAAA,CAAA,CAAA;AAE1D,YAAQ,OAAA,CAAA,GAAA,CAAI,yBAAyB,aAAa,CAAA,CAAA;AAGlD,YAAA,IAAI,gBAAkB,EAAA;AAClB,cAAA,gBAAA,CAAiB,aAAa,CAAA,CAAA;AAAA,aAClC;AAAA,mBACK,CAAG,EAAA;AACR,YAAQ,OAAA,CAAA,KAAA,CAAM,qCAAqC,CAAC,CAAA,CAAA;AAAA,WACxD;AAAA,SACJ;AAGA,QAAA,OAAA,CAAQ,IAAI,wDAAiD,CAAA,CAAA;AAE7D,QAAM,MAAA,cAAA,GAAiB,YAAa,CAAA,KAAA,CAAM,gBAAgB,CAAA,CAAA;AAC1D,QAAQ,OAAA,CAAA,GAAA,CAAI,4CAAqC,cAAc,CAAA,CAAA;AAEjE,QAAA,IAAI,cAAgB,EAAA;AACd,UAAA,OAAA,CAAQ,IAAI,qCAA8B,CAAA,CAAA;AAC1C,UAAI,IAAA;AAEA,YAAM,MAAA,gBAAA,GAAmB,eAAe,CAAC,CAAA,CAAA;AAGzC,YAAM,MAAA,UAAA,GAAa,yBAAyB,gBAAgB,CAAA,CAAA;AAG5D,YAAM,MAAA,YAAA,GAAe,KAAM,CAAA,KAAA,CAAM,UAAU,CAAA,CAAA;AAE3C,YAAQ,OAAA,CAAA,GAAA,CAAI,8CAAyC,YAAY,CAAA,CAAA;AAIjE,YAAA,IAAI,eAAiB,EAAA;AACjB,cAAA,eAAA,CAAgB,YAAY,CAAA,CAAA;AAAA,aAChC;AAAA,mBACK,CAAG,EAAA;AACR,YAAQ,OAAA,CAAA,KAAA,CAAM,oCAAoC,CAAC,CAAA,CAAA;AAAA,WACvD;AAAA,SACJ;AAEC,QAAM,MAAA,aAAA,GAAgB,YAAa,CAAA,KAAA,CAAM,eAAe,CAAA,CAAA;AAC7D,QAAA,IAAI,aAAiB,IAAA,YAAA,CAAa,QAAS,CAAA,cAAc,CAAG,EAAA;AACxD,UAAI,IAAA;AACA,YAAA,OAAA,CAAQ,GAAI,CAAA,wBAAA,EAA0B,aAAc,CAAA,CAAC,CAAC,CAAA,CAAA;AAGtD,YAAA,MAAM,UAAa,GAAA,wBAAA,CAAyB,aAAc,CAAA,CAAC,CAAC,CAAA,CAAA;AAE5D,YAAM,MAAA,WAAA,GAAc,KAAM,CAAA,KAAA,CAAM,UAAU,CAAA,CAAA;AAC1C,YAAQ,OAAA,CAAA,GAAA,CAAI,+CAA+C,WAAW,CAAA,CAAA;AAEtE,YAAA,IAAI,YAAY,qBAAuB,EAAA;AACnC,cAAA,iCAAA,CAAkC,YAAY,qBAAqB,CAAA,CAAA;AACnE,cAAQ,OAAA,CAAA,GAAA,CAAI,4CAA8C,EAAA,WAAA,CAAY,qBAAqB,CAAA,CAAA;AAAA,aAC/F;AACA,YAAA,IAAI,YAAY,iBAAmB,EAAA;AAC/B,cAAA,6BAAA,CAA8B,YAAY,iBAAiB,CAAA,CAAA;AAC3D,cAAQ,OAAA,CAAA,GAAA,CAAI,wCAA0C,EAAA,WAAA,CAAY,iBAAiB,CAAA,CAAA;AAAA,aACvF;AAAA,mBAEK,CAAG,EAAA;AACR,YAAQ,OAAA,CAAA,KAAA,CAAM,mCAAmC,CAAC,CAAA,CAAA;AAAA,WACtD;AAAA,SACJ;AAEA,QAAM,MAAA,SAAA,GAAY,YAAa,CAAA,KAAA,CAAM,iBAAiB,CAAA,CAAA;AAE1D,QAAA,IAAI,SAAW,EAAA;AACX,UAAI,IAAA;AACA,YAAA,MAAM,UAAa,GAAA,wBAAA,CAAyB,SAAU,CAAA,CAAC,CAAC,CAAA,CAAA;AACxD,YAAM,MAAA,YAAA,GAAe,KAAM,CAAA,KAAA,CAAM,UAAU,CAAA,CAAA;AAG3C,YAAI,IAAA,YAAA,CAAa,uBAA2B,IAAA,YAAA,CAAa,0BAA4B,EAAA;AAEjF,cAAM,MAAA,eAAA,GAAkB,+BAA+B,YAAY,CAAA,CAAA;AACnE,cAAA,qBAAA,CAAsB,eAAe,CAAA,CAAA;AAAA,aACzC;AAAA,mBACK,CAAG,EAAA;AACR,YAAQ,OAAA,CAAA,KAAA,CAAM,+CAA+C,CAAC,CAAA,CAAA;AAAA,WAClE;AAAA,SACJ;AAAA,OACJ;AAEI,MAAO,OAAA,OAAA,CAAA;AAAA,KACR,EAAA,CAACA,SAAU,EAAA,gBAAgB,CAAC,CAAA,CAAA;AAAA,GACnC,CAAA;AAyBI,EAAM,MAAA,sBAAA,GAAyB,YAAY,MAAM;AAC7C,IAAA,OAAA,CAAQ,IAAI,+DAAwD,CAAA,CAAA;AAGpE,IAAA,gBAAA,CAAiB,CAAC,IAAe,MAAA;AAAA,MAC7B,GAAG,IAAA;AAAA,MACH,QAAA,EAAU,eAAkB,GAAA,EAAA,GAAK,IAAK,CAAA,QAAA;AAAA,MACtC,YAAc,EAAA,EAAA;AAAA,MACd,OAAS,EAAA,EAAA;AAAA,MACT,WAAa,EAAA,EAAA;AAAA,MACb,cAAgB,EAAA,EAAA;AAAA,MAChB,gBAAkB,EAAA,KAAA;AAAA,MAClB,qBAAuB,EAAA,IAAA;AAAA,MACvB,YAAc,EAAA,KAAA;AAAA,KAChB,CAAA,CAAA,CAAA;AAGF,IAAI,IAAA,wBAAA,2BAAmD,IAAI,CAAA,CAAA;AAC3D,IAAI,IAAA,sBAAA,yBAA+C,IAAI,CAAA,CAAA;AACvD,IAAI,IAAA,4BAAA,+BAA2D,IAAI,CAAA,CAAA;AAGnE,IAAA,IAAI,qBAAyC,mBAAA,EAAA,CAAA;AAI7C,IAAA,mBAAA,IAAuB,oBAAoB,EAAE,CAAA,CAAA;AAC7C,IAAA,eAAA,CAAgB,EAAE,CAAA,CAAA;AAAA,GACtB,EAAG,CAAC,gBAAkB,EAAA,wBAAA,EAA0B,wBAAwB,mBAAqB,EAAA,wBAAA,EAA0B,mBAAqB,EAAA,eAAe,CAAC,CAAA,CAAA;AAG5J,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,CAAC,QAAA,IAAY,QAAS,CAAA,MAAA,KAAW,CAAG,EAAA,OAAA;AAExC,IAAA,MAAM,WAAc,GAAA,QAAA,CAAS,QAAS,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AAChD,IAAM,MAAA,oBAAA,GAAA,CAAuB,WAAa,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAA,6BAAA,KAAiC,EAAC,CAAA;AAG5E,IAAA,MAAM,iBAAoB,GAAA,+DAAA,CAAA;AAE1B,IAAqB,oBAAA,CAAA,OAAA,CAAQ,CAAC,GAAA,EAAU,KAAkB,KAAA;AACtD,MAAM,MAAA,YAAA,GAAA,CAAe,2BAAK,YAAgB,KAAA,EAAA,CAAA;AAI1C,MAAA,MAAM,WAAW,WAAY,CAAA,SAAA,IAAa,YAAY,EAAM,IAAA,CAAA,IAAA,EAAO,SAAS,MAAM,CAAA,CAAA,CAAA;AAClF,MAAA,MAAM,eAAkB,GAAA,CAAA,EAAG,QAAQ,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA,CAAA;AAGjD,MAAA,IAAI,0BAA2B,CAAA,OAAA,CAAQ,GAAI,CAAA,eAAe,CAAG,EAAA,OAAA;AAE7D,MAAM,MAAA,KAAA,GAAQ,YAAa,CAAA,KAAA,CAAM,iBAAiB,CAAA,CAAA;AAClD,MAAA,IAAI,KAAO,EAAA;AAEP,QAAA,MAAM,MAAS,GAAA,KAAA,CAAM,CAAC,CAAA,CAAE,aAAkB,KAAA,MAAA,CAAA;AAE1C,QAAA,IAAI,MAAQ,EAAA;AACR,UAAQ,OAAA,CAAA,GAAA,CAAI,8DAAyD,eAAe,CAAA,CAAA;AACpF,UAA2B,0BAAA,CAAA,OAAA,CAAQ,IAAI,eAAe,CAAA,CAAA;AACtD,UAAuB,sBAAA,EAAA,CAAA;AAAA,SAC3B;AAAA,OACJ;AAAA,KACH,CAAA,CAAA;AAAA,GACF,EAAA,CAAC,QAAU,EAAA,sBAAsB,CAAC,CAAA,CAAA;AAErC,EAAM,MAAA,wBAAA,GAA2B,WAAY,CAAA,OAAO,cAAwB,KAAA;AAExE,IAAM,MAAA,iBAAA,GAAoB,KAAK,SAAU,CAAA;AAAA,MACrC,4BAAA,EAA8B,cAAe,CAAA,4BAAA,IAAgC,EAAC;AAAA,MAC9E,gCAAA,EAAkC,cAAe,CAAA,gCAAA,IAAoC,EAAC;AAAA,MACtF,uBAAA,EAAyB,eAAe,uBAA2B,IAAA,KAAA;AAAA,KACtE,CAAA,CAAA;AAGD,IAAA,IAAI,uBAAwB,CAAA,OAAA,CAAQ,GAAI,CAAA,iBAAiB,CAAG,EAAA;AACxD,MAAQ,OAAA,CAAA,GAAA,CAAI,oEAAoE,iBAAiB,CAAA,CAAA;AACjG,MAAA,OAAA;AAAA,KACJ;AAGA,IAAwB,uBAAA,CAAA,OAAA,CAAQ,IAAI,iBAAiB,CAAA,CAAA;AACrD,IAAQ,OAAA,CAAA,GAAA,CAAI,oCAAoC,iBAAiB,CAAA,CAAA;AAEjE,IAAI,IAAA;AAEA,MAAA,MAAM,oBAAqB,CAAA,cAAA,EAAgB,OAAS,EAAA,gBAAA,EAAkB,aAAa,CAAA,CAAA;AAGnF,MAAA,MAAM,EAAE,4BAA+B,GAAA,IAAI,gCAAmC,GAAA,IAAO,GAAA,cAAA,CAAA;AAGrF,MAAA,MAAM,aAAgB,GAAA;AAAA,QAClB,GAAI,gCAAgC,EAAC;AAAA,QACrC,GAAI,oCAAoC,EAAC;AAAA,OAC7C,CAAA;AAGA,MAAA,qBAAA,CAAsB,CAAQ,IAAA,KAAA;AAC1B,QAAM,MAAA,MAAA,GAAS,IAAI,GAAA,CAAI,IAAI,CAAA,CAAA;AAC3B,QAAA,aAAA,CAAc,OAAQ,CAAA,CAAA,EAAA,KAAM,MAAO,CAAA,GAAA,CAAI,EAAE,CAAC,CAAA,CAAA;AAC1C,QAAA,OAAA,CAAQ,GAAI,CAAA,6CAAA,EAA+C,KAAM,CAAA,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA;AAC7E,QAAO,OAAA,MAAA,CAAA;AAAA,OACV,CAAA,CAAA;AAED,MAAQ,OAAA,CAAA,GAAA,CAAI,iDAAiD,aAAa,CAAA,CAAA;AAAA,aACrE,KAAO,EAAA;AAEZ,MAAwB,uBAAA,CAAA,OAAA,CAAQ,OAAO,iBAAiB,CAAA,CAAA;AACxD,MAAQ,OAAA,CAAA,KAAA,CAAM,sCAAsC,KAAK,CAAA,CAAA;AACzD,MAAM,MAAA,KAAA,CAAA;AAAA,KACV;AAAA,KACD,CAAC,OAAA,EAAS,gBAAkB,EAAA,aAAA,EAAe,qBAAqB,CAAC,CAAA,CAAA;AAGpE,EAAM,MAAA,uBAAA,GAA0B,WAAY,CAAA,OAAO,aAAuB,KAAA;AAEtE,IAAA,iBAAA,CAAkB,IAAI,CAAA,CAAA;AACtB,IAAQ,OAAA,CAAA,GAAA,CAAI,0DAAmD,aAAa,CAAA,CAAA;AAC5E,IAAI,IAAA;AACA,MAAA,MAAM,EAAE,eAAA,EAAiB,iBAAmB,EAAA,sBAAA,EAAwB,2BAA8B,GAAA,aAAA,CAAA;AAElG,MAAA,OAAA,CAAQ,IAAI,4CAAqC,CAAA,CAAA;AACjD,MAAQ,OAAA,CAAA,GAAA,CAAI,oBAAoB,eAAe,CAAA,CAAA;AAC/C,MAAQ,OAAA,CAAA,GAAA,CAAI,sBAAsB,iBAAiB,CAAA,CAAA;AACnD,MAAQ,OAAA,CAAA,GAAA,CAAI,2BAA2B,sBAAsB,CAAA,CAAA;AAC7D,MAAQ,OAAA,CAAA,GAAA,CAAI,8BAA8B,yBAAyB,CAAA,CAAA;AAEnE,MAAI,IAAA,CAAC,mBAAmB,CAAC,iBAAA,IAAqB,CAAC,KAAM,CAAA,OAAA,CAAQ,iBAAiB,CAAG,EAAA;AAC7E,QAAA,OAAA,CAAQ,IAAI,mCAAmC,CAAA,CAAA;AAC/C,QAAA,OAAA;AAAA,OACJ;AAGA,MAAQ,OAAA,CAAA,GAAA,CAAI,+DAA+D,aAAa,CAAA,CAAA;AACxF,MAAQ,OAAA,CAAA,GAAA,CAAI,wCAA0C,EAAA,aAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAe,WAAW,CAAA,CAAA;AAChF,MAAQ,OAAA,CAAA,GAAA,CAAI,2CAA6C,EAAA,aAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAe,cAAc,CAAA,CAAA;AAItF,MAAA,IAAI,sBAA0B,IAAA,KAAA,CAAM,OAAQ,CAAA,sBAAsB,CAAG,EAAA;AACjE,QAAQ,OAAA,CAAA,GAAA,CAAI,uEAAuE,sBAAsB,CAAA,CAAA;AAEzG,QAAM,MAAA,iBAAA,GAAoB,sBAAuB,CAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAC5D,QAAQ,OAAA,CAAA,GAAA,CAAI,6CAA6C,iBAAiB,CAAA,CAAA;AAG1E,QAAA,gBAAA,CAAiB,CAAC,IAAc,KAAA;AAC5B,UAAQ,OAAA,CAAA,GAAA,CAAI,6CAA6C,IAAI,CAAA,CAAA;AAC7D,UAAA,MAAM,QAAW,GAAA;AAAA,YACb,GAAG,IAAA;AAAA,YACH,WAAa,EAAA,iBAAA;AAAA,YACb,YAAc,EAAA,IAAA;AAAA;AAAA,YACd,SAAW,EAAA,sBAAA;AAAA;AAAA,WACf,CAAA;AACA,UAAQ,OAAA,CAAA,GAAA,CAAI,uCAAuC,QAAQ,CAAA,CAAA;AAC3D,UAAO,OAAA,QAAA,CAAA;AAAA,SACV,CAAA,CAAA;AAAA,OACL;AAEA,MAAA,IAAI,yBAA6B,IAAA,KAAA,CAAM,OAAQ,CAAA,yBAAyB,CAAG,EAAA;AACvE,QAAQ,OAAA,CAAA,GAAA,CAAI,0EAA0E,yBAAyB,CAAA,CAAA;AAE/G,QAAM,MAAA,oBAAA,GAAuB,yBAA0B,CAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAClE,QAAQ,OAAA,CAAA,GAAA,CAAI,gDAAgD,oBAAoB,CAAA,CAAA;AAEhF,QAAA,gBAAA,CAAiB,CAAC,IAAc,KAAA;AAC5B,UAAQ,OAAA,CAAA,GAAA,CAAI,sDAAsD,IAAI,CAAA,CAAA;AACtE,UAAA,MAAM,QAAW,GAAA;AAAA,YACb,GAAG,IAAA;AAAA,YACH,cAAgB,EAAA,oBAAA;AAAA,YAChB,YAAc,EAAA,IAAA;AAAA;AAAA,YACd,UAAY,EAAA,yBAAA;AAAA;AAAA,WAChB,CAAA;AACA,UAAQ,OAAA,CAAA,GAAA,CAAI,iDAAiD,QAAQ,CAAA,CAAA;AACrE,UAAO,OAAA,QAAA,CAAA;AAAA,SACV,CAAA,CAAA;AAAA,OACL;AAGA,MAAA,oBAAA,CAAqB,CAAQ,IAAA,KAAA;AACzB,QAAM,MAAA,MAAA,GAAS,IAAI,GAAA,CAAI,IAAI,CAAA,CAAA;AAC3B,QAAA,iBAAA,CAAkB,OAAQ,CAAA,CAAA,EAAA,KAAM,MAAO,CAAA,GAAA,CAAI,EAAE,CAAC,CAAA,CAAA;AAC9C,QAAA,OAAA,CAAQ,GAAI,CAAA,4CAAA,EAA8C,KAAM,CAAA,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA;AAC5E,QAAO,OAAA,MAAA,CAAA;AAAA,OACV,CAAA,CAAA;AAGD,MAAA,KAAA,MAAW,cAAc,iBAAmB,EAAA;AACxC,QAAQ,OAAA,CAAA,GAAA,CAAI,CAAkD,+CAAA,EAAA,UAAU,CAAE,CAAA,CAAA,CAAA;AAQzE,QAAA,MAAM,aAAgB,GAAA;AAAA,UACvB,MAAQ,EAAA,UAAA;AAAA,UACR,QAAU,EAAA;AAAA,YACN,QAAU,EAAA,cAAA;AAAA,YACV,WAAa,EAAA,oCAAA;AAAA,YACb,GAAK,EAAA,mBAAA;AAAA,YACL,aAAe,EAAA,IAAA;AAAA,YACf,cAAgB,EAAA,IAAA;AAAA,YAChB,gBAAkB,EAAA,IAAA;AAAA,YAClB,OAAS,EAAA;AAAA,cACL,EAAI,EAAA,UAAA;AAAA,cACJ,KAAO,EAAA;AAAA,gBACH,IAAM,EAAA,MAAA;AAAA,gBACN,OAAO,CAAC;AAAA,kBACJ,IAAM,EAAA,cAAA;AAAA,kBACN,KAAO,EAAA,oCAAA;AAAA,kBACP,MAAQ,EAAA,sCAAA;AAAA,iBACX,CAAA;AAAA,eACL;AAAA,cACA,KAAO,EAAA;AAAA,gBACH,EAAI,EAAA,IAAA;AAAA,gBACJ,KAAO,EAAA,SAAA;AAAA,eACX;AAAA,cACA,OAAA,EAAS,gBAAgB,UAAU,CAAA,CAAA;AAAA,cACnC,QAAU,EAAA,EAAA;AAAA,cACV,YAAY,EAAC;AAAA,cACb,UAAY,EAAA,iBAAA,IAAI,IAAK,EAAA,EAAE,eAAe,OAAS,EAAA;AAAA,gBAC3C,IAAM,EAAA,SAAA;AAAA,gBACN,KAAO,EAAA,SAAA;AAAA,gBACP,GAAK,EAAA,SAAA;AAAA,gBACL,IAAM,EAAA,SAAA;AAAA,gBACN,MAAQ,EAAA,SAAA;AAAA,gBACR,MAAQ,EAAA,SAAA;AAAA,gBACR,MAAQ,EAAA,IAAA;AAAA,eACX,CAAA;AAAA,cACD,gBAAkB,EAAA,EAAA;AAAA,cAClB,qBAAuB,EAAA,EAAA;AAAA,cACvB,sBAAwB,EAAA,EAAA;AAAA,cACxB,yBAA2B,EAAA,EAAA;AAAA,cAC3B,QAAU,EAAA,IAAA;AAAA,aACd;AAAA,WACJ;AAAA,SACJ,CAAA;AAEA,QAAM,MAAA,QAAA,GAAW,MAAM,yCAA0C,CAAA;AAAA,UACjE,OAAA;AAAA,UACA,gBAAA;AAAA,UACA,iBAAmB,EAAA,aAAA;AAAA,UACnB,OAAS,EAAA,aAAA;AAAA,SACZ,CAAA,CAAA;AAED,QAAG,IAAA,CAAC,SAAS,EAAG,EAAA;AACZ,UAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,oCAAA,EAAuC,UAAU,CAAA,CAAA,CAAA,EAAK,SAAS,UAAU,CAAA,CAAA;AAAA,SACpF,MAAA;AAEH,UAAQ,OAAA,CAAA,GAAA,CAAI,CAA2C,wCAAA,EAAA,UAAU,CAAE,CAAA,CAAA,CAAA;AAAA,SACvE;AAAA,OAEI;AAAA,aACK,KAAO,EAAA;AACZ,MAAQ,OAAA,CAAA,KAAA,CAAM,qCAAqC,KAAK,CAAA,CAAA;AAAA,KAC1D,SAAA;AACE,MAAA,OAAA,CAAQ,IAAI,cAAc,CAAA,CAAA;AAC1B,MAAA,iBAAA,CAAkB,KAAK,CAAA,CAAA;AAAA,KAC3B;AAAA,KAED,CAAC,gBAAA,EAAkB,oBAAsB,EAAA,gBAAA,EAAkB,iBAAiB,CAAC,CAAA,CAAA;AAEhF,EAAA,MAAM,iBAAoB,GAAA,0BAAA,CAA2B,QAAU,EAAA,4BAAA,EAA6B,0BAA0B,uBAAwB,CAAA,CAAA;AAE9I,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,MAAM,iBAAoB,GAAA,CAAA,iBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAA,CAAoB,iBAAmB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAA,MAAA,IAAS,CAAM,CAAA,KAAA,IAAA,CAAA;AAChF,IAAA,IAAI,iBAAmB,EAAA;AACnB,MAAA,6BAAA,CAA8B,iBAAiB,CAAA,CAAA;AAC/C,MAAQ,OAAA,CAAA,GAAA,CAAI,uBAAuB,iBAAiB,CAAA,CAAA;AAAA,KACxD;AAAA,GAEJ,EAAG,CAAC,iBAAiB,CAAC,CAAA,CAAA;AAKtB,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,CAAC,mBAAA,IAAuB,kBAAmB,CAAA,IAAA,KAAS,CAAG,EAAA,OAAA;AAG3D,IAAA,MAAM,yBAAyB,mBAAoB,CAAA,qBAAA,IAC/C,OAAO,MAAO,CAAA,mBAAA,CAAoB,qBAAqB,CAAE,CAAA,IAAA;AAAA,MAAK,CAAC,QAAA,KAC3D,kBAAmB,CAAA,GAAA,CAAI,SAAS,EAAE,CAAA;AAAA,KACtC,CAAA;AAEJ,IAAA,MAAM,qBAAqB,mBAAoB,CAAA,iBAAA,IAC3C,OAAO,MAAO,CAAA,mBAAA,CAAoB,iBAAiB,CAAE,CAAA,IAAA;AAAA,MAAK,CAAC,QAAA,KACvD,kBAAmB,CAAA,GAAA,CAAI,SAAS,EAAE,CAAA;AAAA,KACtC,CAAA;AAGJ,IAAI,IAAA,CAAC,sBAA0B,IAAA,CAAC,kBAAoB,EAAA,OAAA;AAGpD,IAAM,MAAA,iBAAA,GAAoB,KAAK,SAAU,CAAA;AAAA,MACrC,UAAY,EAAA,KAAA,CAAM,IAAK,CAAA,kBAAkB,EAAE,IAAK,EAAA;AAAA,KACnD,CAAA,CAAA;AAGD,IAAI,IAAA,wBAAA,CAAyB,YAAY,iBAAmB,EAAA;AACxD,MAAA,OAAA;AAAA,KACJ;AAEA,IAAM,MAAA,gBAAA,GAAmB,EAAE,GAAG,mBAAoB,EAAA,CAAA;AAGlD,IAAA,IAAI,iBAAiB,qBAAuB,EAAA;AACxC,MAAA,MAAM,oBAAuB,GAAA,MAAA,CAAO,MAAO,CAAA,gBAAA,CAAiB,qBAAqB,CAC5E,CAAA,MAAA,CAAO,CAAC,QAAA,KAAkB,CAAC,kBAAA,CAAmB,GAAI,CAAA,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA;AAEnE,MAAA,OAAA,CAAQ,IAAI,kDAAoD,EAAA;AAAA,QAC5D,YAAc,EAAA,MAAA,CAAO,IAAK,CAAA,gBAAA,CAAiB,qBAAqB,CAAA;AAAA,QAChE,gBAAgB,oBAAqB,CAAA,MAAA;AAAA,QACrC,kBAAoB,EAAA,oBAAA,CAAqB,GAAI,CAAA,CAAC,CAAY,MAAA,EAAE,EAAI,EAAA,CAAA,CAAE,EAAI,EAAA,OAAA,EAAS,CAAE,CAAA,QAAA,CAAS,SAAU,CAAA,CAAA;AAAA,OACvG,CAAA,CAAA;AAED,MAAA,MAAM,qBAA0B,EAAC,CAAA;AACjC,MAAqB,oBAAA,CAAA,OAAA,CAAQ,CAAC,QAAA,EAAe,KAAkB,KAAA;AAC3D,QAAA,MAAM,GAAM,GAAA,MAAA,CAAO,YAAa,CAAA,EAAA,GAAK,KAAK,CAAA,CAAA;AAC1C,QAAA,kBAAA,CAAmB,GAAG,CAAI,GAAA,QAAA,CAAA;AAC1B,QAAQ,OAAA,CAAA,GAAA,CAAI,wCAAwC,KAAK,CAAA,WAAA,EAAc,GAAG,CAAM,EAAA,CAAA,EAAA,QAAA,CAAS,SAAS,OAAO,CAAA,CAAA;AAAA,OAC5G,CAAA,CAAA;AACD,MAAA,gBAAA,CAAiB,qBAAwB,GAAA,kBAAA,CAAA;AACzC,MAAA,OAAA,CAAQ,GAAI,CAAA,mDAAA,EAAqD,MAAO,CAAA,IAAA,CAAK,kBAAkB,CAAC,CAAA,CAAA;AAAA,KACpG;AAGA,IAAA,IAAI,iBAAiB,iBAAmB,EAAA;AACpC,MAAA,MAAM,gBAAmB,GAAA,MAAA,CAAO,MAAO,CAAA,gBAAA,CAAiB,iBAAiB,CACpE,CAAA,MAAA,CAAO,CAAC,QAAA,KAAkB,CAAC,kBAAA,CAAmB,GAAI,CAAA,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA;AAEnE,MAAA,OAAA,CAAQ,IAAI,8CAAgD,EAAA;AAAA,QACxD,YAAc,EAAA,MAAA,CAAO,IAAK,CAAA,gBAAA,CAAiB,iBAAiB,CAAA;AAAA,QAC5D,gBAAgB,gBAAiB,CAAA,MAAA;AAAA,QACjC,kBAAoB,EAAA,gBAAA,CAAiB,GAAI,CAAA,CAAC,CAAY,MAAA,EAAE,EAAI,EAAA,CAAA,CAAE,EAAI,EAAA,OAAA,EAAS,CAAE,CAAA,QAAA,CAAS,SAAU,CAAA,CAAA;AAAA,OACnG,CAAA,CAAA;AAED,MAAA,MAAM,iBAAsB,EAAC,CAAA;AAC7B,MAAiB,gBAAA,CAAA,OAAA,CAAQ,CAAC,QAAA,EAAe,KAAkB,KAAA;AACvD,QAAA,MAAM,GAAM,GAAA,MAAA,CAAO,YAAa,CAAA,EAAA,GAAK,KAAK,CAAA,CAAA;AAC1C,QAAA,cAAA,CAAe,GAAG,CAAI,GAAA,QAAA,CAAA;AACtB,QAAQ,OAAA,CAAA,GAAA,CAAI,oCAAoC,KAAK,CAAA,WAAA,EAAc,GAAG,CAAM,EAAA,CAAA,EAAA,QAAA,CAAS,SAAS,OAAO,CAAA,CAAA;AAAA,OACxG,CAAA,CAAA;AACD,MAAA,gBAAA,CAAiB,iBAAoB,GAAA,cAAA,CAAA;AACrC,MAAA,OAAA,CAAQ,GAAI,CAAA,+CAAA,EAAiD,MAAO,CAAA,IAAA,CAAK,cAAc,CAAC,CAAA,CAAA;AAAA,KAC5F;AAGA,IAAA,wBAAA,CAAyB,OAAU,GAAA,iBAAA,CAAA;AAEnC,IAAQ,OAAA,CAAA,GAAA,CAAI,gDAAgD,gBAAgB,CAAA,CAAA;AAC5E,IAAA,sBAAA,CAAuB,gBAAgB,CAAA,CAAA;AAAA,GACxC,EAAA,CAAC,kBAAoB,EAAA,mBAAA,EAAqB,sBAAsB,CAAC,CAAA,CAAA;AAGpE,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,CAAC,mBAAA,IAAuB,iBAAkB,CAAA,IAAA,KAAS,CAAG,EAAA,OAAA;AAG1D,IAAA,MAAM,qBAAqB,mBAAoB,CAAA,iBAAA,IAC3C,OAAO,MAAO,CAAA,mBAAA,CAAoB,iBAAiB,CAAE,CAAA,IAAA;AAAA,MAAK,CAAC,QAAA,KACvD,iBAAkB,CAAA,GAAA,CAAI,SAAS,EAAE,CAAA;AAAA,KACrC,CAAA;AAGJ,IAAA,IAAI,CAAC,kBAAoB,EAAA,OAAA;AAGzB,IAAM,MAAA,sBAAA,GAAyB,KAAK,SAAU,CAAA;AAAA,MAC1C,SAAW,EAAA,KAAA,CAAM,IAAK,CAAA,iBAAiB,EAAE,IAAK,EAAA;AAAA,KACjD,CAAA,CAAA;AAGD,IAAI,IAAA,6BAAA,CAA8B,YAAY,sBAAwB,EAAA;AAClE,MAAA,OAAA;AAAA,KACJ;AAEA,IAAM,MAAA,gBAAA,GAAmB,EAAE,GAAG,mBAAoB,EAAA,CAAA;AAGlD,IAAA,IAAI,iBAAiB,iBAAmB,EAAA;AACpC,MAAA,MAAM,gBAAmB,GAAA,MAAA,CAAO,MAAO,CAAA,gBAAA,CAAiB,iBAAiB,CACpE,CAAA,MAAA,CAAO,CAAC,QAAA,KAAkB,CAAC,iBAAA,CAAkB,GAAI,CAAA,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA;AAElE,MAAA,OAAA,CAAQ,IAAI,0DAA4D,EAAA;AAAA,QACpE,YAAc,EAAA,MAAA,CAAO,IAAK,CAAA,gBAAA,CAAiB,iBAAiB,CAAA;AAAA,QAC5D,gBAAgB,gBAAiB,CAAA,MAAA;AAAA,QACjC,kBAAoB,EAAA,gBAAA,CAAiB,GAAI,CAAA,CAAC,CAAY,MAAA,EAAE,EAAI,EAAA,CAAA,CAAE,EAAI,EAAA,OAAA,EAAS,CAAE,CAAA,QAAA,CAAS,SAAU,CAAA,CAAA;AAAA,OACnG,CAAA,CAAA;AAED,MAAA,MAAM,iBAAsB,EAAC,CAAA;AAC7B,MAAiB,gBAAA,CAAA,OAAA,CAAQ,CAAC,QAAA,EAAe,KAAkB,KAAA;AACvD,QAAA,MAAM,GAAM,GAAA,MAAA,CAAO,YAAa,CAAA,EAAA,GAAK,KAAK,CAAA,CAAA;AAC1C,QAAA,cAAA,CAAe,GAAG,CAAI,GAAA,QAAA,CAAA;AACtB,QAAQ,OAAA,CAAA,GAAA,CAAI,oCAAoC,KAAK,CAAA,WAAA,EAAc,GAAG,CAAM,EAAA,CAAA,EAAA,QAAA,CAAS,SAAS,OAAO,CAAA,CAAA;AAAA,OACxG,CAAA,CAAA;AACD,MAAA,gBAAA,CAAiB,iBAAoB,GAAA,cAAA,CAAA;AACrC,MAAA,OAAA,CAAQ,GAAI,CAAA,2DAAA,EAA6D,MAAO,CAAA,IAAA,CAAK,cAAc,CAAC,CAAA,CAAA;AAAA,KACxG;AAGA,IAAA,6BAAA,CAA8B,OAAU,GAAA,sBAAA,CAAA;AAExC,IAAQ,OAAA,CAAA,GAAA,CAAI,6CAA6C,gBAAgB,CAAA,CAAA;AACzE,IAAA,sBAAA,CAAuB,gBAAgB,CAAA,CAAA;AAAA,GACxC,EAAA,CAAC,iBAAmB,EAAA,mBAAA,EAAqB,sBAAsB,CAAC,CAAA,CAAA;AAEnE,EAAM,MAAA,2BAAA,GAA8B,CAACA,SAAoB,KAAA;AACrD,IAAA,OAAO,QAAQ,MAAM;AAliD7B,MAAA,IAAA,EAAA,CAAA;AAmiDY,MAAA,MAAM,UAAoB,EAAC,CAAA;AAE3B,MAAA,MAAM,OAAU,GAAA,iDAAA,CAAA;AAEhB,MAAM,MAAA,6BAAA,GAAA,CAAA,CAAgC,KAAAA,SAASA,CAAAA,SAAAA,CAAS,SAAS,CAAC,CAAA,KAA5B,IAA+B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,6BAAA,KAAiC,EAAC,CAAA;AAEvG,MAAA,KAAA,MAAW,OAAO,6BAA+B,EAAA;AAC7C,QAAM,MAAA,YAAA,GAAA,CAAe,2BAAK,YAAgB,KAAA,EAAA,CAAA;AAE1C,QAAI,IAAA,KAAA,CAAA;AACJ,QAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA,CAAQ,IAAK,CAAA,YAAY,OAAO,IAAM,EAAA;AAClD,UAAI,IAAA;AACA,YAAM,MAAA,GAAA,GAAM,MAAM,CAAC,CAAA,CAAA;AACnB,YAAI,IAAA,KAAA,GAAQ,MAAM,CAAC,CAAA,CAAA;AACnB,YAAA,IAAK,KAAM,CAAA,UAAA,CAAW,GAAG,CAAA,IAAK,MAAM,QAAS,CAAA,GAAG,CAAO,IAAA,KAAA,CAAM,WAAW,GAAG,CAAA,IAAK,KAAM,CAAA,QAAA,CAAS,GAAG,CAAI,EAAA;AAElG,cAAA,KAAA,GAAQ,KAAM,CAAA,SAAA,CAAU,CAAG,EAAA,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA;AAAA,aAC/C;AAEA,YAAA,MAAM,SAAY,GAAA,EAAE,CAAC,GAAG,GAAG,KAAM,EAAA,CAAA;AACjC,YAAA,OAAA,CAAQ,KAAK,SAAS,CAAA,CAAA;AAAA,mBAEjB,CAAG,EAAA;AACR,YAAQ,OAAA,CAAA,KAAA,CAAM,mDAAmD,CAAC,CAAA,CAAA;AAAA,WACtE;AAAA,SACJ;AAAA,OACJ;AAEA,MAAO,OAAA,OAAA,CAAA;AAAA,KACX,EAAG,CAACA,SAAQ,CAAC,CAAA,CAAA;AAAA,GACjB,CAAA;AAEA,EAAM,MAAA,kBAAA,GAAqB,4BAA4B,QAAQ,CAAA,CAAA;AAEhE,EAAA,SAAA,CAAU,MAAM;AACX,IAAA,MAAM,eAAuB,GAAA,kBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,kBAAA,CAAoB,IAAK,CAAA,CAAC,SAAc,cAAkB,IAAA,IAAA,CAAA,CAAA;AAEvF,IAAA,IAAI,eAAiB,EAAA;AACjB,MAAA,wBAAA,CAAyB,gBAAgB,YAAY,CAAA,CAAA;AAAA,KACzD;AAEA,IAAA,MAAM,UAAiB,GAAA,kBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,kBAAA,CAAoB,IAAK,CAAA,CAAC,SAAc,SAAa,IAAA,IAAA,CAAA,CAAA;AAC3E,IAAA,IAAI,UAAY,EAAA;AACb,MAAA,mBAAA,CAAoB,WAAW,OAAO,CAAA,CAAA;AAAA,KAC1C;AAEA,IAAA,MAAM,WAAmB,GAAA,kBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,kBAAA,CAAoB,IAAK,CAAA,CAAC,SAAc,UAAc,IAAA,IAAA,CAAA,CAAA;AAC/E,IAAA,IAAI,WAAa,EAAA;AACb,MAAQ,OAAA,CAAA,GAAA,CAAI,4BAAyB,EAAA,WAAA,CAAY,QAAQ,CAAA,CAAA;AACzD,MAAA,gBAAA,CAAiB,CAAC,IAAc,KAAA;AAC5B,QAAA,IAAI,IAAK,CAAA,QAAA,KAAa,WAAY,CAAA,QAAA,EAAiB,OAAA,IAAA,CAAA;AAEnD,QAAO,OAAA;AAAA,UACH,GAAG,IAAA;AAAA,UACH,UAAU,WAAY,CAAA,QAAA;AAAA,UACtB,wBAA0B,EAAA,IAAA;AAAA,SAC9B,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KACL;AAAA,GAEJ,EAAG,CAAC,kBAAkB,CAAC,CAAA,CAAA;AAGvB,EAAM,MAAA,uBAAA,GAA0B,CAC5BA,SAAAA,EACAC,gBACC,KAAA;AACD,IAAA,SAAA,CAAU,MAAM;AAtmDxB,MAAA,IAAA,EAAA,CAAA;AAumDY,MAAM,MAAA,6BAAA,GAAA,CAAA,CACF,KAAAD,SAASA,CAAAA,SAAAA,CAAS,SAAS,CAAC,CAAA,KAA5B,IAA+B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,6BAAA,KAAiC,EAAC,CAAA;AAErE,MAAA,KAAA,MAAW,OAAO,6BAA+B,EAAA;AAC7C,QAAM,MAAA,YAAA,GAAA,CAAe,2BAAK,YAAgB,KAAA,EAAA,CAAA;AAC1C,QAAA,MAAM,KAAQ,GAAA,0BAAA,CAAA;AACd,QAAA,MAAM,UAAoB,EAAC,CAAA;AAC3B,QAAI,IAAA,KAAA,CAAA;AACJ,QAAA,OAAA,CAAQ,KAAQ,GAAA,KAAA,CAAM,IAAK,CAAA,YAAY,OAAO,IAAM,EAAA;AAChD,UAAQ,OAAA,CAAA,GAAA,CAAI,wBAAwB,KAAK,CAAA,CAAA;AACzC,UAAQ,OAAA,CAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,SACzB;AAEA,QAAA,IAAI,QAAQ,MAAQ,EAAA;AAChB,UAAAC,iBAAgB,OAAO,CAAA,CAAA;AAAA,SAC3B;AAAA,OACJ;AAAA,KACD,EAAA,CAACD,SAAUC,EAAAA,gBAAe,CAAC,CAAA,CAAA;AAAA,GAClC,CAAA;AAEA,EAAA,uBAAA,CAAwB,UAAU,eAAe,CAAA,CAAA;AAEjD,EAAM,MAAA,sBAAA,GAAyB,CAACD,SAAoB,KAAA;AAChD,IAAA,OAAO,QAAQ,MAAM;AA9nD7B,MAAA,IAAA,EAAA,CAAA;AA+nDY,MAAA,MAAM,UAAoB,EAAC,CAAA;AAE3B,MAAA,MAAM,OAAU,GAAA,+CAAA,CAAA;AAEhB,MAAM,MAAA,6BAAA,GAAA,CAAA,CAAgC,KAAAA,SAASA,CAAAA,SAAAA,CAAS,SAAS,CAAC,CAAA,KAA5B,IAA+B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,6BAAA,KAAiC,EAAC,CAAA;AAEvG,MAAA,KAAA,MAAW,OAAO,6BAA+B,EAAA;AAC7C,QAAM,MAAA,YAAA,GAAA,CAAe,2BAAK,YAAgB,KAAA,EAAA,CAAA;AAC1C,QAAM,MAAA,KAAA,GAAkB,YAAa,CAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAClD,QAAA,IAAI,KAAO,EAAA;AACP,UAAA,OAAA,CAAQ,GAAI,CAAA,SAAA,EAAW,KAAM,CAAA,CAAC,CAAC,CAAA,CAAA;AAC/B,UAAI,IAAA;AACA,YAAA,MAAM,SAAY,GAAA,KAAA,CAAM,KAAM,CAAA,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACtC,YAAA,OAAA,CAAQ,KAAK,SAAS,CAAA,CAAA;AAAA,mBACjB,CAAG,EAAA;AACR,YAAQ,OAAA,CAAA,KAAA,CAAM,yBAAyB,CAAC,CAAA,CAAA;AAAA,WAC5C;AAAA,SACJ;AAAA,OACJ;AAEA,MAAO,OAAA,OAAA,CAAA;AAAA,KACX,EAAG,CAACA,SAAQ,CAAC,CAAA,CAAA;AAAA,GACjB,CAAA;AAEA,EAAM,MAAA,YAAA,GAAe,uBAAuB,QAAQ,CAAA,CAAA;AAEpD,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,MAAM,kBAA0B,GAAA,CAAA,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAA,CAAe,YAAc,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAA,MAAA,IAAS,CAAM,CAAA,KAAA,IAAA,CAAA;AAC5E,IAAA,IAAI,kBAAoB,EAAA;AACpB,MAAQ,OAAA,CAAA,GAAA,CAAI,wBAAwB,kBAAkB,CAAA,CAAA;AACtD,MAAA,mBAAA,CAAoB,yDAAoB,OAAO,CAAA,CAAA;AAAA,KACnD;AAAA,GAEJ,EAAG,CAAC,YAAY,CAAC,CAAA,CAAA;AAmCjB,EAAM,MAAA,mBAAA,GAAsB,CAACA,SAAoB,KAAA;AAC7C,IAAA,MAAM,CAACE,WAAY,EAAA,aAAa,CAAI,GAAA,QAAA,CAAmB,EAAE,CAAA,CAAA;AAEzD,IAAA,SAAA,CAAU,MAAM;AAtsDxB,MAAA,IAAA,EAAA,CAAA;AAusDY,MAAA,MAAM,UAAoB,EAAC,CAAA;AAC3B,MAAA,MAAM,OAAU,GAAA,sDAAA,CAAA;AAChB,MAAM,MAAA,6BAAA,GAAA,CAAA,CAAgC,KAAAF,SAASA,CAAAA,SAAAA,CAAS,SAAS,CAAC,CAAA,KAA5B,IAA+B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,6BAAA,KAAiC,EAAC,CAAA;AAEvG,MAAA,KAAA,MAAW,OAAO,6BAA+B,EAAA;AAC7C,QAAM,MAAA,YAAA,GAAA,CAAe,2BAAK,YAAgB,KAAA,EAAA,CAAA;AAC1C,QAAM,MAAA,KAAA,GAAQ,YAAa,CAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAExC,QAAA,IAAI,KAAO,EAAA;AACP,UAAI,IAAA;AACA,YAAA,MAAM,KAAQ,GAAA,KAAA,CAAM,CAAC,CAAA,CAChB,QAAQ,UAAY,EAAA,MAAM,CAC1B,CAAA,OAAA,CAAQ,WAAa,EAAA,OAAO,CAC5B,CAAA,OAAA,CAAQ,MAAM,GAAG,CAAA,CAAA;AAEtB,YAAQ,OAAA,CAAA,GAAA,CAAI,cAAc,KAAK,CAAA,CAAA;AAE/B,YAAM,MAAA,SAAA,GAAY,KAAM,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AACnC,YAAI,IAAA,SAAA,CAAU,SAAS,IAAM,EAAA;AACzB,cAAA,oBAAA,CAAqB,IAAI,CAAA,CAAA;AAAA,aAC7B;AACA,YAAA,OAAA,CAAQ,KAAK,SAAS,CAAA,CAAA;AAAA,mBACjB,CAAG,EAAA;AACR,YAAQ,OAAA,CAAA,KAAA,CAAM,yBAAyB,CAAC,CAAA,CAAA;AAAA,WAC5C;AAAA,SACJ;AAAA,OACJ;AAEA,MAAA,aAAA,CAAc,OAAO,CAAA,CAAA;AAAA,KACzB,EAAG,CAACA,SAAQ,CAAC,CAAA,CAAA;AAEb,IAAOE,OAAAA,WAAAA,CAAAA;AAAA,GACX,CAAA;AAEA,EAAM,MAAA,UAAA,GAAa,oBAAoB,QAAQ,CAAA,CAAA;AAmB/C,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,MAAM,gBAAwB,GAAA,CAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,CAAa,UAAY,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,MAAA,IAAS,CAAM,CAAA,KAAA,IAAA,CAAA;AAEtE,IAAA,IAAI,CAAC,gBAAA,IAAoB,OAAO,gBAAA,CAAiB,SAAS,SAAW,EAAA,OAAA;AAErE,IAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAErB,IAAM,MAAA,SAAA,GAAY,WAAW,MAAM;AAC/B,MAAA,gBAAA,CAAiB,KAAK,CAAA,CAAA;AACtB,MAAA,OAAA,CAAQ,iBAAiB,IAAI,CAAA,CAAA;AAAA,OAC9B,GAAG,CAAA,CAAA;AAEN,IAAA,OAAO,MAAM;AACT,MAAA,YAAA,CAAa,SAAS,CAAA,CAAA;AAAA,KAC1B,CAAA;AAAA,GACJ,EAAG,CAAC,UAAU,CAAC,CAAA,CAAA;AAEf,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,iBAAmB,EAAA;AACnB,MAAa,YAAA,CAAA,IAAI,cAAc,SAAW,EAAA,EAAE,KAAK,OAAQ,EAAC,CAAG,EAAA,KAAA,EAAO,SAAS,CAAA,CAAA;AAC7E,MAAA,qBAAA,CAAsB,KAAK,CAAA,CAAA;AAAA,KAC/B;AAAA,GACJ,EAAG,CAAC,iBAAiB,CAAC,CAAA,CAAA;AAEtB,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,yBAAyB,gBAAkB,EAAA;AAC3C,MAAM,MAAA,aAAA,GAAgB,mBAAmB,qBAAqB,CAAA,CAAA,CAAA;AAC9D,MAAa,YAAA,CAAA,IAAI,cAAc,SAAW,EAAA,EAAE,KAAK,OAAQ,EAAC,CAAG,EAAA,KAAA,EAAO,aAAa,CAAA,CAAA;AACjF,MAAA,IAAI,wBAA0B,EAAA;AAC1B,QAAA,wBAAA,CAAyB,IAAI,CAAA,CAAA;AAAA,OACjC;AAAA,KACJ;AAAA,GACD,EAAA,CAAC,qBAAuB,EAAA,gBAAA,EAAkB,wBAAwB,CAAC,CAAA,CAAA;AAStE,EAAA,SAAA,CAAU,MAAM;AACZ,IAAgB,eAAA,EAAA,CAAA;AAChB,IAAe,cAAA,EAAA,CAAA;AAEf,IAAA,MAAM,eAAe,MAAM;AAzyDnC,MAAA,IAAA,EAAA,CAAA;AA0yDY,MAAA,MAAM,YAAe,GAAA,CAAA,CAAA,EAAA,GAAA,aAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAe,OAAf,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAwB,YAAgB,KAAA,CAAA,CAAA;AAE7D,MAAM,MAAA,SAAA,GAAY,eAAe,YAAY,CAAA,SAAA,CAAA,CAAA;AAC7C,MAAA,kBAAA,CAAmB,SAAS,CAAA,CAAA;AAAA,KAChC,CAAA;AACA,IAAa,YAAA,EAAA,CAAA;AACb,IAAO,MAAA,CAAA,gBAAA,CAAiB,UAAU,YAAY,CAAA,CAAA;AAC9C,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAoB,CAAA,QAAA,EAAU,YAAY,CAAA,CAAA;AAAA,GAElE,EAAG,EAAE,CAAA,CAAA;AAEL,EAAM,MAAA,cAAA,GAAiB,YAAY,MAAM;AACrC,IAAA,MAAM,kBAAkB,kBAAmB,CAAA,OAAA,CAAA;AAC3C,IAAA,IAAI,eAAiB,EAAA;AACjB,MAAA,UAAA,CAAW,MAAM;AACb,QAAA,eAAA,CAAgB,QAAS,CAAA;AAAA,UACrB,KAAK,eAAgB,CAAA,YAAA;AAAA,UACrB,QAAU,EAAA,QAAA;AAAA,SACb,CAAA,CAAA;AACD,QAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAAA,SACnB,GAAG,CAAA,CAAA;AAAA,KACV;AAAA,GACJ,EAAG,EAAE,CAAA,CAAA;AAEL,EAAA,SAAA,CAAU,MAAM;AACZ,IAAI,IAAA,CAAA,WAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAa,UAAS,CAAG,EAAA;AACzB,MAAe,cAAA,EAAA,CAAA;AAAA,KACnB;AAAA,GACJ,EAAG,CAAC,WAAW,CAAC,CAAA,CAAA;AAEhB,EAAA,MAAM,kBAAkB,MAAM;AAC1B,IAAA,IAAI,MAAS,GAAA;AAAA,MACT,MAAQ,EAAA,KAAA;AAAA,MACR,aAAe,EAAA,QAAA;AAAA,MACf,KAAK,CAAG,EAAA,GAAG,CAAqC,kCAAA,EAAA,aAAa,qBAAqB,gBAAgB,CAAA,CAAA;AAAA,MAClG,SAAS,EAAC;AAAA,KACd,CAAA;AAEA,IAAA,IAAA,CACK,OAAQ,CAAA,MAAM,CACd,CAAA,IAAA,CAAK,CAAC,QAAa,KAAA;AAl1DhC,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAm1DgB,MAAI,IAAA,CAAA,EAAA,GAAA,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAU,IAAV,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAgB,YAAc,EAAA;AAK9B,QAAA,IAAA,CAAA,CAAI,gDAAU,IAAV,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAgB,YAAhB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA8B,wBAAuB,EAAI,EAAA;AACzD,UAAA,qBAAA,CAAsB,IAAI,CAAA,CAAA;AAAA,SAC9B;AAAA,OACJ;AAAA,KACH,CAAA,CACA,KAAM,CAAA,CAAC,KAAU,KAAA;AACd,MAAA,OAAA,CAAQ,MAAM,KAAK,CAAA,CAAA;AAAA,KACtB,CAAA,CAAA;AAAA,GACT,CAAA;AAEA,EAAA,MAAM,iBAAiB,YAAY;AAC/B,IAAA,MAAM,gBAAgB,CAAG,EAAA,GAAG,CAA0B,uBAAA,EAAA,aAAa,qBAAqB,gBAAgB,CAAA,CAAA,CAAA;AAExG,IAAI,IAAA;AACA,MAAA,MAAM,cAAiB,GAAA;AAAA,QACnB,MAAQ,EAAA,KAAA;AAAA,QACR,MAAQ,EAAA,EAAE,cAAgB,EAAA,iBAAA,CAAkB,OAAQ,EAAA;AAAA,QACpD,eAAiB,EAAA,IAAA;AAAA;AAAA,OACrB,CAAA;AACA,MAAA,IAAA,CACK,IAAI,aAAe,EAAA,cAAc,CACjC,CAAA,IAAA,CAAK,CAAC,QAAa,KAAA;AAChB,QAAA,MAAM,OAAO,QAAS,CAAA,IAAA,CAAA;AAEtB,QAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACjB,UAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAEhB,UAAe,cAAA,EAAA,CAAA;AAAA,SACZ,MAAA;AACH,UAAA,qBAAA,CAAsB,IAAI,CAAA,CAAA;AAAA,SAC9B;AAAA,OACH,CAAA,CACA,KAAM,CAAA,CAAC,KAAU,KAAA;AACd,QAAA,OAAA,CAAQ,MAAM,KAAK,CAAA,CAAA;AAAA,OACtB,CAAA,CAAA;AAAA,aACA,KAAO,EAAA;AACZ,MAAA,iBAAA,CAAkB,KAAK,CAAA,CAAA;AACvB,MAAA,OAAA,CAAQ,MAAM,KAAK,CAAA,CAAA;AAAA,KACvB;AAAA,GACJ,CAAA;AAEA,EAAA,MAAM,mBAAmB,MAAM;AAC3B,IAAA,MAAM,sBAAsB,CAAG,EAAA,GAAG,CAA+B,4BAAA,EAAA,aAAa,qBAAqB,gBAAgB,CAAA,CAAA,CAAA;AACnH,IAAA,wBAAA,CAAyB,IAAI,CAAA,CAAA;AAC7B,IAAA,sBAAA,CAAuB,IAAI,CAAA,CAAA;AAC3B,IAAI,IAAA;AACA,MAAA,MAAM,cAAiB,GAAA;AAAA,QACnB,MAAQ,EAAA,KAAA;AAAA,QACR,MAAQ,EAAA,EAAE,cAAgB,EAAA,iBAAA,CAAkB,OAAQ,EAAA;AAAA,QACpD,eAAiB,EAAA,IAAA;AAAA;AAAA,OACrB,CAAA;AACA,MAAA,IAAA,CACK,GAAI,CAAA,mBAAA,EAAqB,cAAc,CAAA,CACvC,KAAK,MAAM;AAER,QAAA,wBAAA,CAAyB,EAAE,CAAA,CAAA;AAC3B,QAAA,mBAAA,CAAoB,EAAE,CAAA,CAAA;AACtB,QAAA,mBAAA,CAAoB,IAAI,CAAA,CAAA;AACxB,QAAA,kBAAA,CAAmB,KAAK,CAAA,CAAA;AACxB,QAAA,cAAA,CAAe,EAAE,CAAA,CAAA;AACjB,QAAA,qBAAA,CAAsB,EAAE,CAAA,CAAA;AACxB,QAAsB,qBAAA,iBAAA,IAAI,KAAK,CAAA,CAAA;AAC/B,QAAA,wBAAA,CAAyB,OAAU,GAAA,EAAA,CAAA;AACnC,QAAA,uBAAA,CAAwB,QAAQ,KAAM,EAAA,CAAA;AACtC,QAAA,sBAAA,CAAuB,QAAQ,KAAM,EAAA,CAAA;AACrC,QAAA,IAAI,uBAAyB,EAAA;AACzB,UAAA,uBAAA,CAAwB,IAAI,CAAA,CAAA;AAAA,SAChC;AACA,QAAiB,gBAAA,CAAA,OAAA,GAAU,CAAG,EAAAJ,EAAA,EAAQ,CAAA,CAAA,CAAA;AACtC,QAAA,oBAAA,CAAqB,KAAK,CAAA,CAAA;AAC1B,QAAA,WAAA,CAAY,EAAE,CAAA,CAAA;AACd,QAAA,qBAAA,CAAsB,IAAI,CAAA,CAAA;AAG1B,QAAA,IAAI,mBAAqB,EAAA;AACrB,UAAA,OAAA,CAAQ,IAAI,gEAAyD,CAAA,CAAA;AACrE,UAAoB,mBAAA,EAAA,CAAA;AAAA,SACjB,MAAA;AACH,UAAA,OAAA,CAAQ,IAAI,mEAA8D,CAAA,CAAA;AAAA,SAC9E;AAEA,QAAA,gBAAA,CAAiB,CAAC,IAAe,MAAA;AAAA,UAC7B,GAAG,IAAA;AAAA,UACH,QAAA,EAAU,eAAkB,GAAA,EAAA,GAAK,IAAK,CAAA,QAAA;AAAA,UACtC,YAAc,EAAA,EAAA;AAAA,UACd,OAAS,EAAA,EAAA;AAAA,UACT,WAAa,EAAA,EAAA;AAAA,UACb,cAAgB,EAAA,EAAA;AAAA,UAChB,gBAAkB,EAAA,KAAA;AAAA,UAClB,qBAAuB,EAAA,IAAA;AAAA,SACzB,CAAA,CAAA,CAAA;AAAA,OACL,CAAA,CACA,KAAM,CAAA,CAAC,KAAU,KAAA;AACd,QAAA,OAAA,CAAQ,MAAM,KAAK,CAAA,CAAA;AAAA,OACtB,CAAA,CAAA;AAAA,aACA,KAAO,EAAA;AACZ,MAAA,iBAAA,CAAkB,KAAK,CAAA,CAAA;AACvB,MAAA,OAAA,CAAQ,MAAM,KAAK,CAAA,CAAA;AAAA,KACvB;AAAA,GACJ,CAAA;AAEA,EAAA,SAAS,wBAAwB,WAA6B,EAAA;AAE1D,IAAA,MAAM,KAAQ,GAAA,oBAAA,CAAA;AAEd,IAAA,MAAM,cAAiB,GAAA,WAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAa,OAAQ,CAAA,KAAA,EAAO,CAAC,KAAU,KAAA;AAE1D,MAAO,OAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,QAAQ,KAAO,EAAA,OAAA,CAAA,CAAA;AAAA,KACjC,CAAA,CAAA;AACA,IAAO,OAAA,cAAA,CAAA;AAAA,GACX;AAEA,EAAA,MAAM,eAAkB,GAAA,CAAC,KAAY,EAAA,qBAAA,EAA4B,iBAA2B,KAAA;AAx8DhG,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,CAAA;AAy8DQ,IAAA,OAAA,CAAQ,IAAI,OAAS,EAAA,KAAA,EAAO,MAAO,CAAA,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA;AAC9C,IAAQ,OAAA,CAAA,GAAA,CAAI,WAAa,EAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,IAAI,CAAA,CAAA;AACpC,IAAI,IAAA,gBAAA,GAAmB,EAAE,IAAM,EAAA,WAAA,EAAa,SAAS,EAAI,EAAA,EAAA,EAAIA,IAAS,EAAA,CAAA;AAEtE,IAAI,IAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAyB,kBAAzB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA6C,cAAmB,MAAA,KAAA,IAAA,CAAA,CAChE,EAAO,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,KAAb,mBAAyB,kBAAzB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA6C,eAAoB,MAAA,IAAA,IAAA,CAAA,CACjE,EAAO,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,KAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,MAAU,KAAO,EAAA;AAC9D,MAAA,gBAAA,CAAiB,OAAU,GAAA,CAAA,EAAA,GAAA,uBAAA;AAAA,QACvB,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,SAAP,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,KAAb,mBAAyB,kBAAzB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA6C,YAA7C,IAAsD,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA;AAAA,OAC1D,KAF2B,IAExB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,CAAW,eAAiB,EAAA,EAAA,CAAA,CAAA;AAAA,KACnC;AAEA,IAAI,IAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAyB,kBAAzB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA6C,cAAmB,MAAA,IAAA,IAAA,CAAA,CAChE,EAAO,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,KAAb,mBAAyB,kBAAzB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA6C,eAAoB,MAAA,IAAA,IAAA,CAAA,CACjE,EAAO,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,KAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,MAAU,KAAO,EAAA;AAE9D,MAAA,gBAAA,CAAiB,OAAU,GAAA,EAAA,CAAA;AAC3B,MAAsB,qBAAA,CAAA,IAAA;AAAA,QAClB;AAAA,UACI,YAAA,EAAA,CAAc,sDAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,eAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA,KAA7C,IAAsD,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA;AAAA,UACpE,eAAc,EAAO,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,mBAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAyB,uBAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,YAAA;AAAA,UAC3D,iBAAgB,EAAO,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,mBAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAyB,uBAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,cAAA;AAAA,UAC7D,mBAAqB,EAAA,KAAA;AAAA,UACrB,iBAAA,EAAA,CAAmB,sDAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,eAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,iBAAA,KAA7C,IAAkE,GAAA,EAAA,GAAA,EAAA;AAAA,UACrF,sBAAwB,EAAA,KAAA;AAAA,SAC5B;AAAA,OACJ,CAAA;AAAA,KAEJ;AAEA,IAAI,IAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAyB,kBAAzB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA6C,cAAmB,MAAA,KAAA,IAAA,CAAA,CAChE,EAAO,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,KAAb,mBAAyB,kBAAzB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA6C,eAAoB,MAAA,IAAA,IAAA,CAAA,CACjE,EAAO,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,KAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,MAAU,IAAM,EAAA;AAC7D,MAAA,gBAAA,CAAiB,OAAU,GAAA,CAAA,EAAA,GAAA,uBAAA;AAAA,QACvB,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,SAAP,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,KAAb,mBAAyB,kBAAzB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA6C,YAA7C,IAAsD,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA;AAAA,OAC1D,KAF2B,IAExB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,CAAW,eAAiB,EAAA,EAAA,CAAA,CAAA;AAAA,KACnC;AAGA,IAAI,IAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAyB,kBAAzB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA6C,cAAmB,MAAA,KAAA,IAAA,CAAA,CAChE,GAAO,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,IAAa,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,UAAA,KAAb,oBAAyB,kBAAzB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAA6C,eAAoB,MAAA,KAAA,IAAA,CAAA,CACjE,GAAO,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,IAAa,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,UAAA,KAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,KAAA,MAAU,KAAO,EAAA;AAC9D,MAAA,MAAM,kBAAqB,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAa,eAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,kBAAA,CAAA;AAEpD,MAAI,IAAA,kBAAA,CAAmB,iBAAqB,IAAA,kBAAA,CAAmB,YAAc,EAAA;AACzE,QAAA,MAAM,mBAAmB,kBAAmB,CAAA,iBAAA,CAAA;AAC5C,QAAA,MAAM,cAAc,kBAAmB,CAAA,YAAA,CAAA;AAEvC,QAAA,IAAI,CAAC,iBAAA,CAAkB,GAAI,CAAA,gBAAgB,CAAG,EAAA;AAC1C,UAAkB,iBAAA,CAAA,GAAA,CAAI,kBAAkB,EAAE,YAAA,EAAc,aAAa,KAAO,EAAA,qBAAA,CAAsB,QAAQ,CAAA,CAAA;AAAA,SAC9G;AAAA,OACJ;AAEA,MAAI,IAAA,iBAAA,CAAkB,KAAI,GAAO,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,oBAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAyB,kBAAmB,CAAA,iBAAiB,CAAG,EAAA;AACtF,QAAM,MAAA,eAAA,GAAkB,iBAAkB,CAAA,GAAA,CAAA,CAAI,GAAO,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,oBAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAyB,kBAAzB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAA6C,iBAAiB,CAAA,CAAA;AAC5G,QAAA,MAAM,QAAQ,eAAiB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,KAAA,CAAA;AAE/B,QAAA,qBAAA,CAAsB,KAAK,CAC3B,GAAA;AAAA,UACI,YAAA,EAAA,CAAc,0DAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAa,eAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,OAAA,KAA7C,IAAsD,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,OAAA;AAAA,UACpE,eAAc,GAAO,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,oBAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAyB,uBAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,YAAA;AAAA,UAC3D,iBAAgB,GAAO,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,oBAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAyB,uBAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,cAAA;AAAA,UAC7D,mBAAqB,EAAA,IAAA;AAAA,UACrB,iBAAA,EAAA,CAAmB,0DAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAa,eAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,iBAAA,KAA7C,IAAkE,GAAA,GAAA,GAAA,EAAA;AAAA,UACrF,sBAAwB,EAAA,IAAA;AAAA,SAC5B,CAAA;AAAA,OAEG,MAAA;AACH,QAAwB,qBAAA,GAAA;AAAA,UACpB,GAAG,qBAAA;AAAA,UACH;AAAA,YACI,YAAA,EAAA,CAAc,0DAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAa,eAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,OAAA,KAA7C,IAAsD,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,OAAA;AAAA,YACpE,eAAc,GAAO,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,oBAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAyB,uBAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,YAAA;AAAA,YAC3D,iBAAgB,GAAO,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,oBAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAyB,uBAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,cAAA;AAAA,YAC7D,mBAAqB,EAAA,IAAA;AAAA,YACrB,iBAAA,EAAA,CAAmB,0DAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAa,eAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,iBAAA,KAA7C,IAAkE,GAAA,GAAA,GAAA,EAAA;AAAA,YACrF,sBAAwB,EAAA,KAAA;AAAA,WAC5B;AAAA,SACJ,CAAA;AAAA,OACJ;AAAA,KACJ;AAGA,IAAI,IAAA,CAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAyB,kBAAzB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAA6C,cAAmB,MAAA,IAAA,IAAA,CAAA,CAChE,GAAO,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,IAAa,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,UAAA,KAAb,oBAAyB,kBAAzB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAA6C,eAAoB,MAAA,KAAA,IAAA,CAAA,CACjE,GAAO,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,IAAa,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,UAAA,KAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,KAAA,MAAU,KACzD,EAAA;AACE,MAAA,MAAM,kBAAqB,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAa,eAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,kBAAA,CAAA;AAEpD,MAAI,IAAA,kBAAA,CAAmB,iBAAqB,IAAA,kBAAA,CAAmB,YAAc,EAAA;AACzE,QAAA,MAAM,mBAAmB,kBAAmB,CAAA,iBAAA,CAAA;AAC5C,QAAA,MAAM,cAAc,kBAAmB,CAAA,YAAA,CAAA;AAEvC,QAAA,IAAI,CAAC,iBAAA,CAAkB,GAAI,CAAA,gBAAgB,CAAG,EAAA;AAC1C,UAAkB,iBAAA,CAAA,GAAA,CAAI,kBAAkB,EAAE,YAAA,EAAc,aAAa,KAAO,EAAA,qBAAA,CAAsB,QAAQ,CAAA,CAAA;AAAA,SAC9G;AAAA,OACJ;AAEA,MAAI,IAAA,iBAAA,CAAkB,GAAI,CAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAa,eAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,iBAAiB,CAAG,EAAA;AACvF,QAAM,MAAA,eAAA,GAAkB,iBAAkB,CAAA,GAAA,CAAA,CAAI,GAAO,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,oBAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAyB,kBAAzB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAA6C,iBAAiB,CAAA,CAAA;AAC5G,QAAA,MAAM,QAAQ,eAAiB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,KAAA,CAAA;AAE/B,QAAA,qBAAA,CAAsB,KAAK,CAC3B,GAAA;AAAA,UACI,YAAA,EAAA,CAAc,0DAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAa,eAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,OAAA,KAA7C,IAAsD,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,OAAA;AAAA,UACpE,eAAc,GAAO,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,oBAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAyB,uBAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,YAAA;AAAA,UAC3D,iBAAgB,GAAO,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,oBAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAyB,uBAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,cAAA;AAAA,UAC7D,mBAAqB,EAAA,KAAA;AAAA,UACrB,iBAAA,EAAA,CAAmB,0DAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAa,eAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,iBAAA,KAA7C,IAAkE,GAAA,GAAA,GAAA,EAAA;AAAA,UACrF,sBAAwB,EAAA,IAAA;AAAA,SAC5B,CAAA;AAAA,OAEG,MAAA;AACH,QAAsB,qBAAA,CAAA,IAAA;AAAA,UAElB;AAAA,YACI,YAAA,EAAA,CAAc,0DAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAa,eAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,OAAA,KAA7C,IAAsD,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,OAAA;AAAA,YACpE,eAAc,GAAO,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,oBAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAyB,uBAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,YAAA;AAAA,YAC3D,iBAAgB,GAAO,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,oBAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAyB,uBAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,cAAA;AAAA,YAC7D,mBAAqB,EAAA,KAAA;AAAA,YACrB,iBAAA,EAAA,CAAmB,0DAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAa,eAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,iBAAA,KAA7C,IAAkE,GAAA,GAAA,GAAA,EAAA;AAAA,YACrF,sBAAwB,EAAA,KAAA;AAAA,WAC5B;AAAA,SACJ,CAAA;AAAA,OACJ;AAAA,KAEJ;AAEA,IAAM,MAAA,WAAA,GAAA,CAAc,0DAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAa,eAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,OAAA,KAA7C,IAAsD,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,WAAA,CAAA;AAC1E,IAAM,MAAA,cAAA,GAAA,CAAA,CAAiB,GAAO,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,IAAa,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,UAAA,KAAb,oBAAyB,kBAAzB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAA6C,OAA7C,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAsD,cAAkB,KAAA,EAAA,CAAA;AAC/F,IAAA,IAAI,YAAe,GAAA;AAAA,MACf,IAAM,EAAA,WAAA;AAAA,MACN,SAAS,gBAAiB,CAAA,OAAA;AAAA,MAC1B,6BAA+B,EAAA,qBAAA;AAAA,MAC/B,IAAA,sBAAU,IAAK,EAAA;AAAA,MACf,SAAA,EAAA,CAAW,0DAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAa,eAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,SAAA,KAA7C,IAA0D,GAAA,GAAA,GAAA,EAAA;AAAA,MACrE,SAAA,EAAA,CAAW,0DAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAa,eAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,OAAA,KAA7C,IAAsD,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,SAAA;AAAA,MACjE,eAAiB,EAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,IAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAyB,kBAAzB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAA6C,OAA7C,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAsD,eAAtD,KAAA,IAAA,GAAA,GAAA,GAAyE,EAAC;AAAA,MAC3F,WAAA;AAAA,MACA,aAAY,GAAO,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,oBAAa,UAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAyB,uBAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,UAAA;AAAA,MACzD,cAAA;AAAA,MACA,mBAAA,EAAA,CAAqB,GAAO,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,KAAP,IAAa,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,UAAA,KAAb,IAAyB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,kBAAA,KAAzB,IAA6C,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,OAAA,KAA7C,IAAsD,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,mBAAA,KAAtD,IAA6E,GAAA,GAAA,GAAA,EAAA;AAAA,KACtG,CAAA;AAEA,IAAA,IAAI,WAAa,EAAA;AACb,MAAA,KAAA,IAAS,KAAQ,GAAA,CAAA,EAAG,KAAQ,IAAA,WAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAa,SAAQ,KAAS,EAAA,EAAA;AACtD,QAAM,MAAA,UAAA,GAAa,YAAY,KAAK,CAAA,CAAA;AACpC,QAAA,YAAA,GAAe,EAAE,GAAG,YAAc,EAAA,OAAA,EAAA,CAAS,mDAAc,OAAd,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAuB,OAAQ,CAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,IAAM,EAAA,CAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,IAAO,IAAA,CAAA,KAAA,EAAQ,KAAK,CAAU,MAAA,CAAA,CAAA,EAAA,CAAA;AAAA,OAC1I;AAAA,KACJ;AACA,IAAO,OAAA,YAAA,CAAA;AAAA,GACX,CAAA;AAEA,EAAA,SAAS,mBAAmB,WAAqB,EAAA;AAC7C,IAAA,MAAM,MAAS,GAAA,eAAA,CAAA;AACf,IAAM,MAAA,UAAA,GAAa,WAAY,CAAA,OAAA,CAAQ,MAAM,CAAA,CAAA;AAE7C,IAAA,IAAI,eAAe,CAAI,CAAA,EAAA;AACnB,MAAA,MAAM,kBAAkB,WAAY,CAAA,SAAA;AAAA,QAChC,aAAa,MAAO,CAAA,MAAA;AAAA,OACxB,CAAA;AACA,MAAO,OAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,WAAW,eAAiB,EAAA,EAAA,CAAA,CAAA;AAAA,KACjD,MAAA;AACH,MAAO,OAAA,EAAA,CAAA;AAAA,KACX;AAAA,GACJ;AAEA,EAAA,MAAM,iBAAiB,CAAC,IAAA,EAAW,mBAAwB,qBAA4B,EAAA,gBAAA,EAAuB,gBAAwB,mBAAkC,KAAA;AAhnE5K,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAinEQ,IAAQ,OAAA,CAAA,GAAA,CAAI,eAAe,cAAc,CAAA,CAAA;AACzC,IAAI,IAAA,gBAAA,GAAmB,EAAE,IAAM,EAAA,WAAA,EAAa,SAAS,EAAI,EAAA,EAAA,EAAIA,IAAS,EAAA,CAAA;AACtE,IAAI,IAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,UAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,kBAAlB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAsC,YAAtC,IAA+C,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA,KAA/C,IAAwD,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAA,CAAS,eAAkB,CAAA,EAAA;AACnF,MAAA,iBAAA,CAAkB,KAAK,CAAA,CAAA;AACvB,MAAA,qBAAA,CAAsB,IAAI,CAAA,CAAA;AAC1B,MAAA,gBAAA,CAAiB,OAAU,GAAA,kBAAA;AAAA,QAAA,CAAA,CACvB,8CAAM,UAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,uBAAlB,IAAsC,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA,KAAtC,mBAA+C,OAAU,IAAA,MAAA;AAAA,OAC7D,CAAA;AAEA,MAAY,WAAA,CAAA;AAAA,QAAC,GAAG,QAAA;AAAA,QAAU,EAAE,IAAM,EAAA,MAAA,EAAQ,SAAS,cAAgB,EAAA,IAAA,EAAM,kBAAkB,mBAAqB,EAAA,mBAAA,IAAuB,OAAO,EAAI,EAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,eAAN,IAAkB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,kBAAA,KAAlB,mBAAsC,SAAa,KAAA,EAAA,EAAI,OAAO,EAAG,EAAA;AAAA,QAAG,gBAAA;AAAA,OACrN,CAAA,CAAA;AAAA,KACE,MAAA;AACH,MAAA,iBAAA,CAAkB,KAAK,CAAA,CAAA;AACvB,MAAA,qBAAA,CAAsB,KAAK,CAAA,CAAA;AAC3B,MAAA,gBAAA,CAAiB,OAAU,GAAA,CAAA,EAAA,GAAA,uBAAA;AAAA,QAAA,CACvB,8CAAM,UAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,kBAAlB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAsC,YAAtC,IAA+C,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA;AAAA,OACnD,KAF2B,IAExB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,CAAW,eAAiB,EAAA,EAAA,CAAA,CAAA;AAE/B,MAAA,MAAM,kBAAkB,eAAgB,CAAA,EAAE,IAAK,EAAA,EAAG,uBAAuB,iBAAiB,CAAA,CAAA;AAC1F,MAAQ,OAAA,CAAA,GAAA,CAAI,mBAAmB,eAAe,CAAA,CAAA;AAC9C,MAAY,WAAA,CAAA;AAAA,QACR,GAAG,QAAA;AAAA,QACH,EAAE,IAAM,EAAA,MAAA,EAAQ,SAAS,cAAkB,IAAA,EAAA,EAAI,MAAM,gBAAkB,EAAA,mBAAA,EAAqB,uBAAuB,KAAO,EAAA,SAAA,EAAA,CAAW,8CAAM,UAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,uBAAlB,IAAsC,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA,KAAtC,YAAmD,EAAG,EAAA;AAAA,QAC3L,eAAA;AAAA,OACH,CAAA,CAAA;AACD,MAAA,cAAA,CAAA,CAAe,EAAM,GAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,UAAA,KAAN,IAAkB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,kBAAA,KAAlB,mBAAsC,KAAK,CAAA,CAAA;AAAA,KAC9D;AAAA,GACJ,CAAA;AAEA,EAAA,MAAM,eAAe,CAAC,KAAA,EAAa,mBAA+B,EAAA,cAAA,EAAwB,sBAA+B,KAAU,KAAA;AA9oEvI,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA+oEQ,IAAA,MAAM,UAAa,GAAA,CAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAgB,IAAU,EAAA,MAAA,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAW,IAAU,EAAA,CAAA,IAAA,EAAA,CAAA;AAClE,IAAI,IAAA,KAAA,CAAM,GAAQ,KAAA,OAAA,IAAW,KAAM,CAAA,QAAA,IAAA,CAAa,cAAgB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAA,IAAA,EAAA,MAAW,EAAM,IAAA,CAAA,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAW,IAAW,EAAA,MAAA,EAAA,IAAO,WAAa,EAAA;AAAA;AACvH,MAAA,OAAA;AAAA,KACJ;AACA,IAAA,cAAA,CAAe,IAAI,CAAA,CAAA;AAElB,IAAA,IAAI,mBAAqB,EAAA;AACtB,MAAA,+BAAA,CAAgC,IAAI,CAAA,CAAA;AAAA,KACxC;AAEA,IAAM,MAAA,gBAAA,uBAAuB,IAAK,EAAA,CAAA;AAClC,IAAY,WAAA,CAAA;AAAA,MACR,GAAG,QAAA,CAAS,GAAI,CAAA,CAAC,GAAG,KAAO,KAAA;AA3pEvC,QAAAK,IAAAA,GAAAA,CAAAA;AA2pE2C,QAAA,OAAA;AAAA,UAC3B,GAAG,CAAA;AAAA,UACH,UAASA,GAAA,GAAA,uBAAA,CAAwB,EAAE,OAAO,CAAA,KAAjC,gBAAAA,GAAoC,CAAA,OAAA;AAAA,YACzC,eAAA;AAAA,YACA,EAAA;AAAA,WAAA;AAAA,SAER,CAAA;AAAA,OAAE,CAAA;AAAA,MACF,EAAE,MAAM,MAAQ,EAAA,OAAA,EAAS,YAAY,IAAM,EAAA,gBAAA,EAAkB,qBAAqB,KAAM,EAAA;AAAA,KAC3F,CAAA,CAAA;AAED,IAAM,MAAA,iBAAA,uBAAwB,GAAqD,EAAA,CAAA;AACnF,IAAA,IAAI,wBAA+B,EAAC,CAAA;AACpC,IAAA,kBAAA,CAAmB,KAAK,CAAA,CAAA;AACxB,IAAA,MAAM,MAAS,GAAA;AAAA,MACX,aAAe,EAAA,gBAAA;AAAA,MACf,gBAAA;AAAA,MACA,iBAAmB,EAAA,aAAA;AAAA,MACnB,eAAiB,EAAA,OAAA;AAAA,MACjB,YAAc,EAAA,EAAA;AAAA,MACd,QAAU,EAAA,YAAA;AAAA,MACV,WAAa,EAAA,uBAAA;AAAA,MACb,MAAQ,EAAA,YAAA;AAAA,MACR,KAAO,EAAA,CAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAgB,IAAU,EAAA,MAAA,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAW,IAAU,EAAA,CAAA,IAAA,EAAA;AAAA,MACtD,SAAA,EAAW,CAAa,UAAA,EAAAL,EAAA,EAAQ,CAAA,CAAA;AAAA,MAChC,YAAc,EAAA,EAAA;AAAA,MACd,gBAAkB,EAAA,KAAA;AAAA,MAClB,gBAAgB,iBAAkB,CAAA,OAAA;AAAA,MAClC,eAAe,gBAAiB,CAAA,OAAA;AAAA,MAChC,cAAgB,EAAA;AAAA,QACxB,GAAG,aAAA;AAAA,QACH,WAAA,EAAA,CAAa,EAAe,GAAA,CAAA,EAAA,GAAA,aAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAA,WAAA,KAAf,IACP,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,CAAM,YADC,IAEP,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAO,CAAC,GAAA,KAAgB,GAAQ,KAAA,EAAA,CAAA;AAAA,QACtC,cAAA,EAAA,CAAgB,EAAe,GAAA,CAAA,EAAA,GAAA,aAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAA,cAAA,KAAf,IACV,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,CAAM,YADI,IAEV,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAO,CAAC,IAAA,KAAiB,IAAS,KAAA,EAAA,CAAA;AAAA,QACxC,eAAA,EAAiB,SAAS,MAAW,KAAA,CAAA;AAAA,QACrC,UAAA,EAAY,mBAAsB,GAAA,KAAA,GAAS,qBAAyB,IAAA,IAAA,GAAA,qBAAA,GAAA,IAAA;AAAA,QACpE,qBAAA,EAAA,CAAuB,EAAqB,GAAA,mBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,mBAAA,CAAA,qBAAA,KAArB,IAA8C,GAAA,EAAA,GAAA,EAAA;AAAA,QACrE,iBAAA,EAAA,CAAmB,EAAqB,GAAA,mBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,mBAAA,CAAA,iBAAA,KAArB,IAA0C,GAAA,EAAA,GAAA,EAAA;AAAA,QAC7D,GAAA,CAAI,uEAA2B,GAAO,KAAA;AAAA,UAClC,yBAAyB,yBAA0B,CAAA,GAAA;AAAA,SACvD;AAAA,QACA,GAAA,CAAI,uEAA2B,IAAQ,KAAA;AAAA,UACnC,4BAA4B,yBAA0B,CAAA,IAAA;AAAA,SAC1D;AAAA,QACA,6BAA+B,EAAA,IAAA;AAAA,QAE/B,WAAa,EAAA,eAAA;AAAA,OACD;AAAA,MACJ,mBAAqB,EAAA;AAAA,QACjB,0BAAA,EAAA,CAA4B,2DAAqB,qBAAwB,IAAA,MAAA,CAAO,KAAK,mBAAoB,CAAA,qBAAqB,IAAI,EAAC;AAAA,QACnI,sBAAA,EAAA,CAAwB,2DAAqB,iBAAoB,IAAA,MAAA,CAAO,KAAK,mBAAoB,CAAA,iBAAiB,IAAI,EAAC;AAAA,QACvH,iBAAA,EAAA,CAAmB,2DAAqB,qBAAwB,IAAA,MAAA,CAAO,KAAK,mBAAoB,CAAA,qBAAqB,EAAE,MAAS,GAAA,CAAA;AAAA,QAChI,aAAA,EAAA,CAAe,2DAAqB,iBAAoB,IAAA,MAAA,CAAO,KAAK,mBAAoB,CAAA,iBAAiB,EAAE,MAAS,GAAA,CAAA;AAAA,OACxH;AAAA;AAAA,MACA,OAAS,EAAA,EAAA;AAAA,MACT,aAAA,EAAe,CAAC,IAAc,KAAA,cAAA,CAAe,MAAM,iBAAmB,EAAA,qBAAA,EAAuB,gBAAkB,EAAA,UAAA,EAAY,mBAAmB,CAAA;AAAA,MAC9I,WAAA,EAAa,CAAC,IAAc,KAAA;AAAE,QAAA,cAAA,CAAe,KAAK,CAAA,CAAA;AAAG,QAAA,+BAAA,CAAgC,KAAK,CAAA,CAAA;AAAA,OAAE;AAAA,MAC5F,OAAA,EAAS,CAAC,KAAe,KAAA;AACrB,QAAQ,OAAA,CAAA,KAAA,CAAM,iBAAiB,KAAK,CAAA,CAAA;AACpC,QAAA,cAAA,CAAe,KAAK,CAAA,CAAA;AACpB,QAAA,+BAAA,CAAgC,KAAK,CAAA,CAAA;AAAA,OACzC;AAAA,KACJ,CAAA;AACC,IAAQ,OAAA,CAAA,GAAA,CAAI,0BAA4B,EAAA,MAAA,CAAO,cAAc,CAAA,CAAA;AAE9D,IAAA,IAAA,CAAI,SAAW,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAA,IAAA,EAAA,MAAW,EAAM,KAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAgB,IAAQ,EAAA,CAAA,EAAA;AACpD,MAAA,iBAAA,CAAkB,IAAI,CAAA,CAAA;AACtB,MAAA,CAAA,EAAA,GAAA,WAAA,CAAY,YAAZ,IAAqB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,EAAA,CAAA;AACrB,MAAA,YAAA,CAAa,EAAE,CAAA,CAAA;AACf,MAAe,cAAA,EAAA,CAAA;AAEf,MAAA,MAAM,cAAiB,GAAA,CAAA,yIAAA,CAAA,CAAA;AACvB,MAAM,MAAA,mBAAA,GAAsB,cAAe,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AACpD,MAAA,IAAI,SAAY,GAAA,EAAA,CAAA;AAEhB,MAAA,KAAA,IAAS,KAAQ,GAAA,CAAA,EAAG,KAAQ,GAAA,mBAAA,CAAoB,QAAQ,KAAS,EAAA,EAAA;AAC7D,QAAA,UAAA,CAAW,MAAM;AACb,UAAa,SAAA,IAAA,mBAAA,CAAoB,KAAK,CAAI,GAAA,GAAA,CAAA;AAC1C,UAAyB,wBAAA,CAAA,SAAA,CAAU,MAAM,CAAA,CAAA;AAAA,SAC7C,EAAG,KAAK,KAAK,CAAA,CAAA;AAAA,OACjB;AACA,MAAA,eAAA,CAAgB,MAAM,CAAA,CAAA;AAAA,KAC1B;AAAA,GACJ,CAAA;AAGA,EAAA,MAAM,sBAAyB,GAAA,MAAA,iBAAwB,IAAA,GAAA,EAAK,CAAA,CAAA;AAE5D,EAAA,SAAA,CAAU,MAAM;AACZ,IAAI,IAAA,oBAAA,IAAwB,CAAC,WAAa,EAAA;AAEtC,MAAA,IAAI,sBAAuB,CAAA,OAAA,CAAQ,GAAI,CAAA,oBAAoB,CAAG,EAAA;AAC1D,QAAQ,OAAA,CAAA,GAAA,CAAI,iEAAuD,oBAAoB,CAAA,CAAA;AACvF,QAAA,OAAA;AAAA,OACJ;AAEA,MAAQ,OAAA,CAAA,GAAA,CAAI,qDAA8C,oBAAoB,CAAA,CAAA;AAC9E,MAAuB,sBAAA,CAAA,OAAA,CAAQ,IAAI,oBAAoB,CAAA,CAAA;AAIvD,MAAA,IAAI,eAAkB,GAAA,IAAA,CAAA;AACtB,MAAA,IAAI,eAAkB,GAAA,GAAA,CAAA;AAEtB,MAAA,IAAI,2DAAqB,iBAAmB,EAAA;AACxC,QAAA,MAAM,gBAAmB,GAAA,MAAA,CAAO,MAAO,CAAA,mBAAA,CAAoB,iBAAiB,CAAA,CAAA;AAC5E,QAAA,MAAM,gBAAgB,gBAAiB,CAAA,SAAA,CAAU,CAAC,QAAkB,KAAA,CAAA,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAU,QAAO,oBAAoB,CAAA,CAAA;AAEzG,QAAA,IAAI,kBAAkB,CAAI,CAAA,EAAA;AACtB,UAAA,eAAA,GAAkB,iBAAiB,aAAa,CAAA,CAAA;AAChD,UAAkB,eAAA,GAAA,MAAA,CAAO,YAAa,CAAA,EAAA,GAAK,aAAa,CAAA,CAAA;AAAA,SAC5D;AAAA,OACJ;AAEA,MAAA,IAAI,eAAiB,EAAA;AAEjB,QAAM,MAAA,YAAA,GAAe,0BAA0B,eAAe,CAAA,sBAAA,CAAA,CAAA;AAC9D,QAAQ,OAAA,CAAA,GAAA,CAAI,yDAAoD,YAAY,CAAA,CAAA;AAG5E,QAAa,YAAA,CAAA,IAAI,cAAc,SAAW,EAAA,EAAE,KAAK,OAAQ,EAAC,CAAG,EAAA,KAAA,EAAO,YAAY,CAAA,CAAA;AAChF,QAAA,OAAA,CAAQ,IAAI,2CAA2C,CAAA,CAAA;AAAA,OACpD,MAAA;AACH,QAAQ,OAAA,CAAA,GAAA,CAAI,qDAAgD,oBAAoB,CAAA,CAAA;AAAA,OACpF;AAGA,MAAA,IAAI,uBAAyB,EAAA;AACzB,QAAA,uBAAA,CAAwB,IAAI,CAAA,CAAA;AAC5B,QAAA,OAAA,CAAQ,IAAI,iCAAiC,CAAA,CAAA;AAAA,OACjD;AAAA,KACJ,MAAA,IAAW,wBAAwB,WAAa,EAAA;AAC5C,MAAQ,OAAA,CAAA,GAAA,CAAI,kFAAwE,oBAAoB,CAAA,CAAA;AAAA,KAC5G;AAAA,GACD,EAAA,CAAC,oBAAsB,EAAA,WAAA,EAAa,uBAAuB,CAAC,CAAA,CAAA;AAE/D,EAA2B,QAAQ,OAAO;AAAA,IACtC,KAAK,CAAC,EAAE,IAAM,EAAA,GAAG,OACb,qBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACI,GAAG,KAAA;AAAA,QACJ,KAAO,EAAA;AAAA,UACH,MAAQ,EAAA,MAAA;AAAA,UACR,KAAO,EAAA,MAAA;AAAA,UACP,SAAW,EAAA,SAAA;AAAA;AAAA,SACf;AAAA,QACA,GAAA,EAAA,CAAK,+BAAO,GAAO,KAAA,EAAA;AAAA,QACnB,SAAU,EAAA,sDAAA;AAAA,OAAA;AAAA,KACd;AAAA,IACD,GAAG,CAAC,EAAE,IAAM,EAAA,GAAG,OAAiB,KAAA;AAC/B,MACI,uBAAA,GAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACI,GAAG,KAAA;AAAA,UACJ,KAAO,EAAA;AAAA,YACH,QAAU,EAAA,MAAA;AAAA,YACV,QAAU,EAAA,YAAA;AAAA;AAAA,YACV,YAAc,EAAA,YAAA;AAAA;AAAA,YACd,SAAW,EAAA,YAAA;AAAA;AAAA,YACX,UAAY,EAAA,QAAA;AAAA;AAAA,YACZ,QAAU,EAAA,QAAA;AAAA;AAAA,YACV,OAAS,EAAA,OAAA;AAAA;AAAA,YACT,QAAU,EAAA,MAAA;AAAA;AAAA,YACV,UAAY,EAAA,UAAA;AAAA;AAAA,YACZ,YAAc,EAAA,MAAA;AAAA;AAAA,YACd,SAAW,EAAA,MAAA;AAAA,WACf;AAAA,UAEC,QAAO,EAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,QAAA;AAAA,SAAA;AAAA,OACZ,CAAA;AAAA,KAER;AAAA,IACA,MAAM,CAAC,EAAE,IAAM,EAAA,GAAG,OAAiB,KAAA;AAC/B,MACI,uBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACI,GAAG,KAAA;AAAA,UACJ,KAAO,EAAA;AAAA,YACH,QAAU,EAAA,MAAA;AAAA,YACV,QAAU,EAAA,YAAA;AAAA;AAAA,YACV,YAAc,EAAA,YAAA;AAAA;AAAA,YACd,SAAW,EAAA,YAAA;AAAA;AAAA,YACX,UAAY,EAAA,QAAA;AAAA;AAAA,YACZ,QAAU,EAAA,QAAA;AAAA;AAAA,YACV,OAAS,EAAA,aAAA;AAAA;AAAA,YACT,QAAU,EAAA,MAAA;AAAA;AAAA,YACV,UAAY,EAAA,UAAA;AAAA;AAAA,WAChB;AAAA,UAEC,QAAO,EAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,QAAA;AAAA,SAAA;AAAA,OACZ,CAAA;AAAA,KAER;AAAA,IACA,IAAI,CAAC,EAAE,IAAM,EAAA,GAAG,OAAiB,KAAA;AAC7B,MACI,uBAAA,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACI,GAAG,KAAA;AAAA,UACJ,KAAO,EAAA;AAAA,YACH,OAAS,EAAA,MAAA;AAAA,YACT,aAAe,EAAA,QAAA;AAAA,YACf,GAAK,EAAA,MAAA;AAAA,YACL,SAAW,EAAA,SAAA;AAAA,YACX,WAAa,EAAA,QAAA;AAAA,WACjB;AAAA,UAEC,QAAO,EAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,QAAA;AAAA,SAAA;AAAA,OACZ,CAAA;AAAA,KAER;AAAA,IACA,IAAI,CAAC,EAAE,IAAM,EAAA,GAAG,OAAiB,KAAA;AAC7B,MACI,uBAAA,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACI,GAAG,KAAA;AAAA,UACJ,KAAO,EAAA;AAAA,YACH,OAAS,EAAA,MAAA;AAAA,YACT,aAAe,EAAA,QAAA;AAAA,YACf,GAAK,EAAA,MAAA;AAAA,YACL,SAAW,EAAA,SAAA;AAAA,YACX,WAAa,EAAA,QAAA;AAAA,WACjB;AAAA,UAEC,QAAO,EAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,QAAA;AAAA,SAAA;AAAA,OACZ,CAAA;AAAA,KAER;AAAA,IACA,KAAK,CAAC,EAAE,IAAM,EAAA,GAAG,OAAiB,KAAA;AAC9B,MAAY,KAAA,CAAM,GAAO,IAAA,KAAA,CAAM,UAAU,EAAA;AACzC,MAAA,MAAM,KAAQ,GAAA,KAAA,CAAM,KAAS,IAAA,KAAA,CAAM,QAAY,IAAA,eAAA,CAAA;AAE/C,MAAM,MAAA,uBAAA,GAA0B,CAAC,IAAA,EAAc,UAAwB,KAAA;AACnE,QAAA,MAAM,YAAY,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAI,GAAA,IAAA,CAAK,CAAC,CAAI,GAAA,IAAA,CAAA;AAElD,QAAA,IAAI,2CAAa,MAAQ,EAAA;AACrB,UAAA,kBAAA,CAAmB,IAAI,CAAA,CAAA;AAAA,SACpB,MAAA;AACH,UAAA,kBAAA,CAAmB,IAAI,CAAA,CAAA;AAAA,SAC3B;AAEA,QAAA,cAAA,CAAe,CAAC,IAAmB,KAAA;AAC/B,UAAA,IAAI,UAAY,EAAA;AAEZ,YAAA,IAAI,CAAC,IAAA,CAAK,QAAS,CAAA,SAAS,CAAG,EAAA;AAC3B,cAAO,OAAA,CAAC,GAAG,IAAA,EAAM,SAAS,CAAA,CAAA;AAAA,aAC9B;AACA,YAAO,OAAA,IAAA,CAAA;AAAA,WACJ,MAAA;AAEH,YAAA,OAAO,IAAK,CAAA,MAAA,CAAO,CAAC,IAAA,KAAS,SAAS,SAAS,CAAA,CAAA;AAAA,WACnD;AAAA,SACH,CAAA,CAAA;AAAA,OACL,CAAA;AAEA,MAAA,2BACK,cAAe,EAAA,EAAA,KAAA,EAAc,QAAU,EAAA,CAAC,MAAc,UAAoB,KAAA;AAAE,QAAA,uBAAA,CAAwB,MAAM,UAAU,CAAA,CAAA;AAAA,OAAK,EAAA,CAAA,CAAA;AAAA,KAElI;AAAA,GAEJ,CAAA,EAAI,EAAE,EAAA;AAGN,EACI,uBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAWD,MAAc,CAAA,UAAA,EAAY,KAAO,EAAA,EAAE,MAAQ,EAAA,MAAA,EAAQ,KAAO,EAAA,MAAA,EAAQ,OAAS,EAAA,MAAA,EAAQ,aAAe,EAAA,QAAA,EAAU,UAAY,EAAA,QAAA,EAAU,cAAgB,EAAA,QAAA,EAAU,UAAY,EAAA,+BAAA,EAAiC,eAAiB,EAAA,SAAA,EAAW,MAAQ,EAAA,mBAAA,EAAqB,QAAU,EAAA,QAAA,EACxR,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,EAAE,KAAA,EAAO,MAAQ,EAAA,MAAA,EAAQ,MAAQ,EAAA,eAAA,EAAiB,SAAW,EAAA,QAAA,EAAU,MAAQ,EAAA,QAAA,EAAU,UACjG,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,SAAI,GAAK,EAAA,aAAA,EACN,8BAAC,UAAW,EAAA,EAAA,gBAAA,EAAoC,aAA0B,CAC9E,EAAA,CAAA;AAAA,2BAEC,KAAI,EAAA,EAAA,KAAA,EAAO,EAAE,KAAA,EAAO,QAAQ,MAAQ,EAAA,eAAA,EAAiB,SAAW,EAAA,eAAA,EAAiB,WAAW,MAAQ,EAAA,eAAA,EAAiB,SAAU,EAAA,EAAG,KAAK,kBACpI,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACG,SAAU,EAAA,iBAAA;AAAA,YACV,KAAO,EAAA;AAAA,cACH,UAAY,EAAA,YAAA;AAAA;AAAA,cACZ,WAAa,EAAA,QAAA;AAAA;AAAA,cACb,UAAY,EAAA,MAAA;AAAA,cACZ,QAAU,EAAA,KAAA;AAAA,cACV,QAAU,EAAA,MAAA;AAAA;AAAA,cACV,UAAY,EAAA,SAAA;AAAA;AAAA,cACZ,YAAc,EAAA,QAAA;AAAA;AAAA,cACd,YAAc,EAAA,YAAA;AAAA,cACd,SAAW,EAAA,YAAA;AAAA,cACX,UAAY,EAAA,UAAA;AAAA;AAAA,cACZ,KAAO,EAAA,MAAA;AAAA;AAAA,cACP,UAAY,EAAA,KAAA;AAAA,cACZ,SAAW,EAAA,MAAA;AAAA,aACf;AAAA,YAEA,QAAA,kBAAA,GAAA,CAAC,UAAK,QAAgF,EAAA,kFAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAC1F;AAAA,wBAKA,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACG,KAAO,EAAA;AAAA,cACH,OAAS,EAAA,MAAA;AAAA,cACT,aAAe,EAAA,KAAA;AAAA,cACf,UAAY,EAAA,SAAA;AAAA,cACZ,OAAS,EAAA,oBAAA;AAAA,cACT,QAAU,EAAA,KAAA;AAAA,aACd;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAC,GAAA,CAAA,KAAA,EAAA,EAAI,OAAO,EAAE,SAAA,EAAW,QAAQ,QAAU,EAAA,CAAA,IAAA,CAAA,EAAQ,WAAW,QAAS,EAAA,EACnE,+BAAC,KAAI,EAAA,EAAA,KAAA,EAAM,MAAK,MAAO,EAAA,IAAA,EAAK,SAAQ,WAAY,EAAA,IAAA,EAAK,MAAO,EAAA,KAAA,EAAM,4BAC9D,EAAA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,GAAE,EAAA,EAAA,EAAA,EAAG,UAAW,EAAA,WAAA,EAAU,wBACvB,EAAA,QAAA,kBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,EAAA,EAAG,QAAS,EAAA,CAAA,EAAE,u3GAAw3G,EAAA,IAAA,EAAK,WAAU,CAC/5G,EAAA,CAAA;AAAA,gCACC,GAAA,CAAA,MAAA,EAAA,EACG,QAAC,kBAAA,GAAA,CAAA,UAAA,EAAA,EAAS,IAAG,kBACT,EAAA,QAAA,kBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,KAAA,EAAM,MAAK,MAAO,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,GAC9C,CACJ,EAAA,CAAA;AAAA,eAAA,EACJ,CAEJ,EAAA,CAAA;AAAA,8BACC,GAAA,CAAA,KAAA,EAAA,EAAI,KAAO,EAAA,EAAE,OAAS,EAAA,MAAA,EAAQ,aAAe,EAAA,QAAA,EAAU,UAAY,EAAA,GAAA,EAAK,KAAO,EAAA,MAAA,EAC5E,EAAA,QAAA,kBAAA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACG,KAAO,EAAA;AAAA,oBACH,OAAS,EAAA,aAAA;AAAA,oBACT,aAAe,EAAA,QAAA;AAAA,oBACf,UAAY,EAAA,YAAA;AAAA;AAAA,oBACZ,WAAa,EAAA,MAAA;AAAA;AAAA,oBACb,YAAc,EAAA,MAAA;AAAA,oBACd,KAAO,EAAA,MAAA;AAAA,oBACP,QAAU,EAAA,MAAA;AAAA,oBACV,QAAU,EAAA,MAAA;AAAA;AAAA,oBACV,UAAY,EAAA,SAAA;AAAA;AAAA,oBACZ,YAAc,EAAA,MAAA;AAAA,oBACd,YAAc,EAAA,QAAA;AAAA;AAAA,oBACd,YAAc,EAAA,YAAA;AAAA,oBACd,SAAW,EAAA,YAAA;AAAA,oBACX,UAAY,EAAA,UAAA;AAAA;AAAA,oBACZ,KAAO,EAAA,MAAA;AAAA;AAAA,mBACX;AAAA,kBAEA,QAAC,kBAAA,GAAA,CAAA,MAAA,EAAA,EAAK,QAAC,kBAAA,GAAA,CAAA,aAAA,EAAA,EAAc,UAAY,EAAA;AAAA,oBAC7B,GAAG,CAAC,EAAE,IAAM,EAAA,GAAG,OAAiB,KAAA;AAC5B,sBACI,uBAAA,GAAA;AAAA,wBAAC,GAAA;AAAA,wBAAA;AAAA,0BACI,GAAG,KAAA;AAAA,0BACJ,KAAO,EAAA;AAAA,4BACH,MAAQ,EAAA,CAAA;AAAA,2BACZ;AAAA,0BAEC,QAAO,EAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,QAAA;AAAA,yBAAA;AAAA,uBACZ,CAAA;AAAA,qBAER;AAAA,mBACJ,EAAI,0BAAe,CAAgB,EAAA,CAAA;AAAA,iBAAA;AAAA,eAE3C,EAAA,CAAA;AAAA,aAAA;AAAA,WAAA;AAAA,SACJ;AAAA,QACC,SAAS,MACJ,GAAA,QAAA,CAAS,GAAI,CAAA,CAAC,SAAc,KAC1B,qBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,EAAE,OAAS,EAAA,MAAA,EAAQ,SAAS,aAAe,EAAA,QAAA,EAAU,QAC5D,EAAA,QAAA,EAAA;AAAA,UAAS,CAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,IAAA,KAAQ,WAAgB,oBAAA,GAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,EAAE,SAAA,EAAW,CAAQ,IAAA,CAAA,EAAA,QAAA,EAAU,CAAQ,IAAA,CAAA,EAAA,SAAA,EAAW,QAAU,EAAA,WAAA,EAAa,QAOnH,EAAA,QAAA,kBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAM,IAAK,EAAA,MAAA,EAAO,IAAK,EAAA,OAAA,EAAQ,WAAY,EAAA,IAAA,EAAK,MAAO,EAAA,KAAA,EAAM,4BAC9D,EAAA,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,GAAE,EAAA,EAAA,EAAA,EAAG,UAAW,EAAA,WAAA,EAAU,wBACvB,EAAA,QAAA,kBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,EAAA,EAAG,QAAS,EAAA,CAAA,EAAE,u3GAAw3G,EAAA,IAAA,EAAK,WAAU,CAC/5G,EAAA,CAAA;AAAA,4BACC,GAAA,CAAA,MAAA,EAAA,EACG,QAAC,kBAAA,GAAA,CAAA,UAAA,EAAA,EAAS,IAAG,kBACT,EAAA,QAAA,kBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,KAAA,EAAM,MAAK,MAAO,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,GAC9C,CACJ,EAAA,CAAA;AAAA,WAAA,EACJ,CACJ,EAAA,CAAA;AAAA,+BACC,KAAI,EAAA,EAAA,KAAA,EAAO,EAAE,KAAA,EAAO,QAChB,EAAA,QAAA,EAAA;AAAA,YAAA,OAAA,CAAQ,SAAS,WAAe,IAAA,OAAA,CAAQ,iCAAiC,OAAQ,CAAA,6BAAA,CAA8B,SAAS,CACpH,oBAAA,GAAA,CAAC,0BAAuB,6BAA+B,EAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,+BAA+B,WAA0B,EAAA,gBAAA,EAAkB,UAAU,QAAS,CAAA,MAAA,GAAS,GAAG,yBAAsD,EAAA,CAAA;AAAA;AAAA,YAAA,CAIjO,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,IAAA,MAAS,WAAc,mBAAA,GAAA,CAAC,gBAAiB,EAAA,EAAA,KAAA,EAAc,OAAS,EAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,OAAS,EAAA,QAAA,EAAoB,YAA4B,EAAA,CAAA,uBAAM,MAAK,EAAA,EAAA,CAAA;AAAA,4BAE1J,GAAA,CAAC,SAAI,KAAO,EAAA;AAAA,cACR,OAAS,EAAA,MAAA;AAAA,cAAQ,cAAgB,EAAA,UAAA;AAAA;AAAA,aAG/B,EAAA,QAAA,EAAA,OAAA,CAAQ,IAAS,KAAA,MAAA,mBACd,GAAA,CAAA,KAAA,EAAA,EAAI,KAAO,EAAA,EAAE,eAAiB,EAAA,WAAA,EAAa,OAAS,EAAA,QAAA,EAAU,cAAc,KAAO,EAAA,QAAA,EAAU,KAAM,EAAA,EAChG,QAAC,kBAAA,GAAA,CAAA,gBAAA,EAAA,EAAiB,KAAc,EAAA,OAAA,EAAS,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,OAAA,EAAS,QAAoB,EAAA,YAAA,EAA4B,cAAgC,EAAA,CAAA,EAC/I,CAAS,mBAAA,GAAA,CAAC,UAAK,CACvB,EAAA,CAAA;AAAA,WAEJ,EAAA,CAAA;AAAA,SAEJ,EAAA,CACH,CAAI,GAAA,kBAAA,oBACC,GAAA,CAAA,QAAA,EAAA,EAAA,CAAA;AAAA,QAIT,cAAA,yBACI,KAAI,EAAA,EAAA,KAAA,EAAO,EAAE,OAAS,EAAA,MAAA,EAAQ,OAAS,EAAA,oBAAA,EACpC,EAAA,QAAA,EAAA;AAAA,0BAAC,GAAA,CAAA,KAAA,EAAA,EAAI,OAAO,EAAE,SAAA,EAAW,QAAQ,QAAU,EAAA,CAAA,IAAA,CAAA,EAAQ,WAAW,QAAS,EAAA,EAOnE,+BAAC,KAAI,EAAA,EAAA,KAAA,EAAM,MAAK,MAAO,EAAA,IAAA,EAAK,SAAQ,WAAY,EAAA,IAAA,EAAK,MAAO,EAAA,KAAA,EAAM,4BAC9D,EAAA,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,GAAE,EAAA,EAAA,EAAA,EAAG,UAAW,EAAA,WAAA,EAAU,wBACvB,EAAA,QAAA,kBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,EAAA,EAAG,QAAS,EAAA,CAAA,EAAE,u3GAAw3G,EAAA,IAAA,EAAK,WAAU,CAC/5G,EAAA,CAAA;AAAA,4BACC,GAAA,CAAA,MAAA,EAAA,EACG,QAAC,kBAAA,GAAA,CAAA,UAAA,EAAA,EAAS,IAAG,kBACT,EAAA,QAAA,kBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,KAAA,EAAM,MAAK,MAAO,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,GAC9C,CACJ,EAAA,CAAA;AAAA,WAAA,EACJ,CACJ,EAAA,CAAA;AAAA,0BACA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACG,KAAO,EAAA;AAAA,gBACH,OAAS,EAAA,aAAA;AAAA,gBACT,UAAY,EAAA,YAAA;AAAA;AAAA,gBACZ,WAAa,EAAA,MAAA;AAAA;AAAA,gBACb,YAAc,EAAA,MAAA;AAAA,gBACd,aAAe,EAAA,MAAA;AAAA,gBACf,KAAO,EAAA,MAAA;AAAA,gBACP,QAAU,EAAA,MAAA;AAAA,gBACV,QAAU,EAAA,MAAA;AAAA;AAAA,gBACV,UAAY,EAAA,SAAA;AAAA;AAAA,gBACZ,YAAc,EAAA,MAAA;AAAA,gBACd,YAAc,EAAA,QAAA;AAAA;AAAA,gBACd,YAAc,EAAA,YAAA;AAAA,gBACd,SAAW,EAAA,YAAA;AAAA,gBACX,UAAY,EAAA,UAAA;AAAA;AAAA,gBACZ,KAAO,EAAA,MAAA;AAAA;AAAA;AAAA,eAEX;AAAA,cAEA,QAAA,kBAAA,GAAA,CAAC,UAAM,QAAsB,EAAA,qBAAA,EAAA,CAAA;AAAA,aAAA;AAAA,WACjC;AAAA,SACJ,EAAA,CAAA;AAAA,OAER,EAAA,CAAA;AAAA,KACJ,EAAA,CAAA;AAAA,oBACA,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,KAAO,EAAA;AAAA,UACH,KAAO,EAAA,KAAA;AAAA,UACP,MAAQ,EAAA,aAAA;AAAA,UACR,eAAiB,EAAA,SAAA;AAAA,UACjB,OAAS,EAAA,MAAA;AAAA,UACT,aAAe,EAAA,QAAA;AAAA,UACf,UAAY,EAAA,QAAA;AAAA,UACZ,cAAgB,EAAA,KAAA;AAAA,UAChB,QAAU,EAAA,UAAA;AAAA,SACd;AAAA,QAGA,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACG,KAAO,EAAA;AAAA,gBACH,UAAA,EAAY,YAAY,SAAY,GAAA,QAAA;AAAA,gBACpC,QAAU,EAAA,UAAA;AAAA,gBACV,GAAK,EAAA,OAAA;AAAA,gBACL,MAAQ,EAAA,CAAA;AAAA,gBACR,aAAe,EAAA,MAAA;AAAA;AAAA,eACnB;AAAA,cAEA,QAAA,kBAAA,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACG,OAAS,EAAA,cAAA;AAAA,kBACT,KAAO,EAAA;AAAA,oBACH,YAAc,EAAA,QAAA;AAAA,oBACd,OAAS,EAAA,CAAA;AAAA,oBACT,eAAiB,EAAA,MAAA;AAAA,oBACjB,SAAW,EAAA,2BAAA;AAAA,oBACX,MAAQ,EAAA,mBAAA;AAAA,oBACR,aAAe,EAAA,MAAA;AAAA,oBACf,MAAQ,EAAA,SAAA;AAAA,oBACR,OAAS,EAAA,MAAA;AAAA,oBACT,cAAgB,EAAA,QAAA;AAAA,oBAChB,UAAY,EAAA,QAAA;AAAA,oBACZ,MAAQ,EAAA,CAAA;AAAA,oBACR,MAAQ,EAAA,SAAA;AAAA,oBACR,KAAO,EAAA,SAAA;AAAA,oBACP,MAAQ,EAAA,QAAA;AAAA,mBACZ;AAAA,kBAEA,QAAA,kBAAA,GAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACG,IAAK,EAAA,SAAA;AAAA,sBACL,KAAM,EAAA,MAAA;AAAA,sBACN,MAAO,EAAA,MAAA;AAAA,sBACP,OAAQ,EAAA,WAAA;AAAA,sBACR,EAAG,EAAA,MAAA;AAAA,sBACH,WAAU,EAAA,YAAA;AAAA,sBACV,KAAM,EAAA,4BAAA;AAAA,sBAEN,QAAA,kBAAA,GAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACG,EAAG,EAAA,SAAA;AAAA,0BACH,CAAE,EAAA,4IAAA;AAAA,yBAAA;AAAA,uBACL;AAAA,qBAAA;AAAA,mBACL;AAAA,iBAAA;AAAA,eACJ;AAAA,aAAA;AAAA,WACJ;AAAA,UAEC,4BAAA,oBACI,IAAA,CAAA,GAAA,EAAA,EAAI,EAAI,EAAA;AAAA,YACL,OAAS,EAAA,MAAA;AAAA,YACT,UAAY,EAAA,QAAA;AAAA,YACZ,GAAK,EAAA,KAAA;AAAA,YACL,aAAe,EAAA,KAAA;AAAA,YACf,WAAa,EAAA,KAAA;AAAA,YACb,UAAY,EAAA,iCAAA;AAAA,YACZ,QAAU,EAAA,UAAA;AAAA,YACV,KAAO,EAAA,SAAA;AAAA,YACP,KAAO,EAAA,MAAA;AAAA,WAEP,EAAA,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,UAAK,QAA+B,EAAA,iCAAA,EAAA,CAAA;AAAA,4BACrC,GAAA,CAAC,OAAI,EAAI,EAAA;AAAA,cACL,KAAO,EAAA,KAAA;AAAA,cAAO,MAAQ,EAAA,KAAA;AAAA,cAAO,OAAS,EAAA,SAAA;AAAA,cAAW,YAAc,EAAA,KAAA;AAAA,cAC/D,SAAA,EAAW,GAAG,cAAc,CAAA,+BAAA,CAAA;AAAA,cAC5B,cAAgB,EAAA,QAAA;AAAA,aACjB,EAAA,CAAA;AAAA,4BACH,GAAA,CAAC,OAAI,EAAI,EAAA;AAAA,cACL,KAAO,EAAA,KAAA;AAAA,cAAO,MAAQ,EAAA,KAAA;AAAA,cAAO,OAAS,EAAA,SAAA;AAAA,cAAW,YAAc,EAAA,KAAA;AAAA,cAC/D,SAAA,EAAW,GAAG,cAAc,CAAA,+BAAA,CAAA;AAAA,cAC5B,cAAgB,EAAA,QAAA;AAAA,aACjB,EAAA,CAAA;AAAA,4BACH,GAAA,CAAC,OAAI,EAAI,EAAA;AAAA,cACL,KAAO,EAAA,KAAA;AAAA,cAAO,MAAQ,EAAA,KAAA;AAAA,cAAO,OAAS,EAAA,SAAA;AAAA,cAAW,YAAc,EAAA,KAAA;AAAA,cAC/D,SAAA,EAAW,GAAG,cAAc,CAAA,+BAAA,CAAA;AAAA,aAC7B,EAAA,CAAA;AAAA,WACP,EAAA,CAAA;AAAA,0BAGF,GAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,gBAAA,GAAmB,oDAAoD,EAExF,EAAA,QAAA,kBAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACG,KAAO,EAAA;AAAA,gBACH,KAAO,EAAA,MAAA;AAAA,gBACP,eAAiB,EAAA,MAAA;AAAA,gBACjB,OAAS,EAAA,MAAA;AAAA,gBACT,UAAY,EAAA,KAAA;AAAA,gBACZ,GAAK,EAAA,QAAA;AAAA,gBACL,MAAQ,EAAA,mBAAA;AAAA,gBACR,YAAc,EAAA,KAAA;AAAA,gBACd,MAAA,EAAQ,qBAAqB,aAAgB,GAAA,SAAA;AAAA,eACjD;AAAA,cAGA,QAAA,kBAAA,IAAA,CAAC,SAAI,KAAO,EAAA,EAAE,OAAO,MAAQ,EAAA,OAAA,EAAS,QAClC,EAAA,QAAA,EAAA;AAAA,gCAAA,GAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBACG,GAAK,EAAA,WAAA;AAAA,oBACL,WAAY,EAAA,qCAAA;AAAA,oBACZ,OAAO,SAAa,IAAA,EAAA;AAAA,oBACpB,UAAU,CAAC,CAAA,KAAM,YAAa,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,oBAC5C,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,oBAChC,MAAA,EAAQ,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,oBAChC,SAAW,EAAA,CAAC,CAAM,KAAA,YAAA,CAAa,CAAC,CAAA;AAAA,oBAChC,QAAU,EAAA,kBAAA;AAAA,oBACV,KAAO,EAAA;AAAA,sBACH,QAAU,EAAA,CAAA;AAAA,sBACV,OAAS,EAAA,QAAA;AAAA,sBACT,YAAc,EAAA,QAAA;AAAA,sBACd,MAAQ,EAAA,MAAA;AAAA,sBACR,QAAU,EAAA,MAAA;AAAA,sBACV,UAAY,EAAA,QAAA;AAAA,sBACZ,MAAQ,EAAA,MAAA;AAAA,sBACR,eAAiB,EAAA,MAAA;AAAA,sBACjB,KAAO,EAAA,SAAA;AAAA;AAAA,sBAEP,SAAA,EAAW,YAAY,OAAU,GAAA,MAAA;AAAA,sBACjC,MAAA,EAAQ,YAAY,OAAU,GAAA,MAAA;AAAA,sBAC9B,SAAW,EAAA,OAAA;AAAA,sBACX,SAAW,EAAA,MAAA;AAAA,sBACX,UAAY,EAAA,SAAA;AAAA,sBACZ,OAAS,EAAA,MAAA;AAAA,sBACT,UAAY,EAAA,kDAAA;AAAA,sBACZ,SAAW,EAAA,YAAA;AAAA,sBACX,MAAA,EAAQ,qBAAqB,aAAgB,GAAA,MAAA;AAAA;AAAA,qBACjD;AAAA,mBAAA;AAAA,iBACJ;AAAA,gCACC,IAAA,CAAA,MAAA,EAAA,EAAK,KAAO,EAAA,EAAE,OAAS,EAAA,MAAA,EAAQ,aAAe,EAAA,QAAA,EAAU,cAAgB,EAAA,KAAA,EAAO,UAAY,EAAA,KAAA,EAAS,EAAA,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,kCACjG,GAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACG,OAAA,EAAS,CAAC,CAAM,KAAA;AAAE,wBAAA,YAAA,CAAa,IAAI,aAAc,CAAA,SAAA,EAAW,EAAE,GAAK,EAAA,OAAA,EAAS,CAAC,CAAA,CAAA;AAAA,uBAAE;AAAA,sBAC/E,QAAU,EAAA,oBAAA;AAAA,sBACV,KAAO,EAAA;AAAA,wBACH,OAAS,EAAA,gBAAA;AAAA,wBACT,YAAc,EAAA,UAAA;AAAA,wBACd,MAAQ,EAAA,MAAA;AAAA,wBACR,eAAiB,EAAA,OAAA;AAAA,wBACjB,KAAA,EAAO,uBAAuB,SAAY,GAAA,SAAA;AAAA,wBAC1C,UAAY,EAAA,MAAA;AAAA,wBACZ,QAAU,EAAA,MAAA;AAAA,wBACV,MAAA,EAAQ,uBAAuB,aAAgB,GAAA,SAAA;AAAA,wBAC/C,UAAY,EAAA,mCAAA;AAAA,wBACZ,MAAQ,EAAA,MAAA;AAAA,uBACZ;AAAA,sBAEA,8BAAC,UAAW,EAAA,EAAA,CAAA;AAAA,qBAAA;AAAA,mBAChB;AAAA,iBACJ,EAAA,CAAA;AAAA,eACJ,EAAA,CAAA;AAAA,aAAA;AAAA,WAEJ,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KACJ;AAAA,oBACC,IAAA,CAAA,KAAA,EAAA,EAAI,KAAO,EAAA,EAAE,KAAO,EAAA,KAAA,EAAO,OAAS,EAAA,MAAA,EAAQ,GAAK,EAAA,SAAA,EAAW,aAAe,EAAA,KAAA,EACxE,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACG,KAAO,EAAA,aAAA;AAAA,UACP,SAAU,EAAA,KAAA;AAAA,UACV,KAAK,EAAA,IAAA;AAAA,UACL,eAAiB,EAAA;AAAA,YACb,OAAS,EAAA;AAAA,cACL,EAAI,EAAA;AAAA,gBACA,QAAU,EAAA,UAAA;AAAA,gBACV,OAAS,EAAA,QAAA;AAAA,gBACT,UAAY,EAAA,+BAAA;AAAA,eAChB;AAAA,aACJ;AAAA,WACJ;AAAA,UAEA,8BAAC,MAAK,EAAA,EAAA,KAAA,EAAO,EAAE,KAAA,EAAO,OAClB,EAAA,QAAA,kBAAA,GAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cAAc,SAAW,EAAA,CAAA;AAAA,cACtB,OAAQ,EAAA,SAAA;AAAA,cACR,QAAU,EAAA,KAAA;AAAA,cACV,SAAS,MAAM,IAAA;AAAA,cACf,QAAU,EAAA,KAAA;AAAA,aAAA;AAAA,WAClB,EAAA,CAAA;AAAA,SAAA;AAAA,OACJ;AAAA,sBACA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACG,KAAO,EAAA,aAAA;AAAA,UACP,SAAU,EAAA,KAAA;AAAA,UACV,KAAK,EAAA,IAAA;AAAA,UACL,eAAiB,EAAA;AAAA,YACb,OAAS,EAAA;AAAA,cACL,EAAI,EAAA;AAAA,gBACA,QAAU,EAAA,UAAA;AAAA,gBACV,OAAS,EAAA,QAAA;AAAA,gBACT,UAAY,EAAA,+BAAA;AAAA,eAChB;AAAA,aACJ;AAAA,WACJ;AAAA,UAEA,8BAAC,MAAK,EAAA,EAAA,KAAA,EAAO,EAAE,KAAA,EAAO,OAClB,EAAA,QAAA,kBAAA,GAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cAAc,SAAW,EAAA,CAAA;AAAA,cACtB,OAAQ,EAAA,YAAA;AAAA,cACR,QAAU,EAAA,KAAA;AAAA,cACV,SAAS,MAAM,IAAA;AAAA,cACf,QAAU,EAAA,KAAA;AAAA,aAAA;AAAA,WAClB,EAAA,CAAA;AAAA,SAAA;AAAA,OACJ;AAAA,KACJ,EAAA,CAAA;AAAA,GACJ,EAAA,CAAA,CAAA;AAER,CAAA,CAAA;AAEA,sBAAe,aAAA;;;;"}
1
+ {"version":3,"file":"ChatComponent.js","sources":["../../../../src/features/InstantLearning/_components/ChatComponent.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { startChatStream } from '@e-llm-studio/streaming-response';\n// import { startChatStreamSSE } from '@e-llm-studio/streaming-response';\nimport { v4 as uuidv4 } from 'uuid';\nimport { http } from '../../../api/transport';\nimport ReactMarkdown from 'react-markdown';\nimport rehypeRaw from 'rehype-raw';\nimport MinimizedThinkingSteps from './MinimizedThinkingSteps';\nimport NewChatIcon from './_svg/NewChatIcon';\nimport defaultStyles from '../InstantLearning.module.css';\nimport Tooltip from '@mui/material/Tooltip';\nimport JSON5 from 'json5';\nimport AudioWaveform from './AudioWaveform';\nimport './ChatComponent.css'\nimport MessageRendering from './MessageRendering';\nimport { sanitizePythonDictToJSON } from '../../../utils/instantLearning.utils';\nimport { publishAgenticFeedbackForVariantIngestion } from \"../../../service/InstantLearningService\";\nimport { Box, keyframes } from '@mui/material';\nimport { parseValidationRecommendations, FormattedValidationRecommendation } from '../../../utils/recommendationParser';\n\n// interface RecommendationDetails {\n// when_to_apply?: string[];\n// when_not_to_apply?: string[];\n// reason: string;\n// confidence_score: number;\n// }\n\n// interface ValidationRecommendation {\n// wta: RecommendationDetails;\n// wnta: RecommendationDetails;\n// }\n\ninterface IntermediateStep {\n responseFrom: string;\n responseMessage: string;\n \n}\ninterface Message {\n requestId?: string;\n role: string;\n content: string;\n time: any;\n id?: string;\n reply?: string;\n citations?: Array<any>\n resourceId?: string;\n citationDisplayType?: string;\n orchestratorAndAgentsMessages?: any[];\n intermediateSteps?: IntermediateStep[];\n isFirstQuestionSent?: boolean;\n}\n\ninterface ChatComponentProps {\n chatAssistantLogoUrl: string\n chatAssistantName: string\n authToken?: string\n organizationName: string\n baseUrl: string\n setInstantLearningSuggestions: any\n formDataState: any,\n setFormDataState: any,\n hasUserFilledForm: boolean\n setHasUserFilledForm: React.Dispatch<React.SetStateAction<boolean>>\n baseWebsocketUrl: string\n setIsNewChatClicked: React.Dispatch<React.SetStateAction<boolean>>\n selectedText: string\n ChatIconComponent: React.ReactNode\n ggcAssistantName: string\n ThinkingBulbIconComponent: React.ReactNode\n hasUserWrittenModification: boolean\n setExtractedModification: React.Dispatch<React.SetStateAction<string>> | React.Dispatch<React.SetStateAction<null>>\n setSave: React.Dispatch<React.SetStateAction<boolean>>\n setExtractedTooltip: React.Dispatch<React.SetStateAction<string>>\n setIsSaveLoading: React.Dispatch<React.SetStateAction<boolean>>\n isSaveLoading: boolean\n save: boolean\n instantLearningSuggestions: any\n template?: string\n setShouldTriggerSave: React.Dispatch<React.SetStateAction<boolean>>,\n isFormSaveClicked: boolean,\n setIsFormSavedClicked: React.Dispatch<React.SetStateAction<boolean>>,\n validationWtaResponse?: any,\n setValidationWtaResponse?: any,\n learningWtaResponse?: any,\n setLearningWtaResponse?: any,\n onDeleteLearning?: (label: string) => void,\n deleteLearningTrigger?: string | null,\n setDeleteLearningTrigger?: React.Dispatch<React.SetStateAction<string | null>>,\n onMergeLearning?: (learningId: string) => void,\n mergeLearningTrigger?: string | null,\n setMergeLearningTrigger?: React.Dispatch<React.SetStateAction<string | null>>,\n onResetLearningData?: () => void,\n setEditConflictingLearningTrigger: React.Dispatch<React.SetStateAction<string | null>>,\n setEditSimilarLearningTrigger: React.Dispatch<React.SetStateAction<string | null>>,\n sendMessageInChat: string,\n setSendMessageInChat: React.Dispatch<React.SetStateAction<string>>,\n setIsMergeLoading: React.Dispatch<React.SetStateAction<boolean>>,\n sendValidationMessage: string,\n setSendValidationMessage : React.Dispatch<React.SetStateAction<string>>;\n setValidationRecommendations: (recommendations: FormattedValidationRecommendation | null) => void;\n isFormValidating: boolean;\n validationRecommendations: FormattedValidationRecommendation | null; \n isFromDashboard?: boolean;\n fullMessageText?: string;\n\n}\n\ninterface Config {\n GGCLLMASSISTANTNAME: string;\n ORGANIZATION_NAME: string;\n API_KEY?: string;\n}\n\ninterface LLMRequestParams {\n config: Config;\n user_prompt: string;\n check_similarity: boolean;\n system_prompt: string;\n primary_type: string;\n fallback_type: string;\n primary_model: string;\n fallback_model: string;\n region: string;\n temperature: number;\n max_tokens: number;\n primary_retries: number;\n}\n\nconst SendButton = () => {\n return (\n <svg\n width=\"20px\"\n height=\"20px\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9.91158 12H7.45579H4L2.02268 4.13539C2.0111 4.0893 2.00193 4.04246 2.00046 3.99497C1.97811 3.27397 2.77209 2.77366 3.46029 3.10388L22 12L3.46029 20.8961C2.77983 21.2226 1.99597 20.7372 2.00002 20.0293C2.00038 19.9658 2.01455 19.9032 2.03296 19.8425L3.5 15\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nconst ChatHeader = ({ resetChatHistory, isStreamEnd }: { resetChatHistory: () => void; isStreamEnd: boolean }) => {\n return (\n <div\n className={defaultStyles.customFont}\n style={{\n width: '100%',\n padding: '0.75rem 0rem',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n backgroundColor: '#fff',\n borderBottom: '1px solid #e5e7eb',\n boxShadow: '0 1px 2px rgba(0, 0, 0, 0.04)'\n }}\n >\n <span\n style={{\n fontSize: '1.25rem',\n fontWeight: 700,\n color: '#1f2937',\n flex: 1,\n marginLeft: '0.5rem',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n <span style={{ color: '#5928ED' }}>InstantLearning.AI</span> Chat\n {/* Tell me more about this learning */}\n </span>\n\n <Tooltip\n title={'New chat'}\n placement=\"top\"\n arrow\n componentsProps={{\n tooltip: {\n sx: {\n fontSize: '0.875rem',\n padding: '0.5rem',\n fontFamily: 'Plus Jakarta Sans, sans-serif'\n },\n },\n }}\n >\n <div\n onClick={() => {\n console.log(NewChatIcon, 'hello')\n if (isStreamEnd) resetChatHistory(); // Prevent click if disabled\n }}\n style={{\n height: '1.8rem',\n width: '1.8rem',\n marginLeft: '1rem',\n marginRight: '0.5rem',\n cursor: !isStreamEnd ? 'not-allowed' : 'pointer',\n backgroundColor: 'transparent',\n transition: 'transform 0.2s ease-in-out, opacity 0.2s',\n opacity: !isStreamEnd ? 0.4 : 0.8,\n pointerEvents: !isStreamEnd ? 'none' : 'auto', // prevents any interaction\n }}\n onMouseOver={(e) => {\n if (isStreamEnd) {\n // e.currentTarget.style.transform = 'scale(1.1)';\n e.currentTarget.style.opacity = '1';\n }\n }}\n onMouseOut={(e) => {\n if (isStreamEnd) {\n // e.currentTarget.style.transform = 'scale(1)';\n e.currentTarget.style.opacity = '0.8';\n }\n }}\n >\n <NewChatIcon />\n </div>\n </Tooltip>\n </div>\n );\n};\n\nconst constructUserQuery = (formDataState: any) => {\n return `Hey generate wta and wnta based on: \\n The issue user is facing is: ${formDataState.issue_with_response}. The user feedback is: Replace ${formDataState.original} with ${formDataState.modification}${formDataState.tooltip}`\n}\n\n\n// Handle delete tool calls from LLM responses\nconst handleDeleteToolCall = async (deleteToolData: any, baseUrl: string, organizationName: string, chatAssistantName: string) => {\n const { delete_current_learning, deleted_similar_learning_ids, deleted_conflicting_learning_ids } = deleteToolData;\n\n console.log('Processing delete tool call:', deleteToolData);\n\n // Combine all learning IDs to delete\n const allLearningIdsToDelete = [\n ...(deleted_similar_learning_ids || []),\n ...(deleted_conflicting_learning_ids || [])\n ];\n\n // Process each learning ID for deletion\n for (const learningId of allLearningIdsToDelete) {\n try {\n // Create delete payload (similar to ConflictingLearningWarnCardDB.tsx)\n const deletePayload = {\n status: \"approved\",\n metadata: {\n userName: \"M Kathyayani\",\n userEmailId: \"madumbu.kathyayani@techolution.com\",\n llm: \"claude-3.5-sonnet\",\n isVariantFlow: true,\n isDeleteAction: true,\n isAgentsFeedback: true,\n variant: {\n id: learningId,\n scope: {\n name: \"User\",\n value: [{\n name: \"M Kathyayani\",\n email: \"madumbu.kathyayani@techolution.com\",\n userId: \"8059658c-a65c-4e14-89aa-a5195f5d09f5\"\n }]\n },\n topic: {\n id: null,\n value: \"default\"\n },\n variant: `Learning ID: ${learningId}`,\n question: \"\",\n categories: [],\n created_at: new Date().toLocaleString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true\n }),\n originalQuestion: \"\",\n parameterizedQuestion: \"\",\n conditions_whentoapply: \"\",\n conditions_whennottoapply: \"\",\n parentId: null\n }\n }\n };\n\n console.log(`Deleting learning with ID: ${learningId}`);\n\n const response = await publishAgenticFeedbackForVariantIngestion({\n baseUrl,\n organizationName,\n chatAssistantName,\n payload: deletePayload,\n });\n\n if (!response.ok) {\n console.error(`Failed to delete learning ${learningId}:`, response.status, response.statusText);\n } else {\n console.log(`Successfully deleted learning ${learningId}`);\n }\n\n } catch (error) {\n console.error(`Error deleting learning ${learningId}:`, error);\n }\n }\n\n // Handle delete_current_learning flag (for future implementation)\n if (delete_current_learning) {\n console.log('Delete current learning flag is true - this will be handled later');\n // TODO: Implement current learning deletion when needed\n }\n}\n\ntype WhenToApplyCondition = {\n when_to_apply: string;\n};\n\ntype InstantLearningSuggestion = {\n conditions_whentoapply: WhenToApplyCondition[];\n conditions_whennottoapply: WhenToApplyCondition[];\n};\n\nconst ToggleSelector = ({ label, onToggle }: any) => {\n const [selected, setSelected] = useState(false);\n const spanRef = useRef<HTMLSpanElement>(null);\n\n const handleChange = () => {\n const newState = !selected;\n setSelected(newState);\n onToggle(label, newState);\n };\n\n useEffect(() => {\n const el = spanRef.current;\n if (el && selected) {\n el.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.1)';\n el.style.transform = 'scale(1)';\n el.style.backgroundColor = '#E8F5E9'; // selected bg\n el.style.color = '#2E7D32'; // selected text\n }\n }, [selected]);\n\n return (\n <span ref={spanRef} onClick={handleChange}\n style={{\n cursor: 'pointer',\n backgroundColor: selected ? '#E8F5E9' : '#fbfaff',\n color: selected ? '#2E7D32' : '#000000de',\n transition: 'all 0.2s ease-in-out',\n boxShadow: '0 2px 4px rgba(0, 0, 0, 0.2)', // default shadow\n transform: 'scale(1)', // make sure it resets after hover\n }}\n\n onMouseEnter={(e) => {\n if (!selected) {\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(30, 136, 229, 0.3)';\n e.currentTarget.style.transform = 'scale(1.02)';\n e.currentTarget.style.backgroundColor = '#f0f7ff'; // light blue hover\n e.currentTarget.style.color = '#1E88E5'; // primary blue text\n }\n }}\n onMouseLeave={(e) => {\n if (!selected) {\n e.currentTarget.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.2)';\n e.currentTarget.style.transform = 'scale(1)';\n e.currentTarget.style.backgroundColor = '#fbfaff';\n e.currentTarget.style.color = '#000000de';\n }\n }}>\n <span\n style={{\n fontWeight: 'bold',\n fontSize: '16px',\n // color: selected ? '#2E7D32' : '#888',\n transition: 'all 0.3s ease',\n transform: selected ? 'scale(1.2)' : 'scale(1)',\n opacity: selected ? 1 : 0.9,\n paddingLeft: '0.25rem',\n paddingRight: '0.25rem',\n }}\n >\n {selected ? '✓' : '+'}\n </span>\n <span>{label}</span>\n </span>\n );\n};\n\nfunction SuggestionChips({ onSelect, original, modification, tooltip }: any) {\n const themeColor = '#5928ed';\n const hoverBg = '#eae4fd';\n const suggestions = [`I want to modify \"${original}\" ${modification !== '' ? `to ${modification}` : ''}`, `I want to add a tooltip ${tooltip !== '' ? `which says ${tooltip}` : ''} to \"${original}\"`]; //\"I want to modify this and add a tooltip\"\n\n return (\n <div style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '8px',\n marginTop: '8px',\n // paddingLeft: '1rem',\n }}>\n {suggestions.map((text, index) => (\n <div\n key={index}\n onClick={() => onSelect(text)}\n style={{\n padding: '6px 12px',\n borderRadius: '16px',\n backgroundColor: '#f9f9ff',\n border: `1px solid ${themeColor}`,\n cursor: 'pointer',\n fontSize: '14px',\n color: themeColor,\n fontWeight: 500,\n transition: 'background-color 0.2s ease, color 0.2s ease',\n userSelect: 'none'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = hoverBg;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = '#f9f9ff';\n }}\n >\n {text}\n </div>\n ))}\n </div>\n );\n}\n\nconst SuggestionArea = ({ formDataState, handleStream }: any) => {\n const [isExpanded, setIsExpanded] = useState(false);\n\n return (\n <span\n style={{\n // paddingLeft: '1rem',\n fontSize: '1rem',\n color: '#1f2937',\n lineHeight: '1.75rem',\n fontFamily: 'Plus Jakarta Sans, sans-serif',\n display: 'inline'\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px', flexWrap: 'wrap' }}>\n <span style={{ fontSize: '1rem' }}>\n You can also try some options from the\n </span>\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n aria-expanded={isExpanded}\n style={{\n backgroundColor: '#f3f0ff',\n color: '#5928ed',\n padding: '4px 12px',\n borderRadius: '9999px',\n border: 'none',\n cursor: 'pointer',\n fontSize: '0.9rem',\n fontWeight: 500,\n transition: 'all 0.2s ease-in-out',\n boxShadow: '0 1px 3px rgba(0,0,0,0.05)',\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontFamily: 'Plus Jakarta Sans, sans-serif',\n }}\n onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = '#ebe4ff')}\n onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = '#f3f0ff')}\n >\n suggestions\n <span style={{ fontSize: '0.7rem' }}>{isExpanded ? <svg width=\"12px\" height=\"12px\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1 10L7.5 3L14 10\" stroke=\"#5928ed\" stroke-linecap=\"square\" />\n </svg> : <svg width=\"12px\" height=\"12px\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 5L7.5 12L1 5\" stroke=\"#5928ed\" stroke-linecap=\"square\" />\n </svg>}</span>\n </button>\n </div>\n\n {isExpanded && (\n <div\n style={{\n // marginTop: '0.75rem',\n // padding: '0.75rem',\n backgroundColor: '#f9fafb',\n // border: '1px solid #e5e7eb',\n borderRadius: '0.75rem',\n display: 'flex',\n justifyContent: 'start',\n // boxShadow: '0 1px 3px rgba(0,0,0,0.05)',\n animation: 'fadeIn 0.3s ease-in-out',\n transition: 'opacity 0.4s ease',\n opacity: 1,\n }}\n >\n\n <SuggestionChips\n onSelect={(text: string) => {\n handleStream(\n new KeyboardEvent('keydown', { key: 'Enter' }),\n false,\n `${text}`\n );\n }}\n original={formDataState?.original}\n tooltip={formDataState?.tooltip}\n modification={formDataState?.modification}\n />\n </div>\n )}\n </span>\n );\n};\n\n\nconst ChatComponent: React.FC<ChatComponentProps> = ({ chatAssistantLogoUrl, chatAssistantName, authToken, organizationName, baseUrl, setInstantLearningSuggestions, formDataState, setFormDataState, hasUserFilledForm, setHasUserFilledForm, baseWebsocketUrl, setIsNewChatClicked, selectedText, ChatIconComponent, ggcAssistantName, ThinkingBulbIconComponent, hasUserWrittenModification, setExtractedModification, setSave, setExtractedTooltip, setIsSaveLoading, isSaveLoading, save, instantLearningSuggestions, template = '', setShouldTriggerSave, validationWtaResponse, setValidationWtaResponse, learningWtaResponse, setLearningWtaResponse, isFormSaveClicked,\n setIsFormSavedClicked, onDeleteLearning, deleteLearningTrigger, setDeleteLearningTrigger, onMergeLearning, mergeLearningTrigger, setMergeLearningTrigger, onResetLearningData, setEditConflictingLearningTrigger, setEditSimilarLearningTrigger\n\n , sendMessageInChat,\n setSendMessageInChat,\n setIsMergeLoading,\n sendValidationMessage,\n setSendValidationMessage,\n setValidationRecommendations,\n isFormValidating,\n validationRecommendations,\n isFromDashboard,\n fullMessageText,\n\n}) => {\n const chatAssistant = chatAssistantName;\n const guestSessionIdRef = useRef(`${chatAssistant}-${organizationName}-${uuidv4()}`);\n const chatPreviewIdRef = useRef(`${uuidv4()}`);\n const url = baseUrl\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n const [selectedWTA, setSelectedWTA] = useState<string[]>([]);\n const [showSelectedWTA, setShowSelectedWTA] = useState(false);\n // const isFirstQuestionSent = useRef<boolean>(false)\n const [userInput, setUserInput] = useState<null | string>('');\n const [welcomeMessage, setWelcomeMessage] = useState('');\n const [messages, setMessages] = useState<any[]>([]);\n const [messageLoading, setMessageLoading] = useState(false);\n const [waitMessageLoading, setWaitMessageLoading] = useState(false);\n const [isStreamEnd, setIsStreamEnd] = useState(true);\n const [showWelcomeMessage, setShowWelcomeMessage] = useState(true);\n const [chatInitialMessage, setChatInitialMessage] = useState('');\n const [initialLoadingMessage, setInitialLoadingMessage] = useState('');\n const [isStreaming, setIsStreaming] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [isVisible, setIsVisible] = useState(false);\n const [suggestedWta, setSuggestedWta] = useState<string[]>([]);\n const [deletedLearningIds, setDeletedLearningIds] = useState<Set<string>>(new Set());\n const [mergedLearningIds, setMergedLearningIds] = useState<Set<string>>(new Set());\n const lastProcessedResponseRef = useRef<string>('');\n const lastProcessedMergeResponseRef = useRef<string>('');\n const processedDeleteToolsRef = useRef<Set<string>>(new Set());\n const isInputEmpty = useMemo(() => { return userInput?.trim() === '' || isStreaming }, [userInput, isStreaming]);\n\n const isTextareaDisabled = useMemo(() => isStreaming || isFormValidating, [isStreaming, isFormValidating]);\n const isSendButtonDisabled = useMemo(() => isInputEmpty || isStreaming || isFormValidating, [isInputEmpty, isStreaming, isFormValidating]);\n\n const chatHeaderRef = useRef<HTMLDivElement>(null);\n const [availableHeight, setAvailableHeight] = useState('100%');\n const processedDeleteCommandsRef = useRef<Set<string>>(new Set());\n\n const areAllrequiredFieldsFilled = useMemo(() => {\n return formDataState?.original?.trim() !== \"\" &&\n (!formDataState?.isTooltipEnabled || formDataState?.tooltip?.trim() !== \"\") &&\n (!formDataState?.isModificationEnabled ||\n formDataState?.modification?.trim() !== \"\");\n }, [formDataState])\n\n const thinkingBounce = keyframes`\n 0%, 80%, 100% {\n transform: scale(0);\n }\n 40% {\n transform: scale(1.0);\n }\n `;\n const [isAwaitingValidationResponse, setIsAwaitingValidationResponse] = useState(false);\n\n // const makeLLMRequest = async ({\n // config,\n // user_prompt,\n // check_similarity,\n // system_prompt,\n // primary_type,\n // fallback_type,\n // primary_model,\n // fallback_model,\n // region,\n // temperature,\n // max_tokens,\n // primary_retries\n // }: LLMRequestParams): Promise<any> => {\n // const payload = {\n // name: ggcAssistantName,\n // organizationName: organizationName,\n // prompt: user_prompt,\n // overrideAgentConfig: {\n // GGCLLMAgent: {\n // properties: {\n // check_similarity: { value: check_similarity }\n // },\n // tools: {\n // LLMConfigurationTool: {\n // properties: {\n // context: { value: system_prompt },\n // llm_provider: { value: primary_type },\n // fallback1_provider: { value: fallback_type },\n // add_citations_in_response: { value: false }\n // },\n // integrations: {\n // VertexAIIntegration: {\n // properties: {\n // llm_model: { value: primary_model },\n // region: { value: region },\n // temperature: { value: temperature },\n // max_output_tokens: { value: max_tokens },\n // retries: { value: primary_retries },\n // chat_history: { value: [] },\n // fallback1_model_name: { value: fallback_model },\n // fallback1_region: { value: region }\n // }\n // },\n // AnthropicIntegration: {\n // properties: {\n // llm_model: { value: primary_model },\n // region: { value: region },\n // temperature: { value: temperature },\n // max_tokens: { value: max_tokens },\n // retries: { value: primary_retries },\n // chat_history: { value: [] },\n // fallback1_model_name: { value: fallback_model },\n // fallback1_region: { value: region }\n // }\n // },\n // OpenAIIntegration: {\n // properties: {\n // llm_model: { value: primary_model },\n // temperature: { value: temperature },\n // max_tokens: { value: max_tokens },\n // retries: { value: primary_retries },\n // chat_history: { value: [] },\n // fallback1_model_name: { value: fallback_model }\n // }\n // }\n // }\n // }\n // }\n // }\n // }\n // };\n\n // try {\n // const response = await http.post(`${baseUrl}/api/chat/chatResponse`, payload, {\n // headers: {\n // 'Content-Type': 'application/json',\n // ...(config.API_KEY && { Authorization: `Bearer ${config.API_KEY}` })\n // }\n // });\n\n // const message = response?.data?.result?.Answer + '\\n Tell me more about this learning.';\n // const messageSplit = message.split(' ');\n // let concatStr = '';\n\n // for (let index = 0; index < messageSplit.length; index++) {\n // setTimeout(() => {\n // concatStr += messageSplit[index] + ' ';\n // setChatInitialMessage(concatStr.trim());\n // }, 25 * index);\n // }\n\n // // setChatInitialMessage(concatStr)\n // return response.data;\n // } catch (error: any) {\n // console.error('Error making LLM request:', error.response?.data || error.message);\n // }\n // };\n\n // useEffect(() => {\n // // const staticWelcomeMessage = `👋 Welcome! I'm here to help suggest when to apply and when not to apply for your learning. Looks like you want to teach some learning about \"${selectedText}\"... \\n\\nCould you share in which scenarios you would like this learning to be applied?`\n // const staticWelcomeMessage = `Please tell me how I should correct \"${selectedText}\"? `\n\n // const welcomeMessageWords = staticWelcomeMessage.split(' ');\n // let concatStr = '';\n\n // for (let index = 0; index < welcomeMessageWords.length; index++) {\n // setTimeout(() => {\n // concatStr += welcomeMessageWords[index] + ' ';\n // setWelcomeMessage(concatStr.trim());\n // }, 45 * index);\n // }\n // }, [])\n \n\n useEffect(() => {\n let staticWelcomeMessage = `Please tell me how I should correct \"${formDataState?.original || ''}\"? `\n // if (template === 'TemplateRetrieval') {\n // staticWelcomeMessage = `Hey, I see you did not get you expected template in Stormee. So what do you want to really select for \"***${formDataState?.userQuery}***\" ?`\n // }\n setWelcomeMessage(staticWelcomeMessage)\n }, [formDataState])\n\n // const promptToTest = `You're a warm, conversational assistant helping someone explore when to apply and when not to apply a learning.\n\n // The user has just shared something they're thinking about—this could be a word, a phrase, or a full sentence:\n // \"{original}\"\n\n // At this stage, we don't know what this learning means to them or how they're thinking about using it.\n\n // Write one friendly message using the CARE framework, with a tone that blends curiosity, empathy, and acknowledgment:\n\n // Curiosity: Gently ask what prompted them to explore this learning—what made it stand out?\n\n // Acknowledge: Let them know it's thoughtful of them to reflect before jumping into action.\n\n // Respond with Empathy: Reassure them it's completely natural to pause and check if something fits before applying it.\n\n // Keep the tone warm, conversational, and supportive.\n // Don't suggest when to apply it yet—just invite them to share more.`\n\n\n // useEffect(() => {\n // if (!messages?.length) {\n // makeLLMRequest({\n // config: {\n // GGCLLMASSISTANTNAME: ggcAssistantName,\n // ORGANIZATION_NAME: organizationName\n // },\n // user_prompt: `Original Word: ${selectedText}`,\n // check_similarity: false,\n // system_prompt: promptToTest,\n // primary_type: 'Google VertexAI',\n // fallback_type: 'Azure OpenAI',\n // primary_model: 'gemini-2.0-flash',\n // fallback_model: 'gpt-4o',\n // region: 'us-central1',\n // temperature: 0,\n // max_tokens: 8192,\n // primary_retries: 3\n // })\n // }\n // }, [messages])\n\n // useEffect(() => {\n // if (sendValidationMessage) {\n // // Use the existing handleStream function to send the message\n // const isValidationMsg = sendValidationMessage === \"Validation failed. Do you have any recommendations for me?\";\n // handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, sendValidationMessage, isValidationMsg);\n \n // // Reset the state to prevent re-triggering\n // setSendValidationMessage('');\n // }\n // }, [sendValidationMessage]);\n \n useEffect(() => {\n const messageToSend = sendMessageInChat || sendValidationMessage;\n\n if (messageToSend) {\n // Check if the message is the specific validation failure message.\n const isValidationFailure = messageToSend === \"Validation failed. Do you have any recommendations for me?\";\n \n // Call handleStream with the correct flag.\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, messageToSend, isValidationFailure);\n \n // Reset both state setters to prevent re-triggering.\n setSendMessageInChat('');\n setSendValidationMessage('');\n }\n }, [sendMessageInChat, sendValidationMessage]); \n\n useEffect(() => {\n const scrollContainer = scrollContainerRef.current;\n\n const handleScroll = () => {\n const scrollContainer = scrollContainerRef.current;\n if (!scrollContainer) return;\n\n const scrollTop = scrollContainer.scrollTop; // Distance scrolled\n const scrollHeight = scrollContainer.scrollHeight; // Total height of content\n const clientHeight = scrollContainer.clientHeight; // Visible height\n\n // Calculate if the user is at the bottom\n const isAtBottom = scrollHeight - (scrollTop + clientHeight) <= 35; // 0px threshold\n setIsVisible(!isAtBottom);\n };\n\n if (scrollContainer) {\n scrollContainer.addEventListener('scroll', handleScroll);\n handleScroll();\n }\n\n return () => {\n if (scrollContainer) {\n scrollContainer.removeEventListener('scroll', handleScroll);\n }\n };\n }, [isVisible, isStreamEnd, messages]);\n\n // useEffect(() => {\n // if (hasUserFilledForm) {\n // isFirstQuestionSent.current = true;\n // // const constructedUserQuery = constructUserQuery(formDataState);\n // // // setUserInput(constructUserQuery(formDataState))\n // // setTimeout(() => {\n // // const keyBoardEvent = new KeyboardEvent('keydown', { key: 'Enter' });\n // // handleStream(keyBoardEvent, true, constructedUserQuery)\n // // }, 200)\n // }\n // }, [hasUserFilledForm])\n\n\n // const useParsedHeaderSuggestions = (messages: any[]) => {\n // return useMemo(() => {\n // const results: object[] = [];\n\n // // Regex to extract code block that starts with ```json and ends with ```\n // const codeBlockRegex = /```json\\s*([\\s\\S]*?)\\s*```/;\n\n // const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n // for (const msg of orchestratorAndAgentsMessages) {\n // const responseData = msg?.responsedata || '';\n // const match = responseData.match(codeBlockRegex);\n // if (match) {\n // try {\n // const parsed = JSON.parse(match[1]); // match[1] contains the inner JSON block\n // results.push(parsed);\n // } catch (e) {\n // console.error(\"Failed to parse JSON inside code block:\", e);\n // }\n // }\n // }\n\n // return results;\n // }, [messages]);\n // };\n\n const useParsedHeaderSuggestions = (messages: any[], onRecommendationFound: (recommendations: FormattedValidationRecommendation | null) => void ,onDeleteToolCall?: (deleteToolData: any) => void, onMergeToolCall?: (mergeToolData: any) => void) => {\n return useMemo(() => {\n const results: object[] = [];\n\n // const pattern = /\"conditions_whentoapply\"\\s*:\\s*\\[\\s*\\{\\s*\"when_to_apply\"\\s*:\\s*\"[^\"]*\"\\s*,\\s*\"confidence_score\"\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*\"when_to_apply\"\\s*:\\s*\"[^\"]*\"\\s*,\\s*\"confidence_score\"\\s*:\\s*\\d+\\s*\\})*\\s*\\]\\s*,\\s*\"conditions_whennottoapply\"\\s*:\\s*\\[\\s*\\{\\s*\"when_not_to_apply\"\\s*:\\s*\"[^\"]*\"\\s*,\\s*\"confidence_score\"\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*\"when_not_to_apply\"\\s*:\\s*\"[^\"]*\"\\s*,\\s*\"confidence_score\"\\s*:\\s*\\d+\\s*\\})*\\s*\\]/;\n // const pattern = /['\"]conditions_whentoapply['\"]\\s*:\\s*\\[\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\1).)*\\1\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\2).)*\\2\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\]\\s*,\\s*['\"]conditions_whennottoapply['\"]\\s*:\\s*\\[\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\3).)*\\3\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\4).)*\\4\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\]/;\n // const pattern = /['\"]conditions_whentoapply['\"]\\s*:\\s*\\[\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\1).)*\\1\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\2).)*\\2\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\]\\s*,\\s*['\"]conditions_whennottoapply['\"]\\s*:\\s*(\\[\\s*\\]|\\[\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\4).)*\\4\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\5).)*\\5\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\])/;\n \n //suggestion tool\n const pattern = /['\"]conditions_whentoapply['\"]\\s*:\\s*(\\[\\s*\\]|\\[\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\2).)*\\2\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\3).)*\\3\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\])\\s*,\\s*['\"]conditions_whennottoapply['\"]\\s*:\\s*(\\[\\s*\\]|\\[\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\5).)*\\5\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\6).)*\\6\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\])/;\n\n // const validationPattern = /['\"]is_valid['\"]\\s*:\\s*(true|false)\\s*,\\s*['\"]conflictingConditions['\"]\\s*:\\s*\\[(\\s*\\{[\\s\\S]*?['\"]conflictType['\"]\\s*:\\s*['\"][^'\"]+['\"][\\s\\S]*?\\}\\s*,?)*\\s*\\]/i;\n \n // validation tool \n const validationPattern = /['\"]is_valid['\"]\\s*:\\s*(true|false|True|False)\\s*,\\s*['\"]conflictingConditions['\"]\\s*:\\s*\\[\\s*(?:\\{[\\s\\S]*?['\"]conflictType['\"]\\s*:\\s*['\"][^'\"]+['\"][\\s\\S]*?\\}\\s*,?\\s*)*\\]\\s*,\\s*['\"]save['\"]\\s*:\\s*(true|false|True|False)/;\n\n // retrieval tool regex\n const dbValidationPattern = /['\"]is_valid_db['\"]\\s*:\\s*(true|false|True|False)[\\s\\S]*?['\"]conflicting_learnings['\"]\\s*:\\s*([\\s\\S]*?)\\s*,\\s*['\"]similar_learnings['\"]\\s*:\\s*([\\s\\S]*?)(?:,\\s*['\"]save['\"]|\\}$)/\n\n\n // Delete tool pattern to match delete tool JSON structure\n const deleteToolPattern = /['\"]delete_current_learning['\"]\\s*:\\s*(true|false|True|False)\\s*,\\s*['\"]deleted_similar_learning_ids['\"]\\s*:\\s*\\[[\\s\\S]*?\\]\\s*,\\s*['\"]deleted_conflicting_learning_ids['\"]\\s*:\\s*\\[[\\s\\S]*?\\]/;\n\n // Robust merge tool pattern that handles Python dictionary format with single quotes and True\n const mergeToolPattern = /{\\s*['\"]merge_learnings['\"]\\s*:\\s*(?:True|true)[\\s\\S]+?}/;\n\n\n //Edit tool pattern \n // REGEX FOR MATCHING: (NOTE: DO INCLUDE A string check for edit_actions)\n\n // const regex = /({[\\s\\S]*}|\\[[\\s\\S]*\\])/;\n // const match = text.match(regex);\n // let jsonLike = match[1];\n // const jsonStr = jsonLike.replace(/'/g, '\"');\n\n const editToolPattern = /({[\\s\\S]*}|\\[[\\s\\S]*\\])/;\n\n const jsonFinderPattern = /({[\\s\\S]*})/;\n\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n console.log('🔍 RESPONSE DATA:', String(responseData));\n \n // Check if response contains merge_learnings\n if (String(responseData).includes('merge_learnings')) {\n console.log('🔍 FOUND merge_learnings in response!');\n console.log('🔍 Full response:', String(responseData));\n }\n \n // Check if response contains merge_learnings\n if (String(responseData).includes(\"'merge_learnings'\")) {\n console.log('🔍 FOUND merge_learnings in response!');\n console.log('🔍 Full response:', String(responseData));\n }\n const match = responseData.match(pattern);\n if (match) {\n try {\n const extracted = JSON5.parse(`{${match[0]}}`);\n \n // Sanitize conditions to remove entries with only punctuation\n const hasTextContent = (str: string) => str && /[a-zA-Z]/.test(str);\n\n if (extracted.conditions_whentoapply && Array.isArray(extracted.conditions_whentoapply)) {\n extracted.conditions_whentoapply = extracted.conditions_whentoapply.filter(\n (item: any) => item.when_to_apply && hasTextContent(item.when_to_apply)\n );\n }\n\n if (extracted.conditions_whennottoapply && Array.isArray(extracted.conditions_whennottoapply)) {\n extracted.conditions_whennottoapply = extracted.conditions_whennottoapply.filter(\n (item: any) => item.when_not_to_apply && hasTextContent(item.when_not_to_apply)\n );\n }\n \n results.push(extracted);\n } catch (e) {\n console.error(\"Failed to parse JSON:\", e);\n }\n }\n const validationMatch = responseData.match(validationPattern);\n console.log('validationObj before cond ');\n if (validationMatch) {\n try {\n let cleanedValidation = sanitizePythonDictToJSON(validationMatch[0] || '')\n\n const validationObj = JSON5.parse(`{${cleanedValidation}}`);\n\n console.log('validationObj before set ', validationObj);\n setValidationWtaResponse(validationObj);\n console.log('validationObj after set in chat', validationWtaResponse);\n } catch (e) {\n console.error(\"Failed to parse validation JSON:\", e);\n }\n }\n // Try to parse the entire responseData as JSON to handle nested objects properly\n try {\n let cleanedResponse = sanitizePythonDictToJSON(responseData || '')\n\n // Try to parse as a complete JSON object first\n let parsedData = JSON5.parse(cleanedResponse);\n\n // Check if this contains our expected validation structure\n if (parsedData && typeof parsedData === 'object' &&\n 'is_valid_db' in parsedData &&\n 'conflicting_learnings' in parsedData &&\n 'similar_learnings' in parsedData) {\n\n console.log('Found validation data in response:', parsedData);\n setLearningWtaResponse(parsedData);\n console.log('dbVal after set in chat', learningWtaResponse);\n } \n else {\n // Fallback to regex\n const dbValidationMatch = responseData.match(dbValidationPattern);\n if (dbValidationMatch) {\n try {\n console.log(\"🔍 Regex Match Found. Attempting reconstruction...\");\n \n // Extract captured groups\n const isValidDbRaw = dbValidationMatch[1]; \n const conflictingRaw = dbValidationMatch[2]; \n const similarRaw = dbValidationMatch[3];\n\n // Helper to clean Python Booleans\n const cleanPythonBool = (str: string) => \n str.replace(/\\bTrue\\b/g, \"true\")\n .replace(/\\bFalse\\b/g, \"false\")\n .replace(/\\bNone\\b/g, \"null\");\n\n // Reconstruct manually to avoid global quote replacement issues\n const reconstructedJSON = `{\n \"is_valid_db\": ${cleanPythonBool(isValidDbRaw)},\n \"conflicting_learnings\": ${cleanPythonBool(conflictingRaw)},\n \"similar_learnings\": ${cleanPythonBool(similarRaw)}\n }`;\n\n console.log(\"📝 Reconstructed JSON (First 100 chars):\", reconstructedJSON.substring(0, 100) + \"...\");\n\n const dbValidationObj = JSON5.parse(reconstructedJSON);\n setLearningWtaResponse(dbValidationObj);\n console.log('✅ [Fix] dbVal parsed successfully via Group Capture');\n\n } catch (regexError) {\n console.error(\"❌ Failed to parse validation JSON with regex fallback:\", regexError);\n console.log(\"❌ Failed Match Groups:\", dbValidationMatch);\n }\n }\n }\n } catch (e) {\n // If JSON parsing fails, fallback to the original regex approach\n console.log('JSON parsing failed, trying regex fallback for validation data');\n // Fixed Code (Working)\n const dbValidationMatch = responseData.match(dbValidationPattern);\n if (dbValidationMatch) {\n try {\n // Extract captured groups from the Regex\n // Group 1: is_valid_db (true/false)\n // Group 2: conflicting_learnings content\n // Group 3: similar_learnings content\n const isValidDbRaw = dbValidationMatch[1]; \n const conflictingRaw = dbValidationMatch[2]; \n const similarRaw = dbValidationMatch[3];\n\n // Helper to clean Python Booleans ONLY. \n // We do NOT touch quotes here, letting JSON5 handle the raw string structure.\n const cleanPythonBool = (str: string) => \n str.replace(/\\bTrue\\b/g, \"true\")\n .replace(/\\bFalse\\b/g, \"false\")\n .replace(/\\bNone\\b/g, \"null\");\n\n // Reconstruct the JSON object manually\n const reconstructedJSON = `{\n \"is_valid_db\": ${cleanPythonBool(isValidDbRaw)},\n \"conflicting_learnings\": ${cleanPythonBool(conflictingRaw)},\n \"similar_learnings\": ${cleanPythonBool(similarRaw)}\n }`;\n\n console.log(\"🛠️ Reconstructed DB Validation JSON:\", reconstructedJSON.substring(0, 100) + \"...\");\n\n const dbValidationObj = JSON5.parse(reconstructedJSON);\n setLearningWtaResponse(dbValidationObj);\n console.log('✅ [App] dbVal set via Regex Fallback:', dbValidationObj);\n\n } catch (regexError) {\n console.error(\"Failed to parse validation JSON with regex fallback:\", regexError);\n console.log(\"Failed string:\", dbValidationMatch[0]);\n }\n }\n }\n const deleteToolMatch = responseData.match(deleteToolPattern);\n if (deleteToolMatch) {\n try {\n let cleanedDeleteTool = sanitizePythonDictToJSON(deleteToolMatch[0] || '')\n\n const deleteToolObj = JSON5.parse(`{${cleanedDeleteTool}}`);\n\n console.log('Delete tool detected:', deleteToolObj);\n\n // Call the callback with the delete tool data (deduplication happens in the callback)\n if (onDeleteToolCall) {\n onDeleteToolCall(deleteToolObj);\n }\n } catch (e) {\n console.error(\"Failed to parse delete tool JSON:\", e);\n }\n }\n\n\n console.log('🔍 Testing merge tool regex on response data...');\n \n const mergeToolMatch = responseData.match(mergeToolPattern);\n console.log('🔍 Merge tool regex match result:', mergeToolMatch);\n \n if (mergeToolMatch) {\n console.log('🔍 MERGE TOOL REGEX MATCHED!');\n try {\n // get python-like dictionary string.\n const pythonLikeString = mergeToolMatch[0];\n\n // sanitize the string into valid JSON format.\n const jsonString = sanitizePythonDictToJSON(pythonLikeString);\n\n // parse the sanitized JSON string into an object.\n const mergeToolObj = JSON5.parse(jsonString);\n\n console.log('✅ Correctly parsed merge tool object:', mergeToolObj);\n\n //pass the complete, correctly parsed object to the callback.\n // The arrays inside mergeToolObj are now perfect and require no splitting.\n if (onMergeToolCall) {\n onMergeToolCall(mergeToolObj);\n }\n } catch (e) {\n console.error(\"Failed to parse merge tool JSON:\", e);\n }\n }\n //edit tool \n const editToolMatch = responseData.match(editToolPattern);\n if (editToolMatch && responseData.includes('edit_actions')) { // Check for a keyword to be more specific\n try {\n console.log('Edit tool match found:', editToolMatch[0]);\n \n // Sanitize the Python-like string into valid JSON\n const jsonString = sanitizePythonDictToJSON(editToolMatch[0]);\n \n const editToolObj = JSON5.parse(jsonString);\n console.log('Edit tool detected and parsed successfully:', editToolObj);\n\n if (editToolObj.conflicting_learnings) {\n setEditConflictingLearningTrigger(editToolObj.conflicting_learnings);\n console.log('Setting edit conflicting learning trigger:', editToolObj.conflicting_learnings);\n }\n if (editToolObj.similar_learnings) {\n setEditSimilarLearningTrigger(editToolObj.similar_learnings);\n console.log('Setting edit similar learning trigger:', editToolObj.similar_learnings);\n }\n \n } catch (e) {\n console.error(\"Failed to parse edit tool JSON:\", e);\n }\n }\n \n const jsonMatch = responseData.match(jsonFinderPattern);\n\n if (jsonMatch) {\n try {\n const jsonString = sanitizePythonDictToJSON(jsonMatch[0]);\n const parsedObject = JSON5.parse(jsonString);\n\n // Check if it's the recommendation object\n if (parsedObject.recommended_whentoapply || parsedObject.recommended_whennottoapply) {\n // 3. Use the new parser function\n const recommendations = parseValidationRecommendations(parsedObject);\n onRecommendationFound(recommendations);\n }\n } catch (e) {\n console.error(\"Failed to parse validation recommendations:\", e);\n }\n }\n }\n \n return results;\n }, [messages, onDeleteToolCall]);\n};\n // const editToolMatch = responseData.match(editToolPattern);\n // if (editToolMatch) {\n // try {\n // console.log('Edit tool match:', editToolMatch);\n // let cleanedEditTool = sanitizePythonDictToJSON(editToolMatch[1].replace(/'/g, '\"') || '')\n // const editToolObj = JSON5.parse(`${cleanedEditTool}`);\n // console.log('Edit tool detected:', editToolObj);\n // setEditConflictingLearningTrigger(editToolObj.conflicting_learnings);\n // setEditSimilarLearningTrigger(editToolObj.similar_learnings);\n // console.log('Edit conflicting learning trigger:', editToolObj.conflicting_learnings);\n // console.log('Edit similar learning trigger:', editToolObj.similar_learnings);\n // } catch (e) {\n // console.error(\"Failed to parse edit tool JSON:\", e);\n // }\n // }\n // }\n\n // return results;\n // }, [messages, onDeleteToolCall]);\n // };\n\n // Apply the same methodology of extracting content from header message\n // Have a additional check of edit_actions as well, if they are there then use edit similar and conflicting states to set the value\n\n const clearCurrentLearningUI = useCallback(() => {\n console.log('🧹 Performing UI Cleanup for \"Delete Current Learning\"');\n\n // Reset Form Data (Keep original, clear the rest)\n setFormDataState((prev: any) => ({\n ...prev,\n original: isFromDashboard ? '' : prev.original, \n modification: '',\n tooltip: '',\n whenToApply: '',\n whenNotToApply: '',\n isTooltipEnabled: false,\n isModificationEnabled: true,\n _mergeUpdate: false\n }));\n\n // Clear Conflict Cards\n if (setValidationWtaResponse) setValidationWtaResponse(null);\n if (setLearningWtaResponse) setLearningWtaResponse(null);\n if (setValidationRecommendations) setValidationRecommendations(null);\n\n // Reset internal form state\n if (onResetLearningData) onResetLearningData();\n\n // Clear Chat extractions\n // setExtractedModification && setExtractedModification('');\n setExtractedTooltip && setExtractedTooltip('');\n setSuggestedWta([]);\n }, [setFormDataState, setValidationWtaResponse, setLearningWtaResponse, onResetLearningData, setExtractedModification, setExtractedTooltip, setSuggestedWta]);\n\n\n useEffect(() => {\n if (!messages || messages.length === 0) return;\n\n const lastMessage = messages[messages.length - 1];\n const orchestratorMessages = lastMessage?.orchestratorAndAgentsMessages || [];\n\n // The exact pattern you identified\n const deleteToolPattern = /['\"]delete_current_learning['\"]\\s*:\\s*(true|false|True|False)/;\n\n orchestratorMessages.forEach((msg: any, index: number) => {\n const responseData = msg?.responsedata || '';\n \n // [FIX] Generate ID using Parent Message ID + Index\n // This ensures if the SAME content appears in a NEW message, it generates a NEW ID.\n const parentId = lastMessage.requestId || lastMessage.id || `msg-${messages.length}`;\n const uniqueTriggerId = `${parentId}_orch_${index}`; \n\n // Check against the unique trigger ID, not the content content\n if (processedDeleteCommandsRef.current.has(uniqueTriggerId)) return;\n\n const match = responseData.match(deleteToolPattern);\n if (match) {\n // Check if the value is explicitly true\n const isTrue = match[1].toLowerCase() === 'true';\n\n if (isTrue) {\n console.log(\"✅ Delete detected in Effect - Triggering Cleanup for:\", uniqueTriggerId);\n processedDeleteCommandsRef.current.add(uniqueTriggerId); // Mark this specific message event as processed\n clearCurrentLearningUI(); // Call the cleanup function\n }\n }\n });\n }, [messages, clearCurrentLearningUI]);\n\n const handleDeleteToolCallback = useCallback(async (deleteToolData: any) => {\n // Create a unique identifier for this delete operation\n const deleteOperationId = JSON.stringify({\n deleted_similar_learning_ids: deleteToolData.deleted_similar_learning_ids || [],\n deleted_conflicting_learning_ids: deleteToolData.deleted_conflicting_learning_ids || [],\n delete_current_learning: deleteToolData.delete_current_learning || false\n });\n\n // Check if we've already processed this exact delete operation\n if (processedDeleteToolsRef.current.has(deleteOperationId)) {\n console.log('Delete operation already processed, skipping callback execution:', deleteOperationId);\n return; // Early return - don't execute any work\n }\n\n // Mark this operation as processed BEFORE doing any work\n processedDeleteToolsRef.current.add(deleteOperationId);\n console.log('Processing new delete operation:', deleteOperationId);\n\n try {\n // First, perform the database deletion\n await handleDeleteToolCall(deleteToolData, baseUrl, organizationName, chatAssistant);\n\n // Then, update the UI state by adding deleted IDs to the tracking set\n const { deleted_similar_learning_ids = [], deleted_conflicting_learning_ids = [] } = deleteToolData;\n\n // Combine all IDs to delete\n const allDeletedIds = [\n ...(deleted_similar_learning_ids || []),\n ...(deleted_conflicting_learning_ids || [])\n ];\n\n // Add deleted IDs to the tracking set (this will trigger UI filtering in LearningDetailsForm)\n setDeletedLearningIds(prev => {\n const newSet = new Set(prev);\n allDeletedIds.forEach(id => newSet.add(id));\n console.log('Added deleted learning IDs to tracking set:', Array.from(newSet));\n return newSet;\n });\n\n console.log('UI state updated after deletion of learnings:', allDeletedIds);\n } catch (error) {\n // If there's an error, remove from processed set so it can be retried\n processedDeleteToolsRef.current.delete(deleteOperationId);\n console.error('Error processing delete operation:', error);\n throw error;\n }\n }, [baseUrl, organizationName, chatAssistant, setDeletedLearningIds]);\n\n // Callback function to handle merge tool calls\n const handleMergeToolCallback = useCallback(async (mergeToolData: any) => {\n\n setIsMergeLoading(true);\n console.log('🔴 MERGE CALLBACK - Processing merge tool call:', mergeToolData);\n try { \n const { merge_learnings, similar_learnings, conditions_whentoapply, conditions_whennottoapply } = mergeToolData;\n \n console.log('🔴 MERGE CALLBACK - Extracted data:');\n console.log('merge_learnings:', merge_learnings);\n console.log('similar_learnings:', similar_learnings);\n console.log('conditions_whentoapply:', conditions_whentoapply);\n console.log('conditions_whennottoapply:', conditions_whennottoapply);\n\n if (!merge_learnings || !similar_learnings || !Array.isArray(similar_learnings)) {\n console.log('Invalid merge tool data, skipping');\n return;\n }\n\n \n console.log(' MERGE CALLBACK - Current formDataState before replacement:', formDataState);\n console.log(' MERGE CALLBACK - Current whenToApply:', formDataState?.whenToApply);\n console.log(' MERGE CALLBACK - Current whenNotToApply:', formDataState?.whenNotToApply);\n \n // UNCONDITIONALLY replace conditions in formDataState with whatever is in the response header\n // need to update both formDataState and the arrays simultaneously to prevent override\n if (conditions_whentoapply && Array.isArray(conditions_whentoapply)) {\n console.log(' MERGE CALLBACK - UNCONDITIONALLY replacing whenToApply conditions:', conditions_whentoapply);\n // Join conditions with 'OR' to match the expected format\n const whenToApplyString = conditions_whentoapply.join(' OR ');\n console.log(' MERGE CALLBACK - New whenToApply string:', whenToApplyString);\n \n // Update formDataState with a flag to indicate this is a merge update\n setFormDataState((prev: any) => {\n console.log(' MERGE CALLBACK - Previous formDataState:', prev);\n const newState = {\n ...prev,\n whenToApply: whenToApplyString,\n _mergeUpdate: true, // Flag to indicate this is a merge update\n _mergeWTA: conditions_whentoapply // Store the array for LearningDetailsForm to use\n };\n console.log('MERGE CALLBACK - New formDataState:', newState);\n return newState;\n });\n }\n\n if (conditions_whennottoapply && Array.isArray(conditions_whennottoapply)) {\n console.log(' MERGE CALLBACK - UNCONDITIONALLY replacing whenNotToApply conditions:', conditions_whennottoapply);\n // Join conditions with 'OR' to match the expected format\n const whenNotToApplyString = conditions_whennottoapply.join(' OR ');\n console.log(' MERGE CALLBACK - New whenNotToApply string:', whenNotToApplyString);\n \n setFormDataState((prev: any) => {\n console.log(' MERGE CALLBACK - Previous formDataState for WNTA:', prev);\n const newState = {\n ...prev,\n whenNotToApply: whenNotToApplyString,\n _mergeUpdate: true, // Flag to indicate this is a merge update\n _mergeWNTA: conditions_whennottoapply // Store the array for LearningDetailsForm to use\n };\n console.log(' MERGE CALLBACK - New formDataState for WNTA:', newState);\n return newState;\n });\n }\n\n // Add merged learning IDs to the tracking set (this will trigger UI re-keying similar to delete)\n setMergedLearningIds(prev => {\n const newSet = new Set(prev);\n similar_learnings.forEach(id => newSet.add(id));\n console.log('Added merged learning IDs to tracking set:', Array.from(newSet));\n return newSet;\n });\n\n // Send delete request for similar_learnings IDs\n for (const learningId of similar_learnings) {\n console.log(`Sending delete request for merged learning ID: ${learningId}`);\n \n // // Call the delete API for each similar learning ID\n // if (onDeleteLearning) {\n // onDeleteLearning(learningId);\n // }\n\n //make the delete payload here again.\n const deletePayload = {\n status: \"approved\",\n metadata: {\n userName: \"M Kathyayani\",\n userEmailId: \"madumbu.kathyayani@techolution.com\",\n llm: \"claude-3.5-sonnet\",\n isVariantFlow: true,\n isDeleteAction: true,\n isAgentsFeedback: true,\n variant: {\n id: learningId,\n scope: {\n name: \"User\",\n value: [{\n name: \"M Kathyayani\",\n email: \"madumbu.kathyayani@techolution.com\",\n userId: \"8059658c-a65c-4e14-89aa-a5195f5d09f5\"\n }]\n },\n topic: {\n id: null,\n value: \"default\"\n },\n variant: `Learning ID: ${learningId}`,\n question: \"\",\n categories: [],\n created_at: new Date().toLocaleString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true\n }),\n originalQuestion: \"\",\n parameterizedQuestion: \"\",\n conditions_whentoapply: \"\",\n conditions_whennottoapply: \"\",\n parentId: null\n }\n }\n };\n\n const response = await publishAgenticFeedbackForVariantIngestion({\n baseUrl,\n organizationName,\n chatAssistantName: chatAssistant, \n payload: deletePayload,\n });\n\n if(!response.ok){\n console.error(`Failed to delete merged learning ID ${learningId}:`, response.statusText);\n } else {\n \n console.log(`Successfully deleted merged learning ID ${learningId}`);\n }\n \n }\n } catch (error) {\n console.error('Error processing merge operation:', error);\n } finally { \n console.log('switched off');\n setIsMergeLoading(false);\n }\n \n }, [onDeleteLearning, setMergedLearningIds, setFormDataState, setIsMergeLoading]);\n\n const parsedSuggestions = useParsedHeaderSuggestions(messages, setValidationRecommendations,handleDeleteToolCallback, handleMergeToolCallback );\n\n useEffect(() => {\n const latestSuggestions = parsedSuggestions?.[parsedSuggestions?.length - 1] || null;\n if (latestSuggestions) {\n setInstantLearningSuggestions(latestSuggestions);\n console.log(\"Parsed suggestions:\", parsedSuggestions);\n }\n\n }, [parsedSuggestions]);\n\n\n\n // Filter learningWtaResponse when deletedLearningIds changes (similar to LearningDetailsForm logic)\n useEffect(() => {\n if (!learningWtaResponse || deletedLearningIds.size === 0) return;\n\n // Check if we have any learnings that need to be filtered out\n const hasConflictingToFilter = learningWtaResponse.conflicting_learnings &&\n Object.values(learningWtaResponse.conflicting_learnings).some((learning: any) =>\n deletedLearningIds.has(learning.id)\n );\n\n const hasSimilarToFilter = learningWtaResponse.similar_learnings &&\n Object.values(learningWtaResponse.similar_learnings).some((learning: any) =>\n deletedLearningIds.has(learning.id)\n );\n\n // Only proceed if there are actually learnings to filter\n if (!hasConflictingToFilter && !hasSimilarToFilter) return;\n\n // Create a unique identifier for the current response to prevent infinite loops\n const currentResponseId = JSON.stringify({\n deletedIds: Array.from(deletedLearningIds).sort()\n });\n\n // Skip if we've already processed this set of deleted IDs\n if (lastProcessedResponseRef.current === currentResponseId) {\n return;\n }\n\n const filteredResponse = { ...learningWtaResponse };\n\n // Filter out deleted learnings from conflicting learnings and re-key using index (0th = A, 1st = B, etc.)\n if (filteredResponse.conflicting_learnings) {\n const remainingConflicting = Object.values(filteredResponse.conflicting_learnings)\n .filter((learning: any) => !deletedLearningIds.has(learning.id));\n\n console.log('[ChatComponent] Re-keying conflicting learnings:', {\n originalKeys: Object.keys(filteredResponse.conflicting_learnings),\n remainingCount: remainingConflicting.length,\n remainingLearnings: remainingConflicting.map((l: any) => ({ id: l.id, variant: l.feedback.variant }))\n });\n\n const rekeyedConflicting: any = {};\n remainingConflicting.forEach((learning: any, index: number) => {\n const key = String.fromCharCode(65 + index); // 65 is ASCII for 'A'\n rekeyedConflicting[key] = learning;\n console.log(`[ChatComponent] Conflicting learning ${index} gets key '${key}':`, learning.feedback.variant);\n });\n filteredResponse.conflicting_learnings = rekeyedConflicting;\n console.log('[ChatComponent] Final conflicting learnings keys:', Object.keys(rekeyedConflicting));\n }\n\n // Filter out deleted learnings from similar learnings and re-key using index (0th = A, 1st = B, etc.)\n if (filteredResponse.similar_learnings) {\n const remainingSimilar = Object.values(filteredResponse.similar_learnings)\n .filter((learning: any) => !deletedLearningIds.has(learning.id));\n\n console.log('[ChatComponent] Re-keying similar learnings:', {\n originalKeys: Object.keys(filteredResponse.similar_learnings),\n remainingCount: remainingSimilar.length,\n remainingLearnings: remainingSimilar.map((l: any) => ({ id: l.id, variant: l.feedback.variant }))\n });\n\n const rekeyedSimilar: any = {};\n remainingSimilar.forEach((learning: any, index: number) => {\n const key = String.fromCharCode(65 + index); // 65 is ASCII for 'A'\n rekeyedSimilar[key] = learning;\n console.log(`[ChatComponent] Similar learning ${index} gets key '${key}':`, learning.feedback.variant);\n });\n filteredResponse.similar_learnings = rekeyedSimilar;\n console.log('[ChatComponent] Final similar learnings keys:', Object.keys(rekeyedSimilar));\n }\n\n // Update the ref to mark this set of deleted IDs as processed\n lastProcessedResponseRef.current = currentResponseId;\n\n console.log('Filtered learningWtaResponse after deletion:', filteredResponse);\n setLearningWtaResponse(filteredResponse);\n }, [deletedLearningIds, learningWtaResponse, setLearningWtaResponse]);\n\n // Filter learningWtaResponse when mergedLearningIds changes (similar to delete logic)\n useEffect(() => {\n if (!learningWtaResponse || mergedLearningIds.size === 0) return;\n\n // Check if we have any similar learnings that need to be filtered out (merge only affects similar learnings)\n const hasSimilarToFilter = learningWtaResponse.similar_learnings &&\n Object.values(learningWtaResponse.similar_learnings).some((learning: any) =>\n mergedLearningIds.has(learning.id)\n );\n\n // Only proceed if there are actually learnings to filter\n if (!hasSimilarToFilter) return;\n\n // Create a unique identifier for the current merge response to prevent infinite loops\n const currentMergeResponseId = JSON.stringify({\n mergedIds: Array.from(mergedLearningIds).sort()\n });\n\n // Skip if we've already processed this set of merged IDs\n if (lastProcessedMergeResponseRef.current === currentMergeResponseId) {\n return;\n }\n\n const filteredResponse = { ...learningWtaResponse };\n\n // Filter out merged learnings from similar learnings and re-key using index (0th = A, 1st = B, etc.)\n if (filteredResponse.similar_learnings) {\n const remainingSimilar = Object.values(filteredResponse.similar_learnings)\n .filter((learning: any) => !mergedLearningIds.has(learning.id));\n\n console.log('[ChatComponent] Re-keying similar learnings after merge:', {\n originalKeys: Object.keys(filteredResponse.similar_learnings),\n remainingCount: remainingSimilar.length,\n remainingLearnings: remainingSimilar.map((l: any) => ({ id: l.id, variant: l.feedback.variant }))\n });\n\n const rekeyedSimilar: any = {};\n remainingSimilar.forEach((learning: any, index: number) => {\n const key = String.fromCharCode(65 + index); // 65 is ASCII for 'A'\n rekeyedSimilar[key] = learning;\n console.log(`[ChatComponent] Similar learning ${index} gets key '${key}':`, learning.feedback.variant);\n });\n filteredResponse.similar_learnings = rekeyedSimilar;\n console.log('[ChatComponent] Final similar learnings keys after merge:', Object.keys(rekeyedSimilar));\n }\n\n // Update the ref to mark this set of merged IDs as processed\n lastProcessedMergeResponseRef.current = currentMergeResponseId;\n\n console.log('Filtered learningWtaResponse after merge:', filteredResponse);\n setLearningWtaResponse(filteredResponse);\n }, [mergedLearningIds, learningWtaResponse, setLearningWtaResponse]);\n\n const useParsedHeaderModification = (messages: any[]) => {\n return useMemo(() => {\n const results: object[] = [];\n\n const pattern = /['\"](\\w+)['\"]\\s*:\\s*(['\"])((?:\\\\.|(?!\\2).)*)\\2/g;\n\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n \n let match;\n while ((match = pattern.exec(responseData)) !== null) {\n try {\n const key = match[1]; \n let value = match[3]; \n if ((value.startsWith(\"'\") && value.endsWith(\"'\")) || (value.startsWith('\"') && value.endsWith('\"'))) {\n // If so, strip those outer quotes\n value = value.substring(1, value.length - 1);\n }\n\n const extracted = { [key]: value };\n results.push(extracted);\n\n } catch (e) {\n console.error(\"Failed to parse regex match for header message:\", e);\n }\n }\n }\n\n return results;\n }, [messages]);\n };\n\n const parsedModification = useParsedHeaderModification(messages);\n\n useEffect(() => {\n const modificationObj: any = parsedModification?.find((item: any) => 'modification' in item);\n \n if (modificationObj) {\n setExtractedModification(modificationObj.modification)\n }\n\n const tooltipObj:any = parsedModification?.find((item: any) => 'tooltip' in item);\n if (tooltipObj) {\n setExtractedTooltip(tooltipObj.tooltip)\n }\n\n const originalObj: any = parsedModification?.find((item: any) => 'original' in item);\n if (originalObj) {\n console.log(\"✅ Original Extracted:\", originalObj.original); \n setFormDataState((prev: any) => { \n if (prev.question === originalObj.original) return prev;\n \n return {\n ...prev, \n original: originalObj.original,\n _extractedOriginalUpdate: true\n };\n });\n }\n\n }, [parsedModification]);\n\n\n const useParsedWtaSuggestions = (\n messages: any[],\n setSuggestedWta: (wta: string[]) => void\n ) => {\n useEffect(() => {\n const orchestratorAndAgentsMessages =\n messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n const regex = /<wta>([\\s\\S]*?)<\\/wta>/gi;\n const matches: string[] = [];\n let match;\n while ((match = regex.exec(responseData)) !== null) {\n console.log('match wta suggestion', match)\n matches.push(match[1]);\n }\n\n if (matches.length) {\n setSuggestedWta(matches);\n }\n }\n }, [messages, setSuggestedWta]);\n };\n\n useParsedWtaSuggestions(messages, setSuggestedWta);\n\n const useParsedHeaderTooltip = (messages: any[]) => {\n return useMemo(() => {\n const results: object[] = [];\n\n const pattern = /^\\{\\s*(['\"])(\\w+)\\1\\s*:\\s*(['\"])(.*?)\\3\\s*\\}$/;\n\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n const match: string[] = responseData.match(pattern);\n if (match) {\n console.log('match: ', match[0])\n try {\n const extracted = JSON5.parse(match[0]);\n results.push(extracted);\n } catch (e) {\n console.error(\"Failed to parse JSON:\", e);\n }\n }\n }\n\n return results;\n }, [messages]);\n };\n\n const parseTooltip = useParsedHeaderTooltip(messages);\n\n useEffect(() => {\n const latestParseTooltip: any = parseTooltip?.[parseTooltip?.length - 1] || null;\n if (latestParseTooltip) {\n console.log('latestParseTooltip: ', latestParseTooltip)\n setExtractedTooltip(latestParseTooltip?.tooltip)\n }\n\n }, [parseTooltip]);\n\n // const useParsedHeaderSave = (messages: any[]) => {\n // return useMemo(() => {\n // const results: object[] = [];\n\n // const pattern = /\\{\\s*'save'\\s*:\\s*(True|False|true|false)\\s*\\}/;\n\n // const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n // for (const msg of orchestratorAndAgentsMessages) {\n // const responseData = msg?.responsedata || '';\n // const match = responseData.match(pattern);\n // if (match) {\n // try {\n // // Transform and store the fixed version\n // const fixed = match[0]\n // .replace(/\\bTrue\\b/, 'true')\n // .replace(/\\bFalse\\b/, 'false')\n // .replace(/'/g, '\"'); // single to double quotes\n\n // console.log('corrected: ', fixed);\n\n // const extracted = JSON5.parse(fixed);\n // results.push(extracted);\n // } catch (e) {\n // console.error(\"Failed to parse JSON:\", e);\n // }\n // }\n // }\n\n // return results;\n // }, [messages]);\n // };\n\n const useParsedHeaderSave = (messages: any[]) => {\n const [parsedSave, setParsedSave] = useState<object[]>([]);\n\n useEffect(() => {\n const results: object[] = [];\n const pattern = /\\{\\s*['\"]save['\"]\\s*:\\s*(True|False|true|false)\\s*\\}/;\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n const match = responseData.match(pattern);\n\n if (match) {\n try {\n const fixed = match[0]\n .replace(/\\bTrue\\b/, 'true')\n .replace(/\\bFalse\\b/, 'false')\n .replace(/'/g, '\"');\n\n console.log('corrected:', fixed);\n\n const extracted = JSON5.parse(fixed);\n if (extracted.save === true) {\n setShouldTriggerSave(true);\n }\n results.push(extracted);\n } catch (e) {\n console.error(\"Failed to parse JSON:\", e);\n }\n }\n }\n\n setParsedSave(results);\n }, [messages]);\n\n return parsedSave;\n };\n\n const parsedSave = useParsedHeaderSave(messages);\n\n // useEffect(() => {\n // const latestParsedSave: any = parsedSave?.[parsedSave?.length - 1] || null;\n\n // let timeoutId: NodeJS.Timeout;\n\n // if (latestParsedSave && latestParsedSave?.save && !isSaveLoading) {\n // setIsSaveLoading(true)\n // timeoutId = setTimeout(() => {\n // setIsSaveLoading(false)\n // setSave(latestParsedSave.save);\n // }, 200); // delay in milliseconds\n // }\n\n // return () => {\n // clearTimeout(timeoutId);\n // };\n // }, [parsedSave]);\n useEffect(() => {\n const latestParsedSave: any = parsedSave?.[parsedSave?.length - 1] || null;\n // Guard: ensure it's a boolean value\n if (!latestParsedSave || typeof latestParsedSave.save !== 'boolean') return;\n\n setIsSaveLoading(true);\n\n const timeoutId = setTimeout(() => {\n setIsSaveLoading(false);\n setSave(latestParsedSave.save);\n }, 200);\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [parsedSave]);\n\n useEffect(() => {\n if (isFormSaveClicked) {\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, 'Save it')\n setIsFormSavedClicked(false)\n }\n }, [isFormSaveClicked])\n\n useEffect(() => {\n if (deleteLearningTrigger && onDeleteLearning) {\n const deleteMessage = `Delete learning ${deleteLearningTrigger}`;\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, deleteMessage)\n if (setDeleteLearningTrigger) {\n setDeleteLearningTrigger(null);\n }\n }\n }, [deleteLearningTrigger, onDeleteLearning, setDeleteLearningTrigger])\n\n // useEffect(() => {\n // if(sendMessageInChat) {\n // handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, sendMessageInChat)\n // setSendMessageInChat('');\n // }\n // }, [sendMessageInChat])\n\n useEffect(() => {\n getChatSettings();\n getChatHistory()\n\n const updateHeight = () => {\n const headerHeight = chatHeaderRef?.current?.clientHeight || 0;\n\n const newHeight = `calc(100% - ${headerHeight}px - 10px`;\n setAvailableHeight(newHeight);\n };\n updateHeight();\n window.addEventListener('resize', updateHeight);\n return () => window.removeEventListener('resize', updateHeight);\n\n }, []);\n\n const scrollToBottom = useCallback(() => {\n const scrollContainer = scrollContainerRef.current;\n if (scrollContainer) {\n setTimeout(() => {\n scrollContainer.scrollTo({\n top: scrollContainer.scrollHeight,\n behavior: \"smooth\",\n });\n setIsVisible(false)\n }, 100);\n }\n }, []);\n\n useEffect(() => {\n if (selectedWTA?.length > 0) {\n scrollToBottom()\n }\n }, [selectedWTA]);\n\n const getChatSettings = () => {\n let config = {\n method: 'get',\n maxBodyLength: Infinity,\n url: `${url}/api/chatbot/getChatSettings?name=${chatAssistant}&organizationName=${organizationName}`,\n headers: authToken ? { Authorization: `Bearer ${authToken}` } : {},\n };\n\n http\n .request(config)\n .then((response) => {\n if (response?.data?.chatSettings) {\n // setChatInitialMessage(\n // response?.data?.chatSettings?.chatInitialMessage\n // );\n\n if (response?.data?.chatSettings?.chatInitialMessage !== '') {\n setShowWelcomeMessage(true);\n }\n }\n })\n .catch((error) => {\n console.error(error);\n });\n };\n\n const getChatHistory = async () => {\n const getHistoryURL = `${url}/api/chat/history?name=${chatAssistant}&organizationName=${organizationName}`;\n\n try {\n const requestOptions = {\n method: 'GET',\n params: { guestSessionId: guestSessionIdRef.current },\n headers: authToken ? { Authorization: `Bearer ${authToken}` } : {},\n withCredentials: true, // Send cookies along with the request\n };\n http\n .get(getHistoryURL, requestOptions)\n .then((response) => {\n const data = response.data;\n\n if (data.length > 0) {\n setMessages(data)\n // addDateDividerToMessages(data);\n scrollToBottom();\n } else {\n setShowWelcomeMessage(true);\n }\n })\n .catch((error) => {\n console.error(error);\n });\n } catch (error) {\n setMessageLoading(false);\n console.error(error);\n }\n };\n\n const resetChatHistory = () => {\n const resetChatHistoryURL = `${url}/api/chat/resetHistory?name=${chatAssistant}&organizationName=${organizationName}`;\n setValidationWtaResponse(null)\n setLearningWtaResponse(null)\n try {\n const requestOptions = {\n method: 'GET',\n params: { guestSessionId: guestSessionIdRef.current },\n withCredentials: true, // Send cookies along with the request\n };\n http\n .get(resetChatHistoryURL, requestOptions)\n .then(() => {\n //@ts-ignore\n setExtractedModification('')\n setExtractedTooltip('');\n setIsNewChatClicked(true)\n setShowSelectedWTA(false)\n setSelectedWTA([])\n setChatInitialMessage('');\n setDeletedLearningIds(new Set()); // Clear deleted learning IDs for new chat\n lastProcessedResponseRef.current = ''; // Reset processing ref for new chat\n processedDeleteToolsRef.current.clear(); // Clear processed delete tools for new chat\n processedMergeTriggers.current.clear(); // Clear processed merge triggers for new chat\n if (setMergeLearningTrigger) {\n setMergeLearningTrigger(null); // Clear any pending merge triggers\n }\n chatPreviewIdRef.current = `${uuidv4()}`;\n setHasUserFilledForm(false)\n setMessages([]);\n setShowWelcomeMessage(true);\n\n // Reset learning data in LearningDetailsForm\n if (onResetLearningData) {\n console.log('[ChatComponent] 🔄 Calling onResetLearningData callback');\n onResetLearningData();\n } else {\n console.log('[ChatComponent] ❌ onResetLearningData callback not available');\n }\n\n setFormDataState((prev: any) => ({\n ...prev,\n original: isFromDashboard ? '' : prev.original,\n modification: '',\n tooltip: '',\n whenToApply: '',\n whenNotToApply: '',\n isTooltipEnabled: false,\n isModificationEnabled: true\n }));\n })\n .catch((error) => {\n console.error(error);\n });\n } catch (error) {\n setMessageLoading(false);\n console.error(error);\n }\n };\n\n function replaceAsteriskInAnchor(inputString: string): string {\n // Regular expression to match an anchor tag with asterisk inside\n const regex = /<a [^>]*>.*?<\\/a>/g;\n // Check if the inputString contains an anchor tag with asterisk and replace it\n const replacedString = inputString?.replace(regex, (match) => {\n // Replace asterisk inside the anchor tag with &ast;\n return match?.replace(/\\*/g, '&ast;');\n });\n return replacedString;\n }\n\n const getAssistantObj = (event: any, accordianMessageArray: any, explainabilityMap: any) => {\n console.log('event', event, Object.keys(event));\n console.log('content: ', event?.data)\n let streamedresponse = { role: 'assistant', content: '', id: uuidv4() };\n //orchestrator is sending message, we initially set it as normal message\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === false &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === true &&\n event?.data?.chatStream?.continueChatResult?.isEnd === false) {\n streamedresponse.content = replaceAsteriskInAnchor(\n event?.data?.chatStream?.continueChatResult?.message?.content\n )?.replaceAll('WaitMessage: ', '');\n }\n //orchestrator is sending message and thinking break is there, we add it to accordian\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === true &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === true &&\n event?.data?.chatStream?.continueChatResult?.isEnd === false) {\n //check for wait message deletion\n streamedresponse.content = \"\";\n accordianMessageArray.push(\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: false,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: false\n }\n );\n\n }\n //orchestrator replied with the final message, this is the final response, no need for accordian\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === false &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === true &&\n event?.data?.chatStream?.continueChatResult?.isEnd === true) {\n streamedresponse.content = replaceAsteriskInAnchor(\n event?.data?.chatStream?.continueChatResult?.message?.content\n )?.replaceAll('WaitMessage: ', '');\n }\n\n //agent responded it will directly be shown in collapsed form\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === false &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === false &&\n event?.data?.chatStream?.continueChatResult?.isEnd === false) {\n const continueChatResult = event?.data?.chatStream?.continueChatResult;\n // Check for explainability_id and responded_by, and update the map\n if (continueChatResult.explainability_id && continueChatResult.responded_by) {\n const explainabilityId = continueChatResult.explainability_id;\n const respondedBy = continueChatResult.responded_by;\n // Only set the value if the map does not already contain the explainabilityId\n if (!explainabilityMap.has(explainabilityId)) {\n explainabilityMap.set(explainabilityId, { responded_by: respondedBy, index: accordianMessageArray.length });\n }\n }\n\n if (explainabilityMap.has(event?.data?.chatStream?.continueChatResult.explainability_id)) {\n const targetedIndexId = explainabilityMap.get(event?.data?.chatStream?.continueChatResult?.explainability_id)\n const index = targetedIndexId?.index;\n //@ts-ignore\n accordianMessageArray[index] =\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: true,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: true\n }\n\n } else {\n accordianMessageArray = [\n ...accordianMessageArray,\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: true,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: false\n }\n ]\n }\n }\n\n //final response from agent\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === true &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === false &&\n event?.data?.chatStream?.continueChatResult?.isEnd === false\n ) {\n const continueChatResult = event?.data?.chatStream?.continueChatResult;\n // Check for explainability_id and responded_by, and update the map\n if (continueChatResult.explainability_id && continueChatResult.responded_by) {\n const explainabilityId = continueChatResult.explainability_id;\n const respondedBy = continueChatResult.responded_by;\n // Only set the value if the map does not already contain the explainabilityId\n if (!explainabilityMap.has(explainabilityId)) {\n explainabilityMap.set(explainabilityId, { responded_by: respondedBy, index: accordianMessageArray.length });\n }\n }\n\n if (explainabilityMap.has(event?.data?.chatStream?.continueChatResult?.explainability_id)) {\n const targetedIndexId = explainabilityMap.get(event?.data?.chatStream?.continueChatResult?.explainability_id)\n const index = targetedIndexId?.index;\n //@ts-ignore\n accordianMessageArray[index] =\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: false,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: true\n }\n\n } else {\n accordianMessageArray.push(\n\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: false,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: false\n }\n );\n }\n\n }\n\n const annotations = event?.data?.chatStream?.continueChatResult?.message?.annotations;\n const userFeedbackId = event?.data?.chatStream?.continueChatResult?.message?.userFeedbackId || ''\n let assistantObj = {\n role: 'assistant',\n content: streamedresponse.content,\n orchestratorAndAgentsMessages: accordianMessageArray,\n time: new Date(),\n requestId: event?.data?.chatStream?.continueChatResult?.requestId ?? '',\n citations: event?.data?.chatStream?.continueChatResult?.message?.citations,\n guides_utilized: event?.data?.chatStream?.continueChatResult?.message?.guides_utilized ?? [],\n annotations: annotations,\n resourceId: event?.data?.chatStream?.continueChatResult?.resourceId,\n userFeedbackId,\n citationDisplayType: event?.data?.chatStream?.continueChatResult?.message?.citationDisplayType ?? \"\"\n }\n\n if (annotations) {\n for (let index = 0; index < annotations?.length; index++) {\n const annotation = annotations[index];\n assistantObj = { ...assistantObj, content: assistantObj?.content?.replace(annotation?.text, annotation?.text + `<sup>${index}</sup>`) }\n }\n }\n return assistantObj;\n }\n\n function extractWaitMessage(inputString: string) {\n const prefix = 'WaitMessage: ';\n const startIndex = inputString.indexOf(prefix);\n\n if (startIndex !== -1) {\n const extractedString = inputString.substring(\n startIndex + prefix.length\n );\n return extractedString?.replaceAll('WaitMessage: ', '');\n } else {\n return '';\n }\n }\n\n const handleMessages = (data: any, explainabilityMap: any, accordianMessageArray: any, userQuestionTime: any, userInputParam: string, isFirstQuestionSent?: boolean) => {\n console.log('userInput: ', userInputParam)\n let streamedresponse = { role: 'assistant', content: '', id: uuidv4() };\n if (data?.chatStream?.continueChatResult?.message?.content?.includes('WaitMessage: ')) {\n setMessageLoading(false);\n setWaitMessageLoading(true);\n streamedresponse.content = extractWaitMessage(\n data?.chatStream?.continueChatResult?.message?.content + '\\n\\n'\n );\n //@ts-ignore\n setMessages([...messages, { role: 'user', content: userInputParam, time: userQuestionTime, isFirstQuestionSent: isFirstQuestionSent || false, id: data?.chatStream?.continueChatResult?.requestId || '', reply: '' }, streamedresponse\n ]);\n } else {\n setMessageLoading(false);\n setWaitMessageLoading(false);\n streamedresponse.content = replaceAsteriskInAnchor(\n data?.chatStream?.continueChatResult?.message?.content\n )?.replaceAll('WaitMessage: ', '');\n\n const assistantObject = getAssistantObj({ data }, accordianMessageArray, explainabilityMap);\n console.log('assistantObject', assistantObject);\n setMessages([\n ...messages,\n { role: 'user', content: userInputParam || '', time: userQuestionTime, isFirstQuestionSent: isFirstQuestionSent || false, requestId: data?.chatStream?.continueChatResult?.requestId ?? '' },\n assistantObject,\n ]);\n setIsStreamEnd(data?.chatStream?.continueChatResult?.isEnd);\n }\n }\n\n const handleStream = (event?: any, isFirstQuestionSent?: boolean, userInputParam?: string,isValidationFailure: boolean = false) => {\n const finalInput = userInputParam?.trim() || userInput?.trim() || '';\n if (event.key !== 'Enter' || event.shiftKey || (userInputParam?.trim() === '' && userInput?.trim() === '') || isStreaming) { //!areAllrequiredFieldsFilled\n return;\n }\n setIsStreaming(true)\n\n if (isValidationFailure) {\n setIsAwaitingValidationResponse(true);\n }\n\n const userQuestionTime = new Date();\n setMessages([\n ...messages.map((m, index) => ({\n ...m,\n content: replaceAsteriskInAnchor(m.content)?.replace(\n 'WaitMessage: ',\n ''\n ),\n })),\n { role: 'user', content: finalInput, time: userQuestionTime, isFirstQuestionSent: false },\n ]);\n\n const explainabilityMap = new Map<string, { responded_by: string; index: number }>();\n let accordianMessageArray: any[] = [];\n setShowSelectedWTA(false);\n const params = {\n WEBSOCKET_URL: baseWebsocketUrl,\n organizationName: organizationName,\n chatAssistantName: chatAssistant,\n selectedAIModel: 'gpt-4',\n replyMessage: '',\n userName: 'Guest User',\n userEmailId: 'guestUser@example.com',\n userId: 'Guest User',\n query: userInputParam?.trim() || userInput?.trim() || '',\n requestId: `requestId-${uuidv4()}`,\n customPrompt: '',\n enableForBackend: false,\n guestSessionId: guestSessionIdRef.current,\n chatPreviewId: chatPreviewIdRef.current,\n customMetaData: {\n ...formDataState,\n whenToApply: formDataState?.whenToApply\n ?.split(' OR ')\n ?.filter((wta: string) => wta !== ''),\n whenNotToApply: formDataState?.whenNotToApply\n ?.split(' OR ')\n ?.filter((wnta: string) => wnta !== ''),\n isFirstQuestion: messages.length === 0,\n validation: isValidationFailure ? false : (validationWtaResponse ?? null),\n conflicting_learnings: learningWtaResponse?.conflicting_learnings ?? \"\",\n similar_learnings: learningWtaResponse?.similar_learnings ?? \"\",\n ...(validationRecommendations?.wta && {\n recommended_whentoapply: validationRecommendations.wta\n }),\n ...(validationRecommendations?.wnta && {\n recommended_whennottoapply: validationRecommendations.wnta\n }),\n send_metadata_to_orchestrator: true,\n\n ai_response: fullMessageText,\n },\n customMetaDataDebug: {\n conflicting_learnings_keys: learningWtaResponse?.conflicting_learnings ? Object.keys(learningWtaResponse.conflicting_learnings) : [],\n similar_learnings_keys: learningWtaResponse?.similar_learnings ? Object.keys(learningWtaResponse.similar_learnings) : [],\n conflicting_count: learningWtaResponse?.conflicting_learnings ? Object.keys(learningWtaResponse.conflicting_learnings).length : 0,\n similar_count: learningWtaResponse?.similar_learnings ? Object.keys(learningWtaResponse.similar_learnings).length : 0\n }, // howToRespond: formDataState?.howToRespond?.split('_').map((word:string) => word.charAt(0).toUpperCase() + word.slice(1)).join(' '),\n aiModel: '',\n onStreamEvent: (data: any) => handleMessages(data, explainabilityMap, accordianMessageArray, userQuestionTime, finalInput, isFirstQuestionSent),\n onStreamEnd: (data: any) => { setIsStreaming(false); setIsAwaitingValidationResponse(false);},\n onError: (error: any) => {\n console.error('Stream error:', error);\n setIsStreaming(false);\n setIsAwaitingValidationResponse(false);\n }\n };\n console.log(\"Custom MetaData Payload:\", params.customMetaData);\n\n if (userInput?.trim() !== '' || userInputParam?.trim()) {\n setMessageLoading(true);\n textAreaRef.current?.blur();\n setUserInput('');\n scrollToBottom()\n //Display initial message after entering the question in streaming fashion\n const loadingMessage = `Thanks for sharing your thoughts. I'm putting together the most helpful suggestions now, so we can make sure this really fits your needs.`;\n const loadingMessageWords = loadingMessage.split(' ');\n let concatStr = '';\n\n for (let index = 0; index < loadingMessageWords.length; index++) {\n setTimeout(() => {\n concatStr += loadingMessageWords[index] + ' ';\n setInitialLoadingMessage(concatStr.trim());\n }, 25 * index);\n }\n startChatStream(params);\n }\n }\n\n // Handle merge learning trigger - send message to chat when triggered\n const processedMergeTriggers = useRef<Set<string>>(new Set());\n\n useEffect(() => {\n if (mergeLearningTrigger && !isStreaming) {\n // Prevent duplicate processing of the same trigger\n if (processedMergeTriggers.current.has(mergeLearningTrigger)) {\n console.log('[ChatComponent] ⚠️ Duplicate merge trigger ignored:', mergeLearningTrigger);\n return;\n }\n\n console.log('[ChatComponent] 🔴 MERGE TRIGGER RECEIVED:', mergeLearningTrigger);\n processedMergeTriggers.current.add(mergeLearningTrigger);\n\n // Find the learning data to generate the merge message\n // Look in learningWtaResponse for the learning with this ID\n let learningToMerge = null;\n let sequentialLabel = 'A'; // default fallback\n\n if (learningWtaResponse?.similar_learnings) {\n const similarLearnings = Object.values(learningWtaResponse.similar_learnings);\n const learningIndex = similarLearnings.findIndex((learning: any) => learning?.id === mergeLearningTrigger);\n\n if (learningIndex !== -1) {\n learningToMerge = similarLearnings[learningIndex];\n sequentialLabel = String.fromCharCode(65 + learningIndex); // A, B, C, etc.\n }\n }\n\n if (learningToMerge) {\n // Generate the merge message\n const mergeMessage = `Merge Similar Learning ${sequentialLabel} with current learning`;\n console.log('[ChatComponent] ✅ Sending merge message to chat:', mergeMessage);\n\n // Send the merge message using handleStream\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, mergeMessage);\n console.log('[ChatComponent] Message sent successfully');\n } else {\n console.log('[ChatComponent] ❌ Learning not found for ID:', mergeLearningTrigger);\n }\n\n // Clear the trigger after processing\n if (setMergeLearningTrigger) {\n setMergeLearningTrigger(null);\n console.log('[ChatComponent] Trigger cleared');\n }\n } else if (mergeLearningTrigger && isStreaming) {\n console.log('[ChatComponent] ⚠️ Merge trigger received but streaming in progress:', mergeLearningTrigger);\n }\n }, [mergeLearningTrigger, isStreaming, setMergeLearningTrigger]);\n\n const markdownComponents = useMemo(() => ({\n img: ({ node, ...props }: any) => (\n <img\n {...props}\n style={{\n height: '100%',\n width: '100%',\n objectFit: 'contain', // To handle aspect ratio\n }}\n alt={props?.alt || ''}\n className=\"w-full sm:max-w-lg md:max-w-2xl lg:max-w-4xl mx-auto\"\n />\n ), p: ({ node, ...props }: any) => {\n return (\n <p\n {...props}\n style={{\n maxWidth: '100%',\n wordWrap: 'break-word', // Ensures long words wrap\n overflowWrap: 'break-word', // Alternative for word wrapping\n wordBreak: 'break-word', // Force breaking long unbreakable strings\n whiteSpace: 'normal', // Default wrapping behavior\n overflow: 'hidden', // Hides any unexpected overflow\n display: 'block', // Ensures proper behavior of p tags\n fontSize: '1rem', // Equivalent to Tailwind 'text-base'\n lineHeight: '1.625rem', // Equivalent to Tailwind 'leading-relaxed'\n marginBottom: '1rem', // Equivalent to Tailwind 'mb-4'\n marginTop: '10px',\n }}\n >\n {props?.children}\n </p>\n );\n },\n code: ({ node, ...props }: any) => {\n return (\n <span\n {...props}\n style={{\n maxWidth: '100%',\n wordWrap: 'break-word', // Ensures long words wrap\n overflowWrap: 'break-word', // Alternative for word wrapping\n wordBreak: 'break-word', // Force breaking long unbreakable strings\n whiteSpace: 'normal', // Default wrapping behavior\n overflow: 'hidden', // Hides any unexpected overflow\n display: 'inline-flex', // Ensures proper behavior of p tags\n fontSize: '1rem', // Equivalent to Tailwind 'text-base'\n lineHeight: '1.625rem', // Equivalent to Tailwind 'leading-relaxed'\n }}\n >\n {props?.children}\n </span>\n );\n },\n ol: ({ node, ...props }: any) => {\n return (\n <ol\n {...props}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n listStyle: 'decimal',\n paddingLeft: '2.5rem'\n }}\n >\n {props?.children}\n </ol>\n );\n },\n ul: ({ node, ...props }: any) => {\n return (\n <ul\n {...props}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n listStyle: 'decimal',\n paddingLeft: '2.5rem'\n }}\n >\n {props?.children}\n </ul>\n );\n },\n wta: ({ node, ...props }: any) => {\n const key = props.key || props['data-key']; // fallback\n const label = props.label || props.children || 'Unknown label';\n\n const addWhenToApplyCondition = (text: string, isToggleOn: boolean) => {\n const cleanText = Array.isArray(text) ? text[0] : text;\n\n if (selectedWTA?.length) {\n setShowSelectedWTA(true)\n } else {\n setShowSelectedWTA(true)\n }\n\n setSelectedWTA((prev: string[]) => {\n if (isToggleOn) {\n // Add only if not already present\n if (!prev.includes(cleanText)) {\n return [...prev, cleanText];\n }\n return prev;\n } else {\n // Remove if present\n return prev.filter((item) => item !== cleanText);\n }\n });\n }\n\n return (\n <ToggleSelector label={label} onToggle={(text: string, isToggleOn: any) => { addWhenToApplyCondition(text, isToggleOn) }} />\n );\n }\n\n }), []);\n\n\n return (\n <div className={defaultStyles.customFont} style={{ height: '100%', width: '100%', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', fontFamily: 'Plus Jakarta Sans, sans-serif', backgroundColor: '#fbfaff', border: '1px solid #d1d5db', overflow: 'hidden' }}>\n <div style={{ width: '100%', height: '100%', backgroundColor: '#fbfaff', maxWidth: '100%', overflow: 'hidden' }}>\n <div ref={chatHeaderRef}>\n <ChatHeader resetChatHistory={resetChatHistory} isStreamEnd={isStreamEnd} />\n </div>\n\n <div style={{ width: '100%', height: availableHeight, maxHeight: availableHeight, overflowY: 'auto', backgroundColor: '#fbfaff' }} ref={scrollContainerRef}>\n <div\n className='welcome-message'\n style={{\n alignItems: 'flex-start', // Align text to the top for better multi-line flow\n paddingLeft: '0.5rem', // Adds breathing space on all sides\n paddingTop: '1rem',\n maxWidth: '70%',\n fontSize: '1rem', // Base readable font\n lineHeight: '1.75rem', // Slightly more relaxed line height\n borderRadius: '0.5rem', // Subtle rounding for readability\n overflowWrap: 'break-word',\n wordBreak: 'break-word',\n whiteSpace: 'pre-wrap', // Preserves newlines while allowing wrap\n color: '#333', // Softer text color for contrast\n fontWeight: '700',\n textAlign: 'left'\n }}\n >\n <span>I'm here to help fine-tune your learning so it works as accurately as it should.</span>\n </div>\n\n {/* { //@ts-ignore\n <ReactMarkdown components={markdownComponents} rehypePlugins={[rehypeRaw]}>{markdown4}</ReactMarkdown>\n } */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'row',\n fontFamily: 'inherit',\n padding: '16px 10px 0px 16px',\n maxWidth: '80%'\n }}\n >\n <div style={{ maxHeight: `32px`, maxWidth: `32px`, marginTop: '0.3rem' }}>\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"bi:stars\" clip-path=\"url(#clip0_6004_60631)\">\n <path id=\"Vector\" d=\"M11.4867 9.37021C11.6517 8.87521 12.3507 8.87521 12.5157 9.37021L13.4832 12.2757C13.6961 12.9144 14.0549 13.4947 14.5311 13.9707C15.0073 14.4466 15.5879 14.8051 16.2267 15.0177L19.1307 15.9852C19.6257 16.1502 19.6257 16.8492 19.1307 17.0142L16.2252 17.9817C15.5865 18.1947 15.0062 18.5535 14.5302 19.0297C14.0543 19.5059 13.6958 20.0864 13.4832 20.7252L12.5157 23.6292C12.4801 23.7376 12.4112 23.832 12.3188 23.8989C12.2264 23.9658 12.1153 24.0019 12.0012 24.0019C11.8871 24.0019 11.7759 23.9658 11.6835 23.8989C11.5912 23.832 11.5223 23.7376 11.4867 23.6292L10.5192 20.7237C10.3064 20.0852 9.9478 19.505 9.47187 19.029C8.99594 18.5531 8.41572 18.1945 7.77718 17.9817L4.87168 17.0142C4.76329 16.9786 4.6689 16.9097 4.60198 16.8173C4.53506 16.725 4.49904 16.6138 4.49904 16.4997C4.49904 16.3856 4.53506 16.2745 4.60198 16.1821C4.6689 16.0897 4.76329 16.0208 4.87168 15.9852L7.77718 15.0177C8.41572 14.8049 8.99594 14.4463 9.47187 13.9704C9.9478 13.4945 10.3064 12.9142 10.5192 12.2757L11.4867 9.37021ZM5.69218 1.72171C5.71369 1.65675 5.75512 1.60022 5.8106 1.56016C5.86607 1.52009 5.93275 1.49853 6.00118 1.49853C6.06961 1.49853 6.13629 1.52009 6.19176 1.56016C6.24724 1.60022 6.28867 1.65675 6.31018 1.72171L6.89068 3.46471C7.15018 4.24171 7.75918 4.85071 8.53618 5.11021L10.2792 5.69071C10.3441 5.71222 10.4007 5.75365 10.4407 5.80912C10.4808 5.86459 10.5024 5.93128 10.5024 5.99971C10.5024 6.06813 10.4808 6.13482 10.4407 6.19029C10.4007 6.24576 10.3441 6.2872 10.2792 6.30871L8.53618 6.88921C8.15274 7.01647 7.80431 7.23149 7.51864 7.51717C7.23296 7.80284 7.01794 8.15127 6.89068 8.53471L6.31018 10.2777C6.28867 10.3427 6.24724 10.3992 6.19176 10.4393C6.13629 10.4793 6.06961 10.5009 6.00118 10.5009C5.93275 10.5009 5.86607 10.4793 5.8106 10.4393C5.75512 10.3992 5.71369 10.3427 5.69218 10.2777L5.11168 8.53471C4.98442 8.15127 4.7694 7.80284 4.48372 7.51717C4.19805 7.23149 3.84962 7.01647 3.46618 6.88921L1.72318 6.30871C1.65822 6.2872 1.60169 6.24576 1.56163 6.19029C1.52156 6.13482 1.5 6.06813 1.5 5.99971C1.5 5.93128 1.52156 5.86459 1.56163 5.80912C1.60169 5.75365 1.65822 5.71222 1.72318 5.69071L3.46618 5.11021C3.84962 4.98295 4.19805 4.76792 4.48372 4.48225C4.7694 4.19657 4.98442 3.84815 5.11168 3.46471L5.69218 1.72171ZM16.2957 0.148207C16.3105 0.105497 16.3382 0.068461 16.3751 0.0422495C16.4119 0.016038 16.456 0.00195312 16.5012 0.00195312C16.5464 0.00195313 16.5905 0.016038 16.6273 0.0422495C16.6641 0.068461 16.6919 0.105497 16.7067 0.148207L17.0937 1.30921C17.2662 1.82821 17.6727 2.23471 18.1917 2.40721L19.3527 2.79421C19.3954 2.80901 19.4324 2.83676 19.4586 2.87359C19.4848 2.91042 19.4989 2.9545 19.4989 2.99971C19.4989 3.04491 19.4848 3.08899 19.4586 3.12582C19.4324 3.16265 19.3954 3.1904 19.3527 3.20521L18.1917 3.59221C17.9361 3.67771 17.7039 3.82139 17.5134 4.01193C17.3229 4.20247 17.1792 4.43467 17.0937 4.69021L16.7067 5.85121C16.6919 5.89392 16.6641 5.93095 16.6273 5.95717C16.5905 5.98338 16.5464 5.99746 16.5012 5.99746C16.456 5.99746 16.4119 5.98338 16.3751 5.95717C16.3382 5.93095 16.3105 5.89392 16.2957 5.85121L15.9087 4.69021C15.8232 4.43467 15.6795 4.20247 15.489 4.01193C15.2984 3.82139 15.0662 3.67771 14.8107 3.59221L13.6512 3.20521C13.6085 3.1904 13.5714 3.16265 13.5452 3.12582C13.519 3.08899 13.5049 3.04491 13.5049 2.99971C13.5049 2.9545 13.519 2.91042 13.5452 2.87359C13.5714 2.83676 13.6085 2.80901 13.6512 2.79421L14.8122 2.40721C15.3312 2.23471 15.7377 1.82821 15.9102 1.30921L16.2957 0.148207Z\" fill=\"#5928ed\" />\n </g>\n <defs>\n <clipPath id=\"clip0_6004_60631\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', fontWeight: 400, color: '#000' }}>\n <div\n style={{\n display: 'inline-flex',\n flexDirection: 'column',\n alignItems: 'flex-start', // Align text to the top for better multi-line flow\n paddingLeft: '1rem', // Adds breathing space on all sides\n paddingRight: '1rem',\n width: '100%',\n maxWidth: '100%',\n fontSize: '1rem', // Base readable font\n lineHeight: '1.75rem', // Slightly more relaxed line height\n marginBottom: '1rem',\n borderRadius: '0.5rem', // Subtle rounding for readability\n overflowWrap: 'break-word',\n wordBreak: 'break-word',\n whiteSpace: 'pre-wrap', // Preserves newlines while allowing wrap\n color: '#333', // Softer text color for contrast\n }}\n >\n <span><ReactMarkdown components={{\n p: ({ node, ...props }: any) => {\n return (\n <p\n {...props}\n style={{\n margin: 0\n }}\n >\n {props?.children}\n </p>\n );\n }\n }}>{welcomeMessage}</ReactMarkdown></span>\n </div>\n </div>\n </div>\n {messages.length\n ? messages.map((message: any, index) => (\n <div style={{ display: 'flex', padding: '0.5rem 1rem', maxWidth: '100%' }}>\n {message?.role == 'assistant' && (<div style={{ maxHeight: `32px`, maxWidth: `32px`, marginTop: '0.5rem', marginRight: '1rem' }}>\n {/* {ChatIconComponent ? ChatIconComponent : <img\n src={chatAssistantLogoUrl}\n alt=\"Assistant Logo\"\n width=\"32px\"\n height=\"32px\"\n />} */}\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"bi:stars\" clip-path=\"url(#clip0_6004_60631)\">\n <path id=\"Vector\" d=\"M11.4867 9.37021C11.6517 8.87521 12.3507 8.87521 12.5157 9.37021L13.4832 12.2757C13.6961 12.9144 14.0549 13.4947 14.5311 13.9707C15.0073 14.4466 15.5879 14.8051 16.2267 15.0177L19.1307 15.9852C19.6257 16.1502 19.6257 16.8492 19.1307 17.0142L16.2252 17.9817C15.5865 18.1947 15.0062 18.5535 14.5302 19.0297C14.0543 19.5059 13.6958 20.0864 13.4832 20.7252L12.5157 23.6292C12.4801 23.7376 12.4112 23.832 12.3188 23.8989C12.2264 23.9658 12.1153 24.0019 12.0012 24.0019C11.8871 24.0019 11.7759 23.9658 11.6835 23.8989C11.5912 23.832 11.5223 23.7376 11.4867 23.6292L10.5192 20.7237C10.3064 20.0852 9.9478 19.505 9.47187 19.029C8.99594 18.5531 8.41572 18.1945 7.77718 17.9817L4.87168 17.0142C4.76329 16.9786 4.6689 16.9097 4.60198 16.8173C4.53506 16.725 4.49904 16.6138 4.49904 16.4997C4.49904 16.3856 4.53506 16.2745 4.60198 16.1821C4.6689 16.0897 4.76329 16.0208 4.87168 15.9852L7.77718 15.0177C8.41572 14.8049 8.99594 14.4463 9.47187 13.9704C9.9478 13.4945 10.3064 12.9142 10.5192 12.2757L11.4867 9.37021ZM5.69218 1.72171C5.71369 1.65675 5.75512 1.60022 5.8106 1.56016C5.86607 1.52009 5.93275 1.49853 6.00118 1.49853C6.06961 1.49853 6.13629 1.52009 6.19176 1.56016C6.24724 1.60022 6.28867 1.65675 6.31018 1.72171L6.89068 3.46471C7.15018 4.24171 7.75918 4.85071 8.53618 5.11021L10.2792 5.69071C10.3441 5.71222 10.4007 5.75365 10.4407 5.80912C10.4808 5.86459 10.5024 5.93128 10.5024 5.99971C10.5024 6.06813 10.4808 6.13482 10.4407 6.19029C10.4007 6.24576 10.3441 6.2872 10.2792 6.30871L8.53618 6.88921C8.15274 7.01647 7.80431 7.23149 7.51864 7.51717C7.23296 7.80284 7.01794 8.15127 6.89068 8.53471L6.31018 10.2777C6.28867 10.3427 6.24724 10.3992 6.19176 10.4393C6.13629 10.4793 6.06961 10.5009 6.00118 10.5009C5.93275 10.5009 5.86607 10.4793 5.8106 10.4393C5.75512 10.3992 5.71369 10.3427 5.69218 10.2777L5.11168 8.53471C4.98442 8.15127 4.7694 7.80284 4.48372 7.51717C4.19805 7.23149 3.84962 7.01647 3.46618 6.88921L1.72318 6.30871C1.65822 6.2872 1.60169 6.24576 1.56163 6.19029C1.52156 6.13482 1.5 6.06813 1.5 5.99971C1.5 5.93128 1.52156 5.86459 1.56163 5.80912C1.60169 5.75365 1.65822 5.71222 1.72318 5.69071L3.46618 5.11021C3.84962 4.98295 4.19805 4.76792 4.48372 4.48225C4.7694 4.19657 4.98442 3.84815 5.11168 3.46471L5.69218 1.72171ZM16.2957 0.148207C16.3105 0.105497 16.3382 0.068461 16.3751 0.0422495C16.4119 0.016038 16.456 0.00195312 16.5012 0.00195312C16.5464 0.00195313 16.5905 0.016038 16.6273 0.0422495C16.6641 0.068461 16.6919 0.105497 16.7067 0.148207L17.0937 1.30921C17.2662 1.82821 17.6727 2.23471 18.1917 2.40721L19.3527 2.79421C19.3954 2.80901 19.4324 2.83676 19.4586 2.87359C19.4848 2.91042 19.4989 2.9545 19.4989 2.99971C19.4989 3.04491 19.4848 3.08899 19.4586 3.12582C19.4324 3.16265 19.3954 3.1904 19.3527 3.20521L18.1917 3.59221C17.9361 3.67771 17.7039 3.82139 17.5134 4.01193C17.3229 4.20247 17.1792 4.43467 17.0937 4.69021L16.7067 5.85121C16.6919 5.89392 16.6641 5.93095 16.6273 5.95717C16.5905 5.98338 16.5464 5.99746 16.5012 5.99746C16.456 5.99746 16.4119 5.98338 16.3751 5.95717C16.3382 5.93095 16.3105 5.89392 16.2957 5.85121L15.9087 4.69021C15.8232 4.43467 15.6795 4.20247 15.489 4.01193C15.2984 3.82139 15.0662 3.67771 14.8107 3.59221L13.6512 3.20521C13.6085 3.1904 13.5714 3.16265 13.5452 3.12582C13.519 3.08899 13.5049 3.04491 13.5049 2.99971C13.5049 2.9545 13.519 2.91042 13.5452 2.87359C13.5714 2.83676 13.6085 2.80901 13.6512 2.79421L14.8122 2.40721C15.3312 2.23471 15.7377 1.82821 15.9102 1.30921L16.2957 0.148207Z\" fill=\"#5928ed\" />\n </g>\n <defs>\n <clipPath id=\"clip0_6004_60631\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </div>)}\n <div style={{ width: '100%' }}>\n {message.role === 'assistant' && message.orchestratorAndAgentsMessages && message.orchestratorAndAgentsMessages.length > 0 &&\n (<MinimizedThinkingSteps orchestratorAndAgentsMessages={message?.orchestratorAndAgentsMessages} isStreamEnd={isStreamEnd} isCurrentMessage={index === messages.length - 1} ThinkingBulbIconComponent={ThinkingBulbIconComponent} />)}\n {/* <div style={{border:'1px solid red'}}> */}\n\n {//@ts-ignore\n message?.role === 'assistant' ? <MessageRendering index={index} content={message?.content} messages={messages} handleStream={handleStream} /> : <span></span>}\n\n <div style={{\n display: 'flex', justifyContent: 'flex-end',\n // backgroundColor: '#8694A10D', padding: \"1rem\"\n }}>\n {(message.role === 'user') ?\n <div style={{ backgroundColor: '#8694A10D', padding: \"0 1rem\", borderRadius: '8px', maxWidth: '80%' }}>\n <MessageRendering index={index} content={message?.content} messages={messages} handleStream={handleStream} scrollToBottom={scrollToBottom} />\n </div> : <span></span>}\n </div>\n {/* </div> */}\n </div>\n\n </div>\n )) : showWelcomeMessage && (\n <></>\n )\n }\n\n {messageLoading && (\n <div style={{ display: \"flex\", padding: '16px 16px 0px 16px' }}>\n <div style={{ maxHeight: `32px`, maxWidth: `32px`, marginTop: '0.2rem' }}>\n {/* {ChatIconComponent ? ChatIconComponent : <img\n src={chatAssistantLogoUrl}\n alt=\"Assistant Logo\"\n width=\"32px\"\n height=\"32px\"\n />} */}\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"bi:stars\" clip-path=\"url(#clip0_6004_60631)\">\n <path id=\"Vector\" d=\"M11.4867 9.37021C11.6517 8.87521 12.3507 8.87521 12.5157 9.37021L13.4832 12.2757C13.6961 12.9144 14.0549 13.4947 14.5311 13.9707C15.0073 14.4466 15.5879 14.8051 16.2267 15.0177L19.1307 15.9852C19.6257 16.1502 19.6257 16.8492 19.1307 17.0142L16.2252 17.9817C15.5865 18.1947 15.0062 18.5535 14.5302 19.0297C14.0543 19.5059 13.6958 20.0864 13.4832 20.7252L12.5157 23.6292C12.4801 23.7376 12.4112 23.832 12.3188 23.8989C12.2264 23.9658 12.1153 24.0019 12.0012 24.0019C11.8871 24.0019 11.7759 23.9658 11.6835 23.8989C11.5912 23.832 11.5223 23.7376 11.4867 23.6292L10.5192 20.7237C10.3064 20.0852 9.9478 19.505 9.47187 19.029C8.99594 18.5531 8.41572 18.1945 7.77718 17.9817L4.87168 17.0142C4.76329 16.9786 4.6689 16.9097 4.60198 16.8173C4.53506 16.725 4.49904 16.6138 4.49904 16.4997C4.49904 16.3856 4.53506 16.2745 4.60198 16.1821C4.6689 16.0897 4.76329 16.0208 4.87168 15.9852L7.77718 15.0177C8.41572 14.8049 8.99594 14.4463 9.47187 13.9704C9.9478 13.4945 10.3064 12.9142 10.5192 12.2757L11.4867 9.37021ZM5.69218 1.72171C5.71369 1.65675 5.75512 1.60022 5.8106 1.56016C5.86607 1.52009 5.93275 1.49853 6.00118 1.49853C6.06961 1.49853 6.13629 1.52009 6.19176 1.56016C6.24724 1.60022 6.28867 1.65675 6.31018 1.72171L6.89068 3.46471C7.15018 4.24171 7.75918 4.85071 8.53618 5.11021L10.2792 5.69071C10.3441 5.71222 10.4007 5.75365 10.4407 5.80912C10.4808 5.86459 10.5024 5.93128 10.5024 5.99971C10.5024 6.06813 10.4808 6.13482 10.4407 6.19029C10.4007 6.24576 10.3441 6.2872 10.2792 6.30871L8.53618 6.88921C8.15274 7.01647 7.80431 7.23149 7.51864 7.51717C7.23296 7.80284 7.01794 8.15127 6.89068 8.53471L6.31018 10.2777C6.28867 10.3427 6.24724 10.3992 6.19176 10.4393C6.13629 10.4793 6.06961 10.5009 6.00118 10.5009C5.93275 10.5009 5.86607 10.4793 5.8106 10.4393C5.75512 10.3992 5.71369 10.3427 5.69218 10.2777L5.11168 8.53471C4.98442 8.15127 4.7694 7.80284 4.48372 7.51717C4.19805 7.23149 3.84962 7.01647 3.46618 6.88921L1.72318 6.30871C1.65822 6.2872 1.60169 6.24576 1.56163 6.19029C1.52156 6.13482 1.5 6.06813 1.5 5.99971C1.5 5.93128 1.52156 5.86459 1.56163 5.80912C1.60169 5.75365 1.65822 5.71222 1.72318 5.69071L3.46618 5.11021C3.84962 4.98295 4.19805 4.76792 4.48372 4.48225C4.7694 4.19657 4.98442 3.84815 5.11168 3.46471L5.69218 1.72171ZM16.2957 0.148207C16.3105 0.105497 16.3382 0.068461 16.3751 0.0422495C16.4119 0.016038 16.456 0.00195312 16.5012 0.00195312C16.5464 0.00195313 16.5905 0.016038 16.6273 0.0422495C16.6641 0.068461 16.6919 0.105497 16.7067 0.148207L17.0937 1.30921C17.2662 1.82821 17.6727 2.23471 18.1917 2.40721L19.3527 2.79421C19.3954 2.80901 19.4324 2.83676 19.4586 2.87359C19.4848 2.91042 19.4989 2.9545 19.4989 2.99971C19.4989 3.04491 19.4848 3.08899 19.4586 3.12582C19.4324 3.16265 19.3954 3.1904 19.3527 3.20521L18.1917 3.59221C17.9361 3.67771 17.7039 3.82139 17.5134 4.01193C17.3229 4.20247 17.1792 4.43467 17.0937 4.69021L16.7067 5.85121C16.6919 5.89392 16.6641 5.93095 16.6273 5.95717C16.5905 5.98338 16.5464 5.99746 16.5012 5.99746C16.456 5.99746 16.4119 5.98338 16.3751 5.95717C16.3382 5.93095 16.3105 5.89392 16.2957 5.85121L15.9087 4.69021C15.8232 4.43467 15.6795 4.20247 15.489 4.01193C15.2984 3.82139 15.0662 3.67771 14.8107 3.59221L13.6512 3.20521C13.6085 3.1904 13.5714 3.16265 13.5452 3.12582C13.519 3.08899 13.5049 3.04491 13.5049 2.99971C13.5049 2.9545 13.519 2.91042 13.5452 2.87359C13.5714 2.83676 13.6085 2.80901 13.6512 2.79421L14.8122 2.40721C15.3312 2.23471 15.7377 1.82821 15.9102 1.30921L16.2957 0.148207Z\" fill=\"#5928ed\" />\n </g>\n <defs>\n <clipPath id=\"clip0_6004_60631\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </div>\n <div\n style={{\n display: 'inline-flex',\n alignItems: 'flex-start', // Align text to the top for better multi-line flow\n paddingLeft: '1rem', // Adds breathing space on all sides\n paddingRight: '1rem',\n paddingBottom: '1rem',\n width: '100%',\n maxWidth: '100%',\n fontSize: '1rem', // Base readable font\n lineHeight: '1.75rem', // Slightly more relaxed line height\n marginBottom: '1rem',\n borderRadius: '0.5rem', // Subtle rounding for readability\n overflowWrap: 'break-word',\n wordBreak: 'break-word',\n whiteSpace: 'pre-wrap', // Preserves newlines while allowing wrap\n color: '#333', // Softer text color for contrast\n // fontWeight: 500\n }}\n >\n <span>{initialLoadingMessage}</span>\n </div>\n </div>\n )}\n </div>\n </div>\n <div\n style={{\n width: '95%',\n height: 'content-fit',\n backgroundColor: '#fbfaff',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'end',\n position: 'relative',\n }}\n >\n {/* Floating Down Button */}\n <div\n style={{\n visibility: isVisible ? 'visible' : 'hidden',\n position: 'absolute',\n top: '-3rem',\n zIndex: 0,\n pointerEvents: 'none', // allows clicks to pass through\n }}\n >\n <button\n onClick={scrollToBottom}\n style={{\n borderRadius: '9999px',\n padding: 0,\n backgroundColor: '#fff',\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\n border: '1px solid #d1d5db',\n pointerEvents: 'auto',\n cursor: 'pointer',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 1,\n height: '2.25rem',\n width: '2.25rem',\n margin: '0.3rem'\n }}\n >\n <svg\n fill=\"#000000\"\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 24 24\"\n id=\"down\"\n data-name=\"Flat Color\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n id=\"primary\"\n d=\"M19.71,13.29a1,1,0,0,0-1.42,0L13,18.59V3a1,1,0,0,0-2,0V18.59l-5.29-5.3a1,1,0,0,0-1.42,1.42l7,7a1,1,0,0,0,1.42,0l7-7A1,1,0,0,0,19.71,13.29Z\"\n ></path>\n </svg>\n </button>\n </div>\n \n {isAwaitingValidationResponse && (\n <Box sx={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n paddingBottom: '8px',\n paddingLeft: '4px',\n fontFamily: '\"Plus Jakarta Sans\", sans-serif',\n fontSize: '0.875rem',\n color: '#6b7280',\n width: '100%'\n }}>\n <span>Instant Learning AI is thinking</span>\n <Box sx={{\n width: \"5px\", height: \"5px\", bgcolor: \"#6b7280\", borderRadius: \"50%\",\n animation: `${thinkingBounce} 1.4s infinite ease-in-out both`,\n animationDelay: \"-0.32s\",\n }} />\n <Box sx={{\n width: \"5px\", height: \"5px\", bgcolor: \"#6b7280\", borderRadius: \"50%\",\n animation: `${thinkingBounce} 1.4s infinite ease-in-out both`,\n animationDelay: \"-0.16s\",\n }} />\n <Box sx={{\n width: \"5px\", height: \"5px\", bgcolor: \"#6b7280\", borderRadius: \"50%\",\n animation: `${thinkingBounce} 1.4s infinite ease-in-out both`,\n }} />\n </Box>\n )}\n\n <Tooltip title={isFormValidating ? \"Please wait for the validation to be completed.\" : \"\"}>\n {/* Textarea and Send Button */}\n <div\n style={{\n width: '100%',\n backgroundColor: '#fff',\n display: 'flex',\n alignItems: 'end',\n gap: '0.5rem',\n border: '1px solid #E5E7EB',\n borderRadius: '8px',\n cursor: isTextareaDisabled ? 'not-allowed' : 'default',\n }}\n >\n\n <div style={{ width: '100%', display: 'flex' }}>\n <textarea\n ref={textAreaRef}\n placeholder=\"Tell me more about this learning...\"\n value={userInput || ''}\n onChange={(e) => setUserInput(e.target.value)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={(e) => handleStream(e)}\n disabled={isTextareaDisabled} \n style={{\n flexGrow: 1,\n padding: '0.5rem',\n borderRadius: '0.5rem',\n border: 'none',\n fontSize: '1rem',\n lineHeight: '1.5rem',\n resize: 'none',\n backgroundColor: '#fff',\n color: 'inherit',\n // cursor: 'text',\n minHeight: isFocused ? '120px' : '50px',\n height: isFocused ? '120px' : '50px',\n maxHeight: '120px',\n overflowY: 'auto',\n fontFamily: 'inherit',\n outline: 'none',\n transition: 'min-height 0.3s ease, background-color 0.3s ease',\n boxSizing: 'border-box',\n cursor: isTextareaDisabled ? 'not-allowed' : 'text', // Correct cursor on textarea\n }}\n />\n <span style={{ display: 'flex', flexDirection: 'column', justifyContent: 'end', alignItems: 'end' }}> {/* span wrapper is required because Tooltip doesn't work on disabled buttons directly */}\n <button\n onClick={(e) => { handleStream(new KeyboardEvent('keydown', { key: 'Enter' })) }}\n disabled={isSendButtonDisabled} //!areAllrequiredFieldsFilled\n style={{\n padding: '0.5rem 0.75rem',\n borderRadius: '0.375rem',\n border: 'none',\n backgroundColor: 'white',\n color: isSendButtonDisabled ? '#d1d5db' : '#5928ed',\n fontWeight: 'bold',\n fontSize: '1rem',\n cursor: isSendButtonDisabled ? 'not-allowed' : 'pointer',\n transition: 'background-color 0.3s, color 0.3s',\n height: '50px',\n }}\n >\n <SendButton />\n </button>\n </span>\n </div>\n </div>\n </Tooltip>\n </div>\n <div style={{ width: '95%', display: 'flex', gap: '0.25rem', flexDirection: 'row' }}>\n <Tooltip\n title={'Coming soon'}\n placement=\"top\"\n arrow\n componentsProps={{\n tooltip: {\n sx: {\n fontSize: '0.875rem',\n padding: '0.5rem',\n fontFamily: 'Plus Jakarta Sans, sans-serif'\n },\n },\n }}\n >\n <span style={{ width: '50%' }}>\n <AudioWaveform amplitude={1}\n variant=\"speaker\"\n isActive={false}\n onClick={() => null}\n disabled={false} />\n </span>\n </Tooltip>\n <Tooltip\n title={'Coming soon'}\n placement=\"top\"\n arrow\n componentsProps={{\n tooltip: {\n sx: {\n fontSize: '0.875rem',\n padding: '0.5rem',\n fontFamily: 'Plus Jakarta Sans, sans-serif'\n },\n },\n }}\n >\n <span style={{ width: '50%' }}>\n <AudioWaveform amplitude={1}\n variant=\"microphone\"\n isActive={false}\n onClick={() => null}\n disabled={false} />\n </span>\n </Tooltip>\n </div>\n </div >\n )\n}\n\nexport default ChatComponent\n"],"names":["defaultStyles","uuidv4","scrollContainer","messages","setSuggestedWta","parsedSave","_a"],"mappings":"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"}