Correspondents/.next/static/webpack/app/page.8aefbd874bcadbb6.hot-update.js

22 lines
86 KiB
JavaScript

"use strict";
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
self["webpackHotUpdate_N_E"]("app/page",{
/***/ "(app-pages-browser)/./src/components/chat-interface.tsx":
/*!*******************************************!*\
!*** ./src/components/chat-interface.tsx ***!
\*******************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ChatInterface: () => (/* binding */ ChatInterface)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/button */ \"(app-pages-browser)/./src/components/ui/button.tsx\");\n/* harmony import */ var _barrel_optimize_names_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/square-pen.js\");\n/* harmony import */ var _barrel_optimize_names_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/copy.js\");\n/* harmony import */ var _barrel_optimize_names_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/x.js\");\n/* harmony import */ var _barrel_optimize_names_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! __barrel_optimize__?names=Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/loader-circle.js\");\n/* harmony import */ var _barrel_optimize_names_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/send.js\");\n/* harmony import */ var _barrel_optimize_names_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! __barrel_optimize__?names=Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/paperclip.js\");\n/* harmony import */ var _markdown_renderer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./markdown-renderer */ \"(app-pages-browser)/./src/components/markdown-renderer.tsx\");\n/* __next_internal_client_entry_do_not_use__ ChatInterface auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nfunction ChatInterface(param) {\n let { agent } = param;\n _s();\n const [messages, setMessages] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [input, setInput] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [isLoading, setIsLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [sessionId, setSessionId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [selectedImages, setSelectedImages] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const messagesContainerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const inputRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const fileInputRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ChatInterface.useEffect\": ()=>{\n // Use agent-specific session ID: chat-session-{agentId}\n const sessionKey = \"chat-session-\".concat(agent.id);\n let existingSessionId = localStorage.getItem(sessionKey);\n if (!existingSessionId) {\n // Generate new sessionID using timestamp and random string\n existingSessionId = \"session-\".concat(agent.id, \"-\").concat(Date.now(), \"-\").concat(Math.random().toString(36).substring(2, 15));\n localStorage.setItem(sessionKey, existingSessionId);\n }\n setSessionId(existingSessionId);\n // Load existing messages for this agent\n const messagesKey = \"chat-messages-\".concat(agent.id);\n const savedMessages = localStorage.getItem(messagesKey);\n if (savedMessages) {\n try {\n const parsed = JSON.parse(savedMessages);\n // Ensure timestamps are Date objects\n const messages = parsed.map({\n \"ChatInterface.useEffect.messages\": (msg)=>({\n ...msg,\n timestamp: new Date(msg.timestamp)\n })\n }[\"ChatInterface.useEffect.messages\"]);\n setMessages(messages);\n } catch (err) {\n console.error(\"[chat] Failed to load saved messages:\", err);\n }\n }\n }\n }[\"ChatInterface.useEffect\"], [\n agent.id\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ChatInterface.useEffect\": ()=>{\n if (messagesContainerRef.current) {\n messagesContainerRef.current.scrollTop = messagesContainerRef.current.scrollHeight;\n }\n }\n }[\"ChatInterface.useEffect\"], [\n messages,\n isLoading\n ]);\n // Save messages to localStorage whenever they change\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ChatInterface.useEffect\": ()=>{\n const messagesKey = \"chat-messages-\".concat(agent.id);\n localStorage.setItem(messagesKey, JSON.stringify(messages));\n }\n }[\"ChatInterface.useEffect\"], [\n messages,\n agent.id\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ChatInterface.useEffect\": ()=>{\n if (inputRef.current) {\n inputRef.current.style.height = \"auto\";\n inputRef.current.style.height = Math.min(inputRef.current.scrollHeight, 160) + \"px\";\n }\n }\n }[\"ChatInterface.useEffect\"], [\n input\n ]);\n // Handle image file selection\n const handleImageSelect = async (e)=>{\n const files = e.currentTarget.files;\n if (!files) return;\n const newImages = [];\n for(let i = 0; i < files.length; i++){\n const file = files[i];\n // Only accept image files\n if (!file.type.startsWith(\"image/\")) {\n console.warn(\"[chat] Skipping non-image file:\", file.name);\n continue;\n }\n try {\n const base64 = await fileToBase64(file);\n newImages.push(base64);\n } catch (err) {\n console.error(\"[chat] Failed to convert image:\", err);\n }\n }\n setSelectedImages((prev)=>[\n ...prev,\n ...newImages\n ]);\n // Reset file input\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n };\n // Convert file to base64 string\n const fileToBase64 = (file)=>{\n return new Promise((resolve, reject)=>{\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = ()=>resolve(reader.result);\n reader.onerror = reject;\n });\n };\n // Remove selected image\n const removeImage = (index)=>{\n setSelectedImages((prev)=>prev.filter((_, i)=>i !== index));\n };\n const sendMessage = async (e)=>{\n if (e) {\n e.preventDefault();\n }\n if (!input.trim() || isLoading) return;\n const userMessage = {\n id: Date.now().toString(),\n role: \"user\",\n content: input.trim(),\n timestamp: new Date(),\n images: selectedImages.length > 0 ? selectedImages : undefined\n };\n setMessages((prev)=>[\n ...prev,\n userMessage\n ]);\n setInput(\"\");\n setSelectedImages([]);\n setIsLoading(true);\n try {\n const response = await fetch(\"/api/chat\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n message: userMessage.content,\n timestamp: userMessage.timestamp.toISOString(),\n sessionId: sessionId,\n agentId: agent.id,\n images: selectedImages.length > 0 ? selectedImages : undefined\n })\n });\n const data = await response.json();\n if (!response.ok) {\n const errorMessage = {\n id: (Date.now() + 1).toString(),\n role: \"assistant\",\n content: data.error || \"Failed to communicate with the webhook.\",\n timestamp: new Date(),\n isError: true,\n hint: data.hint\n };\n setMessages((prev)=>[\n ...prev,\n errorMessage\n ]);\n } else {\n const assistantMessage = {\n id: (Date.now() + 1).toString(),\n role: \"assistant\",\n content: data.response || data.message || JSON.stringify(data),\n timestamp: new Date()\n };\n setMessages((prev)=>[\n ...prev,\n assistantMessage\n ]);\n }\n } catch (error) {\n console.error(\"[v0] Error sending message:\", error);\n const errorMessage = {\n id: (Date.now() + 1).toString(),\n role: \"assistant\",\n content: \"Sorry, I encountered an error processing your message. Please try again.\",\n timestamp: new Date(),\n isError: true\n };\n setMessages((prev)=>[\n ...prev,\n errorMessage\n ]);\n } finally{\n var _inputRef_current;\n setIsLoading(false);\n (_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.focus();\n }\n };\n const startNewChat = ()=>{\n var // Focus input\n _inputRef_current;\n // Clear all messages\n setMessages([]);\n // Generate new sessionID for this agent\n const newSessionId = \"session-\".concat(agent.id, \"-\").concat(Date.now(), \"-\").concat(Math.random().toString(36).substring(2, 15));\n setSessionId(newSessionId);\n const sessionKey = \"chat-session-\".concat(agent.id);\n localStorage.setItem(sessionKey, newSessionId);\n // Clear input and images\n setInput(\"\");\n setSelectedImages([]);\n (_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.focus();\n };\n const handleKeyDown = (e)=>{\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n sendMessage();\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative flex h-full w-full flex-col overflow-hidden rounded-[2.5rem] bg-gradient-to-b from-white/0 via-white/15 to-white/40 px-4 py-8 shadow-[0_15px_35px_rgba(45,45,45,0.1),0_0_0_1px_rgba(255,255,255,0.25)_inset,0_15px_25px_rgba(255,255,255,0.12)_inset] backdrop-blur-xl dark:bg-gradient-to-b dark:from-transparent dark:via-white/5 dark:to-white/15 dark:shadow-[0_12px_25px_rgba(0,0,0,0.35),0_0_0_1px_rgba(255,255,255,0.06)_inset,0_12px_20px_rgba(255,255,255,0.04)_inset] sm:px-8 sm:py-10\",\n children: [\n messages.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute left-8 top-8 z-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n onClick: startNewChat,\n variant: \"ghost\",\n size: \"icon\",\n className: \"group h-11 w-11 rounded-full border border-white/25 bg-white/15 text-white shadow-[0_5px_12px_rgba(0,0,0,0.2)] backdrop-blur transition hover:bg-white/25\",\n title: \"Start a fresh conversation\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 231,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 224,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 223,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: messagesContainerRef,\n className: \"flex-1 overflow-y-auto px-1 pt-4 pb-10 sm:px-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-3xl space-y-10\",\n children: messages.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex min-h-[60vh] flex-col items-center justify-center gap-10 text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"font-heading text-[7rem] lowercase tracking-tight text-white/85 drop-shadow-[0_12px_30px_rgba(0,0,0,0.4)]\",\n children: \"hello,\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 241,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 240,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid w-full max-w-2xl gap-4 sm:grid-cols-2\",\n children: [\n \"Help me brainstorm ideas for a new mobile app\",\n \"Generate creative writing prompts for a fantasy novel\",\n \"Suggest innovative marketing strategies for a startup\",\n \"Create a list of unique product names for a tech company\"\n ].map((prompt, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setInput(prompt),\n className: \"scroll-reveal rounded-2xl border border-border/30 bg-white/80 p-4 text-left text-sm text-charcoal shadow-sm transition hover:border-ring/60 hover:bg-white\",\n style: {\n animationDelay: \"\".concat(index * 50, \"ms\")\n },\n children: prompt\n }, prompt, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 253,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 246,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 239,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-10\",\n children: [\n messages.map((message)=>{\n const isUser = message.role === \"user\";\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"message-frame flex flex-col gap-3 \".concat(isUser ? \"items-end text-right\" : \"\"),\n children: [\n isUser && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap items-center gap-2 text-xs uppercase tracking-[0.2em] text-muted-foreground justify-end\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Collector\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 276,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[0.65rem] normal-case tracking-normal\",\n children: message.timestamp.toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\"\n })\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 277,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 275,\n columnNumber: 23\n }, this),\n isUser ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"message-bubble user\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_markdown_renderer__WEBPACK_IMPORTED_MODULE_3__.MarkdownRenderer, {\n content: message.content,\n tone: \"bubble\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 285,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 284,\n columnNumber: 23\n }, this) : message.isError ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-medium text-destructive\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"whitespace-pre-wrap break-words leading-relaxed\",\n children: message.content\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 289,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 288,\n columnNumber: 23\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative pr-12 text-sm text-charcoal dark:text-foreground\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>navigator.clipboard.writeText(message.content),\n className: \"absolute right-0 top-0 inline-flex h-9 w-9 items-center justify-center rounded-2xl border border-white/20 bg-white/10 text-white/80 shadow-[0_5px_12px_rgba(0,0,0,0.2)] backdrop-blur transition hover:bg-white/20\",\n \"aria-label\": \"Copy response\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 299,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 293,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_markdown_renderer__WEBPACK_IMPORTED_MODULE_3__.MarkdownRenderer, {\n content: message.content\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 301,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 292,\n columnNumber: 23\n }, this),\n message.hint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"rounded-lg border border-accent/60 bg-accent/40 px-3 py-2 text-xs text-charcoal\",\n children: message.hint\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 306,\n columnNumber: 23\n }, this)\n ]\n }, message.id, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 270,\n columnNumber: 19\n }, this);\n }),\n isLoading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"message-frame flex flex-col gap-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3 text-sm text-muted-foreground\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"uppercase tracking-[0.25em] text-white/70\",\n children: \"Correspondent\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 317,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"relative flex h-3 w-24 overflow-hidden rounded-full bg-white/10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"absolute inset-y-0 w-1/2 animate-[shimmer_1.4s_infinite] bg-white/40\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 319,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 318,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 316,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 315,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 266,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 237,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 236,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative mt-auto pt-6 pb-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: sendMessage,\n className: \"relative flex justify-center\",\n children: [\n selectedImages.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 flex flex-wrap gap-3 px-3 pt-2\",\n children: selectedImages.map((image, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: image,\n alt: \"Selected \".concat(index),\n className: \"h-16 w-16 rounded-lg border border-border/40 object-cover shadow-md\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 336,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>removeImage(index),\n className: \"absolute -right-2 -top-2 flex h-5 w-5 items-center justify-center rounded-full text-white shadow-md hover:opacity-80\",\n style: {\n backgroundColor: \"var(--charcoal-ink)\"\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-3 w-3\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 347,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 341,\n columnNumber: 19\n }, this)\n ]\n }, index, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 335,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 333,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"manuscript-panel w-[90%] max-w-3xl p-5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"textarea\", {\n ref: inputRef,\n value: input,\n onChange: (e)=>setInput(e.target.value),\n onKeyDown: handleKeyDown,\n placeholder: \"Write a note, share a hunch, or paste a brief…\",\n disabled: isLoading,\n rows: 1,\n className: \"min-h-[32px] max-h-32 w-full resize-none border-0 bg-transparent text-lg text-foreground placeholder:text-muted-foreground/80 focus:outline-none\",\n style: {\n overflow: \"hidden\",\n height: \"auto\"\n },\n onInput: (e)=>{\n const target = e.target;\n target.style.height = \"auto\";\n target.style.height = Math.min(target.scrollHeight, 160) + \"px\";\n }\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 356,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap items-center justify-end gap-3 text-xs uppercase tracking-[0.25em] text-muted-foreground\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n type: \"submit\",\n disabled: !input.trim() || isLoading,\n size: \"icon\",\n className: \"group h-12 w-12 flex-shrink-0 rounded-2xl border border-white/20 bg-white/30 text-white shadow-[0_10px_25px_rgba(0,0,0,0.2)] backdrop-blur transition hover:bg-white/40 disabled:opacity-50\",\n children: isLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-4 w-4 animate-spin\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 384,\n columnNumber: 21\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 386,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 377,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n ref: fileInputRef,\n type: \"file\",\n multiple: true,\n accept: \"image/*\",\n onChange: handleImageSelect,\n className: \"hidden\",\n disabled: isLoading\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 389,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n type: \"button\",\n variant: \"ghost\",\n size: \"icon\",\n onClick: ()=>{\n var _fileInputRef_current;\n return (_fileInputRef_current = fileInputRef.current) === null || _fileInputRef_current === void 0 ? void 0 : _fileInputRef_current.click();\n },\n disabled: isLoading,\n className: \"h-11 w-11 rounded-2xl border border-white/20 bg-white/10 text-white/80 transition hover:bg-white/20 hover:text-white\",\n title: \"Attach image\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 407,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 398,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 376,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 355,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 354,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 330,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 329,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 221,\n columnNumber: 5\n }, this);\n}\n_s(ChatInterface, \"fmAT6pXX0uqZjtSTUpB5qg6rKhQ=\");\n_c = ChatInterface;\nvar _c;\n$RefreshReg$(_c, \"ChatInterface\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL2NoYXQtaW50ZXJmYWNlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUltRDtBQUNKO0FBQzRCO0FBQ3JCO0FBTy9DLFNBQVNXLGNBQWMsS0FBNkI7UUFBN0IsRUFBRUMsS0FBSyxFQUFzQixHQUE3Qjs7SUFDNUIsTUFBTSxDQUFDQyxVQUFVQyxZQUFZLEdBQUdkLCtDQUFRQSxDQUFZLEVBQUU7SUFDdEQsTUFBTSxDQUFDZSxPQUFPQyxTQUFTLEdBQUdoQiwrQ0FBUUEsQ0FBQztJQUNuQyxNQUFNLENBQUNpQixXQUFXQyxhQUFhLEdBQUdsQiwrQ0FBUUEsQ0FBQztJQUMzQyxNQUFNLENBQUNtQixXQUFXQyxhQUFhLEdBQUdwQiwrQ0FBUUEsQ0FBUztJQUNuRCxNQUFNLENBQUNxQixnQkFBZ0JDLGtCQUFrQixHQUFHdEIsK0NBQVFBLENBQVcsRUFBRTtJQUNqRSxNQUFNdUIsdUJBQXVCdEIsNkNBQU1BLENBQWlCO0lBQ3BELE1BQU11QixXQUFXdkIsNkNBQU1BLENBQXNCO0lBQzdDLE1BQU13QixlQUFleEIsNkNBQU1BLENBQW1CO0lBRTlDQyxnREFBU0E7bUNBQUM7WUFDUix3REFBd0Q7WUFDeEQsTUFBTXdCLGFBQWEsZ0JBQXlCLE9BQVRkLE1BQU1lLEVBQUU7WUFDM0MsSUFBSUMsb0JBQW9CQyxhQUFhQyxPQUFPLENBQUNKO1lBRTdDLElBQUksQ0FBQ0UsbUJBQW1CO2dCQUN0QiwyREFBMkQ7Z0JBQzNEQSxvQkFBb0IsV0FBdUJHLE9BQVpuQixNQUFNZSxFQUFFLEVBQUMsS0FBaUJLLE9BQWRELEtBQUtFLEdBQUcsSUFBRyxLQUErQyxPQUE1Q0QsS0FBS0UsTUFBTSxHQUFHQyxRQUFRLENBQUMsSUFBSUMsU0FBUyxDQUFDLEdBQUc7Z0JBQ2pHUCxhQUFhUSxPQUFPLENBQUNYLFlBQVlFO1lBQ25DO1lBRUFSLGFBQWFRO1lBRWIsd0NBQXdDO1lBQ3hDLE1BQU1VLGNBQWMsaUJB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QUN0QjRGLE9BQU83RixLQUFLLENBQUNDLE1BQU0sR0FBR3RCLEtBQUt1QixHQUFHLENBQUMyRixPQUFPL0YsWUFBWSxFQUFFLE9BQU87d0NBQzdEOzs7Ozs7a0RBR0YsOERBQUNnRTt3Q0FBSUMsV0FBVTs7MERBQ2IsOERBQUNqSCx5REFBTUE7Z0RBQ0w2RCxNQUFLO2dEQUNMcUYsVUFBVSxDQUFDdEksTUFBTXlFLElBQUksTUFBTXZFO2dEQUMzQnNHLE1BQUs7Z0RBQ0xILFdBQVU7MERBRVRuRywwQkFDQyw4REFBQ1osbUhBQU9BO29EQUFDK0csV0FBVTs7Ozs7eUVBRW5CLDhEQUFDaEgsbUhBQUlBO29EQUFDZ0gsV0FBVTs7Ozs7Ozs7Ozs7MERBR3BCLDhEQUFDckc7Z0RBQ0MwRyxLQUFLaEc7Z0RBQ0x1QyxNQUFLO2dEQUNMeUYsUUFBUTtnREFDUkMsUUFBTztnREFDUFQsVUFBVXpGO2dEQUNWNEQsV0FBVTtnREFDVmlDLFVBQVVwSTs7Ozs7OzBEQUVaLDhEQUFDZCx5REFBTUE7Z0RBQ0w2RCxNQUFLO2dEQUNMc0QsU0FBUTtnREFDUkMsTUFBSztnREFDTEYsU0FBUzt3REFBTTVGOzREQUFBQSx3QkFBQUEsYUFBYXdCLE9BQU8sY0FBcEJ4Qiw0Q0FBQUEsc0JBQXNCa0ksS0FBSzs7Z0RBQzFDTixVQUFVcEk7Z0RBQ1ZtRyxXQUFVO2dEQUNWSSxPQUFNOzBEQUVOLDRFQUFDakgsbUhBQVNBO29EQUFDNkcsV0FBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU3ZDO0dBalpnQnpHO0tBQUFBIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvZGV2L211bHRpLWFnZW50X2NoYXRfaW50ZXJmYWNlL3NyYy9jb21wb25lbnRzL2NoYXQtaW50ZXJmYWNlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIlxuXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tIFwicmVhY3RcIlxuXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9idXR0b25cIlxuaW1wb3J0IHsgU2VuZCwgTG9hZGVyMiwgU3F1YXJlUGVuLCBQYXBlcmNsaXAsIENvcHksIFggfSBmcm9tIFwibHVjaWRlLXJlYWN0XCJcbmltcG9ydCB7IE1hcmtkb3duUmVuZGVyZXIgfSBmcm9tIFwiLi9tYXJrZG93bi1yZW5kZXJlclwiXG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2UsIEFnZW50IH0gZnJvbSBcIkAvbGliL3R5cGVzXCJcblxuaW50ZXJmYWNlIENoYXRJbnRlcmZhY2VQcm9wcyB7XG4gIGFnZW50OiBBZ2VudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2hhdEludGVyZmFjZSh7IGFnZW50IH06IENoYXRJbnRlcmZhY2VQcm9wcykge1xuICBjb25zdCBbbWVzc2FnZXMsIHNldE1lc3NhZ2VzXSA9IHVzZVN0YXRlPE1lc3NhZ2VbXT4oW10pXG4gIGNvbnN0IFtpbnB1dCwgc2V0SW5wdXRdID0gdXNlU3RhdGUoXCJcIilcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2Vzc2lvbklkLCBzZXRTZXNzaW9uSWRdID0gdXNlU3RhdGU8c3RyaW5nPihcIlwiKVxuICBjb25zdCBbc2VsZWN0ZWRJbWFnZXMsIHNldFNlbGVjdGVkSW1hZ2VzXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihbXSlcbiAgY29uc3QgbWVzc2FnZXNDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGZpbGVJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gVXNlIGFnZW50LXNwZWNpZmljIHNlc3Npb24gSUQ6IGNoYXQtc2Vzc2lvbi17YWdlbnRJZH1cbiAgICBjb25zdCBzZXNzaW9uS2V5ID0gYGNoYXQtc2Vzc2lvbi0ke2FnZW50LmlkfWBcbiAgICBsZXQgZXhpc3RpbmdTZXNzaW9uSWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShzZXNzaW9uS2V5KVxuXG4gICAgaWYgKCFleGlzdGluZ1Nlc3Npb25JZCkge1xuICAgICAgLy8gR2VuZXJhdGUgbmV3IHNlc3Npb25JRCB1c2luZyB0aW1lc3RhbXAgYW5kIHJhbmRvbSBzdHJpbmdcbiAgICAgIGV4aXN0aW5nU2Vzc2lvbklkID0gYHNlc3Npb24tJHthZ2VudC5pZH0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxNSl9YFxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oc2Vzc2lvbktleSwgZXhpc3RpbmdTZXNzaW9uSWQpXG4gICAgfVxuXG4gICAgc2V0U2Vzc2lvbklkKGV4aXN0aW5nU2Vzc2lvbklkKVxuXG4gICAgLy8gTG9hZCBleGlzdGluZyBtZXNzYWdlcyBmb3IgdGhpcyBhZ2VudFxuICAgIGNvbnN0IG1lc3NhZ2VzS2V5ID0gYGNoYXQtbWVzc2FnZXMtJHthZ2VudC5pZH1gXG4gICAgY29uc3Qgc2F2ZWRNZXNzYWdlcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKG1lc3NhZ2VzS2V5KVxuICAgIGlmIChzYXZlZE1lc3NhZ2VzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHNhdmVkTWVzc2FnZXMpXG4gICAgICAgIC8vIEVuc3VyZSB0aW1lc3RhbXBzIGFyZSBEYXRlIG9iamVjdHNcbiAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBwYXJzZWQubWFwKChtc2c6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5tc2csXG4gICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZShtc2cudGltZXN0YW1wKSxcbiAgICAgICAgfSkpXG4gICAgICAgIHNldE1lc3NhZ2VzKG1lc3NhZ2VzKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbY2hhdF0gRmFpbGVkIHRvIGxvYWQgc2F2ZWQgbWVzc2FnZXM6XCIsIGVycilcbiAgICAgIH1cbiAgICB9XG4gIH0sIFthZ2VudC5pZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobWVzc2FnZXNDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgbWVzc2FnZXNDb250YWluZXJSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBtZXNzYWdlc0NvbnRhaW5lclJlZi5jdXJyZW50LnNjcm9sbEhlaWdodFxuICAgIH1cbiAgfSwgW21lc3NhZ2VzLCBpc0xvYWRpbmddKVxuXG4gIC8vIFNhdmUgbWVzc2FnZXMgdG8gbG9jYWxTdG9yYWdlIHdoZW5ldmVyIHRoZXkgY2hhbmdlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZXNLZXkgPSBgY2hhdC1tZXNzYWdlcy0ke2FnZW50LmlkfWBcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShtZXNzYWdlc0tleSwgSlNPTi5zdHJpbmdpZnkobWVzc2FnZXMpKVxuICB9LCBbbWVzc2FnZXMsIGFnZW50LmlkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LnN0eWxlLmhlaWdodCA9IFwiYXV0b1wiXG4gICAgICBpbnB1dFJlZi5jdXJyZW50LnN0eWxlLmhlaWdodCA9IE1hdGgubWluKGlucHV0UmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0LCAxNjApICsgXCJweFwiXG4gICAgfVxuICB9LCBbaW5wdXRdKVxuXG4gIC8vIEhhbmRsZSBpbWFnZSBmaWxlIHNlbGVjdGlvblxuICBjb25zdCBoYW5kbGVJbWFnZVNlbGVjdCA9IGFzeW5jIChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZS5jdXJyZW50VGFyZ2V0LmZpbGVzXG4gICAgaWYgKCFmaWxlcykgcmV0dXJuXG5cbiAgICBjb25zdCBuZXdJbWFnZXM6IHN0cmluZ1tdID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWxlID0gZmlsZXNbaV1cbiAgICAgIC8vIE9ubHkgYWNjZXB0IGltYWdlIGZpbGVzXG4gICAgICBpZiAoIWZpbGUudHlwZS5zdGFydHNXaXRoKFwiaW1hZ2UvXCIpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltjaGF0XSBTa2lwcGluZyBub24taW1hZ2UgZmlsZTpcIiwgZmlsZS5uYW1lKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBiYXNlNjQgPSBhd2FpdCBmaWxlVG9CYXNlNjQoZmlsZSlcbiAgICAgICAgbmV3SW1hZ2VzLnB1c2goYmFzZTY0KVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbY2hhdF0gRmFpbGVkIHRvIGNvbnZlcnQgaW1hZ2U6XCIsIGVycilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRTZWxlY3RlZEltYWdlcygocHJldikgPT4gWy4uLnByZXYsIC4uLm5ld0ltYWdlc10pXG4gICAgLy8gUmVzZXQgZmlsZSBpbnB1dFxuICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSBcIlwiXG4gICAgfVxuICB9XG5cbiAgLy8gQ29udmVydCBmaWxlIHRvIGJhc2U2NCBzdHJpbmdcbiAgY29uc3QgZmlsZVRvQmFzZTY0ID0gKGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKVxuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpXG4gICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdFxuICAgIH0pXG4gIH1cblxuICAvLyBSZW1vdmUgc2VsZWN0ZWQgaW1hZ2VcbiAgY29uc3QgcmVtb3ZlSW1hZ2UgPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIHNldFNlbGVjdGVkSW1hZ2VzKChwcmV2KSA9PiBwcmV2LmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpKVxuICB9XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSBhc3luYyAoZT86IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICAgIGlmIChlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICB9XG5cbiAgICBpZiAoIWlucHV0LnRyaW0oKSB8fCBpc0xvYWRpbmcpIHJldHVyblxuXG4gICAgY29uc3QgdXNlck1lc3NhZ2U6IE1lc3NhZ2UgPSB7XG4gICAgICBpZDogRGF0ZS5ub3coKS50b1N0cmluZygpLFxuICAgICAgcm9sZTogXCJ1c2VyXCIsXG4gICAgICBjb250ZW50OiBpbnB1dC50cmltKCksXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgICBpbWFnZXM6IHNlbGVjdGVkSW1hZ2VzLmxlbmd0aCA+IDAgPyBzZWxlY3RlZEltYWdlcyA6IHVuZGVmaW5lZCxcbiAgICB9XG5cbiAgICBzZXRNZXNzYWdlcygocHJldikgPT4gWy4uLnByZXYsIHVzZXJNZXNzYWdlXSlcbiAgICBzZXRJbnB1dChcIlwiKVxuICAgIHNldFNlbGVjdGVkSW1hZ2VzKFtdKVxuICAgIHNldElzTG9hZGluZyh0cnVlKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCIvYXBpL2NoYXRcIiwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBtZXNzYWdlOiB1c2VyTWVzc2FnZS5jb250ZW50LFxuICAgICAgICAgIHRpbWVzdGFtcDogdXNlck1lc3NhZ2UudGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQuaWQsXG4gICAgICAgICAgaW1hZ2VzOiBzZWxlY3RlZEltYWdlcy5sZW5ndGggPiAwID8gc2VsZWN0ZWRJbWFnZXMgOiB1bmRlZmluZWQsXG4gICAgICAgIH0pLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgZGF0YSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHtcbiAgICAgICAgZXJyb3I/OiBzdHJpbmdcbiAgICAgICAgaGludD86IHN0cmluZ1xuICAgICAgICByZXNwb25zZT86IHN0cmluZ1xuICAgICAgICBtZXNzYWdlPzogc3RyaW5nXG4gICAgICB9XG5cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlOiBNZXNzYWdlID0ge1xuICAgICAgICAgIGlkOiAoRGF0ZS5ub3coKSArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgICBjb250ZW50OiBkYXRhLmVycm9yIHx8IFwiRmFpbGVkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHdlYmhvb2suXCIsXG4gICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICAgICAgaGludDogZGF0YS5oaW50LFxuICAgICAgICB9XG4gICAgICAgIHNldE1lc3NhZ2VzKChwcmV2KSA9PiBbLi4ucHJldiwgZXJyb3JNZXNzYWdlXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2U6IE1lc3NhZ2UgPSB7XG4gICAgICAgICAgaWQ6IChEYXRlLm5vdygpICsgMSkudG9TdHJpbmcoKSxcbiAgICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICAgIGNvbnRlbnQ6IGRhdGEucmVzcG9uc2UgfHwgZGF0YS5tZXNzYWdlIHx8IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgICAgfVxuICAgICAgICBzZXRNZXNzYWdlcygocHJldikgPT4gWy4uLnByZXYsIGFzc2lzdGFudE1lc3NhZ2VdKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW3YwXSBFcnJvciBzZW5kaW5nIG1lc3NhZ2U6XCIsIGVycm9yKVxuXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2U6IE1lc3NhZ2UgPSB7XG4gICAgICAgIGlkOiAoRGF0ZS5ub3coKSArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgIGNvbnRlbnQ6IFwiU29ycnksIEkgZW5jb3VudGVyZWQgYW4gZXJyb3IgcHJvY2Vzc2luZyB5b3VyIG1lc3NhZ2UuIFBsZWFzZSB0cnkgYWdhaW4uXCIsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgIH1cblxuICAgICAgc2V0TWVzc2FnZXMoKHByZXYpID0+IFsuLi5wcmV2LCBlcnJvck1lc3NhZ2VdKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICBpbnB1dFJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3RhcnROZXdDaGF0ID0gKCkgPT4ge1xuICAgIC8vIENsZWFyIGFsbCBtZXNzYWdlc1xuICAgIHNldE1lc3NhZ2VzKFtdKVxuICAgIC8vIEdlbmVyYXRlIG5ldyBzZXNzaW9uSUQgZm9yIHRoaXMgYWdlbnRcbiAgICBjb25zdCBuZXdTZXNzaW9uSWQgPSBgc2Vzc2lvbi0ke2FnZW50LmlkfS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDE1KX1gXG4gICAgc2V0U2Vzc2lvbklkKG5ld1Nlc3Npb25JZClcbiAgICBjb25zdCBzZXNzaW9uS2V5ID0gYGNoYXQtc2Vzc2lvbi0ke2FnZW50LmlkfWBcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShzZXNzaW9uS2V5LCBuZXdTZXNzaW9uSWQpXG4gICAgLy8gQ2xlYXIgaW5wdXQgYW5kIGltYWdlc1xuICAgIHNldElucHV0KFwiXCIpXG4gICAgc2V0U2VsZWN0ZWRJbWFnZXMoW10pXG4gICAgLy8gRm9jdXMgaW5wdXRcbiAgICBpbnB1dFJlZi5jdXJyZW50Py5mb2N1cygpXG4gIH1cblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgc2VuZE1lc3NhZ2UoKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4IGgtZnVsbCB3LWZ1bGwgZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtWzIuNXJlbV0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLXdoaXRlLzAgdmlhLXdoaXRlLzE1IHRvLXdoaXRlLzQwIHB4LTQgcHktOCBzaGFkb3ctWzBfMTVweF8zNXB4X3JnYmEoNDUsNDUsNDUsMC4xKSwwXzBfMF8xcHhfcmdiYSgyNTUsMjU1LDI1NSwwLjI1KV9pbnNldCwwXzE1cHhfMjVweF9yZ2JhKDI1NSwyNTUsMjU1LDAuMTIpX2luc2V0XSBiYWNrZHJvcC1ibHVyLXhsIGRhcms6YmctZ3JhZGllbnQtdG8tYiBkYXJrOmZyb20tdHJhbnNwYXJlbnQgZGFyazp2aWEtd2hpdGUvNSBkYXJrOnRvLXdoaXRlLzE1IGRhcms6c2hhZG93LVswXzEycHhfMjVweF9yZ2JhKDAsMCwwLDAuMzUpLDBfMF8wXzFweF9yZ2JhKDI1NSwyNTUsMjU1LDAuMDYpX2luc2V0LDBfMTJweF8yMHB4X3JnYmEoMjU1LDI1NSwyNTUsMC4wNClfaW5zZXRdIHNtOnB4LTggc206cHktMTBcIj5cbiAgICAgIHttZXNzYWdlcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTggdG9wLTggei0xMFwiPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIG9uQ2xpY2s9e3N0YXJ0TmV3Q2hhdH1cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICBzaXplPVwiaWNvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJncm91cCBoLTExIHctMTEgcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItd2hpdGUvMjUgYmctd2hpdGUvMTUgdGV4dC13aGl0ZSBzaGFkb3ctWzBfNXB4XzEycHhfcmdiYSgwLDAsMCwwLjIpXSBiYWNrZHJvcC1ibHVyIHRyYW5zaXRpb24gaG92ZXI6Ymctd2hpdGUvMjVcIlxuICAgICAgICAgICAgdGl0bGU9XCJTdGFydCBhIGZyZXNoIGNvbnZlcnNhdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNxdWFyZVBlbiBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICA8ZGl2IHJlZj17bWVzc2FnZXNDb250YWluZXJSZWZ9IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy15LWF1dG8gcHgtMSBwdC00IHBiLTEwIHNtOnB4LTBcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTN4bCBzcGFjZS15LTEwXCI+XG4gICAgICAgICAge21lc3NhZ2VzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtaW4taC1bNjB2aF0gZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xMCB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cImZvbnQtaGVhZGluZyB0ZXh0LVs3cmVtXSBsb3dlcmNhc2UgdHJhY2tpbmctdGlnaHQgdGV4dC13aGl0ZS84NSBkcm9wLXNoYWRvdy1bMF8xMnB4XzMwcHhfcmdiYSgwLDAsMCwwLjQpXVwiPlxuICAgICAgICAgICAgICAgICAgaGVsbG8sXG4gICAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIHctZnVsbCBtYXgtdy0yeGwgZ2FwLTQgc206Z3JpZC1jb2xzLTJcIj5cbiAgICAgICAgICAgICAgICB7W1xuICAgICAgICAgICAgICAgICAgXCJIZWxwIG1lIGJyYWluc3Rvcm0gaWRlYXMgZm9yIGEgbmV3IG1vYmlsZSBhcHBcIixcbiAgICAgICAgICAgICAgICAgIFwiR2VuZXJhdGUgY3JlYXRpdmUgd3JpdGluZyBwcm9tcHRzIGZvciBhIGZhbnRhc3kgbm92ZWxcIixcbiAgICAgICAgICAgICAgICAgIFwiU3VnZ2VzdCBpbm5vdmF0aXZlIG1hcmtldGluZyBzdHJhdGVnaWVzIGZvciBhIHN0YXJ0dXBcIixcbiAgICAgICAgICAgICAgICAgIFwiQ3JlYXRlIGEgbGlzdCBvZiB1bmlxdWUgcHJvZHVjdCBuYW1lcyBmb3IgYSB0ZWNoIGNvbXBhbnlcIixcbiAgICAgICAgICAgICAgICBdLm1hcCgocHJvbXB0LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBrZXk9e3Byb21wdH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SW5wdXQocHJvbXB0KX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic2Nyb2xsLXJldmVhbCByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLWJvcmRlci8zMCBiZy13aGl0ZS84MCBwLTQgdGV4dC1sZWZ0IHRleHQtc20gdGV4dC1jaGFyY29hbCBzaGFkb3ctc20gdHJhbnNpdGlvbiBob3Zlcjpib3JkZXItcmluZy82MCBob3ZlcjpiZy13aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGFuaW1hdGlvbkRlbGF5OiBgJHtpbmRleCAqIDUwfW1zYCB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7cHJvbXB0fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTEwXCI+XG4gICAgICAgICAgICAgIHttZXNzYWdlcy5tYXAoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1VzZXIgPSBtZXNzYWdlLnJvbGUgPT09IFwidXNlclwiXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXttZXNzYWdlLmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BtZXNzYWdlLWZyYW1lIGZsZXggZmxleC1jb2wgZ2FwLTMgJHtpc1VzZXIgPyBcIml0ZW1zLWVuZCB0ZXh0LXJpZ2h0XCIgOiBcIlwifWB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtpc1VzZXIgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0yIHRleHQteHMgdXBwZXJjYXNlIHRyYWNraW5nLVswLjJlbV0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGp1c3RpZnktZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Db2xsZWN0b3I8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LVswLjY1cmVtXSBub3JtYWwtY2FzZSB0cmFja2luZy1ub3JtYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge21lc3NhZ2UudGltZXN0YW1wLnRvTG9jYWxlVGltZVN0cmluZyhbXSwgeyBob3VyOiBcIjItZGlnaXRcIiwgbWludXRlOiBcIjItZGlnaXRcIiB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgICAgICB7aXNVc2VyID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1idWJibGUgdXNlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1hcmtkb3duUmVuZGVyZXIgY29udGVudD17bWVzc2FnZS5jb250ZW50fSB0b25lPVwiYnViYmxlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG1lc3NhZ2UuaXNFcnJvciA/IChcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1kZXN0cnVjdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwid2hpdGVzcGFjZS1wcmUtd3JhcCBicmVhay13b3JkcyBsZWFkaW5nLXJlbGF4ZWRcIj57bWVzc2FnZS5jb250ZW50fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIHByLTEyIHRleHQtc20gdGV4dC1jaGFyY29hbCBkYXJrOnRleHQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQobWVzc2FnZS5jb250ZW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMCB0b3AtMCBpbmxpbmUtZmxleCBoLTkgdy05IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLXdoaXRlLzIwIGJnLXdoaXRlLzEwIHRleHQtd2hpdGUvODAgc2hhZG93LVswXzVweF8xMnB4X3JnYmEoMCwwLDAsMC4yKV0gYmFja2Ryb3AtYmx1ciB0cmFuc2l0aW9uIGhvdmVyOmJnLXdoaXRlLzIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNvcHkgcmVzcG9uc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29weSBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1hcmtkb3duUmVuZGVyZXIgY29udGVudD17bWVzc2FnZS5jb250ZW50fSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAgICAgIHttZXNzYWdlLmhpbnQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWFjY2VudC82MCBiZy1hY2NlbnQvNDAgcHgtMyBweS0yIHRleHQteHMgdGV4dC1jaGFyY29hbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge21lc3NhZ2UuaGludH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgICAge2lzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLWZyYW1lIGZsZXggZmxleC1jb2wgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidXBwZXJjYXNlIHRyYWNraW5nLVswLjI1ZW1dIHRleHQtd2hpdGUvNzBcIj5Db3JyZXNwb25kZW50PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4IGgtMyB3LTI0IG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLWZ1bGwgYmctd2hpdGUvMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC15LTAgdy0xLzIgYW5pbWF0ZS1bc2hpbW1lcl8xLjRzX2luZmluaXRlXSBiZy13aGl0ZS80MFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIG10LWF1dG8gcHQtNiBwYi00XCI+XG4gICAgICAgIDxmb3JtIG9uU3VibWl0PXtzZW5kTWVzc2FnZX0gY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleCBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIHsvKiBJbWFnZSBwcmV2aWV3IHNlY3Rpb24gKi99XG4gICAgICAgICAge3NlbGVjdGVkSW1hZ2VzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0zIGZsZXggZmxleC13cmFwIGdhcC0zIHB4LTMgcHQtMlwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRJbWFnZXMubWFwKChpbWFnZSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICA8ZGl2IGtleT17aW5kZXh9IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgIHNyYz17aW1hZ2V9XG4gICAgICAgICAgICAgICAgICAgIGFsdD17YFNlbGVjdGVkICR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC0xNiB3LTE2IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ib3JkZXIvNDAgb2JqZWN0LWNvdmVyIHNoYWRvdy1tZFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcmVtb3ZlSW1hZ2UoaW5kZXgpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSAtcmlnaHQtMiAtdG9wLTIgZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC13aGl0ZSBzaGFkb3ctbWQgaG92ZXI6b3BhY2l0eS04MFwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1jaGFyY29hbC1pbmspXCIgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFggY2xhc3NOYW1lPVwiaC0zIHctM1wiIC8+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYW51c2NyaXB0LXBhbmVsIHctWzkwJV0gbWF4LXctM3hsIHAtNVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC00XCI+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0SW5wdXQoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIldyaXRlIGEgbm90ZSwgc2hhcmUgYSBodW5jaCwgb3IgcGFzdGUgYSBicmllZuKAplwiXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cbiAgICAgICAgICAgICAgICByb3dzPXsxfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1pbi1oLVszMnB4XSBtYXgtaC0zMiB3LWZ1bGwgcmVzaXplLW5vbmUgYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgdGV4dC1sZyB0ZXh0LWZvcmVncm91bmQgcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kLzgwIGZvY3VzOm91dGxpbmUtbm9uZVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcImF1dG9cIixcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9uSW5wdXQ9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50XG4gICAgICAgICAgICAgICAgICB0YXJnZXQuc3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCJcbiAgICAgICAgICAgICAgICAgIHRhcmdldC5zdHlsZS5oZWlnaHQgPSBNYXRoLm1pbih0YXJnZXQuc2Nyb2xsSGVpZ2h0LCAxNjApICsgXCJweFwiXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBnYXAtMyB0ZXh0LXhzIHVwcGVyY2FzZSB0cmFja2luZy1bMC4yNWVtXSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshaW5wdXQudHJpbSgpIHx8IGlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgIHNpemU9XCJpY29uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImdyb3VwIGgtMTIgdy0xMiBmbGV4LXNocmluay0wIHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItd2hpdGUvMjAgYmctd2hpdGUvMzAgdGV4dC13aGl0ZSBzaGFkb3ctWzBfMTBweF8yNXB4X3JnYmEoMCwwLDAsMC4yKV0gYmFja2Ryb3AtYmx1ciB0cmFuc2l0aW9uIGhvdmVyOmJnLXdoaXRlLzQwIGRpc2FibGVkOm9wYWNpdHktNTBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtpc0xvYWRpbmcgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxMb2FkZXIyIGNsYXNzTmFtZT1cImgtNCB3LTQgYW5pbWF0ZS1zcGluXCIgLz5cbiAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxTZW5kIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUltYWdlU2VsZWN0fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICBzaXplPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBmaWxlSW5wdXRSZWYuY3VycmVudD8uY2xpY2soKX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTExIHctMTEgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci13aGl0ZS8yMCBiZy13aGl0ZS8xMCB0ZXh0LXdoaXRlLzgwIHRyYW5zaXRpb24gaG92ZXI6Ymctd2hpdGUvMjAgaG92ZXI6dGV4dC13aGl0ZVwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIkF0dGFjaCBpbWFnZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFBhcGVyY2xpcCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cbiJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsIkJ1dHRvbiIsIlNlbmQiLCJMb2FkZXIyIiwiU3F1YXJlUGVuIiwiUGFwZXJjbGlwIiwiQ29weSIsIlgiLCJNYXJrZG93blJlbmRlcmVyIiwiQ2hhdEludGVyZmFjZSIsImFnZW50IiwibWVzc2FnZXMiLCJzZXRNZXNzYWdlcyIsImlucHV0Iiwic2V0SW5wdXQiLCJpc0xvYWRpbmciLCJzZXRJc0xvYWRpbmciLCJzZXNzaW9uSWQiLCJzZXRTZXNzaW9uSWQiLCJzZWxlY3RlZEltYWdlcyIsInNldFNlbGVjdGVkSW1hZ2VzIiwibWVzc2FnZXNDb250YWluZXJSZWYiLCJpbnB1dFJlZiIsImZpbGVJbnB1dFJlZiIsInNlc3Npb25LZXkiLCJpZCIsImV4aXN0aW5nU2Vzc2lvbklkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkRhdGUiLCJNYXRoIiwibm93IiwicmFuZG9tIiwidG9TdHJpbmciLCJzdWJzdHJpbmciLCJzZXRJdGVtIiwibWVzc2FnZXNLZXkiLCJzYXZlZE1lc3NhZ2VzIiwicGFyc2VkIiwiSlNPTiIsInBhcnNlIiwibWFwIiwibXNnIiwidGltZXN0YW1wIiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwiY3VycmVudCIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsInN0cmluZ2lmeSIsInN0eWxlIiwiaGVpZ2h0IiwibWluIiwiaGFuZGxlSW1hZ2VTZWxlY3QiLCJlIiwiZmlsZXMiLCJjdXJyZW50VGFyZ2V0IiwibmV3SW1hZ2VzIiwiaSIsImxlbmd0aCIsImZpbGUiLCJ0eXBlIiwic3RhcnRzV2l0aCIsIndhcm4iLCJuYW1lIiwiYmFzZTY0IiwiZmlsZVRvQmFzZTY0IiwicHVzaCIsInByZXYiLCJ2YWx1ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsInJlYWRBc0RhdGFVUkwiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwicmVtb3ZlSW1hZ2UiLCJpbmRleCIsImZpbHRlciIsIl8iLCJzZW5kTWVzc2FnZSIsInByZXZlbnREZWZhdWx0IiwidHJpbSIsInVzZXJNZXNzYWdlIiwicm9sZSIsImNvbnRlbnQiLCJpbWFnZXMiLCJ1bmRlZmluZWQiLCJyZXNwb25zZSIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJtZXNzYWdlIiwidG9JU09TdHJpbmciLCJhZ2VudElkIiwiZGF0YSIsImpzb24iLCJvayIsImVycm9yTWVzc2FnZSIsImlzRXJyb3IiLCJoaW50IiwiYXNzaXN0YW50TWVzc2FnZSIsImZvY3VzIiwic3RhcnROZXdDaGF0IiwibmV3U2Vzc2lvbklkIiwiaGFuZGxlS2V5RG93biIsImtleSIsInNoaWZ0S2V5IiwiZGl2IiwiY2xhc3NOYW1lIiwib25DbGljayIsInZhcmlhbnQiLCJzaXplIiwidGl0bGUiLCJyZWYiLCJoMSIsInByb21wdCIsImJ1dHRvbiIsImFuaW1hdGlvbkRlbGF5IiwiaXNVc2VyIiwic3BhbiIsInRvTG9jYWxlVGltZVN0cmluZyIsImhvdXIiLCJtaW51dGUiLCJ0b25lIiwicCIsIm5hdmlnYXRvciIsImNsaXBib2FyZCIsIndyaXRlVGV4dCIsImFyaWEtbGFiZWwiLCJmb3JtIiwib25TdWJtaXQiLCJpbWFnZSIsImltZyIsInNyYyIsImFsdCIsImJhY2tncm91bmRDb2xvciIsInRleHRhcmVhIiwib25DaGFuZ2UiLCJ0YXJnZXQiLCJvbktleURvd24iLCJwbGFjZWhvbGRlciIsImRpc2FibGVkIiwicm93cyIsIm92ZXJmbG93Iiwib25JbnB1dCIsIm11bHRpcGxlIiwiYWNjZXB0IiwiY2xpY2siXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/chat-interface.tsx\n"));
/***/ })
});