32 lines
134 KiB
JavaScript
32 lines
134 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/flashcards/page",{
|
||
|
||
/***/ "(app-pages-browser)/./app/flashcards/page.tsx":
|
||
/*!*********************************!*\
|
||
!*** ./app/flashcards/page.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 */ \"default\": () => (/* binding */ FlashcardsPage)\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/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/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 next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_ProtectedRoute__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ProtectedRoute */ \"(app-pages-browser)/./components/ProtectedRoute.tsx\");\n/* harmony import */ var _components_FlashcardForm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/FlashcardForm */ \"(app-pages-browser)/./components/FlashcardForm.tsx\");\n/* harmony import */ var _lib_services_flashcards__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/lib/services/flashcards */ \"(app-pages-browser)/./lib/services/flashcards.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nfunction FlashcardsContent() {\n var _cardSets_find, _cardSets_, _cardSets_1;\n _s();\n const [activeTab, setActiveTab] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('my-cards');\n const [selectedSet, setSelectedSet] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [searchTerm, setSearchTerm] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n // Real data from API\n const [cardSets, setCardSets] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [flashcards, setFlashcards] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Form states\n const [showForm, setShowForm] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [editingCard, setEditingCard] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Load data from API\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"FlashcardsContent.useEffect\": ()=>{\n loadCardSets();\n loadFlashcards();\n }\n }[\"FlashcardsContent.useEffect\"], []);\n const loadCardSets = async ()=>{\n try {\n const result = await _lib_services_flashcards__WEBPACK_IMPORTED_MODULE_5__.flashcardsService.getCardSets();\n if (result.success && result.data) {\n setCardSets(result.data.sets);\n } else {\n setError(result.error || 'Failed to load card sets');\n }\n } catch (err) {\n setError('Failed to load card sets');\n }\n };\n const loadFlashcards = async ()=>{\n try {\n setLoading(true);\n const result = await _lib_services_flashcards__WEBPACK_IMPORTED_MODULE_5__.flashcardsService.getFlashcards(selectedSet || undefined);\n if (result.success && result.data) {\n setFlashcards(result.data.flashcards);\n } else {\n setError(result.error || 'Failed to load flashcards');\n }\n } catch (err) {\n setError('Failed to load flashcards');\n } finally{\n setLoading(false);\n }\n };\n // Reload flashcards when selectedSet changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"FlashcardsContent.useEffect\": ()=>{\n loadFlashcards();\n }\n }[\"FlashcardsContent.useEffect\"], [\n selectedSet\n ]);\n // Handle form operations\n const handleFormSuccess = ()=>{\n setShowForm(false);\n setEditingCard(null);\n loadFlashcards();\n loadCardSets();\n };\n const handleEdit = (card)=>{\n setEditingCard(card);\n setShowForm(true);\n };\n const handleDelete = async (card)=>{\n if (!confirm(\"確定要刪除詞卡「\".concat(card.word, \"」嗎?\"))) {\n return;\n }\n try {\n const result = await _lib_services_flashcards__WEBPACK_IMPORTED_MODULE_5__.flashcardsService.deleteFlashcard(card.id);\n if (result.success) {\n loadFlashcards();\n loadCardSets();\n } else {\n alert(result.error || '刪除失敗');\n }\n } catch (err) {\n alert('刪除失敗,請重試');\n }\n };\n // Filter data\n const filteredSets = cardSets.filter((set)=>set.name.toLowerCase().includes(searchTerm.toLowerCase()) || set.description.toLowerCase().includes(searchTerm.toLowerCase()));\n const filteredCards = flashcards.filter((card)=>{\n if (searchTerm) {\n var _card_word, _card_translation;\n return ((_card_word = card.word) === null || _card_word === void 0 ? void 0 : _card_word.toLowerCase().includes(searchTerm.toLowerCase())) || ((_card_translation = card.translation) === null || _card_translation === void 0 ? void 0 : _card_translation.toLowerCase().includes(searchTerm.toLowerCase()));\n }\n return true;\n });\n // Add loading and error states\n if (loading) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gray-50 flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg\",\n children: \"載入中...\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 113,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 112,\n columnNumber: 7\n }, this);\n }\n if (error) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gray-50 flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-red-600\",\n children: error\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 121,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 120,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gray-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white border-b border-gray-200\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center py-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-3xl font-bold text-gray-900\",\n children: \"詞卡管理\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 133,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-sm text-gray-500\",\n children: \"管理你的詞卡集合\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 134,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 132,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowForm(true),\n className: \"bg-green-600 text-white px-4 py-2 rounded-lg hover:bg-green-700 transition-colors\",\n children: \"新增詞卡\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 137,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/generate\",\n className: \"bg-primary text-white px-4 py-2 rounded-lg hover:bg-primary/90 transition-colors\",\n children: \"AI 生成詞卡\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 143,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 136,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 131,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setActiveTab('my-cards'),\n className: \"pb-4 px-1 border-b-2 font-medium text-sm \".concat(activeTab === 'my-cards' ? 'border-primary text-primary' : 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300'),\n children: [\n \"我的卡組 (\",\n filteredSets.length,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 154,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setActiveTab('all-cards'),\n className: \"pb-4 px-1 border-b-2 font-medium text-sm \".concat(activeTab === 'all-cards' ? 'border-primary text-primary' : 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300'),\n children: [\n \"所有詞卡 (\",\n filteredCards.length,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 164,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 153,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 130,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 129,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: /*#__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)(\"input\", {\n type: \"text\",\n value: searchTerm,\n onChange: (e)=>setSearchTerm(e.target.value),\n placeholder: \"搜尋詞卡或卡組...\",\n className: \"w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary focus:border-transparent\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 183,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"h-5 w-5 text-gray-400\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 192,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 191,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 190,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 182,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 181,\n columnNumber: 9\n }, this),\n activeTab === 'my-cards' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold\",\n children: [\n \"共 \",\n filteredSets.length,\n \" 個卡組\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 202,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 201,\n columnNumber: 13\n }, this),\n filteredSets.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center py-12\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-gray-500 mb-4\",\n children: \"還沒有詞卡集合\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 207,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/generate\",\n className: \"bg-primary text-white px-4 py-2 rounded-lg hover:bg-primary/90 transition-colors\",\n children: \"創建第一個卡組\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 208,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 206,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\",\n children: filteredSets.map((set)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border rounded-lg hover:shadow-lg transition-shadow cursor-pointer\",\n onClick: ()=>{\n setSelectedSet(set.id);\n setActiveTab('all-cards');\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"\".concat(set.color, \" text-white p-4 rounded-t-lg\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h4\", {\n className: \"font-semibold text-lg\",\n children: set.name\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 227,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm opacity-90\",\n children: set.description\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 228,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 226,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4 bg-white rounded-b-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center text-sm text-gray-600\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n set.cardCount,\n \" 張詞卡\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 232,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n \"進度: \",\n set.progress,\n \"%\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 233,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 231,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 230,\n columnNumber: 21\n }, this)\n ]\n }, set.id, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 218,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 216,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 200,\n columnNumber: 11\n }, this),\n activeTab === 'all-cards' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold\",\n children: [\n \"共 \",\n filteredCards.length,\n \" 個詞卡\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 247,\n columnNumber: 15\n }, this),\n selectedSet && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setSelectedSet(null),\n className: \"text-sm text-gray-600 hover:text-gray-900\",\n children: \"顯示所有詞卡\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 249,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 246,\n columnNumber: 13\n }, this),\n filteredCards.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center py-12\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-gray-500 mb-4\",\n children: \"沒有找到詞卡\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 260,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/generate\",\n className: \"bg-primary text-white px-4 py-2 rounded-lg hover:bg-primary/90 transition-colors\",\n children: \"創建新詞卡\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 261,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 259,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-3\",\n children: filteredCards.map((card)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white border rounded-lg p-4 hover:shadow-md transition-shadow\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h4\", {\n className: \"font-semibold text-lg\",\n children: card.word || '未設定'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 277,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-500\",\n children: card.partOfSpeech\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 278,\n columnNumber: 31\n }, this),\n card.pronunciation && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-blue-600\",\n children: card.pronunciation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 280,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 276,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-gray-700 mt-1\",\n children: card.translation || '未設定'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 283,\n columnNumber: 29\n }, this),\n card.example && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-gray-600 mt-2 italic\",\n children: [\n \"例句: \",\n card.example\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 285,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4 mt-2 text-xs text-gray-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n \"卡組: \",\n card.cardSet.name\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 288,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n \"熟練度: \",\n card.masteryLevel,\n \"/5\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 289,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n \"複習: \",\n card.timesReviewed,\n \" 次\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 290,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n \"下次複習: \",\n new Date(card.nextReviewDate).toLocaleDateString()\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 291,\n columnNumber: 31\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 287,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 275,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 274,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 273,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleEdit(card),\n className: \"text-blue-600 hover:text-blue-800 text-sm\",\n children: \"編輯\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 297,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDelete(card),\n className: \"text-red-600 hover:text-red-800 text-sm\",\n children: \"刪除\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 303,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 296,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 272,\n columnNumber: 21\n }, this)\n }, card.id, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 271,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 269,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 245,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 179,\n columnNumber: 7\n }, this),\n showForm && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_FlashcardForm__WEBPACK_IMPORTED_MODULE_4__.FlashcardForm, {\n cardSets: cardSets,\n initialData: editingCard ? {\n id: editingCard.id,\n cardSetId: editingCard.cardSet ? ((_cardSets_find = cardSets.find((cs)=>cs.name === editingCard.cardSet.name)) === null || _cardSets_find === void 0 ? void 0 : _cardSets_find.id) || ((_cardSets_ = cardSets[0]) === null || _cardSets_ === void 0 ? void 0 : _cardSets_.id) : (_cardSets_1 = cardSets[0]) === null || _cardSets_1 === void 0 ? void 0 : _cardSets_1.id,\n english: editingCard.word,\n chinese: editingCard.translation,\n pronunciation: editingCard.pronunciation,\n partOfSpeech: editingCard.partOfSpeech,\n example: editingCard.example\n } : undefined,\n isEdit: !!editingCard,\n onSuccess: handleFormSuccess,\n onCancel: ()=>{\n setShowForm(false);\n setEditingCard(null);\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 321,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 127,\n columnNumber: 5\n }, this);\n}\n_s(FlashcardsContent, \"oUDLR7NnDUw5gAKYX5V6Mc+Z6Uk=\");\n_c = FlashcardsContent;\nfunction FlashcardsPage() {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ProtectedRoute__WEBPACK_IMPORTED_MODULE_3__.ProtectedRoute, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(FlashcardsContent, {}, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 347,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 346,\n columnNumber: 5\n }, this);\n}\n_c1 = FlashcardsPage;\nvar _c, _c1;\n$RefreshReg$(_c, \"FlashcardsContent\");\n$RefreshReg$(_c1, \"FlashcardsPage\");\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9mbGFzaGNhcmRzL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRTJDO0FBQ2Y7QUFDZ0M7QUFDRjtBQUNpQztBQUUzRixTQUFTTTtRQTRUb0NDLGdCQUFpRUEsWUFBa0JBOztJQTNUOUgsTUFBTSxDQUFDQyxXQUFXQyxhQUFhLEdBQUdULCtDQUFRQSxDQUFDO0lBQzNDLE1BQU0sQ0FBQ1UsYUFBYUMsZUFBZSxHQUFHWCwrQ0FBUUEsQ0FBZ0I7SUFDOUQsTUFBTSxDQUFDWSxZQUFZQyxjQUFjLEdBQUdiLCtDQUFRQSxDQUFDO0lBRTdDLHFCQUFxQjtJQUNyQixNQUFNLENBQUNPLFVBQVVPLFlBQVksR0FBR2QsK0NBQVFBLENBQVksRUFBRTtJQUN0RCxNQUFNLENBQUNlLFlBQVlDLGNBQWMsR0FBR2hCLCtDQUFRQSxDQUFjLEVBQUU7SUFDNUQsTUFBTSxDQUFDaUIsU0FBU0MsV0FBVyxHQUFHbEIsK0NBQVFBLENBQUM7SUFDdkMsTUFBTSxDQUFDbUIsT0FBT0MsU0FBUyxHQUFHcEIsK0NBQVFBLENBQWdCO0lBRWxELGNBQWM7SUFDZCxNQUFNLENBQUNxQixVQUFVQyxZQUFZLEdBQUd0QiwrQ0FBUUEsQ0FBQztJQUN6QyxNQUFNLENBQUN1QixhQUFhQyxlQUFlLEdBQUd4QiwrQ0FBUUEsQ0FBbUI7SUFFakUscUJBQXFCO0lBQ3JCQyxnREFBU0E7dUNBQUM7WUFDUndCO1lBQ0FDO1FBQ0Y7c0NBQUcsRUFBRTtJQUVMLE1BQU1ELGVBQWU7UUFDbkIsSUFBSTtZQUNGLE1BQU1FLFNBQVMsTUFBTXRCLHVFQUFpQkEsQ0FBQ3VCLFdBQVc7WUFDbEQsSUFBSUQsT0FBT0UsT0FBTyxJQUFJRixPQUFPRyxJQUFJLEVBQUU7Z0JBQ2pDaEIsWUFBWWEsT0FBT0csSUFBSSxDQUFDQyxJQUFJO1lBQzlCLE9BQU87Z0JBQ0xYLFNBQVNPLE9BQU9SLEtBQUssSUFBSTtZQUMzQjtRQUNGLEVBQUUsT0FBT2EsS0FBSztZ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R0QsOERBQUNHOzREQUNDQyxTQUFTLElBQU1wQixhQUFhRDs0REFDNUJpQixXQUFVO3NFQUNYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7dUNBbkNHakIsS0FBS0ssRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztZQWlENUJyQiwwQkFDQyw4REFBQ2pCLG9FQUFhQTtnQkFDWkcsVUFBVUE7Z0JBQ1ZzRixhQUFhdEUsY0FBYztvQkFDekJtQixJQUFJbkIsWUFBWW1CLEVBQUU7b0JBQ2xCb0QsV0FBV3ZFLFlBQVlnRSxPQUFPLEdBQUdoRixFQUFBQSxpQkFBQUEsU0FBU3dGLElBQUksQ0FBQ0MsQ0FBQUEsS0FBTUEsR0FBR2pELElBQUksS0FBS3hCLFlBQVlnRSxPQUFPLENBQUN4QyxJQUFJLGVBQXhEeEMscUNBQUFBLGVBQTJEbUMsRUFBRSxPQUFJbkMsYUFBQUEsUUFBUSxDQUFDLEVBQUUsY0FBWEEsaUNBQUFBLFdBQWFtQyxFQUFFLEtBQUduQyxjQUFBQSxRQUFRLENBQUMsRUFBRSxjQUFYQSxrQ0FBQUEsWUFBYW1DLEVBQUU7b0JBQ25JdUQsU0FBUzFFLFlBQVlpQixJQUFJO29CQUN6QjBELFNBQVMzRSxZQUFZNkIsV0FBVztvQkFDaENpQyxlQUFlOUQsWUFBWThELGFBQWE7b0JBQ3hDRCxjQUFjN0QsWUFBWTZELFlBQVk7b0JBQ3RDRSxTQUFTL0QsWUFBWStELE9BQU87Z0JBQzlCLElBQUlwRDtnQkFDSmlFLFFBQVEsQ0FBQyxDQUFDNUU7Z0JBQ1Y2RSxXQUFXakU7Z0JBQ1hrRSxVQUFVO29CQUNSL0UsWUFBWTtvQkFDWkUsZUFBZTtnQkFDakI7Ozs7Ozs7Ozs7OztBQUtWO0dBN1VTbEI7S0FBQUE7QUErVU0sU0FBU2dHO0lBQ3RCLHFCQUNFLDhEQUFDbkcsc0VBQWNBO2tCQUNiLDRFQUFDRzs7Ozs7Ozs7OztBQUdQO01BTndCZ0ciLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9mbGFzaGNhcmRzL3BhZ2UudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgTGluayBmcm9tICduZXh0L2xpbmsnXG5pbXBvcnQgeyBQcm90ZWN0ZWRSb3V0ZSB9IGZyb20gJ0AvY29tcG9uZW50cy9Qcm90ZWN0ZWRSb3V0ZSdcbmltcG9ydCB7IEZsYXNoY2FyZEZvcm0gfSBmcm9tICdAL2NvbXBvbmVudHMvRmxhc2hjYXJkRm9ybSdcbmltcG9ydCB7IGZsYXNoY2FyZHNTZXJ2aWNlLCB0eXBlIENhcmRTZXQsIHR5cGUgRmxhc2hjYXJkIH0gZnJvbSAnQC9saWIvc2VydmljZXMvZmxhc2hjYXJkcydcblxuZnVuY3Rpb24gRmxhc2hjYXJkc0NvbnRlbnQoKSB7XG4gIGNvbnN0IFthY3RpdmVUYWIsIHNldEFjdGl2ZVRhYl0gPSB1c2VTdGF0ZSgnbXktY2FyZHMnKVxuICBjb25zdCBbc2VsZWN0ZWRTZXQsIHNldFNlbGVjdGVkU2V0XSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzZWFyY2hUZXJtLCBzZXRTZWFyY2hUZXJtXSA9IHVzZVN0YXRlKCcnKVxuXG4gIC8vIFJlYWwgZGF0YSBmcm9tIEFQSVxuICBjb25zdCBbY2FyZFNldHMsIHNldENhcmRTZXRzXSA9IHVzZVN0YXRlPENhcmRTZXRbXT4oW10pXG4gIGNvbnN0IFtmbGFzaGNhcmRzLCBzZXRGbGFzaGNhcmRzXSA9IHVzZVN0YXRlPEZsYXNoY2FyZFtdPihbXSlcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSlcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIC8vIEZvcm0gc3RhdGVzXG4gIGNvbnN0IFtzaG93Rm9ybSwgc2V0U2hvd0Zvcm1dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtlZGl0aW5nQ2FyZCwgc2V0RWRpdGluZ0NhcmRdID0gdXNlU3RhdGU8Rmxhc2hjYXJkIHwgbnVsbD4obnVsbClcblxuICAvLyBMb2FkIGRhdGEgZnJvbSBBUElcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsb2FkQ2FyZFNldHMoKVxuICAgIGxvYWRGbGFzaGNhcmRzKClcbiAgfSwgW10pXG5cbiAgY29uc3QgbG9hZENhcmRTZXRzID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbGFzaGNhcmRzU2VydmljZS5nZXRDYXJkU2V0cygpXG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MgJiYgcmVzdWx0LmRhdGEpIHtcbiAgICAgICAgc2V0Q2FyZFNldHMocmVzdWx0LmRhdGEuc2V0cylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEVycm9yKHJlc3VsdC5lcnJvciB8fCAnRmFpbGVkIHRvIGxvYWQgY2FyZCBzZXRzJylcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNldEVycm9yKCdGYWlsZWQgdG8gbG9hZCBjYXJkIHNldHMnKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGxvYWRGbGFzaGNhcmRzID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbGFzaGNhcmRzU2VydmljZS5nZXRGbGFzaGNhcmRzKHNlbGVjdGVkU2V0IHx8IHVuZGVmaW5lZClcbiAgICAgIGlmIChyZXN1bHQuc3VjY2VzcyAmJiByZXN1bHQuZGF0YSkge1xuICAgICAgICBzZXRGbGFzaGNhcmRzKHJlc3VsdC5kYXRhLmZsYXNoY2FyZHMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRFcnJvcihyZXN1bHQuZXJyb3IgfHwgJ0ZhaWxlZCB0byBsb2FkIGZsYXNoY2FyZHMnKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc2V0RXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGZsYXNoY2FyZHMnKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlbG9hZCBmbGFzaGNhcmRzIHdoZW4gc2VsZWN0ZWRTZXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxvYWRGbGFzaGNhcmRzKClcbiAgfSwgW3NlbGVjdGVkU2V0XSlcblxuICAvLyBIYW5kbGUgZm9ybSBvcGVyYXRpb25zXG4gIGNvbnN0IGhhbmRsZUZvcm1TdWNjZXNzID0gKCkgPT4ge1xuICAgIHNldFNob3dGb3JtKGZhbHNlKVxuICAgIHNldEVkaXRpbmdDYXJkKG51bGwpXG4gICAgbG9hZEZsYXNoY2FyZHMoKVxuICAgIGxvYWRDYXJkU2V0cygpXG4gIH1cblxuICBjb25zdCBoYW5kbGVFZGl0ID0gKGNhcmQ6IEZsYXNoY2FyZCkgPT4ge1xuICAgIHNldEVkaXRpbmdDYXJkKGNhcmQpXG4gICAgc2V0U2hvd0Zvcm0odHJ1ZSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZSA9IGFzeW5jIChjYXJkOiBGbGFzaGNhcmQpID0+IHtcbiAgICBpZiAoIWNvbmZpcm0oYOeiuuWumuimgeWIqumZpOipnuWNoeOAjCR7Y2FyZC53b3JkfeOAjeWXju+8n2ApKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmxhc2hjYXJkc1NlcnZpY2UuZGVsZXRlRmxhc2hjYXJkKGNhcmQuaWQpXG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgbG9hZEZsYXNoY2FyZHMoKVxuICAgICAgICBsb2FkQ2FyZFNldHMoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxlcnQocmVzdWx0LmVycm9yIHx8ICfliKrpmaTlpLHmlZcnKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYWxlcnQoJ+WIqumZpOWkseaVl++8jOiri+mHjeippicpXG4gICAgfVxuICB9XG5cbiAgLy8gRmlsdGVyIGRhdGFcbiAgY29uc3QgZmlsdGVyZWRTZXRzID0gY2FyZFNldHMuZmlsdGVyKHNldCA9PlxuICAgIHNldC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgIHNldC5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKSlcbiAgKVxuXG4gIGNvbnN0IGZpbHRlcmVkQ2FyZHMgPSBmbGFzaGNhcmRzLmZpbHRlcihjYXJkID0+IHtcbiAgICBpZiAoc2VhcmNoVGVybSkge1xuICAgICAgcmV0dXJuIGNhcmQud29yZD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXJtLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAgICAgICAgY2FyZC50cmFuc2xhdGlvbj8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXJtLnRvTG93ZXJDYXNlKCkpXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH0pXG5cbiAgLy8gQWRkIGxvYWRpbmcgYW5kIGVycm9yIHN0YXRlc1xuICBpZiAobG9hZGluZykge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ncmF5LTUwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZ1wiPui8ieWFpeS4rS4uLjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWdyYXktNTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXJlZC02MDBcIj57ZXJyb3J9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWdyYXktNTBcIj5cbiAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LTd4bCBteC1hdXRvIHB4LTQgc206cHgtNiBsZzpweC04XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgcHktNlwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtM3hsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwXCI+6Kme5Y2h566h55CGPC9oMT5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXNtIHRleHQtZ3JheS01MDBcIj7nrqHnkIbkvaDnmoToqZ7ljaHpm4blkIg8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC00XCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93Rm9ybSh0cnVlKX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy1ncmVlbi02MDAgdGV4dC13aGl0ZSBweC00IHB5LTIgcm91bmRlZC1sZyBob3ZlcjpiZy1ncmVlbi03MDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg5paw5aKe6Kme5Y2hXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgIGhyZWY9XCIvZ2VuZXJhdGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC13aGl0ZSBweC00IHB5LTIgcm91bmRlZC1sZyBob3ZlcjpiZy1wcmltYXJ5LzkwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEFJIOeUn+aIkOipnuWNoVxuICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBUYWJzICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzcGFjZS14LThcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0QWN0aXZlVGFiKCdteS1jYXJkcycpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BwYi00IHB4LTEgYm9yZGVyLWItMiBmb250LW1lZGl1bSB0ZXh0LXNtICR7XG4gICAgICAgICAgICAgICAgYWN0aXZlVGFiID09PSAnbXktY2FyZHMnXG4gICAgICAgICAgICAgICAgICA/ICdib3JkZXItcHJpbWFyeSB0ZXh0LXByaW1hcnknXG4gICAgICAgICAgICAgICAgICA6ICdib3JkZXItdHJhbnNwYXJlbnQgdGV4dC1ncmF5LTUwMCBob3Zlcjp0ZXh0LWdyYXktNzAwIGhvdmVyOmJvcmRlci1ncmF5LTMwMCdcbiAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIOaIkeeahOWNoee1hCAoe2ZpbHRlcmVkU2V0cy5sZW5ndGh9KVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEFjdGl2ZVRhYignYWxsLWNhcmRzJyl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YHBiLTQgcHgtMSBib3JkZXItYi0yIGZvbnQtbWVkaXVtIHRleHQtc20gJHtcbiAgICAgICAgICAgICAgICBhY3RpdmVUYWIgPT09ICdhbGwtY2FyZHMnXG4gICAgICAgICAgICAgICAgICA/ICdib3JkZXItcHJpbWFyeSB0ZXh0LXByaW1hcnknXG4gICAgICAgICAgICAgICAgICA6ICdib3JkZXItdHJhbnNwYXJlbnQgdGV4dC1ncmF5LTUwMCBob3Zlcjp0ZXh0LWdyYXktNzAwIGhvdmVyOmJvcmRlci1ncmF5LTMwMCdcbiAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIOaJgOacieipnuWNoSAoe2ZpbHRlcmVkQ2FyZHMubGVuZ3RofSlcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogQ29udGVudCAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctN3hsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LTggcHktOFwiPlxuICAgICAgICB7LyogU2VhcmNoICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTZcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICB2YWx1ZT17c2VhcmNoVGVybX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2hUZXJtKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLmkJzlsIvoqZ7ljaHmiJbljaHntYQuLi5cIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcGwtMTAgcHItNCBweS0yIGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1sZyBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1wcmltYXJ5IGZvY3VzOmJvcmRlci10cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC15LTAgbGVmdC0wIHBsLTMgZmxleCBpdGVtcy1jZW50ZXIgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cImgtNSB3LTUgdGV4dC1ncmF5LTQwMFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0yMSAyMWwtNi02bTItNWE3IDcgMCAxMS0xNCAwIDcgNyAwIDAxMTQgMHpcIiAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICB7LyogQ2FyZCBTZXRzIFRhYiAqL31cbiAgICAgICAge2FjdGl2ZVRhYiA9PT0gJ215LWNhcmRzJyAmJiAoXG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG1iLTRcIj5cbiAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1zZW1pYm9sZFwiPuWFsSB7ZmlsdGVyZWRTZXRzLmxlbmd0aH0g5YCL5Y2h57WEPC9oMz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7ZmlsdGVyZWRTZXRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBweS0xMlwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDAgbWItNFwiPumChOaykuacieipnuWNoembhuWQiDwvcD5cbiAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgaHJlZj1cIi9nZW5lcmF0ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtd2hpdGUgcHgtNCBweS0yIHJvdW5kZWQtbGcgaG92ZXI6YmctcHJpbWFyeS85MCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAg5Ym15bu656ys5LiA5YCL5Y2h57WEXG4gICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtMyBnYXAtNFwiPlxuICAgICAgICAgICAgICAgIHtmaWx0ZXJlZFNldHMubWFwKHNldCA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGtleT17c2V0LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXIgcm91bmRlZC1sZyBob3ZlcjpzaGFkb3ctbGcgdHJhbnNpdGlvbi1zaGFkb3cgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRTZXQoc2V0LmlkKVxuICAgICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZVRhYignYWxsLWNhcmRzJylcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3NldC5jb2xvcn0gdGV4dC13aGl0ZSBwLTQgcm91bmRlZC10LWxnYH0+XG4gICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzTmFtZT1cImZvbnQtc2VtaWJvbGQgdGV4dC1sZ1wiPntzZXQubmFtZX08L2g0PlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gb3BhY2l0eS05MFwiPntzZXQuZGVzY3JpcHRpb259PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTQgYmctd2hpdGUgcm91bmRlZC1iLWxnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgdGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57c2V0LmNhcmRDb3VudH0g5by16Kme5Y2hPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+6YCy5bqmOiB7c2V0LnByb2dyZXNzfSU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7LyogQWxsIENhcmRzIFRhYiAqL31cbiAgICAgICAge2FjdGl2ZVRhYiA9PT0gJ2FsbC1jYXJkcycgJiYgKFxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi00XCI+XG4gICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGRcIj7lhbEge2ZpbHRlcmVkQ2FyZHMubGVuZ3RofSDlgIvoqZ7ljaE8L2gzPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRTZXQgJiYgKFxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkU2V0KG51bGwpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIOmhr+ekuuaJgOacieipnuWNoVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHtmaWx0ZXJlZENhcmRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBweS0xMlwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDAgbWItNFwiPuaykuacieaJvuWIsOipnuWNoTwvcD5cbiAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgaHJlZj1cIi9nZW5lcmF0ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtd2hpdGUgcHgtNCBweS0yIHJvdW5kZWQtbGcgaG92ZXI6YmctcHJpbWFyeS85MCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAg5Ym15bu65paw6Kme5Y2hXG4gICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0zXCI+XG4gICAgICAgICAgICAgICAge2ZpbHRlcmVkQ2FyZHMubWFwKGNhcmQgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2NhcmQuaWR9IGNsYXNzTmFtZT1cImJnLXdoaXRlIGJvcmRlciByb3VuZGVkLWxnIHAtNCBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbi1zaGFkb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzTmFtZT1cImZvbnQtc2VtaWJvbGQgdGV4dC1sZ1wiPntjYXJkLndvcmQgfHwgJ+acquioreWumid9PC9oND5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTUwMFwiPntjYXJkLnBhcnRPZlNwZWVjaH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2FyZC5wcm9udW5jaWF0aW9uICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWJsdWUtNjAwXCI+e2NhcmQucHJvbnVuY2lhdGlvbn08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtZ3JheS03MDAgbXQtMVwiPntjYXJkLnRyYW5zbGF0aW9uIHx8ICfmnKroqK3lrponfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2FyZC5leGFtcGxlICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBtdC0yIGl0YWxpY1wiPuS+i+WPpToge2NhcmQuZXhhbXBsZX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNCBtdC0yIHRleHQteHMgdGV4dC1ncmF5LTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+5Y2h57WEOiB7Y2FyZC5jYXJkU2V0Lm5hbWV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+54af57e05bqmOiB7Y2FyZC5tYXN0ZXJ5TGV2ZWx9LzU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj7opIfnv5I6IHtjYXJkLnRpbWVzUmV2aWV3ZWR9IOasoTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPuS4i+asoeikh+e/kjoge25ldyBEYXRlKGNhcmQubmV4dFJldmlld0RhdGUpLnRvTG9jYWxlRGF0ZVN0cmluZygpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVFZGl0KGNhcmQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWJsdWUtNjAwIGhvdmVyOnRleHQtYmx1ZS04MDAgdGV4dC1zbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIOe3qOi8r1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZURlbGV0ZShjYXJkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1yZWQtNjAwIGhvdmVyOnRleHQtcmVkLTgwMCB0ZXh0LXNtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAg5Yiq6ZmkXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBGbGFzaGNhcmQgRm9ybSBNb2RhbCAqL31cbiAgICAgIHtzaG93Rm9ybSAmJiAoXG4gICAgICAgIDxGbGFzaGNhcmRGb3JtXG4gICAgICAgICAgY2FyZFNldHM9e2NhcmRTZXRzfVxuICAgICAgICAgIGluaXRpYWxEYXRhPXtlZGl0aW5nQ2FyZCA/IHtcbiAgICAgICAgICAgIGlkOiBlZGl0aW5nQ2FyZC5pZCxcbiAgICAgICAgICAgIGNhcmRTZXRJZDogZWRpdGluZ0NhcmQuY2FyZFNldCA/IGNhcmRTZXRzLmZpbmQoY3MgPT4gY3MubmFtZSA9PT0gZWRpdGluZ0NhcmQuY2FyZFNldC5uYW1lKT8uaWQgfHwgY2FyZFNldHNbMF0/LmlkIDogY2FyZFNldHNbMF0/LmlkLFxuICAgICAgICAgICAgZW5nbGlzaDogZWRpdGluZ0NhcmQud29yZCxcbiAgICAgICAgICAgIGNoaW5lc2U6IGVkaXRpbmdDYXJkLnRyYW5zbGF0aW9uLFxuICAgICAgICAgICAgcHJvbnVuY2lhdGlvbjogZWRpdGluZ0NhcmQucHJvbnVuY2lhdGlvbixcbiAgICAgICAgICAgIHBhcnRPZlNwZWVjaDogZWRpdGluZ0NhcmQucGFydE9mU3BlZWNoLFxuICAgICAgICAgICAgZXhhbXBsZTogZWRpdGluZ0NhcmQuZXhhbXBsZSxcbiAgICAgICAgICB9IDogdW5kZWZpbmVkfVxuICAgICAgICAgIGlzRWRpdD17ISFlZGl0aW5nQ2FyZH1cbiAgICAgICAgICBvblN1Y2Nlc3M9e2hhbmRsZUZvcm1TdWNjZXNzfVxuICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRTaG93Rm9ybShmYWxzZSlcbiAgICAgICAgICAgIHNldEVkaXRpbmdDYXJkKG51bGwpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRmxhc2hjYXJkc1BhZ2UoKSB7XG4gIHJldHVybiAoXG4gICAgPFByb3RlY3RlZFJvdXRlPlxuICAgICAgPEZsYXNoY2FyZHNDb250ZW50IC8+XG4gICAgPC9Qcm90ZWN0ZWRSb3V0ZT5cbiAgKVxufSJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIkxpbmsiLCJQcm90ZWN0ZWRSb3V0ZSIsIkZsYXNoY2FyZEZvcm0iLCJmbGFzaGNhcmRzU2VydmljZSIsIkZsYXNoY2FyZHNDb250ZW50IiwiY2FyZFNldHMiLCJhY3RpdmVUYWIiLCJzZXRBY3RpdmVUYWIiLCJzZWxlY3RlZFNldCIsInNldFNlbGVjdGVkU2V0Iiwic2VhcmNoVGVybSIsInNldFNlYXJjaFRlcm0iLCJzZXRDYXJkU2V0cyIsImZsYXNoY2FyZHMiLCJzZXRGbGFzaGNhcmRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwic2hvd0Zvcm0iLCJzZXRTaG93Rm9ybSIsImVkaXRpbmdDYXJkIiwic2V0RWRpdGluZ0NhcmQiLCJsb2FkQ2FyZFNldHMiLCJsb2FkRmxhc2hjYXJkcyIsInJlc3VsdCIsImdldENhcmRTZXRzIiwic3VjY2VzcyIsImRhdGEiLCJzZXRzIiwiZXJyIiwiZ2V0Rmxhc2hjYXJkcyIsInVuZGVmaW5lZCIsImhhbmRsZUZvcm1TdWNjZXNzIiwiaGFuZGxlRWRpdCIsImNhcmQiLCJoYW5kbGVEZWxldGUiLCJjb25maXJtIiwid29yZCIsImRlbGV0ZUZsYXNoY2FyZCIsImlkIiwiYWxlcnQiLCJmaWx0ZXJlZFNldHMiLCJmaWx0ZXIiLCJzZXQiLCJuYW1lIiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsImRlc2NyaXB0aW9uIiwiZmlsdGVyZWRDYXJkcyIsInRyYW5zbGF0aW9uIiwiZGl2IiwiY2xhc3NOYW1lIiwiaDEiLCJwIiwiYnV0dG9uIiwib25DbGljayIsImhyZWYiLCJsZW5ndGgiLCJpbnB1dCIsInR5cGUiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsInBsYWNlaG9sZGVyIiwic3ZnIiwiZmlsbCIsInN0cm9rZSIsInZpZXdCb3giLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwiaDMiLCJtYXAiLCJjb2xvciIsImg0Iiwic3BhbiIsImNhcmRDb3VudCIsInByb2dyZXNzIiwicGFydE9mU3BlZWNoIiwicHJvbnVuY2lhdGlvbiIsImV4YW1wbGUiLCJjYXJkU2V0IiwibWFzdGVyeUxldmVsIiwidGltZXNSZXZpZXdlZCIsIkRhdGUiLCJuZXh0UmV2aWV3RGF0ZSIsInRvTG9jYWxlRGF0ZVN0cmluZyIsImluaXRpYWxEYXRhIiwiY2FyZFNldElkIiwiZmluZCIsImNzIiwiZW5nbGlzaCIsImNoaW5lc2UiLCJpc0VkaXQiLCJvblN1Y2Nlc3MiLCJvbkNhbmNlbCIsIkZsYXNoY2FyZHNQYWdlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/flashcards/page.tsx\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./components/FlashcardForm.tsx":
|
||
/*!**************************************!*\
|
||
!*** ./components/FlashcardForm.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 */ FlashcardForm: () => (/* binding */ FlashcardForm)\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/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/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 _lib_services_flashcards__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/services/flashcards */ \"(app-pages-browser)/./lib/services/flashcards.ts\");\n/* __next_internal_client_entry_do_not_use__ FlashcardForm auto */ \nvar _s = $RefreshSig$();\n\n\nfunction FlashcardForm(param) {\n let { cardSets, initialData, isEdit = false, onSuccess, onCancel } = param;\n var _cardSets_;\n _s();\n const [formData, setFormData] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n cardSetId: (initialData === null || initialData === void 0 ? void 0 : initialData.cardSetId) || ((_cardSets_ = cardSets[0]) === null || _cardSets_ === void 0 ? void 0 : _cardSets_.id) || '',\n english: (initialData === null || initialData === void 0 ? void 0 : initialData.english) || '',\n chinese: (initialData === null || initialData === void 0 ? void 0 : initialData.chinese) || '',\n pronunciation: (initialData === null || initialData === void 0 ? void 0 : initialData.pronunciation) || '',\n partOfSpeech: (initialData === null || initialData === void 0 ? void 0 : initialData.partOfSpeech) || '名詞',\n example: (initialData === null || initialData === void 0 ? void 0 : initialData.example) || ''\n });\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const partOfSpeechOptions = [\n '名詞',\n '動詞',\n '形容詞',\n '副詞',\n '介詞',\n '連詞',\n '感嘆詞',\n '代詞',\n '冠詞'\n ];\n const handleSubmit = async (e)=>{\n e.preventDefault();\n setLoading(true);\n setError(null);\n try {\n let result;\n if (isEdit && (initialData === null || initialData === void 0 ? void 0 : initialData.id)) {\n result = await _lib_services_flashcards__WEBPACK_IMPORTED_MODULE_2__.flashcardsService.updateFlashcard(initialData.id, formData);\n } else {\n result = await _lib_services_flashcards__WEBPACK_IMPORTED_MODULE_2__.flashcardsService.createFlashcard(formData);\n }\n if (result.success) {\n onSuccess();\n } else {\n setError(result.error || '操作失敗');\n }\n } catch (err) {\n setError('操作失敗,請重試');\n } finally{\n setLoading(false);\n }\n };\n const handleChange = (field, value)=>{\n setFormData((prev)=>({\n ...prev,\n [field]: value\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center p-4 z-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-lg w-full max-w-2xl max-h-[90vh] overflow-y-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-2xl font-bold\",\n children: isEdit ? '編輯詞卡' : '新增詞卡'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 65,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: onCancel,\n className: \"text-gray-400 hover:text-gray-600\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 73,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 72,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 68,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 64,\n columnNumber: 11\n }, this),\n error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-red-50 border border-red-200 rounded-lg p-4 mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-600 text-sm\",\n children: error\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 80,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 79,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: handleSubmit,\n className: \"space-y-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium text-gray-700 mb-2\",\n children: \"詞卡集合 *\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 87,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n value: formData.cardSetId,\n onChange: (e)=>handleChange('cardSetId', e.target.value),\n className: \"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary focus:border-transparent\",\n required: true,\n children: cardSets.map((set)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: set.id,\n children: set.name\n }, set.id, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 97,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 90,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 86,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium text-gray-700 mb-2\",\n children: \"英文單字 *\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 106,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: formData.english,\n onChange: (e)=>handleChange('english', e.target.value),\n className: \"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary focus:border-transparent\",\n placeholder: \"例如:negotiate\",\n required: true\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 109,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 105,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium text-gray-700 mb-2\",\n children: \"中文翻譯 *\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 121,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: formData.chinese,\n onChange: (e)=>handleChange('chinese', e.target.value),\n className: \"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary focus:border-transparent\",\n placeholder: \"例如:談判,協商\",\n required: true\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 124,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 120,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-2 gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium text-gray-700 mb-2\",\n children: \"詞性 *\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 137,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n value: formData.partOfSpeech,\n onChange: (e)=>handleChange('partOfSpeech', e.target.value),\n className: \"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary focus:border-transparent\",\n required: true,\n children: partOfSpeechOptions.map((option)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: option,\n children: option\n }, option, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 147,\n columnNumber: 21\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 140,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 136,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium text-gray-700 mb-2\",\n children: \"發音\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 155,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: formData.pronunciation,\n onChange: (e)=>handleChange('pronunciation', e.target.value),\n className: \"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary focus:border-transparent\",\n placeholder: \"例如:/nɪˈɡoʊʃieɪt/\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 158,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 154,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 135,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium text-gray-700 mb-2\",\n children: \"例句\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 170,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"textarea\", {\n value: formData.example,\n onChange: (e)=>handleChange('example', e.target.value),\n rows: 3,\n className: \"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary focus:border-transparent\",\n placeholder: \"例如:We need to negotiate the contract terms.\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 173,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 169,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end space-x-4 pt-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: onCancel,\n className: \"px-4 py-2 border border-gray-300 rounded-lg text-gray-700 hover:bg-gray-50 transition-colors\",\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 184,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"submit\",\n disabled: loading,\n className: \"px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\",\n children: loading ? '處理中...' : isEdit ? '更新詞卡' : '新增詞卡'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 191,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 183,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 84,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 63,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 62,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/FlashcardForm.tsx\",\n lineNumber: 61,\n columnNumber: 5\n }, this);\n}\n_s(FlashcardForm, \"uHSJh6JhQV/+vXi0422vsjGeQbA=\");\n_c = FlashcardForm;\nvar _c;\n$RefreshReg$(_c, \"FlashcardForm\");\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvRmxhc2hjYXJkRm9ybS50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUUyQztBQUM2RDtBQVVqRyxTQUFTRSxjQUFjLEtBQWtGO1FBQWxGLEVBQUVDLFFBQVEsRUFBRUMsV0FBVyxFQUFFQyxTQUFTLEtBQUssRUFBRUMsU0FBUyxFQUFFQyxRQUFRLEVBQXNCLEdBQWxGO1FBRVlKOztJQUR4QyxNQUFNLENBQUNLLFVBQVVDLFlBQVksR0FBR1QsK0NBQVFBLENBQXlCO1FBQy9EVSxXQUFXTixDQUFBQSx3QkFBQUEsa0NBQUFBLFlBQWFNLFNBQVMsS0FBS1AsRUFBQUEsYUFBQUEsUUFBUSxDQUFDLEVBQUUsY0FBWEEsaUNBQUFBLFdBQWFRLEVBQUUsS0FBSTtRQUN6REMsU0FBU1IsQ0FBQUEsd0JBQUFBLGtDQUFBQSxZQUFhUSxPQUFPLEtBQUk7UUFDakNDLFNBQVNULENBQUFBLHdCQUFBQSxrQ0FBQUEsWUFBYVMsT0FBTyxLQUFJO1FBQ2pDQyxlQUFlVixDQUFBQSx3QkFBQUEsa0NBQUFBLFlBQWFVLGFBQWEsS0FBSTtRQUM3Q0MsY0FBY1gsQ0FBQUEsd0JBQUFBLGtDQUFBQSxZQUFhVyxZQUFZLEtBQUk7UUFDM0NDLFNBQVNaLENBQUFBLHdCQUFBQSxrQ0FBQUEsWUFBYVksT0FBTyxLQUFJO0lBQ25DO0lBRUEsTUFBTSxDQUFDQyxTQUFTQyxXQUFXLEdBQUdsQiwrQ0FBUUEsQ0FBQztJQUN2QyxNQUFNLENBQUNtQixPQUFPQyxTQUFTLEdBQUdwQiwrQ0FBUUEsQ0FBZ0I7SUFFbEQsTUFBTXFCLHNCQUFzQjtRQUMxQjtRQUFNO1FBQU07UUFBTztRQUFNO1FBQU07UUFBTTtRQUFPO1FBQU07S0FDbkQ7SUFFRCxNQUFNQyxlQUFlLE9BQU9DO1FBQzFCQSxFQUFFQyxjQUFjO1FBQ2hCTixXQUFXO1FBQ1hFLFNBQVM7UUFFVCxJQUFJO1lBQ0YsSUFBSUs7WUFDSixJQUFJcEIsV0FBVUQsd0JBQUFBLGtDQUFB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VTtnREFDVm9CLFFBQVE7MERBRVBsQyxvQkFBb0JtQyxHQUFHLENBQUNFLENBQUFBLHVCQUN2Qiw4REFBQ0E7d0RBQW9CMUIsT0FBTzBCO2tFQUN6QkE7dURBRFVBOzs7Ozs7Ozs7Ozs7Ozs7O2tEQU9uQiw4REFBQ3hCOzswREFDQyw4REFBQ2lCO2dEQUFNaEIsV0FBVTswREFBK0M7Ozs7OzswREFHaEUsOERBQUN5QjtnREFDQ0MsTUFBSztnREFDTDdCLE9BQU94QixTQUFTTSxhQUFhO2dEQUM3QnVDLFVBQVUsQ0FBQzlCLElBQU1PLGFBQWEsaUJBQWlCUCxFQUFFK0IsTUFBTSxDQUFDdEIsS0FBSztnREFDN0RHLFdBQVU7Z0RBQ1YyQixhQUFZOzs7Ozs7Ozs7Ozs7Ozs7Ozs7MENBTWxCLDhEQUFDNUI7O2tEQUNDLDhEQUFDaUI7d0NBQU1oQixXQUFVO2tEQUErQzs7Ozs7O2tEQUdoRSw4REFBQzRCO3dDQUNDL0IsT0FBT3hCLFNBQVNRLE9BQU87d0NBQ3ZCcUMsVUFBVSxDQUFDOUIsSUFBTU8sYUFBYSxXQUFXUCxFQUFFK0IsTUFBTSxDQUFDdEIsS0FBSzt3Q0FDdkRnQyxNQUFNO3dDQUNON0IsV0FBVTt3Q0FDVjJCLGFBQVk7Ozs7Ozs7Ozs7OzswQ0FLaEIsOERBQUM1QjtnQ0FBSUMsV0FBVTs7a0RBQ2IsOERBQUNFO3dDQUNDd0IsTUFBSzt3Q0FDTHZCLFNBQVMvQjt3Q0FDVDRCLFdBQVU7a0RBQ1g7Ozs7OztrREFHRCw4REFBQ0U7d0NBQ0N3QixNQUFLO3dDQUNMSSxVQUFVaEQ7d0NBQ1ZrQixXQUFVO2tEQUVUbEIsVUFBVSxXQUFZWixTQUFTLFNBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRekQ7R0E5TGdCSDtLQUFBQSIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvY29tcG9uZW50cy9GbGFzaGNhcmRGb3JtLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcclxuXHJcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcclxuaW1wb3J0IHsgZmxhc2hjYXJkc1NlcnZpY2UsIHR5cGUgQ3JlYXRlRmxhc2hjYXJkUmVxdWVzdCwgdHlwZSBDYXJkU2V0IH0gZnJvbSAnQC9saWIvc2VydmljZXMvZmxhc2hjYXJkcydcclxuXHJcbmludGVyZmFjZSBGbGFzaGNhcmRGb3JtUHJvcHMge1xyXG4gIGNhcmRTZXRzOiBDYXJkU2V0W11cclxuICBpbml0aWFsRGF0YT86IFBhcnRpYWw8Q3JlYXRlRmxhc2hjYXJkUmVxdWVzdCAmIHsgaWQ6IHN0cmluZyB9PlxyXG4gIGlzRWRpdD86IGJvb2xlYW5cclxuICBvblN1Y2Nlc3M6ICgpID0+IHZvaWRcclxuICBvbkNhbmNlbDogKCkgPT4gdm9pZFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRmxhc2hjYXJkRm9ybSh7IGNhcmRTZXRzLCBpbml0aWFsRGF0YSwgaXNFZGl0ID0gZmFsc2UsIG9uU3VjY2Vzcywgb25DYW5jZWwgfTogRmxhc2hjYXJkRm9ybVByb3BzKSB7XHJcbiAgY29uc3QgW2Zvcm1EYXRhLCBzZXRGb3JtRGF0YV0gPSB1c2VTdGF0ZTxDcmVhdGVGbGFzaGNhcmRSZXF1ZXN0Pih7XHJcbiAgICBjYXJkU2V0SWQ6IGluaXRpYWxEYXRhPy5jYXJkU2V0SWQgfHwgKGNhcmRTZXRzWzBdPy5pZCB8fCAnJyksXHJcbiAgICBlbmdsaXNoOiBpbml0aWFsRGF0YT8uZW5nbGlzaCB8fCAnJyxcclxuICAgIGNoaW5lc2U6IGluaXRpYWxEYXRhPy5jaGluZXNlIHx8ICcnLFxyXG4gICAgcHJvbnVuY2lhdGlvbjogaW5pdGlhbERhdGE/LnByb251bmNpYXRpb24gfHwgJycsXHJcbiAgICBwYXJ0T2ZTcGVlY2g6IGluaXRpYWxEYXRhPy5wYXJ0T2ZTcGVlY2ggfHwgJ+WQjeipnicsXHJcbiAgICBleGFtcGxlOiBpbml0aWFsRGF0YT8uZXhhbXBsZSB8fCAnJyxcclxuICB9KVxyXG5cclxuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcclxuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXHJcblxyXG4gIGNvbnN0IHBhcnRPZlNwZWVjaE9wdGlvbnMgPSBbXHJcbiAgICAn5ZCN6KmeJywgJ+WLleipnicsICflvaLlrrnoqZ4nLCAn5Ymv6KmeJywgJ+S7i+ipnicsICfpgKPoqZ4nLCAn5oSf5ZiG6KmeJywgJ+S7o+ipnicsICflhqDoqZ4nXHJcbiAgXVxyXG5cclxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBhc3luYyAoZTogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgIHNldExvYWRpbmcodHJ1ZSlcclxuICAgIHNldEVycm9yKG51bGwpXHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IHJlc3VsdFxyXG4gICAgICBpZiAoaXNFZGl0ICYmIGluaXRpYWxEYXRhPy5pZCkge1xyXG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IGZsYXNoY2FyZHNTZXJ2aWNlLnVwZGF0ZUZsYXNoY2FyZChpbml0aWFsRGF0YS5pZCwgZm9ybURhdGEpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgZmxhc2hjYXJkc1NlcnZpY2UuY3JlYXRlRmxhc2hjYXJkKGZvcm1EYXRhKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICBvblN1Y2Nlc3MoKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNldEVycm9yKHJlc3VsdC5lcnJvciB8fCAn5pON5L2c5aSx5pWXJylcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHNldEVycm9yKCfmk43kvZzlpLHmlZfvvIzoq4vph43oqaYnKVxyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChmaWVsZDoga2V5b2YgQ3JlYXRlRmxhc2hjYXJkUmVxdWVzdCwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgc2V0Rm9ybURhdGEocHJldiA9PiAoeyAuLi5wcmV2LCBbZmllbGRdOiB2YWx1ZSB9KSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgYmctYmxhY2sgYmctb3BhY2l0eS01MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTQgei01MFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtbGcgdy1mdWxsIG1heC13LTJ4bCBtYXgtaC1bOTB2aF0gb3ZlcmZsb3cteS1hdXRvXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG1iLTZcIj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtYm9sZFwiPlxyXG4gICAgICAgICAgICAgIHtpc0VkaXQgPyAn57eo6Lyv6Kme5Y2hJyA6ICfmlrDlop7oqZ7ljaEnfVxyXG4gICAgICAgICAgICA8L2gyPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgb25DbGljaz17b25DYW5jZWx9XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LWdyYXktNjAwXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNlwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTYgMThMMTggNk02IDZsMTIgMTJcIiAvPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIHtlcnJvciAmJiAoXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctcmVkLTUwIGJvcmRlciBib3JkZXItcmVkLTIwMCByb3VuZGVkLWxnIHAtNCBtYi02XCI+XHJcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1yZWQtNjAwIHRleHQtc21cIj57ZXJyb3J9PC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICl9XHJcblxyXG4gICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gY2xhc3NOYW1lPVwic3BhY2UteS02XCI+XHJcbiAgICAgICAgICAgIHsvKiDoqZ7ljaHpm4blkIjpgbjmk4cgKi99XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICDoqZ7ljaHpm4blkIggKlxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPHNlbGVjdFxyXG4gICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1EYXRhLmNhcmRTZXRJZH1cclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlQ2hhbmdlKCdjYXJkU2V0SWQnLCBlLnRhcmdldC52YWx1ZSl9XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcHgtMyBweS0yIGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1sZyBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1wcmltYXJ5IGZvY3VzOmJvcmRlci10cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHtjYXJkU2V0cy5tYXAoc2V0ID0+IChcclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e3NldC5pZH0gdmFsdWU9e3NldC5pZH0+XHJcbiAgICAgICAgICAgICAgICAgICAge3NldC5uYW1lfVxyXG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIHsvKiDoi7Hmlofllq7lrZcgKi99XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICDoi7Hmlofllq7lrZcgKlxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICB2YWx1ZT17Zm9ybURhdGEuZW5nbGlzaH1cclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlQ2hhbmdlKCdlbmdsaXNoJywgZS50YXJnZXQudmFsdWUpfVxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHB4LTMgcHktMiBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctcHJpbWFyeSBmb2N1czpib3JkZXItdHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLkvovlpoLvvJpuZWdvdGlhdGVcIlxyXG4gICAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIHsvKiDkuK3mlofnv7vora8gKi99XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICDkuK3mlofnv7vora8gKlxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICB2YWx1ZT17Zm9ybURhdGEuY2hpbmVzZX1cclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlQ2hhbmdlKCdjaGluZXNlJywgZS50YXJnZXQudmFsdWUpfVxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHB4LTMgcHktMiBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctcHJpbWFyeSBmb2N1czpib3JkZXItdHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLkvovlpoLvvJroq4fliKTvvIzljZTllYZcIlxyXG4gICAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIHsvKiDoqZ7mgKflkoznmbzpn7MgKi99XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBnYXAtNFwiPlxyXG4gICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAg6Kme5oCnICpcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8c2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtRGF0YS5wYXJ0T2ZTcGVlY2h9XHJcbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlQ2hhbmdlKCdwYXJ0T2ZTcGVlY2gnLCBlLnRhcmdldC52YWx1ZSl9XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBweC0zIHB5LTIgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLWxnIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLXByaW1hcnkgZm9jdXM6Ym9yZGVyLXRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3BhcnRPZlNwZWVjaE9wdGlvbnMubWFwKG9wdGlvbiA9PiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e29wdGlvbn0gdmFsdWU9e29wdGlvbn0+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7b3B0aW9ufVxyXG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIOeZvOmfs1xyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtRGF0YS5wcm9udW5jaWF0aW9ufVxyXG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZUNoYW5nZSgncHJvbnVuY2lhdGlvbicsIGUudGFyZ2V0LnZhbHVlKX1cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHB4LTMgcHktMiBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctcHJpbWFyeSBmb2N1czpib3JkZXItdHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuS+i+Wmgu+8mi9uyarLiMmhb8qKyoNpZcmqdC9cIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICB7Lyog5L6L5Y+lICovfVxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAg5L6L5Y+lXHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8dGV4dGFyZWFcclxuICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtRGF0YS5leGFtcGxlfVxyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVDaGFuZ2UoJ2V4YW1wbGUnLCBlLnRhcmdldC52YWx1ZSl9XHJcbiAgICAgICAgICAgICAgICByb3dzPXszfVxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHB4LTMgcHktMiBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctcHJpbWFyeSBmb2N1czpib3JkZXItdHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLkvovlpoLvvJpXZSBuZWVkIHRvIG5lZ290aWF0ZSB0aGUgY29udHJhY3QgdGVybXMuXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIHsvKiDmk43kvZzmjInpiJUgKi99XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBzcGFjZS14LTQgcHQtNFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17b25DYW5jZWx9XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC00IHB5LTIgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLWxnIHRleHQtZ3JheS03MDAgaG92ZXI6YmctZ3JheS01MCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAg5Y+W5raIXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17bG9hZGluZ31cclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInB4LTQgcHktMiBiZy1wcmltYXJ5IHRleHQtd2hpdGUgcm91bmRlZC1sZyBob3ZlcjpiZy1wcmltYXJ5LzkwIHRyYW5zaXRpb24tY29sb3JzIGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7bG9hZGluZyA/ICfomZXnkIbkuK0uLi4nIDogKGlzRWRpdCA/ICfmm7TmlrDoqZ7ljaEnIDogJ+aWsOWinuipnuWNoScpfVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICApXHJcbn0iXSwibmFtZXMiOlsidXNlU3RhdGUiLCJmbGFzaGNhcmRzU2VydmljZSIsIkZsYXNoY2FyZEZvcm0iLCJjYXJkU2V0cyIsImluaXRpYWxEYXRhIiwiaXNFZGl0Iiwib25TdWNjZXNzIiwib25DYW5jZWwiLCJmb3JtRGF0YSIsInNldEZvcm1EYXRhIiwiY2FyZFNldElkIiwiaWQiLCJlbmdsaXNoIiwiY2hpbmVzZSIsInByb251bmNpYXRpb24iLCJwYXJ0T2ZTcGVlY2giLCJleGFtcGxlIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwicGFydE9mU3BlZWNoT3B0aW9ucyIsImhhbmRsZVN1Ym1pdCIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInJlc3VsdCIsInVwZGF0ZUZsYXNoY2FyZCIsImNyZWF0ZUZsYXNoY2FyZCIsInN1Y2Nlc3MiLCJlcnIiLCJoYW5kbGVDaGFuZ2UiLCJmaWVsZCIsInZhbHVlIiwicHJldiIsImRpdiIsImNsYXNzTmFtZSIsImgyIiwiYnV0dG9uIiwib25DbGljayIsInN2ZyIsImZpbGwiLCJzdHJva2UiLCJ2aWV3Qm94IiwicGF0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsInAiLCJmb3JtIiwib25TdWJtaXQiLCJsYWJlbCIsInNlbGVjdCIsIm9uQ2hhbmdlIiwidGFyZ2V0IiwicmVxdWlyZWQiLCJtYXAiLCJzZXQiLCJvcHRpb24iLCJuYW1lIiwiaW5wdXQiLCJ0eXBlIiwicGxhY2Vob2xkZXIiLCJ0ZXh0YXJlYSIsInJvd3MiLCJkaXNhYmxlZCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/FlashcardForm.tsx\n"));
|
||
|
||
/***/ })
|
||
|
||
}); |