105 lines
305 KiB
JavaScript
105 lines
305 KiB
JavaScript
/*
|
||
* 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["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["app/dashboard/contracts/create/page"],{
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fgandanxiangzhao%2FDesktop%2F%E5%90%88%E5%90%8C%E6%B5%81%E8%BD%AC%E5%AE%A1%E6%89%B9%E7%B3%BB%E7%BB%9F%2Fsrc%2Fapp%2Fdashboard%2Fcontracts%2Fcreate%2Fpage.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!":
|
||
/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fgandanxiangzhao%2FDesktop%2F%E5%90%88%E5%90%8C%E6%B5%81%E8%BD%AC%E5%AE%A1%E6%89%B9%E7%B3%BB%E7%BB%9F%2Fsrc%2Fapp%2Fdashboard%2Fcontracts%2Fcreate%2Fpage.js%22%2C%22ids%22%3A%5B%5D%7D&server=false! ***!
|
||
\***************************************************************************************************************************************************************************************************************************************************************************************************************************************/
|
||
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./src/app/dashboard/contracts/create/page.js */ \"(app-pages-browser)/./src/app/dashboard/contracts/create/page.js\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtZmxpZ2h0LWNsaWVudC1lbnRyeS1sb2FkZXIuanM/bW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGVXNlcnMlMkZnYW5kYW54aWFuZ3poYW8lMkZEZXNrdG9wJTJGJUU1JTkwJTg4JUU1JTkwJThDJUU2JUI1JTgxJUU4JUJEJUFDJUU1JUFFJUExJUU2JTg5JUI5JUU3JUIzJUJCJUU3JUJCJTlGJTJGc3JjJTJGYXBwJTJGZGFzaGJvYXJkJTJGY29udHJhY3RzJTJGY3JlYXRlJTJGcGFnZS5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZzZXJ2ZXI9ZmFsc2UhIiwibWFwcGluZ3MiOiJBQUFBLGtOQUF1SCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvPzUwZjciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvZ2FuZGFueGlhbmd6aGFvL0Rlc2t0b3Av5ZCI5ZCM5rWB6L2s5a6h5om557O757ufL3NyYy9hcHAvZGFzaGJvYXJkL2NvbnRyYWN0cy9jcmVhdGUvcGFnZS5qc1wiKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fgandanxiangzhao%2FDesktop%2F%E5%90%88%E5%90%8C%E6%B5%81%E8%BD%AC%E5%AE%A1%E6%89%B9%E7%B3%BB%E7%BB%9F%2Fsrc%2Fapp%2Fdashboard%2Fcontracts%2Fcreate%2Fpage.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/api/navigation.js":
|
||
/*!**************************************************!*\
|
||
!*** ./node_modules/next/dist/api/navigation.js ***!
|
||
\**************************************************/
|
||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../client/components/navigation */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\");\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_client_components_navigation__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = function(key) { return _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceMappingURL=navigation.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL25hdmlnYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWdEOztBQUVoRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2FwaS9uYXZpZ2F0aW9uLmpzPzBmYjkiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4uL2NsaWVudC9jb21wb25lbnRzL25hdmlnYXRpb25cIjtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmF2aWdhdGlvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/api/navigation.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/app/dashboard/dashboard.css":
|
||
/*!*****************************************!*\
|
||
!*** ./src/app/dashboard/dashboard.css ***!
|
||
\*****************************************/
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"da454e300a0b\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9hcHAvZGFzaGJvYXJkL2Rhc2hib2FyZC5jc3MiLCJtYXBwaW5ncyI6IjtBQUFBLCtEQUFlLGNBQWM7QUFDN0IsSUFBSSxJQUFVLElBQUksaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL3NyYy9hcHAvZGFzaGJvYXJkL2Rhc2hib2FyZC5jc3M/ZmMxNSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcImRhNDU0ZTMwMGEwYlwiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/app/dashboard/dashboard.css\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/app/dashboard/contracts/create/page.js":
|
||
/*!****************************************************!*\
|
||
!*** ./src/app/dashboard/contracts/create/page.js ***!
|
||
\****************************************************/
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CreateContractPage; }\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_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _layout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../layout */ \"(app-pages-browser)/./src/app/dashboard/layout.js\");\n/* harmony import */ var _lib_auth_client__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/lib/auth-client */ \"(app-pages-browser)/./src/lib/auth-client.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nfunction CreateContractPage() {\n _s();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n const user = (0,_layout__WEBPACK_IMPORTED_MODULE_3__.useUser)();\n // Form state\n const [form, setForm] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n project_name: \"\",\n project_leader: \"\",\n sign_date: \"\",\n partner_id: \"\",\n contract_content: \"\",\n cooperate_start: \"\",\n cooperate_end: \"\",\n contract_amount: \"\",\n estimated_profit: \"\",\n payment_type: \"receive\"\n });\n // Supervisors list\n const [supervisors, setSupervisors] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n // Partner search\n const [partners, setPartners] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [partnerSearch, setPartnerSearch] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [partnerDropdownOpen, setPartnerDropdownOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [selectedPartnerName, setSelectedPartnerName] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const partnerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n // File upload\n const [files, setFiles] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [dragging, setDragging] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const fileInputRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n // Config\n const [profitPercentage, setProfitPercentage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const [profitEdited, setProfitEdited] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n // UI state\n const [submitting, setSubmitting] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [errors, setErrors] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const [toast, setToast] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Fetch partners\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n (0,_lib_auth_client__WEBPACK_IMPORTED_MODULE_4__.authFetch)(\"/api/partners\").then((r)=>r.json()).then((data)=>{\n setPartners(data.partners || data || []);\n }).catch(()=>{});\n }, []);\n // Fetch supervisors\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n (0,_lib_auth_client__WEBPACK_IMPORTED_MODULE_4__.authFetch)(\"/api/users\").then((r)=>r.json()).then((data)=>{\n const list = (data || []).filter((u)=>u.role === \"supervisor\" && u.status === 1);\n setSupervisors(list);\n }).catch(()=>{});\n }, []);\n // Default supervisor selection based on user's department\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (supervisors.length > 0 && user && !form.project_leader) {\n const defaultSupervisor = supervisors.find((s)=>s.department_id === user.department_id);\n if (defaultSupervisor) {\n setForm((prev)=>({\n ...prev,\n project_leader: defaultSupervisor.real_name\n }));\n } else {\n setForm((prev)=>{\n var _supervisors_;\n return {\n ...prev,\n project_leader: ((_supervisors_ = supervisors[0]) === null || _supervisors_ === void 0 ? void 0 : _supervisors_.real_name) || \"\"\n };\n });\n }\n }\n }, [\n supervisors,\n user\n ]);\n // Fetch config for profit percentage\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n (0,_lib_auth_client__WEBPACK_IMPORTED_MODULE_4__.authFetch)(\"/api/config\").then((r)=>r.json()).then((data)=>{\n var _data_config;\n const pct = data.profit_percentage || ((_data_config = data.config) === null || _data_config === void 0 ? void 0 : _data_config.profit_percentage) || 0;\n setProfitPercentage(Number(pct));\n }).catch(()=>{});\n }, []);\n // Auto-calculate profit when amount changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (form.payment_type !== \"pay\" && !profitEdited && form.contract_amount && profitPercentage > 0) {\n const profit = (Number(form.contract_amount) * profitPercentage / 100).toFixed(2);\n setForm((prev)=>({\n ...prev,\n estimated_profit: profit\n }));\n }\n }, [\n form.contract_amount,\n profitPercentage,\n profitEdited,\n form.payment_type\n ]);\n // Close partner dropdown on outside click\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const handleClick = (e)=>{\n if (partnerRef.current && !partnerRef.current.contains(e.target)) {\n setPartnerDropdownOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClick);\n return ()=>document.removeEventListener(\"mousedown\", handleClick);\n }, []);\n const showToast = function(message) {\n let type = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : \"success\";\n setToast({\n message,\n type\n });\n setTimeout(()=>setToast(null), 3000);\n };\n const handleChange = (field, value)=>{\n setForm((prev)=>{\n const updated = {\n ...prev,\n [field]: value\n };\n if (field === \"payment_type\" && value === \"pay\") {\n updated.estimated_profit = \"\";\n }\n return updated;\n });\n if (errors[field]) {\n setErrors((prev)=>({\n ...prev,\n [field]: null\n }));\n }\n };\n const handleProfitChange = (value)=>{\n setProfitEdited(true);\n handleChange(\"estimated_profit\", value);\n };\n const filteredPartners = partners.filter((p)=>(p.name || \"\").toLowerCase().includes(partnerSearch.toLowerCase()));\n const selectPartner = (partner)=>{\n setForm((prev)=>({\n ...prev,\n partner_id: partner.id\n }));\n setSelectedPartnerName(partner.name);\n setPartnerSearch(partner.name);\n setPartnerDropdownOpen(false);\n };\n // File handling\n const handleFiles = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((newFiles)=>{\n const fileArray = Array.from(newFiles);\n setFiles((prev)=>[\n ...prev,\n ...fileArray\n ]);\n }, []);\n const removeFile = (index)=>{\n setFiles((prev)=>prev.filter((_, i)=>i !== index));\n };\n const handleDragOver = (e)=>{\n e.preventDefault();\n setDragging(true);\n };\n const handleDragLeave = (e)=>{\n e.preventDefault();\n setDragging(false);\n };\n const handleDrop = (e)=>{\n e.preventDefault();\n setDragging(false);\n if (e.dataTransfer.files.length > 0) {\n handleFiles(e.dataTransfer.files);\n }\n };\n // Upload files after contract creation\n const uploadFiles = async (contractId)=>{\n for (const file of files){\n const formData = new FormData();\n formData.append(\"file\", file);\n formData.append(\"contract_id\", contractId);\n try {\n await (0,_lib_auth_client__WEBPACK_IMPORTED_MODULE_4__.authFetch)(\"/api/upload\", {\n method: \"POST\",\n body: formData\n });\n } catch (err) {\n console.error(\"文件上传失败:\", err);\n }\n }\n };\n // Validate and submit\n const validate = ()=>{\n const newErrors = {};\n if (!form.project_name.trim()) newErrors.project_name = \"请输入项目名称\";\n if (!form.partner_id) newErrors.partner_id = \"请选择合作单位\";\n if (!form.contract_amount || Number(form.contract_amount) <= 0) newErrors.contract_amount = \"请输入合同金额\";\n // Validate cooperation duration range\n if (!form.cooperate_start || !form.cooperate_end) {\n newErrors.contract_years = \"请选择完整的合作时间范围\";\n } else if (form.cooperate_start > form.cooperate_end) {\n newErrors.contract_years = \"开始时间不能晚于结束时间\";\n }\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n const handleSubmit = async (e)=>{\n e.preventDefault();\n if (!validate()) return;\n setSubmitting(true);\n try {\n var _data_contract;\n const body = {\n project_name: form.project_name,\n project_leader: form.project_leader || null,\n sign_date: form.sign_date || null,\n partner_id: form.partner_id,\n contract_content: form.contract_content,\n contract_years: form.cooperate_start && form.cooperate_end ? \"\".concat(form.cooperate_start, \" ~ \").concat(form.cooperate_end) : null,\n contract_amount: Number(form.contract_amount),\n estimated_profit: form.estimated_profit === \"\" || form.estimated_profit === null || form.estimated_profit === undefined ? null : Number(form.estimated_profit),\n payment_type: form.payment_type\n };\n const res = await (0,_lib_auth_client__WEBPACK_IMPORTED_MODULE_4__.authFetch)(\"/api/contracts\", {\n method: \"POST\",\n body: JSON.stringify(body)\n });\n const data = await res.json();\n if (!res.ok) {\n showToast(data.error || \"创建失败\", \"error\");\n setSubmitting(false);\n return;\n }\n const contractId = data.id || ((_data_contract = data.contract) === null || _data_contract === void 0 ? void 0 : _data_contract.id);\n // Upload files if any\n if (files.length > 0 && contractId) {\n await uploadFiles(contractId);\n }\n showToast(\"合同创建成功!\");\n setTimeout(()=>{\n router.push(\"/dashboard/contracts/\".concat(contractId));\n }, 800);\n } catch (err) {\n showToast(err.message || \"提交失败,请重试\", \"error\");\n setSubmitting(false);\n }\n };\n const formatFileSize = (bytes)=>{\n if (bytes < 1024) return bytes + \" B\";\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + \" KB\";\n return (bytes / (1024 * 1024)).toFixed(1) + \" MB\";\n };\n if (user && user.role !== \"employee\") {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"animate-fadeIn\",\n style: {\n maxWidth: 600,\n margin: \"40px auto\"\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card\",\n style: {\n padding: 40,\n textAlign: \"center\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n fontSize: 48,\n marginBottom: 16\n },\n children: \"⚠️\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 266,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n style: {\n fontSize: 20,\n fontWeight: 600,\n marginBottom: 8\n },\n children: \"暂无访问权限\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 267,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n style: {\n color: \"var(--gray-500)\",\n marginBottom: 24\n },\n children: \"仅员工角色可新建合同流转任务。\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 268,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"btn btn-primary\",\n onClick: ()=>router.push(\"/dashboard/contracts\"),\n children: \"返回合同列表\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 269,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 265,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 264,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"animate-fadeIn\",\n children: [\n toast && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"toast-container\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"toast toast-\".concat(toast.type),\n children: [\n toast.type === \"success\" ? \"✅\" : \"❌\",\n \" \",\n toast.message\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 282,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 281,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"page-header\",\n children: /*#__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: \"page-title\",\n children: \"新建合同流转任务\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 290,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"page-subtitle\",\n children: \"填写合同信息并提交审批\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 291,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 289,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 288,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: handleSubmit,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card\",\n style: {\n marginBottom: 20\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card-header\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"card-title\",\n children: \"\\uD83D\\uDCDD 基本信息\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 299,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 298,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card-body\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(2, 1fr)\",\n gap: 20\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-group\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"form-label\",\n children: [\n \"项目名称 \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"required\",\n children: \"*\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 305,\n columnNumber: 24\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 304,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"form-input\",\n placeholder: \"请输入项目名称\",\n value: form.project_name,\n onChange: (e)=>handleChange(\"project_name\", e.target.value)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 307,\n columnNumber: 17\n }, this),\n errors.project_name && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-error\",\n children: errors.project_name\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 314,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 303,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-group\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"form-label\",\n children: \"项目负责人\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 317,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n className: \"form-select\",\n value: form.project_leader,\n onChange: (e)=>handleChange(\"project_leader\", e.target.value),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"\",\n children: \"-- 请选择部门主管 --\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 323,\n columnNumber: 19\n }, this),\n supervisors.map((s)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: s.real_name,\n children: [\n s.real_name,\n \" (\",\n s.department_name || \"无部门\",\n \")\"\n ]\n }, s.id, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 325,\n columnNumber: 21\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 318,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 316,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-group\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"form-label\",\n children: \"签订时间\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 332,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"date\",\n className: \"form-input\",\n value: form.sign_date,\n onChange: (e)=>handleChange(\"sign_date\", e.target.value)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 333,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 331,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 302,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 301,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 297,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card\",\n style: {\n marginBottom: 20\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card-header\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"card-title\",\n children: [\n \"\\uD83C\\uDFE2 合作单位 \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"required\",\n children: \"*\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 347,\n columnNumber: 48\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 347,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 346,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card-body\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-group\",\n ref: partnerRef,\n children: [\n form.partner_id ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"selected-partner-card animate-fadeIn\",\n style: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"10px 14px\",\n background: \"var(--gray-50)\",\n border: \"1.5px solid var(--gray-200)\",\n borderRadius: \"var(--radius-md)\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n style: {\n fontWeight: 600,\n fontSize: 14\n },\n children: [\n \"\\uD83C\\uDFE2 \",\n selectedPartnerName\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 361,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"btn btn-ghost btn-sm\",\n style: {\n color: \"var(--danger)\",\n padding: \"4px 8px\"\n },\n onClick: ()=>{\n setForm((prev)=>({\n ...prev,\n partner_id: \"\"\n }));\n setSelectedPartnerName(\"\");\n setPartnerSearch(\"\");\n setPartnerDropdownOpen(true);\n },\n children: \"重新选择\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 362,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 352,\n columnNumber: 17\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"search-select\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"search-select-input\",\n placeholder: \"搜索合作单位...\",\n value: partnerSearch,\n onChange: (e)=>{\n setPartnerSearch(e.target.value);\n setPartnerDropdownOpen(true);\n },\n onFocus: ()=>setPartnerDropdownOpen(true)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 378,\n columnNumber: 19\n }, this),\n partnerDropdownOpen && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"search-select-dropdown\",\n children: filteredPartners.length > 0 ? filteredPartners.map((p)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"search-select-option \".concat(form.partner_id === p.id ? \"selected\" : \"\"),\n onClick: ()=>selectPartner(p),\n children: p.name\n }, p.id, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 393,\n columnNumber: 27\n }, this)) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"search-select-empty\",\n children: [\n \"未找到?\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"/dashboard/partners\",\n onClick: (e)=>{\n e.preventDefault();\n router.push(\"/dashboard/partners\");\n },\n children: \"前往添加合作单位\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 404,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 402,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 390,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 377,\n columnNumber: 17\n }, this),\n errors.partner_id && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-error\",\n children: errors.partner_id\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 413,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 350,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 349,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 345,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card\",\n style: {\n marginBottom: 20\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card-header\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"card-title\",\n children: \"\\uD83D\\uDCC4 合同详情\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 421,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 420,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card-body\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-group\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"form-label\",\n children: \"合同内容\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 425,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"textarea\", {\n className: \"form-textarea\",\n placeholder: \"请输入合同主要内容描述...\",\n value: form.contract_content,\n onChange: (e)=>handleChange(\"contract_content\", e.target.value),\n rows: 4\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 426,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 424,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-group\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"form-label\",\n children: [\n \"合作期限 \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"required\",\n children: \"*\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 435,\n columnNumber: 50\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 435,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n maxWidth: 400\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"date\",\n className: \"form-input\",\n value: form.cooperate_start,\n onChange: (e)=>handleChange(\"cooperate_start\", e.target.value)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 437,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n style: {\n color: \"var(--gray-400)\"\n },\n children: \"至\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 443,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"date\",\n className: \"form-input\",\n value: form.cooperate_end,\n onChange: (e)=>handleChange(\"cooperate_end\", e.target.value)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 444,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 436,\n columnNumber: 15\n }, this),\n errors.contract_years && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-error\",\n children: errors.contract_years\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 451,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 434,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 423,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 419,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card\",\n style: {\n marginBottom: 20\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card-header\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"card-title\",\n children: \"\\uD83D\\uDCB0 金额信息\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 459,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 458,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card-body\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(2, 1fr)\",\n gap: 20\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-group\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"form-label\",\n children: [\n \"合同金额(元)\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"required\",\n children: \"*\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 465,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 464,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"number\",\n className: \"form-input\",\n placeholder: \"请输入合同金额\",\n min: \"0\",\n step: \"0.01\",\n value: form.contract_amount,\n onChange: (e)=>handleChange(\"contract_amount\", e.target.value)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 467,\n columnNumber: 17\n }, this),\n errors.contract_amount && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-error\",\n children: errors.contract_amount\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 476,\n columnNumber: 44\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 463,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-group\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"form-label\",\n children: \"收款/付款\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 515,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n display: \"flex\",\n gap: 24,\n marginTop: 8\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n cursor: \"pointer\",\n fontSize: 14\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"radio\",\n name: \"payment_type\",\n value: \"receive\",\n checked: form.payment_type === \"receive\",\n onChange: (e)=>handleChange(\"payment_type\", e.target.value),\n style: {\n accentColor: \"var(--primary)\"\n }\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 518,\n columnNumber: 21\n }, this),\n \"收款\"\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 517,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n cursor: \"pointer\",\n fontSize: 14\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"radio\",\n name: \"payment_type\",\n value: \"pay\",\n checked: form.payment_type === \"pay\",\n onChange: (e)=>handleChange(\"payment_type\", e.target.value),\n style: {\n accentColor: \"var(--primary)\"\n }\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 529,\n columnNumber: 21\n }, this),\n \"付款\"\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 528,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 516,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 514,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 462,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 461,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 457,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card\",\n style: {\n marginBottom: 20\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card-header\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"card-title\",\n children: \"\\uD83D\\uDCCE 附件上传\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 548,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 547,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card-body\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"upload-area \".concat(dragging ? \"dragging\" : \"\"),\n onDragOver: handleDragOver,\n onDragLeave: handleDragLeave,\n onDrop: handleDrop,\n onClick: ()=>{\n var _fileInputRef_current;\n return (_fileInputRef_current = fileInputRef.current) === null || _fileInputRef_current === void 0 ? void 0 : _fileInputRef_current.click();\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"upload-icon\",\n children: \"\\uD83D\\uDCC1\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 558,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"upload-text\",\n children: \"点击或拖拽文件到此处上传\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 559,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"upload-hint\",\n children: \"支持各种文件格式\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 560,\n columnNumber: 15\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 style: {\n display: \"none\"\n },\n onChange: (e)=>{\n if (e.target.files.length > 0) {\n handleFiles(e.target.files);\n e.target.value = \"\";\n }\n }\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 561,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 551,\n columnNumber: 13\n }, this),\n files.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"file-list\",\n children: files.map((file, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"file-item\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"file-item-name\",\n children: [\n \"\\uD83D\\uDCC4 \",\n file.name,\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n style: {\n color: \"var(--gray-400)\",\n fontSize: 12\n },\n children: [\n \"(\",\n formatFileSize(file.size),\n \")\"\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 580,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 578,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"file-item-remove\",\n onClick: ()=>removeFile(index),\n children: \"✕\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 584,\n columnNumber: 21\n }, this)\n ]\n }, index, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 577,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 575,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 550,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 546,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n gap: 12,\n marginTop: 24\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"btn btn-ghost\",\n onClick: ()=>router.back(),\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 600,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"submit\",\n className: \"btn btn-primary btn-lg\",\n disabled: submitting,\n children: submitting ? \"提交中...\" : \"✨ 提交审批\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 607,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 599,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 295,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/contracts/create/page.js\",\n lineNumber: 278,\n columnNumber: 5\n }, this);\n}\n_s(CreateContractPage, \"/LRfZvW4R7/XtKsBTN0VljcJhfk=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter,\n _layout__WEBPACK_IMPORTED_MODULE_3__.useUser\n ];\n});\n_c = CreateContractPage;\nvar _c;\n$RefreshReg$(_c, \"CreateContractPage\");\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9hcHAvZGFzaGJvYXJkL2NvbnRyYWN0cy9jcmVhdGUvcGFnZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFDaUU7QUFDckI7QUFDTDtBQUNPO0FBRS9CLFNBQVNPOztJQUN0QixNQUFNQyxTQUFTSiwwREFBU0E7SUFDeEIsTUFBTUssT0FBT0osZ0RBQU9BO0lBRXBCLGFBQWE7SUFDYixNQUFNLENBQUNLLE1BQU1DLFFBQVEsR0FBR1gsK0NBQVFBLENBQUM7UUFDL0JZLGNBQWM7UUFDZEMsZ0JBQWdCO1FBQ2hCQyxXQUFXO1FBQ1hDLFlBQVk7UUFDWkMsa0JBQWtCO1FBQ2xCQyxpQkFBaUI7UUFDakJDLGVBQWU7UUFDZkMsaUJBQWlCO1FBQ2pCQyxrQkFBa0I7UUFDbEJDLGNBQWM7SUFDaEI7SUFFQSxtQkFBbUI7SUFDbkIsTUFBTSxDQUFDQyxhQUFhQyxlQUFlLEdBQUd2QiwrQ0FBUUEsQ0FBQyxFQUFFO0lBRWpELGlCQUFpQjtJQUNqQixNQUFNLENBQUN3QixVQUFVQyxZQUFZLEdBQUd6QiwrQ0FBUUEsQ0FBQyxFQUFFO0lBQzNDLE1BQU0sQ0FBQzBCLGVBQWVDLGlCQUFpQixHQUFHM0IsK0NBQVFBLENBQUM7SUFDbkQsTUFBTSxDQUFDNEIscUJBQXFCQyx1QkFBdUIsR0FBRzdCLCtDQUFRQSxDQUFDO0lBQy9ELE1BQU0sQ0FBQzhCLHFCQUFxQkMsdUJBQXVCLEdBQUcvQiwrQ0FBUUEsQ0FBQztJQUMvRCxNQUFNZ0MsYUFBYTlCLDZDQUFNQSxDQUFDO0lBRTFCLGNBQWM7SUFDZCxNQUFNLENBQUMrQixPQUFPQyxTQUFTLEdBQUdsQywrQ0FBUUEsQ0FBQyxFQUFFO0lBQ3JDLE1BQU0sQ0FBQ21DLFVBQVVDLFlBQVksR0FBR3BDLCtDQUFRQSxDQUFDO0lBQ3pDLE1BQU1xQyxlQUFlbkMsNkNBQU1BLENBQUM7SUFFNUIsU0FBUztJQUNULE1BQU0sQ0FBQ29DLGtCQUFrQkMsb0JBQW9CLEdBQUd2QywrQ0FBUUEs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QUFZeEIsRUFBRUcsTUFBTSxDQUFDMUMsS0FBSzt3REFDMUJ1QyxFQUFFRyxNQUFNLENBQUNVLEtBQUssR0FBRztvREFDbkI7Z0RBQ0Y7Ozs7Ozs7Ozs7OztvQ0FHSHBELE1BQU15QixNQUFNLEdBQUcsbUJBQ2QsOERBQUMrRTt3Q0FBSUMsV0FBVTtrREFDWnpHLE1BQU1tSSxHQUFHLENBQUMsQ0FBQ3BELE1BQU1WLHNCQUNoQiw4REFBQ21DO2dEQUFnQkMsV0FBVTs7a0VBQ3pCLDhEQUFDb0I7d0RBQUtwQixXQUFVOzs0REFBaUI7NERBQzNCMUIsS0FBS3RCLElBQUk7MEVBQ2IsOERBQUNvRTtnRUFBS25CLE9BQU87b0VBQUVTLE9BQU87b0VBQW1CSixVQUFVO2dFQUFHOztvRUFBRztvRUFDckRULGVBQWV2QixLQUFLNEUsSUFBSTtvRUFBRTs7Ozs7Ozs7Ozs7OztrRUFHaEMsOERBQUN2Qzt3REFDQ3BFLE1BQUs7d0RBQ0x5RCxXQUFVO3dEQUNWWSxTQUFTLElBQU1qRCxXQUFXQztrRUFDM0I7Ozs7Ozs7K0NBWE9BOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQXNCcEIsOERBQUNtQzt3QkFBSUUsT0FBTzs0QkFBRWUsU0FBUzs0QkFBUWEsZ0JBQWdCOzRCQUFZWCxLQUFLOzRCQUFJdUIsV0FBVzt3QkFBRzs7MENBQ2hGLDhEQUFDOUI7Z0NBQ0NwRSxNQUFLO2dDQUNMeUQsV0FBVTtnQ0FDVlksU0FBUyxJQUFNOUksT0FBT3FMLElBQUk7MENBQzNCOzs7Ozs7MENBR0QsOERBQUN4QztnQ0FDQ3BFLE1BQUs7Z0NBQ0x5RCxXQUFVO2dDQUNWb0QsVUFBVXBKOzBDQUVUQSxhQUFhLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1yQztHQW5tQndCbkM7O1FBQ1BILHNEQUFTQTtRQUNYQyw0Q0FBT0E7OztLQUZFRSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9zcmMvYXBwL2Rhc2hib2FyZC9jb250cmFjdHMvY3JlYXRlL3BhZ2UuanM/ZmJiMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJztcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi9sYXlvdXQnO1xuaW1wb3J0IHsgYXV0aEZldGNoIH0gZnJvbSAnQC9saWIvYXV0aC1jbGllbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdGVDb250cmFjdFBhZ2UoKSB7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCB1c2VyID0gdXNlVXNlcigpO1xuXG4gIC8vIEZvcm0gc3RhdGVcbiAgY29uc3QgW2Zvcm0sIHNldEZvcm1dID0gdXNlU3RhdGUoe1xuICAgIHByb2plY3RfbmFtZTogJycsXG4gICAgcHJvamVjdF9sZWFkZXI6ICcnLFxuICAgIHNpZ25fZGF0ZTogJycsXG4gICAgcGFydG5lcl9pZDogJycsXG4gICAgY29udHJhY3RfY29udGVudDogJycsXG4gICAgY29vcGVyYXRlX3N0YXJ0OiAnJyxcbiAgICBjb29wZXJhdGVfZW5kOiAnJyxcbiAgICBjb250cmFjdF9hbW91bnQ6ICcnLFxuICAgIGVzdGltYXRlZF9wcm9maXQ6ICcnLFxuICAgIHBheW1lbnRfdHlwZTogJ3JlY2VpdmUnLFxuICB9KTtcblxuICAvLyBTdXBlcnZpc29ycyBsaXN0XG4gIGNvbnN0IFtzdXBlcnZpc29ycywgc2V0U3VwZXJ2aXNvcnNdID0gdXNlU3RhdGUoW10pO1xuXG4gIC8vIFBhcnRuZXIgc2VhcmNoXG4gIGNvbnN0IFtwYXJ0bmVycywgc2V0UGFydG5lcnNdID0gdXNlU3RhdGUoW10pO1xuICBjb25zdCBbcGFydG5lclNlYXJjaCwgc2V0UGFydG5lclNlYXJjaF0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtwYXJ0bmVyRHJvcGRvd25PcGVuLCBzZXRQYXJ0bmVyRHJvcGRvd25PcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NlbGVjdGVkUGFydG5lck5hbWUsIHNldFNlbGVjdGVkUGFydG5lck5hbWVdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBwYXJ0bmVyUmVmID0gdXNlUmVmKG51bGwpO1xuXG4gIC8vIEZpbGUgdXBsb2FkXG4gIGNvbnN0IFtmaWxlcywgc2V0RmlsZXNdID0gdXNlU3RhdGUoW10pO1xuICBjb25zdCBbZHJhZ2dpbmcsIHNldERyYWdnaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmKG51bGwpO1xuXG4gIC8vIENvbmZpZ1xuICBjb25zdCBbcHJvZml0UGVyY2VudGFnZSwgc2V0UHJvZml0UGVyY2VudGFnZV0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3Byb2ZpdEVkaXRlZCwgc2V0UHJvZml0RWRpdGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAvLyBVSSBzdGF0ZVxuICBjb25zdCBbc3VibWl0dGluZywgc2V0U3VibWl0dGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtlcnJvcnMsIHNldEVycm9yc10gPSB1c2VTdGF0ZSh7fSk7XG4gIGNvbnN0IFt0b2FzdCwgc2V0VG9hc3RdID0gdXNlU3RhdGUobnVsbCk7XG5cbiAgLy8gRmV0Y2ggcGFydG5lcnNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhdXRoRmV0Y2goJy9hcGkvcGFydG5lcnMnKVxuICAgICAgLnRoZW4ociA9PiByLmpzb24oKSlcbiAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICBzZXRQYXJ0bmVycyhkYXRhLnBhcnRuZXJzIHx8IGRhdGEgfHwgW10pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7fSk7XG4gIH0sIFtdKTtcblxuICAvLyBGZXRjaCBzdXBlcnZpc29yc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGF1dGhGZXRjaCgnL2FwaS91c2VycycpXG4gICAgICAudGhlbihyID0+IHIuanNvbigpKVxuICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSAoZGF0YSB8fCBbXSkuZmlsdGVyKHUgPT4gdS5yb2xlID09PSAnc3VwZXJ2aXNvcicgJiYgdS5zdGF0dXMgPT09IDEpO1xuICAgICAgICBzZXRTdXBlcnZpc29ycyhsaXN0KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge30pO1xuICB9LCBbXSk7XG5cbiAgLy8gRGVmYXVsdCBzdXBlcnZpc29yIHNlbGVjdGlvbiBiYXNlZCBvbiB1c2VyJ3MgZGVwYXJ0bWVudFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdXBlcnZpc29ycy5sZW5ndGggPiAwICYmIHVzZXIgJiYgIWZvcm0ucHJvamVjdF9sZWFkZXIpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTdXBlcnZpc29yID0gc3VwZXJ2aXNvcnMuZmluZChzID0+IHMuZGVwYXJ0bWVudF9pZCA9PT0gdXNlci5kZXBhcnRtZW50X2lkKTtcbiAgICAgIGlmIChkZWZhdWx0U3VwZXJ2aXNvcikge1xuICAgICAgICBzZXRGb3JtKHByZXYgPT4gKHsgLi4ucHJldiwgcHJvamVjdF9sZWFkZXI6IGRlZmF1bHRTdXBlcnZpc29yLnJlYWxfbmFtZSB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRGb3JtKHByZXYgPT4gKHsgLi4ucHJldiwgcHJvamVjdF9sZWFkZXI6IHN1cGVydmlzb3JzWzBdPy5yZWFsX25hbWUgfHwgJycgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3N1cGVydmlzb3JzLCB1c2VyXSk7XG5cbiAgLy8gRmV0Y2ggY29uZmlnIGZvciBwcm9maXQgcGVyY2VudGFnZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGF1dGhGZXRjaCgnL2FwaS9jb25maWcnKVxuICAgICAgLnRoZW4ociA9PiByLmpzb24oKSlcbiAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICBjb25zdCBwY3QgPSBkYXRhLnByb2ZpdF9wZXJjZW50YWdlIHx8IGRhdGEuY29uZmlnPy5wcm9maXRfcGVyY2VudGFnZSB8fCAwO1xuICAgICAgICBzZXRQcm9maXRQZXJjZW50YWdlKE51bWJlcihwY3QpKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge30pO1xuICB9LCBbXSk7XG5cbiAgLy8gQXV0by1jYWxjdWxhdGUgcHJvZml0IHdoZW4gYW1vdW50IGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZm9ybS5wYXltZW50X3R5cGUgIT09ICdwYXknICYmICFwcm9maXRFZGl0ZWQgJiYgZm9ybS5jb250cmFjdF9hbW91bnQgJiYgcHJvZml0UGVyY2VudGFnZSA+IDApIHtcbiAgICAgIGNvbnN0IHByb2ZpdCA9IChOdW1iZXIoZm9ybS5jb250cmFjdF9hbW91bnQpICogcHJvZml0UGVyY2VudGFnZSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgICAgIHNldEZvcm0ocHJldiA9PiAoeyAuLi5wcmV2LCBlc3RpbWF0ZWRfcHJvZml0OiBwcm9maXQgfSkpO1xuICAgIH1cbiAgfSwgW2Zvcm0uY29udHJhY3RfYW1vdW50LCBwcm9maXRQZXJjZW50YWdlLCBwcm9maXRFZGl0ZWQsIGZvcm0ucGF5bWVudF90eXBlXSk7XG5cbiAgLy8gQ2xvc2UgcGFydG5lciBkcm9wZG93biBvbiBvdXRzaWRlIGNsaWNrXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZSkgPT4ge1xuICAgICAgaWYgKHBhcnRuZXJSZWYuY3VycmVudCAmJiAhcGFydG5lclJlZi5jdXJyZW50LmNvbnRhaW5zKGUudGFyZ2V0KSkge1xuICAgICAgICBzZXRQYXJ0bmVyRHJvcGRvd25PcGVuKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrKTtcbiAgICByZXR1cm4gKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlQ2xpY2spO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgc2hvd1RvYXN0ID0gKG1lc3NhZ2UsIHR5cGUgPSAnc3VjY2VzcycpID0+IHtcbiAgICBzZXRUb2FzdCh7IG1lc3NhZ2UsIHR5cGUgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiBzZXRUb2FzdChudWxsKSwgMzAwMCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGZpZWxkLCB2YWx1ZSkgPT4ge1xuICAgIHNldEZvcm0ocHJldiA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkID0geyAuLi5wcmV2LCBbZmllbGRdOiB2YWx1ZSB9O1xuICAgICAgaWYgKGZpZWxkID09PSAncGF5bWVudF90eXBlJyAmJiB2YWx1ZSA9PT0gJ3BheScpIHtcbiAgICAgICAgdXBkYXRlZC5lc3RpbWF0ZWRfcHJvZml0ID0gJyc7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9KTtcbiAgICBpZiAoZXJyb3JzW2ZpZWxkXSkge1xuICAgICAgc2V0RXJyb3JzKHByZXYgPT4gKHsgLi4ucHJldiwgW2ZpZWxkXTogbnVsbCB9KSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVByb2ZpdENoYW5nZSA9ICh2YWx1ZSkgPT4ge1xuICAgIHNldFByb2ZpdEVkaXRlZCh0cnVlKTtcbiAgICBoYW5kbGVDaGFuZ2UoJ2VzdGltYXRlZF9wcm9maXQnLCB2YWx1ZSk7XG4gIH07XG5cbiAgY29uc3QgZmlsdGVyZWRQYXJ0bmVycyA9IHBhcnRuZXJzLmZpbHRlcihwID0+XG4gICAgKHAubmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhwYXJ0bmVyU2VhcmNoLnRvTG93ZXJDYXNlKCkpXG4gICk7XG5cbiAgY29uc3Qgc2VsZWN0UGFydG5lciA9IChwYXJ0bmVyKSA9PiB7XG4gICAgc2V0Rm9ybShwcmV2ID0+ICh7IC4uLnByZXYsIHBhcnRuZXJfaWQ6IHBhcnRuZXIuaWQgfSkpO1xuICAgIHNldFNlbGVjdGVkUGFydG5lck5hbWUocGFydG5lci5uYW1lKTtcbiAgICBzZXRQYXJ0bmVyU2VhcmNoKHBhcnRuZXIubmFtZSk7XG4gICAgc2V0UGFydG5lckRyb3Bkb3duT3BlbihmYWxzZSk7XG4gIH07XG5cbiAgLy8gRmlsZSBoYW5kbGluZ1xuICBjb25zdCBoYW5kbGVGaWxlcyA9IHVzZUNhbGxiYWNrKChuZXdGaWxlcykgPT4ge1xuICAgIGNvbnN0IGZpbGVBcnJheSA9IEFycmF5LmZyb20obmV3RmlsZXMpO1xuICAgIHNldEZpbGVzKHByZXYgPT4gWy4uLnByZXYsIC4uLmZpbGVBcnJheV0pO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgcmVtb3ZlRmlsZSA9IChpbmRleCkgPT4ge1xuICAgIHNldEZpbGVzKHByZXYgPT4gcHJldi5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRHJhZ092ZXIgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBzZXREcmFnZ2luZyh0cnVlKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVEcmFnTGVhdmUgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBzZXREcmFnZ2luZyhmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRHJvcCA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHNldERyYWdnaW5nKGZhbHNlKTtcbiAgICBpZiAoZS5kYXRhVHJhbnNmZXIuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgaGFuZGxlRmlsZXMoZS5kYXRhVHJhbnNmZXIuZmlsZXMpO1xuICAgIH1cbiAgfTtcblxuICAvLyBVcGxvYWQgZmlsZXMgYWZ0ZXIgY29udHJhY3QgY3JlYXRpb25cbiAgY29uc3QgdXBsb2FkRmlsZXMgPSBhc3luYyAoY29udHJhY3RJZCkgPT4ge1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpO1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdjb250cmFjdF9pZCcsIGNvbnRyYWN0SWQpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXV0aEZldGNoKCcvYXBpL3VwbG9hZCcsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcign5paH5Lu25LiK5Lyg5aSx6LSlOicsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIFZhbGlkYXRlIGFuZCBzdWJtaXRcbiAgY29uc3QgdmFsaWRhdGUgPSAoKSA9PiB7XG4gICAgY29uc3QgbmV3RXJyb3JzID0ge307XG4gICAgaWYgKCFmb3JtLnByb2plY3RfbmFtZS50cmltKCkpIG5ld0Vycm9ycy5wcm9qZWN0X25hbWUgPSAn6K+36L6T5YWl6aG555uu5ZCN56ewJztcbiAgICBpZiAoIWZvcm0ucGFydG5lcl9pZCkgbmV3RXJyb3JzLnBhcnRuZXJfaWQgPSAn6K+36YCJ5oup5ZCI5L2c5Y2V5L2NJztcbiAgICBpZiAoIWZvcm0uY29udHJhY3RfYW1vdW50IHx8IE51bWJlcihmb3JtLmNvbnRyYWN0X2Ftb3VudCkgPD0gMCkgbmV3RXJyb3JzLmNvbnRyYWN0X2Ftb3VudCA9ICfor7fovpPlhaXlkIjlkIzph5Hpop0nO1xuXG4gICAgLy8gVmFsaWRhdGUgY29vcGVyYXRpb24gZHVyYXRpb24gcmFuZ2VcbiAgICBpZiAoIWZvcm0uY29vcGVyYXRlX3N0YXJ0IHx8ICFmb3JtLmNvb3BlcmF0ZV9lbmQpIHtcbiAgICAgIG5ld0Vycm9ycy5jb250cmFjdF95ZWFycyA9ICfor7fpgInmi6nlrozmlbTnmoTlkIjkvZzml7bpl7TojIPlm7QnO1xuICAgIH0gZWxzZSBpZiAoZm9ybS5jb29wZXJhdGVfc3RhcnQgPiBmb3JtLmNvb3BlcmF0ZV9lbmQpIHtcbiAgICAgIG5ld0Vycm9ycy5jb250cmFjdF95ZWFycyA9ICflvIDlp4vml7bpl7TkuI3og73mmZrkuo7nu5PmnZ/ml7bpl7QnO1xuICAgIH1cblxuICAgIHNldEVycm9ycyhuZXdFcnJvcnMpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhuZXdFcnJvcnMpLmxlbmd0aCA9PT0gMDtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBhc3luYyAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIXZhbGlkYXRlKCkpIHJldHVybjtcblxuICAgIHNldFN1Ym1pdHRpbmcodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIHByb2plY3RfbmFtZTogZm9ybS5wcm9qZWN0X25hbWUsXG4gICAgICAgIHByb2plY3RfbGVhZGVyOiBmb3JtLnByb2plY3RfbGVhZGVyIHx8IG51bGwsXG4gICAgICAgIHNpZ25fZGF0ZTogZm9ybS5zaWduX2RhdGUgfHwgbnVsbCxcbiAgICAgICAgcGFydG5lcl9pZDogZm9ybS5wYXJ0bmVyX2lkLFxuICAgICAgICBjb250cmFjdF9jb250ZW50OiBmb3JtLmNvbnRyYWN0X2NvbnRlbnQsXG4gICAgICAgIGNvbnRyYWN0X3llYXJzOiBmb3JtLmNvb3BlcmF0ZV9zdGFydCAmJiBmb3JtLmNvb3BlcmF0ZV9lbmQgPyBgJHtmb3JtLmNvb3BlcmF0ZV9zdGFydH0gfiAke2Zvcm0uY29vcGVyYXRlX2VuZH1gIDogbnVsbCxcbiAgICAgICAgY29udHJhY3RfYW1vdW50OiBOdW1iZXIoZm9ybS5jb250cmFjdF9hbW91bnQpLFxuICAgICAgICBlc3RpbWF0ZWRfcHJvZml0OiBmb3JtLmVzdGltYXRlZF9wcm9maXQgPT09ICcnIHx8IGZvcm0uZXN0aW1hdGVkX3Byb2ZpdCA9PT0gbnVsbCB8fCBmb3JtLmVzdGltYXRlZF9wcm9maXQgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBOdW1iZXIoZm9ybS5lc3RpbWF0ZWRfcHJvZml0KSxcbiAgICAgICAgcGF5bWVudF90eXBlOiBmb3JtLnBheW1lbnRfdHlwZSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGF1dGhGZXRjaCgnL2FwaS9jb250cmFjdHMnLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgIHNob3dUb2FzdChkYXRhLmVycm9yIHx8ICfliJvlu7rlpLHotKUnLCAnZXJyb3InKTtcbiAgICAgICAgc2V0U3VibWl0dGluZyhmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udHJhY3RJZCA9IGRhdGEuaWQgfHwgZGF0YS5jb250cmFjdD8uaWQ7XG5cbiAgICAgIC8vIFVwbG9hZCBmaWxlcyBpZiBhbnlcbiAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwICYmIGNvbnRyYWN0SWQpIHtcbiAgICAgICAgYXdhaXQgdXBsb2FkRmlsZXMoY29udHJhY3RJZCk7XG4gICAgICB9XG5cbiAgICAgIHNob3dUb2FzdCgn5ZCI5ZCM5Yib5bu65oiQ5Yqf77yBJyk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcm91dGVyLnB1c2goYC9kYXNoYm9hcmQvY29udHJhY3RzLyR7Y29udHJhY3RJZH1gKTtcbiAgICAgIH0sIDgwMCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzaG93VG9hc3QoZXJyLm1lc3NhZ2UgfHwgJ+aPkOS6pOWksei0pe+8jOivt+mHjeivlScsICdlcnJvcicpO1xuICAgICAgc2V0U3VibWl0dGluZyhmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGZvcm1hdEZpbGVTaXplID0gKGJ5dGVzKSA9PiB7XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCkgcmV0dXJuIGJ5dGVzICsgJyBCJztcbiAgICBpZiAoYnl0ZXMgPCAxMDI0ICogMTAyNCkgcmV0dXJuIChieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSkgKyAnIEtCJztcbiAgICByZXR1cm4gKGJ5dGVzIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgxKSArICcgTUInO1xuICB9O1xuXG4gIGlmICh1c2VyICYmIHVzZXIucm9sZSAhPT0gJ2VtcGxveWVlJykge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImFuaW1hdGUtZmFkZUluXCIgc3R5bGU9e3sgbWF4V2lkdGg6IDYwMCwgbWFyZ2luOiAnNDBweCBhdXRvJyB9fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkXCIgc3R5bGU9e3sgcGFkZGluZzogNDAsIHRleHRBbGlnbjogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogNDgsIG1hcmdpbkJvdHRvbTogMTYgfX0+4pqg77iPPC9kaXY+XG4gICAgICAgICAgPGgyIHN0eWxlPXt7IGZvbnRTaXplOiAyMCwgZm9udFdlaWdodDogNjAwLCBtYXJnaW5Cb3R0b206IDggfX0+5pqC5peg6K6/6Zeu5p2D6ZmQPC9oMj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWdyYXktNTAwKScsIG1hcmdpbkJvdHRvbTogMjQgfX0+5LuF5ZGY5bel6KeS6Imy5Y+v5paw5bu65ZCI5ZCM5rWB6L2s5Lu75Yqh44CCPC9wPlxuICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5XCIgb25DbGljaz17KCkgPT4gcm91dGVyLnB1c2goJy9kYXNoYm9hcmQvY29udHJhY3RzJyl9PlxuICAgICAgICAgICAg6L+U5Zue5ZCI5ZCM5YiX6KGoXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJhbmltYXRlLWZhZGVJblwiPlxuICAgICAgey8qIFRvYXN0ICovfVxuICAgICAge3RvYXN0ICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0b2FzdC1jb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YHRvYXN0IHRvYXN0LSR7dG9hc3QudHlwZX1gfT5cbiAgICAgICAgICAgIHt0b2FzdC50eXBlID09PSAnc3VjY2VzcycgPyAn4pyFJyA6ICfinYwnfSB7dG9hc3QubWVzc2FnZX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhZ2UtaGVhZGVyXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInBhZ2UtdGl0bGVcIj7mlrDlu7rlkIjlkIzmtYHovazku7vliqE8L2gxPlxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInBhZ2Utc3VidGl0bGVcIj7loavlhpnlkIjlkIzkv6Hmga/lubbmj5DkuqTlrqHmibk8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxmb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9PlxuICAgICAgICB7Lyog5Z+65pys5L+h5oGvICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206IDIwIH19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJjYXJkLXRpdGxlXCI+8J+TnSDln7rmnKzkv6Hmga88L2gzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdncmlkJywgZ3JpZFRlbXBsYXRlQ29sdW1uczogJ3JlcGVhdCgyLCAxZnIpJywgZ2FwOiAyMCB9fT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZvcm0tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgIOmhueebruWQjeensCA8c3BhbiBjbGFzc05hbWU9XCJyZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0taW5wdXRcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXpobnnm67lkI3np7BcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm0ucHJvamVjdF9uYW1lfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2UgPT4gaGFuZGxlQ2hhbmdlKCdwcm9qZWN0X25hbWUnLCBlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7ZXJyb3JzLnByb2plY3RfbmFtZSAmJiA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZXJyb3JcIj57ZXJyb3JzLnByb2plY3RfbmFtZX08L2Rpdj59XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1sYWJlbFwiPumhueebrui0n+i0o+S6ujwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm0ucHJvamVjdF9sZWFkZXJ9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZSA9PiBoYW5kbGVDaGFuZ2UoJ3Byb2plY3RfbGVhZGVyJywgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj4tLSDor7fpgInmi6npg6jpl6jkuLvnrqEgLS08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIHtzdXBlcnZpc29ycy5tYXAocyA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtzLmlkfSB2YWx1ZT17cy5yZWFsX25hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgIHtzLnJlYWxfbmFtZX0gKHtzLmRlcGFydG1lbnRfbmFtZSB8fCAn5peg6YOo6ZeoJ30pXG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1sYWJlbFwiPuetvuiuouaXtumXtDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtLnNpZ25fZGF0ZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IGhhbmRsZUNoYW5nZSgnc2lnbl9kYXRlJywgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiDlkIjkvZzljZXkvY0gKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogMjAgfX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkLWhlYWRlclwiPlxuICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cImNhcmQtdGl0bGVcIj7wn4+iIOWQiOS9nOWNleS9jSA8c3BhbiBjbGFzc05hbWU9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9oMz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCIgcmVmPXtwYXJ0bmVyUmVmfT5cbiAgICAgICAgICAgICAge2Zvcm0ucGFydG5lcl9pZCA/IChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlbGVjdGVkLXBhcnRuZXItY2FyZCBhbmltYXRlLWZhZGVJblwiIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTBweCAxNHB4JyxcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1ncmF5LTUwKScsXG4gICAgICAgICAgICAgICAgICBib3JkZXI6ICcxLjVweCBzb2xpZCB2YXIoLS1ncmF5LTIwMCknLFxuICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAndmFyKC0tcmFkaXVzLW1kKScsXG4gICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250V2VpZ2h0OiA2MDAsIGZvbnRTaXplOiAxNCB9fT7wn4+iIHtzZWxlY3RlZFBhcnRuZXJOYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tZ2hvc3QgYnRuLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kYW5nZXIpJywgcGFkZGluZzogJzRweCA4cHgnIH19XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRGb3JtKHByZXYgPT4gKHsgLi4ucHJldiwgcGFydG5lcl9pZDogJycgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkUGFydG5lck5hbWUoJycpO1xuICAgICAgICAgICAgICAgICAgICAgIHNldFBhcnRuZXJTZWFyY2goJycpO1xuICAgICAgICAgICAgICAgICAgICAgIHNldFBhcnRuZXJEcm9wZG93bk9wZW4odHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIOmHjeaWsOmAieaLqVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWFyY2gtc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzZWFyY2gtc2VsZWN0LWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLmkJzntKLlkIjkvZzljZXkvY0uLi5cIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cGFydG5lclNlYXJjaH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHNldFBhcnRuZXJTZWFyY2goZS50YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgIHNldFBhcnRuZXJEcm9wZG93bk9wZW4odHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIG9uRm9jdXM9eygpID0+IHNldFBhcnRuZXJEcm9wZG93bk9wZW4odHJ1ZSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAge3BhcnRuZXJEcm9wZG93bk9wZW4gJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlYXJjaC1zZWxlY3QtZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0bmVycy5sZW5ndGggPiAwID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRQYXJ0bmVycy5tYXAocCA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e3AuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgc2VhcmNoLXNlbGVjdC1vcHRpb24gJHtmb3JtLnBhcnRuZXJfaWQgPT09IHAuaWQgPyAnc2VsZWN0ZWQnIDogJyd9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZWxlY3RQYXJ0bmVyKHApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3AubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlYXJjaC1zZWxlY3QtZW1wdHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAg5pyq5om+5Yiw77yfXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIvZGFzaGJvYXJkL3BhcnRuZXJzXCIgb25DbGljaz17ZSA9PiB7IGUucHJldmVudERlZmF1bHQoKTsgcm91dGVyLnB1c2goJy9kYXNoYm9hcmQvcGFydG5lcnMnKTsgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5YmN5b6A5re75Yqg5ZCI5L2c5Y2V5L2NXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2Vycm9ycy5wYXJ0bmVyX2lkICYmIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1lcnJvclwiPntlcnJvcnMucGFydG5lcl9pZH08L2Rpdj59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgey8qIOWQiOWQjOivpuaDhSAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAyMCB9fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwiY2FyZC10aXRsZVwiPvCfk4Qg5ZCI5ZCM6K+m5oOFPC9oMz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWxhYmVsXCI+5ZCI5ZCM5YaF5a65PC9sYWJlbD5cbiAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS10ZXh0YXJlYVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXlkIjlkIzkuLvopoHlhoXlrrnmj4/ov7AuLi5cIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtLmNvbnRyYWN0X2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2UgPT4gaGFuZGxlQ2hhbmdlKCdjb250cmFjdF9jb250ZW50JywgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIHJvd3M9ezR9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1sYWJlbFwiPuWQiOS9nOacn+mZkCA8c3BhbiBjbGFzc05hbWU9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6IDEyLCBtYXhXaWR0aDogNDAwIH19PlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17Zm9ybS5jb29wZXJhdGVfc3RhcnR9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZSA9PiBoYW5kbGVDaGFuZ2UoJ2Nvb3BlcmF0ZV9zdGFydCcsIGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZ3JheS00MDApJyB9fT7oh7M8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtLmNvb3BlcmF0ZV9lbmR9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZSA9PiBoYW5kbGVDaGFuZ2UoJ2Nvb3BlcmF0ZV9lbmQnLCBlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIHtlcnJvcnMuY29udHJhY3RfeWVhcnMgJiYgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWVycm9yXCI+e2Vycm9ycy5jb250cmFjdF95ZWFyc308L2Rpdj59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgey8qIOmHkemineS/oeaBryAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAyMCB9fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwiY2FyZC10aXRsZVwiPvCfkrAg6YeR6aKd5L+h5oGvPC9oMz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZ3JpZCcsIGdyaWRUZW1wbGF0ZUNvbHVtbnM6ICdyZXBlYXQoMiwgMWZyKScsIGdhcDogMjAgfX0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICDlkIjlkIzph5Hpop3vvIjlhYPvvIk8c3BhbiBjbGFzc05hbWU9XCJyZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeWQiOWQjOmHkeminVwiXG4gICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgIHN0ZXA9XCIwLjAxXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtLmNvbnRyYWN0X2Ftb3VudH1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IGhhbmRsZUNoYW5nZSgnY29udHJhY3RfYW1vdW50JywgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2Vycm9ycy5jb250cmFjdF9hbW91bnQgJiYgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWVycm9yXCI+e2Vycm9ycy5jb250cmFjdF9hbW91bnR9PC9kaXY+fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgey8qIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWxhYmVsXCI+6aKE5Lyw5Yip5ram77yI5YWD77yJPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHBvc2l0aW9uOiAncmVsYXRpdmUnIH19PlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2Zvcm0ucGF5bWVudF90eXBlID09PSAncGF5JyA/ICfku5jmrL7lkIjlkIzml6DliKnmtqYnIDogJ+iHquWKqOiuoeeulyd9XG4gICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBzdGVwPVwiMC4wMVwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtLmVzdGltYXRlZF9wcm9maXR9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IGhhbmRsZVByb2ZpdENoYW5nZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtmb3JtLnBheW1lbnRfdHlwZSA9PT0gJ3BheSd9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAge2Zvcm0ucGF5bWVudF90eXBlICE9PSAncGF5JyAmJiBwcm9maXRQZXJjZW50YWdlID4gMCAmJiAhcHJvZml0RWRpdGVkICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWhpbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICDmjInpu5jorqTmr5Tkvosge3Byb2ZpdFBlcmNlbnRhZ2V9JSDoh6rliqjorqHnrpfvvIzlj6/miYvliqjkv67mlLlcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAge2Zvcm0ucGF5bWVudF90eXBlICE9PSAncGF5JyAmJiBwcm9maXRFZGl0ZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0taGludFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLXByaW1hcnkpJywgY3Vyc29yOiAncG9pbnRlcicgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZml0RWRpdGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm0uY29udHJhY3RfYW1vdW50ICYmIHByb2ZpdFBlcmNlbnRhZ2UgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvZml0ID0gKE51bWJlcihmb3JtLmNvbnRyYWN0X2Ftb3VudCkgKiBwcm9maXRQZXJjZW50YWdlIC8gMTAwKS50b0ZpeGVkKDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvcm0ocHJldiA9PiAoeyAuLi5wcmV2LCBlc3RpbWF0ZWRfcHJvZml0OiBwcm9maXQgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIOaBouWkjeiHquWKqOiuoeeul1xuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj4gKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWxhYmVsXCI+5pS25qy+L+S7mOasvjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogMjQsIG1hcmdpblRvcDogOCB9fT5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6IDYsIGN1cnNvcjogJ3BvaW50ZXInLCBmb250U2l6ZTogMTQgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInBheW1lbnRfdHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJyZWNlaXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtmb3JtLnBheW1lbnRfdHlwZSA9PT0gJ3JlY2VpdmUnfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IGhhbmRsZUNoYW5nZSgncGF5bWVudF90eXBlJywgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGFjY2VudENvbG9yOiAndmFyKC0tcHJpbWFyeSknIH19XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIOaUtuasvlxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6IDYsIGN1cnNvcjogJ3BvaW50ZXInLCBmb250U2l6ZTogMTQgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInBheW1lbnRfdHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJwYXlcIlxuICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2Zvcm0ucGF5bWVudF90eXBlID09PSAncGF5J31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZSA9PiBoYW5kbGVDaGFuZ2UoJ3BheW1lbnRfdHlwZScsIGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBhY2NlbnRDb2xvcjogJ3ZhcigtLXByaW1hcnkpJyB9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICDku5jmrL5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiDpmYTku7bkuIrkvKAgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogMjAgfX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkLWhlYWRlclwiPlxuICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cImNhcmQtdGl0bGVcIj7wn5OOIOmZhOS7tuS4iuS8oDwvaDM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdXBsb2FkLWFyZWEgJHtkcmFnZ2luZyA/ICdkcmFnZ2luZycgOiAnJ31gfVxuICAgICAgICAgICAgICBvbkRyYWdPdmVyPXtoYW5kbGVEcmFnT3Zlcn1cbiAgICAgICAgICAgICAgb25EcmFnTGVhdmU9e2hhbmRsZURyYWdMZWF2ZX1cbiAgICAgICAgICAgICAgb25Ecm9wPXtoYW5kbGVEcm9wfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBmaWxlSW5wdXRSZWYuY3VycmVudD8uY2xpY2soKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1cGxvYWQtaWNvblwiPvCfk4E8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1cGxvYWQtdGV4dFwiPueCueWHu+aIluaLluaLveaWh+S7tuWIsOatpOWkhOS4iuS8oDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVwbG9hZC1oaW50XCI+5pSv5oyB5ZCE56eN5paH5Lu25qC85byPPC9kaXY+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUZpbGVzKGUudGFyZ2V0LmZpbGVzKTtcbiAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7ZmlsZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsZS1saXN0XCI+XG4gICAgICAgICAgICAgICAge2ZpbGVzLm1hcCgoZmlsZSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtpbmRleH0gY2xhc3NOYW1lPVwiZmlsZS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZpbGUtaXRlbS1uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAg8J+ThCB7ZmlsZS5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZ3JheS00MDApJywgZm9udFNpemU6IDEyIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgKHtmb3JtYXRGaWxlU2l6ZShmaWxlLnNpemUpfSlcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZpbGUtaXRlbS1yZW1vdmVcIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHJlbW92ZUZpbGUoaW5kZXgpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAg4pyVXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgey8qIOaTjeS9nOaMiemSriAqL31cbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnLCBnYXA6IDEyLCBtYXJnaW5Ub3A6IDI0IH19PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuIGJ0bi1naG9zdFwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiByb3V0ZXIuYmFjaygpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIOWPlua2iFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZ1wiXG4gICAgICAgICAgICBkaXNhYmxlZD17c3VibWl0dGluZ31cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7c3VibWl0dGluZyA/ICfmj5DkuqTkuK0uLi4nIDogJ+KcqCDmj5DkuqTlrqHmibknfVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZUNhbGxiYWNrIiwidXNlUm91dGVyIiwidXNlVXNlciIsImF1dGhGZXRjaCIsIkNyZWF0ZUNvbnRyYWN0UGFnZSIsInJvdXRlciIsInVzZXIiLCJmb3JtIiwic2V0Rm9ybSIsInByb2plY3RfbmFtZSIsInByb2plY3RfbGVhZGVyIiwic2lnbl9kYXRlIiwicGFydG5lcl9pZCIsImNvbnRyYWN0X2NvbnRlbnQiLCJjb29wZXJhdGVfc3RhcnQiLCJjb29wZXJhdGVfZW5kIiwiY29udHJhY3RfYW1vdW50IiwiZXN0aW1hdGVkX3Byb2ZpdCIsInBheW1lbnRfdHlwZSIsInN1cGVydmlzb3JzIiwic2V0U3VwZXJ2aXNvcnMiLCJwYXJ0bmVycyIsInNldFBhcnRuZXJzIiwicGFydG5lclNlYXJjaCIsInNldFBhcnRuZXJTZWFyY2giLCJwYXJ0bmVyRHJvcGRvd25PcGVuIiwic2V0UGFydG5lckRyb3Bkb3duT3BlbiIsInNlbGVjdGVkUGFydG5lck5hbWUiLCJzZXRTZWxlY3RlZFBhcnRuZXJOYW1lIiwicGFydG5lclJlZiIsImZpbGVzIiwic2V0RmlsZXMiLCJkcmFnZ2luZyIsInNldERyYWdnaW5nIiwiZmlsZUlucHV0UmVmIiwicHJvZml0UGVyY2VudGFnZSIsInNldFByb2ZpdFBlcmNlbnRhZ2UiLCJwcm9maXRFZGl0ZWQiLCJzZXRQcm9maXRFZGl0ZWQiLCJzdWJtaXR0aW5nIiwic2V0U3VibWl0dGluZyIsImVycm9ycyIsInNldEVycm9ycyIsInRvYXN0Iiwic2V0VG9hc3QiLCJ0aGVuIiwiciIsImpzb24iLCJkYXRhIiwiY2F0Y2giLCJsaXN0IiwiZmlsdGVyIiwidSIsInJvbGUiLCJzdGF0dXMiLCJsZW5ndGgiLCJkZWZhdWx0U3VwZXJ2aXNvciIsImZpbmQiLCJzIiwiZGVwYXJ0bWVudF9pZCIsInByZXYiLCJyZWFsX25hbWUiLCJwY3QiLCJwcm9maXRfcGVyY2VudGFnZSIsImNvbmZpZyIsIk51bWJlciIsInByb2ZpdCIsInRvRml4ZWQiLCJoYW5kbGVDbGljayIsImUiLCJjdXJyZW50IiwiY29udGFpbnMiLCJ0YXJnZXQiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2hvd1RvYXN0IiwibWVzc2FnZSIsInR5cGUiLCJzZXRUaW1lb3V0IiwiaGFuZGxlQ2hhbmdlIiwiZmllbGQiLCJ2YWx1ZSIsInVwZGF0ZWQiLCJoYW5kbGVQcm9maXRDaGFuZ2UiLCJmaWx0ZXJlZFBhcnRuZXJzIiwicCIsIm5hbWUiLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwic2VsZWN0UGFydG5lciIsInBhcnRuZXIiLCJpZCIsImhhbmRsZUZpbGVzIiwibmV3RmlsZXMiLCJmaWxlQXJyYXkiLCJBcnJheSIsImZyb20iLCJyZW1vdmVGaWxlIiwiaW5kZXgiLCJfIiwiaSIsImhhbmRsZURyYWdPdmVyIiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVEcmFnTGVhdmUiLCJoYW5kbGVEcm9wIiwiZGF0YVRyYW5zZmVyIiwidXBsb2FkRmlsZXMiLCJjb250cmFjdElkIiwiZmlsZSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJtZXRob2QiLCJib2R5IiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwidmFsaWRhdGUiLCJuZXdFcnJvcnMiLCJ0cmltIiwiY29udHJhY3RfeWVhcnMiLCJPYmplY3QiLCJrZXlzIiwiaGFuZGxlU3VibWl0IiwidW5kZWZpbmVkIiwicmVzIiwiSlNPTiIsInN0cmluZ2lmeSIsIm9rIiwiY29udHJhY3QiLCJwdXNoIiwiZm9ybWF0RmlsZVNpemUiLCJieXRlcyIsImRpdiIsImNsYXNzTmFtZSIsInN0eWxlIiwibWF4V2lkdGgiLCJtYXJnaW4iLCJwYWRkaW5nIiwidGV4dEFsaWduIiwiZm9udFNpemUiLCJtYXJnaW5Cb3R0b20iLCJoMiIsImZvbnRXZWlnaHQiLCJjb2xvciIsImJ1dHRvbiIsIm9uQ2xpY2siLCJoMSIsIm9uU3VibWl0IiwiaDMiLCJkaXNwbGF5IiwiZ3JpZFRlbXBsYXRlQ29sdW1ucyIsImdhcCIsImxhYmVsIiwic3BhbiIsImlucHV0IiwicGxhY2Vob2xkZXIiLCJvbkNoYW5nZSIsInNlbGVjdCIsIm9wdGlvbiIsIm1hcCIsImRlcGFydG1lbnRfbmFtZSIsInJlZiIsImp1c3RpZnlDb250ZW50IiwiYWxpZ25JdGVtcyIsImJhY2tncm91bmQiLCJib3JkZXIiLCJib3JkZXJSYWRpdXMiLCJvbkZvY3VzIiwiYSIsImhyZWYiLCJ0ZXh0YXJlYSIsInJvd3MiLCJtaW4iLCJzdGVwIiwibWFyZ2luVG9wIiwiY3Vyc29yIiwiY2hlY2tlZCIsImFjY2VudENvbG9yIiwib25EcmFnT3ZlciIsIm9uRHJhZ0xlYXZlIiwib25Ecm9wIiwiY2xpY2siLCJtdWx0aXBsZSIsInNpemUiLCJiYWNrIiwiZGlzYWJsZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/app/dashboard/contracts/create/page.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/app/dashboard/layout.js":
|
||
/*!*************************************!*\
|
||
!*** ./src/app/dashboard/layout.js ***!
|
||
\*************************************/
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ DashboardLayout; },\n/* harmony export */ useUser: function() { return /* binding */ useUser; }\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_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _lib_auth_client__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/auth-client */ \"(app-pages-browser)/./src/lib/auth-client.js\");\n/* harmony import */ var _dashboard_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dashboard.css */ \"(app-pages-browser)/./src/app/dashboard/dashboard.css\");\n/* __next_internal_client_entry_do_not_use__ useUser,default auto */ \nvar _s = $RefreshSig$(), _s1 = $RefreshSig$();\n\n\n\n\nconst UserContext = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)(null);\nconst useUser = ()=>{\n _s();\n return (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(UserContext);\n};\n_s(useUser, \"gDsCjeeItUuvgOWf1v4qoK9RF6k=\");\nconst ALL_MENUS = [\n {\n key: \"dashboard\",\n label: \"工作台\",\n icon: \"\\uD83D\\uDCCA\",\n path: \"/dashboard\"\n },\n {\n key: \"contracts\",\n label: \"合同流转\",\n icon: \"\\uD83D\\uDCCB\",\n path: \"/dashboard/contracts\"\n },\n {\n key: \"partners\",\n label: \"合作单位\",\n icon: \"\\uD83C\\uDFE2\",\n path: \"/dashboard/partners\"\n },\n {\n key: \"users\",\n label: \"用户管理\",\n icon: \"\\uD83D\\uDC65\",\n path: \"/dashboard/users\"\n },\n {\n key: \"departments\",\n label: \"部门管理\",\n icon: \"\\uD83C\\uDFDB️\",\n path: \"/dashboard/departments\"\n },\n {\n key: \"settings\",\n label: \"系统配置\",\n icon: \"⚙️\",\n path: \"/dashboard/settings\"\n },\n {\n key: \"permissions\",\n label: \"权限配置\",\n icon: \"\\uD83D\\uDD10\",\n path: \"/dashboard/permissions\"\n }\n];\nfunction DashboardLayout(param) {\n let { children } = param;\n var _visibleMenus_find, _user_real_name;\n _s1();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const [user, setUser] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [permissions, setPermissions] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [collapsed, setCollapsed] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const token = (0,_lib_auth_client__WEBPACK_IMPORTED_MODULE_3__.getToken)();\n if (!token) {\n router.replace(\"/login\");\n return;\n }\n (0,_lib_auth_client__WEBPACK_IMPORTED_MODULE_3__.authFetch)(\"/api/auth/me\").then((r)=>r.json()).then((data)=>{\n if (data.error) {\n (0,_lib_auth_client__WEBPACK_IMPORTED_MODULE_3__.clearToken)();\n router.replace(\"/login\");\n return;\n }\n setUser(data.user);\n setPermissions(data.permissions || []);\n setLoading(false);\n }).catch(()=>{\n (0,_lib_auth_client__WEBPACK_IMPORTED_MODULE_3__.clearToken)();\n router.replace(\"/login\");\n });\n }, [\n router\n ]);\n const handleLogout = ()=>{\n (0,_lib_auth_client__WEBPACK_IMPORTED_MODULE_3__.clearToken)();\n router.replace(\"/login\");\n };\n const visibleMenus = ALL_MENUS.filter((menu)=>{\n if (!user) return false;\n if (user.role === \"admin\") return true;\n const perm = permissions.find((p)=>p.menu_key === menu.key);\n return perm ? perm.visible === 1 : false;\n });\n if (loading) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n minHeight: \"100vh\"\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"loading-spinner\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 67,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 66,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(UserContext.Provider, {\n value: user,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"dashboard-layout\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"sidebar \".concat(collapsed ? \"collapsed\" : \"\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"sidebar-header\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"sidebar-logo\",\n children: \"\\uD83D\\uDCC4\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 77,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"sidebar-brand\",\n children: \"合同审批系统\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 78,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 76,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"sidebar-nav\",\n children: visibleMenus.map((menu)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: menu.path,\n className: \"nav-item \".concat(pathname === menu.path || menu.key !== \"dashboard\" && pathname.startsWith(menu.path) ? \"active\" : \"\"),\n onClick: (e)=>{\n e.preventDefault();\n router.push(menu.path);\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"nav-item-icon\",\n children: menu.icon\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 88,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"nav-item-text\",\n children: menu.label\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 89,\n columnNumber: 17\n }, this)\n ]\n }, menu.key, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 82,\n columnNumber: 15\n }, this))\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 80,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"sidebar-footer\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"sidebar-toggle\",\n onClick: ()=>setCollapsed(!collapsed),\n children: collapsed ? \"→\" : \"← 收起菜单\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 94,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 93,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 75,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"main-content \".concat(collapsed ? \"collapsed\" : \"\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"top-header\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"header-left\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"header-title\",\n children: ((_visibleMenus_find = visibleMenus.find((m)=>pathname === m.path || m.key !== \"dashboard\" && pathname.startsWith(m.path))) === null || _visibleMenus_find === void 0 ? void 0 : _visibleMenus_find.label) || \"工作台\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 103,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 102,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"header-right\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"user-info\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"user-avatar\",\n children: user === null || user === void 0 ? void 0 : (_user_real_name = user.real_name) === null || _user_real_name === void 0 ? void 0 : _user_real_name[0]\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 109,\n columnNumber: 17\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)(\"div\", {\n className: \"user-name\",\n children: user === null || user === void 0 ? void 0 : user.real_name\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 111,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"user-role\",\n children: _lib_auth_client__WEBPACK_IMPORTED_MODULE_3__.ROLE_NAMES[user === null || user === void 0 ? void 0 : user.role] || (user === null || user === void 0 ? void 0 : user.role)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 112,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 110,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 108,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"logout-btn\",\n onClick: handleLogout,\n children: \"退出登录\"\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 115,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 107,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 101,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"page-content\",\n children: children\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 118,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 100,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 74,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/dashboard/layout.js\",\n lineNumber: 73,\n columnNumber: 5\n }, this);\n}\n_s1(DashboardLayout, \"/arOSIUYq57Fm6OKXB25fXjZx/0=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter,\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname\n ];\n});\n_c = DashboardLayout;\nvar _c;\n$RefreshReg$(_c, \"DashboardLayout\");\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9hcHAvZGFzaGJvYXJkL2xheW91dC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQ3VFO0FBQ2Q7QUFDZ0M7QUFDaEU7QUFFekIsTUFBTVcsNEJBQWNULG9EQUFhQSxDQUFDO0FBQzNCLE1BQU1VLFVBQVU7O0lBQU1ULE9BQUFBLGlEQUFVQSxDQUFDUTtBQUFXLEVBQUU7R0FBeENDO0FBRWIsTUFBTUMsWUFBWTtJQUNoQjtRQUFFQyxLQUFLO1FBQWFDLE9BQU87UUFBT0MsTUFBTTtRQUFNQyxNQUFNO0lBQWE7SUFDakU7UUFBRUgsS0FBSztRQUFhQyxPQUFPO1FBQVFDLE1BQU07UUFBTUMsTUFBTTtJQUF1QjtJQUM1RTtRQUFFSCxLQUFLO1FBQVlDLE9BQU87UUFBUUMsTUFBTTtRQUFNQyxNQUFNO0lBQXNCO0lBQzFFO1FBQUVILEtBQUs7UUFBU0MsT0FBTztRQUFRQyxNQUFNO1FBQU1DLE1BQU07SUFBbUI7SUFDcEU7UUFBRUgsS0FBSztRQUFlQyxPQUFPO1FBQVFDLE1BQU07UUFBT0MsTUFBTTtJQUF5QjtJQUNqRjtRQUFFSCxLQUFLO1FBQVlDLE9BQU87UUFBUUMsTUFBTTtRQUFNQyxNQUFNO0lBQXNCO0lBQzFFO1FBQUVILEtBQUs7UUFBZUMsT0FBTztRQUFRQyxNQUFNO1FBQU1DLE1BQU07SUFBeUI7Q0FDakY7QUFFYyxTQUFTQyxnQkFBZ0IsS0FBWTtRQUFaLEVBQUVDLFFBQVEsRUFBRSxHQUFaO1FBb0Z2QkMsb0JBSzZCQzs7SUF4RjVDLE1BQU1DLFNBQVNsQiwwREFBU0E7SUFDeEIsTUFBTW1CLFdBQVdsQiw0REFBV0E7SUFDNUIsTUFBTSxDQUFDZ0IsTUFBTUcsUUFBUSxHQUFHeEIsK0NBQVFBLENBQUM7SUFDakMsTUFBTSxDQUFDeUIsYUFBYUMsZUFBZSxHQUFHMUIsK0NBQVFBLENBQUMsRUFBRTtJQUNqRCxNQUFNLENBQUMyQixXQUFXQyxhQUFhLEdBQUc1QiwrQ0FBUUEsQ0FBQztJQUMzQyxN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V0FBVTtrREFDYmxDLEVBQUFBLHFCQUFBQSxhQUFhd0IsSUFBSSxDQUFDMEIsQ0FBQUEsSUFBSy9DLGFBQWErQyxFQUFFckQsSUFBSSxJQUFLcUQsRUFBRXhELEdBQUcsS0FBSyxlQUFlUyxTQUFTd0MsVUFBVSxDQUFDTyxFQUFFckQsSUFBSSxnQkFBbEdHLHlDQUFBQSxtQkFBdUdMLEtBQUssS0FBSTs7Ozs7Ozs7Ozs7OENBR3JILDhEQUFDaUM7b0NBQUlNLFdBQVU7O3NEQUNiLDhEQUFDTjs0Q0FBSU0sV0FBVTs7OERBQ2IsOERBQUNOO29EQUFJTSxXQUFVOzhEQUFlakMsaUJBQUFBLDRCQUFBQSxrQkFBQUEsS0FBTWtELFNBQVMsY0FBZmxELHNDQUFBQSxlQUFpQixDQUFDLEVBQUU7Ozs7Ozs4REFDbEQsOERBQUMyQjs7c0VBQ0MsOERBQUNBOzREQUFJTSxXQUFVO3NFQUFhakMsaUJBQUFBLDJCQUFBQSxLQUFNa0QsU0FBUzs7Ozs7O3NFQUMzQyw4REFBQ2I7NERBQUtKLFdBQVU7c0VBQWE1Qyx3REFBVSxDQUFDVyxpQkFBQUEsMkJBQUFBLEtBQU1xQixJQUFJLENBQUMsS0FBSXJCLGlCQUFBQSwyQkFBQUEsS0FBTXFCLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7OztzREFHckUsOERBQUMwQjs0Q0FBT2QsV0FBVTs0Q0FBYVUsU0FBU3pCO3NEQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7c0NBRzFELDhEQUFDaUM7NEJBQUtsQixXQUFVO3NDQUNibkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTWI7SUF6R3dCRDs7UUFDUGQsc0RBQVNBO1FBQ1BDLHdEQUFXQTs7O0tBRk5hIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL3NyYy9hcHAvZGFzaGJvYXJkL2xheW91dC5qcz9mNzE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VSb3V0ZXIsIHVzZVBhdGhuYW1lIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJztcbmltcG9ydCB7IGdldFRva2VuLCBjbGVhclRva2VuLCBnZXRVc2VyLCBhdXRoRmV0Y2gsIFJPTEVfTkFNRVMgfSBmcm9tICdAL2xpYi9hdXRoLWNsaWVudCc7XG5pbXBvcnQgJy4vZGFzaGJvYXJkLmNzcyc7XG5cbmNvbnN0IFVzZXJDb250ZXh0ID0gY3JlYXRlQ29udGV4dChudWxsKTtcbmV4cG9ydCBjb25zdCB1c2VVc2VyID0gKCkgPT4gdXNlQ29udGV4dChVc2VyQ29udGV4dCk7XG5cbmNvbnN0IEFMTF9NRU5VUyA9IFtcbiAgeyBrZXk6ICdkYXNoYm9hcmQnLCBsYWJlbDogJ+W3peS9nOWPsCcsIGljb246ICfwn5OKJywgcGF0aDogJy9kYXNoYm9hcmQnIH0sXG4gIHsga2V5OiAnY29udHJhY3RzJywgbGFiZWw6ICflkIjlkIzmtYHovawnLCBpY29uOiAn8J+TiycsIHBhdGg6ICcvZGFzaGJvYXJkL2NvbnRyYWN0cycgfSxcbiAgeyBrZXk6ICdwYXJ0bmVycycsIGxhYmVsOiAn5ZCI5L2c5Y2V5L2NJywgaWNvbjogJ/Cfj6InLCBwYXRoOiAnL2Rhc2hib2FyZC9wYXJ0bmVycycgfSxcbiAgeyBrZXk6ICd1c2VycycsIGxhYmVsOiAn55So5oi3566h55CGJywgaWNvbjogJ/CfkaUnLCBwYXRoOiAnL2Rhc2hib2FyZC91c2VycycgfSxcbiAgeyBrZXk6ICdkZXBhcnRtZW50cycsIGxhYmVsOiAn6YOo6Zeo566h55CGJywgaWNvbjogJ/Cfj5vvuI8nLCBwYXRoOiAnL2Rhc2hib2FyZC9kZXBhcnRtZW50cycgfSxcbiAgeyBrZXk6ICdzZXR0aW5ncycsIGxhYmVsOiAn57O757uf6YWN572uJywgaWNvbjogJ+Kame+4jycsIHBhdGg6ICcvZGFzaGJvYXJkL3NldHRpbmdzJyB9LFxuICB7IGtleTogJ3Blcm1pc3Npb25zJywgbGFiZWw6ICfmnYPpmZDphY3nva4nLCBpY29uOiAn8J+UkCcsIHBhdGg6ICcvZGFzaGJvYXJkL3Blcm1pc3Npb25zJyB9LFxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGFzaGJvYXJkTGF5b3V0KHsgY2hpbGRyZW4gfSkge1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcbiAgY29uc3QgcGF0aG5hbWUgPSB1c2VQYXRobmFtZSgpO1xuICBjb25zdCBbdXNlciwgc2V0VXNlcl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3Blcm1pc3Npb25zLCBzZXRQZXJtaXNzaW9uc10gPSB1c2VTdGF0ZShbXSk7XG4gIGNvbnN0IFtjb2xsYXBzZWQsIHNldENvbGxhcHNlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdG9rZW4gPSBnZXRUb2tlbigpO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJvdXRlci5yZXBsYWNlKCcvbG9naW4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXV0aEZldGNoKCcvYXBpL2F1dGgvbWUnKVxuICAgICAgLnRoZW4ociA9PiByLmpzb24oKSlcbiAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgIGNsZWFyVG9rZW4oKTtcbiAgICAgICAgICByb3V0ZXIucmVwbGFjZSgnL2xvZ2luJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldFVzZXIoZGF0YS51c2VyKTtcbiAgICAgICAgc2V0UGVybWlzc2lvbnMoZGF0YS5wZXJtaXNzaW9ucyB8fCBbXSk7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIGNsZWFyVG9rZW4oKTtcbiAgICAgICAgcm91dGVyLnJlcGxhY2UoJy9sb2dpbicpO1xuICAgICAgfSk7XG4gIH0sIFtyb3V0ZXJdKTtcblxuICBjb25zdCBoYW5kbGVMb2dvdXQgPSAoKSA9PiB7XG4gICAgY2xlYXJUb2tlbigpO1xuICAgIHJvdXRlci5yZXBsYWNlKCcvbG9naW4nKTtcbiAgfTtcblxuICBjb25zdCB2aXNpYmxlTWVudXMgPSBBTExfTUVOVVMuZmlsdGVyKG1lbnUgPT4ge1xuICAgIGlmICghdXNlcikgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh1c2VyLnJvbGUgPT09ICdhZG1pbicpIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IHBlcm0gPSBwZXJtaXNzaW9ucy5maW5kKHAgPT4gcC5tZW51X2tleSA9PT0gbWVudS5rZXkpO1xuICAgIHJldHVybiBwZXJtID8gcGVybS52aXNpYmxlID09PSAxIDogZmFsc2U7XG4gIH0pO1xuXG4gIGlmIChsb2FkaW5nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLCBtaW5IZWlnaHQ6ICcxMDB2aCcgfX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibG9hZGluZy1zcGlubmVyXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8VXNlckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3VzZXJ9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXNoYm9hcmQtbGF5b3V0XCI+XG4gICAgICAgIDxhc2lkZSBjbGFzc05hbWU9e2BzaWRlYmFyICR7Y29sbGFwc2VkID8gJ2NvbGxhcHNlZCcgOiAnJ31gfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNpZGViYXItaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNpZGViYXItbG9nb1wiPvCfk4Q8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNpZGViYXItYnJhbmRcIj7lkIjlkIzlrqHmibnns7vnu588L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5hdiBjbGFzc05hbWU9XCJzaWRlYmFyLW5hdlwiPlxuICAgICAgICAgICAge3Zpc2libGVNZW51cy5tYXAobWVudSA9PiAoXG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAga2V5PXttZW51LmtleX1cbiAgICAgICAgICAgICAgICBocmVmPXttZW51LnBhdGh9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgbmF2LWl0ZW0gJHtwYXRobmFtZSA9PT0gbWVudS5wYXRoIHx8IChtZW51LmtleSAhPT0gJ2Rhc2hib2FyZCcgJiYgcGF0aG5hbWUuc3RhcnRzV2l0aChtZW51LnBhdGgpKSA/ICdhY3RpdmUnIDogJyd9YH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4geyBlLnByZXZlbnREZWZhdWx0KCk7IHJvdXRlci5wdXNoKG1lbnUucGF0aCk7IH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJuYXYtaXRlbS1pY29uXCI+e21lbnUuaWNvbn08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibmF2LWl0ZW0tdGV4dFwiPnttZW51LmxhYmVsfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9uYXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzaWRlYmFyLWZvb3RlclwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJzaWRlYmFyLXRvZ2dsZVwiIG9uQ2xpY2s9eygpID0+IHNldENvbGxhcHNlZCghY29sbGFwc2VkKX0+XG4gICAgICAgICAgICAgIHtjb2xsYXBzZWQgPyAn4oaSJyA6ICfihpAg5pS26LW36I+c5Y2VJ31cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgbWFpbi1jb250ZW50ICR7Y29sbGFwc2VkID8gJ2NvbGxhcHNlZCcgOiAnJ31gfT5cbiAgICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cInRvcC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGVhZGVyLWxlZnRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaGVhZGVyLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3Zpc2libGVNZW51cy5maW5kKG0gPT4gcGF0aG5hbWUgPT09IG0ucGF0aCB8fCAobS5rZXkgIT09ICdkYXNoYm9hcmQnICYmIHBhdGhuYW1lLnN0YXJ0c1dpdGgobS5wYXRoKSkpPy5sYWJlbCB8fCAn5bel5L2c5Y+wJ31cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhlYWRlci1yaWdodFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXItaW5mb1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXNlci1hdmF0YXJcIj57dXNlcj8ucmVhbF9uYW1lPy5bMF19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXNlci1uYW1lXCI+e3VzZXI/LnJlYWxfbmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInVzZXItcm9sZVwiPntST0xFX05BTUVTW3VzZXI/LnJvbGVdIHx8IHVzZXI/LnJvbGV9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJsb2dvdXQtYnRuXCIgb25DbGljaz17aGFuZGxlTG9nb3V0fT7pgIDlh7rnmbvlvZU8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvaGVhZGVyPlxuICAgICAgICAgIDxtYWluIGNsYXNzTmFtZT1cInBhZ2UtY29udGVudFwiPlxuICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgIDwvbWFpbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L1VzZXJDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiY3JlYXRlQ29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VSb3V0ZXIiLCJ1c2VQYXRobmFtZSIsImdldFRva2VuIiwiY2xlYXJUb2tlbiIsImdldFVzZXIiLCJhdXRoRmV0Y2giLCJST0xFX05BTUVTIiwiVXNlckNvbnRleHQiLCJ1c2VVc2VyIiwiQUxMX01FTlVTIiwia2V5IiwibGFiZWwiLCJpY29uIiwicGF0aCIsIkRhc2hib2FyZExheW91dCIsImNoaWxkcmVuIiwidmlzaWJsZU1lbnVzIiwidXNlciIsInJvdXRlciIsInBhdGhuYW1lIiwic2V0VXNlciIsInBlcm1pc3Npb25zIiwic2V0UGVybWlzc2lvbnMiLCJjb2xsYXBzZWQiLCJzZXRDb2xsYXBzZWQiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsInRva2VuIiwicmVwbGFjZSIsInRoZW4iLCJyIiwianNvbiIsImRhdGEiLCJlcnJvciIsImNhdGNoIiwiaGFuZGxlTG9nb3V0IiwiZmlsdGVyIiwibWVudSIsInJvbGUiLCJwZXJtIiwiZmluZCIsInAiLCJtZW51X2tleSIsInZpc2libGUiLCJkaXYiLCJzdHlsZSIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJtaW5IZWlnaHQiLCJjbGFzc05hbWUiLCJQcm92aWRlciIsInZhbHVlIiwiYXNpZGUiLCJzcGFuIiwibmF2IiwibWFwIiwiYSIsImhyZWYiLCJzdGFydHNXaXRoIiwib25DbGljayIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInB1c2giLCJidXR0b24iLCJoZWFkZXIiLCJtIiwicmVhbF9uYW1lIiwibWFpbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/app/dashboard/layout.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/lib/auth-client.js":
|
||
/*!********************************!*\
|
||
!*** ./src/lib/auth-client.js ***!
|
||
\********************************/
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ROLE_NAMES: function() { return /* binding */ ROLE_NAMES; },\n/* harmony export */ STATUS_COLORS: function() { return /* binding */ STATUS_COLORS; },\n/* harmony export */ STATUS_NAMES: function() { return /* binding */ STATUS_NAMES; },\n/* harmony export */ authFetch: function() { return /* binding */ authFetch; },\n/* harmony export */ clearToken: function() { return /* binding */ clearToken; },\n/* harmony export */ getToken: function() { return /* binding */ getToken; },\n/* harmony export */ getUser: function() { return /* binding */ getUser; },\n/* harmony export */ setToken: function() { return /* binding */ setToken; },\n/* harmony export */ setUser: function() { return /* binding */ setUser; }\n/* harmony export */ });\n// 客户端认证工具函数\n// 获取存储的 Token\nfunction getToken() {\n if (false) {}\n return localStorage.getItem(\"token\");\n}\n// 设置 Token\nfunction setToken(token) {\n localStorage.setItem(\"token\", token);\n}\n// 清除 Token\nfunction clearToken() {\n localStorage.removeItem(\"token\");\n localStorage.removeItem(\"user\");\n}\n// 获取存储的用户信息\nfunction getUser() {\n if (false) {}\n const user = localStorage.getItem(\"user\");\n return user ? JSON.parse(user) : null;\n}\n// 设置用户信息\nfunction setUser(user) {\n localStorage.setItem(\"user\", JSON.stringify(user));\n}\n// 带认证的 fetch 请求\nasync function authFetch(url) {\n let options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n const token = getToken();\n const headers = {\n ...options.headers\n };\n if (token) {\n headers[\"Authorization\"] = \"Bearer \".concat(token);\n }\n // 如果不是 FormData,设置 Content-Type\n if (!(options.body instanceof FormData)) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n const response = await fetch(url, {\n ...options,\n headers\n });\n // 401 未授权,跳转登录\n if (response.status === 401) {\n clearToken();\n if (true) {\n window.location.href = \"/login\";\n }\n throw new Error(\"未登录或登录已过期\");\n }\n return response;\n}\n// 角色中文名称映射\nconst ROLE_NAMES = {\n admin: \"系统管理员\",\n employee: \"员工\",\n supervisor: \"部门主管\",\n finance: \"财务部\",\n secretary: \"秘书长\"\n};\n// 状态中文名称映射\nconst STATUS_NAMES = {\n draft: \"草稿\",\n pending_supervisor: \"待初审\",\n pending_finance: \"待财务审核\",\n pending_secretary: \"待终审\",\n approved: \"已通过\",\n rejected: \"已驳回\"\n};\n// 状态颜色映射\nconst STATUS_COLORS = {\n draft: \"#6b7280\",\n pending_supervisor: \"#3b82f6\",\n pending_finance: \"#f59e0b\",\n pending_secretary: \"#8b5cf6\",\n approved: \"#10b981\",\n rejected: \"#ef4444\"\n};\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9saWIvYXV0aC1jbGllbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsWUFBWTtBQUVaLGNBQWM7QUFDUCxTQUFTQTtJQUNkLElBQUksS0FBa0IsRUFBYSxFQUFZO0lBQy9DLE9BQU9DLGFBQWFDLE9BQU8sQ0FBQztBQUM5QjtBQUVBLFdBQVc7QUFDSixTQUFTQyxTQUFTQyxLQUFLO0lBQzVCSCxhQUFhSSxPQUFPLENBQUMsU0FBU0Q7QUFDaEM7QUFFQSxXQUFXO0FBQ0osU0FBU0U7SUFDZEwsYUFBYU0sVUFBVSxDQUFDO0lBQ3hCTixhQUFhTSxVQUFVLENBQUM7QUFDMUI7QUFFQSxZQUFZO0FBQ0wsU0FBU0M7SUFDZCxJQUFJLEtBQWtCLEVBQWEsRUFBWTtJQUMvQyxNQUFNQyxPQUFPUixhQUFhQyxPQUFPLENBQUM7SUFDbEMsT0FBT08sT0FBT0MsS0FBS0MsS0FBSyxDQUFDRixRQUFRO0FBQ25DO0FBRUEsU0FBUztBQUNGLFNBQVNHLFFBQVFILElBQUk7SUFDMUJSLGFBQWFJLE9BQU8sQ0FBQyxRQUFRSyxLQUFLRyxTQUFTLENBQUNKO0FBQzlDO0FBRUEsZ0JBQWdCO0FBQ1QsZUFBZUssVUFBVUMsR0FBRztRQUFFQyxVQUFBQSxpRUFBVSxDQUFDO0lBQzlDLE1BQU1aLFFBQVFKO0lBQ2QsTUFBTWlCLFVBQVU7UUFDZCxHQUFHRCxRQUFRQyxPQUFPO0lBQ3BCO0lBRUEsSUFBSWIsT0FBTztRQUNUYSxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsVUFBZ0IsT0FBTmI7SUFDdkM7SUFFQSxnQ0FBZ0M7SUFDaEMsSUFBSSxDQUFFWSxDQUFBQSxRQUFRRSxJQUFJLFlBQVlDLFFBQU8sR0FBSTtRQUN2Q0YsT0FBTyxDQUFDLGVBQWUsR0FBRztJQUM1QjtJQUVBLE1BQU1HLFdBQVcsTUFBTUMsTUFBTU4sS0FBSztRQUNoQyxHQUFHQyxPQUFPO1FBQ1ZDO0lBQ0Y7SUFFQSxlQUFlO0lBQ2YsSUFBSUcsU0FBU0UsTUFBTSxLQUFLLEtBQUs7UUFDM0JoQjtRQUNBLElBQUksSUFBa0IsRUFBYTtZQUNqQ2lCLE9BQU9DLFFBQVEsQ0FBQ0MsSUFBSSxHQUFHO1FBQ3pCO1FBQ0EsTUFBTSxJQUFJQyxNQUFNO0lBQ2xCO0lBRUEsT0FBT047QUFDVDtBQUVBLFdBQVc7QUFDSixNQUFNTyxhQUFhO0lBQ3hCQyxPQUFPO0lBQ1BDLFVBQVU7SUFDVkMsWUFBWTtJQUNaQyxTQUFTO0lBQ1RDLFdBQVc7QUFDYixFQUFFO0FBRUYsV0FBVztBQUNKLE1BQU1DLGVBQWU7SUFDMUJDLE9BQU87SUFDUEMsb0JBQW9CO0lBQ3BCQyxpQkFBaUI7SUFDakJDLG1CQUFtQjtJQUNuQkMsVUFBVTtJQUNWQyxVQUFVO0FBQ1osRUFBRTtBQUVGLFNBQVM7QUFDRixNQUFNQyxnQkFBZ0I7SUFDM0JOLE9BQU87SUFDUEMsb0JBQW9CO0lBQ3BCQyxpQkFBaUI7SUFDakJDLG1CQUFtQjtJQUNuQkMsVUFBVTtJQUNWQyxVQUFVO0FBQ1osRUFBRSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9zcmMvbGliL2F1dGgtY2xpZW50LmpzPzdlY2UiXSwic291cmNlc0NvbnRlbnQiOlsiLy8g5a6i5oi356uv6K6k6K+B5bel5YW35Ye95pWwXG5cbi8vIOiOt+WPluWtmOWCqOeahCBUb2tlblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRva2VuKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsO1xuICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJyk7XG59XG5cbi8vIOiuvue9riBUb2tlblxuZXhwb3J0IGZ1bmN0aW9uIHNldFRva2VuKHRva2VuKSB7XG4gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0b2tlbicsIHRva2VuKTtcbn1cblxuLy8g5riF6ZmkIFRva2VuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJUb2tlbigpIHtcbiAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3Rva2VuJyk7XG4gIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd1c2VyJyk7XG59XG5cbi8vIOiOt+WPluWtmOWCqOeahOeUqOaIt+S/oeaBr1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVzZXIoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHVzZXIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcicpO1xuICByZXR1cm4gdXNlciA/IEpTT04ucGFyc2UodXNlcikgOiBudWxsO1xufVxuXG4vLyDorr7nva7nlKjmiLfkv6Hmga9cbmV4cG9ydCBmdW5jdGlvbiBzZXRVc2VyKHVzZXIpIHtcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3VzZXInLCBKU09OLnN0cmluZ2lmeSh1c2VyKSk7XG59XG5cbi8vIOW4puiupOivgeeahCBmZXRjaCDor7fmsYJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhdXRoRmV0Y2godXJsLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRUb2tlbigpO1xuICBjb25zdCBoZWFkZXJzID0ge1xuICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgfTtcbiAgXG4gIGlmICh0b2tlbikge1xuICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHt0b2tlbn1gO1xuICB9XG4gIFxuICAvLyDlpoLmnpzkuI3mmK8gRm9ybURhdGHvvIzorr7nva4gQ29udGVudC1UeXBlXG4gIGlmICghKG9wdGlvbnMuYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGhlYWRlcnMsXG4gIH0pO1xuXG4gIC8vIDQwMSDmnKrmjojmnYPvvIzot7PovaznmbvlvZVcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgY2xlYXJUb2tlbigpO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnL2xvZ2luJztcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCfmnKrnmbvlvZXmiJbnmbvlvZXlt7Lov4fmnJ8nKTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLy8g6KeS6Imy5Lit5paH5ZCN56ew5pig5bCEXG5leHBvcnQgY29uc3QgUk9MRV9OQU1FUyA9IHtcbiAgYWRtaW46ICfns7vnu5/nrqHnkIblkZgnLFxuICBlbXBsb3llZTogJ+WRmOW3pScsXG4gIHN1cGVydmlzb3I6ICfpg6jpl6jkuLvnrqEnLFxuICBmaW5hbmNlOiAn6LSi5Yqh6YOoJyxcbiAgc2VjcmV0YXJ5OiAn56eY5Lmm6ZW/Jyxcbn07XG5cbi8vIOeKtuaAgeS4reaWh+WQjeensOaYoOWwhFxuZXhwb3J0IGNvbnN0IFNUQVRVU19OQU1FUyA9IHtcbiAgZHJhZnQ6ICfojYnnqL8nLFxuICBwZW5kaW5nX3N1cGVydmlzb3I6ICflvoXliJ3lrqEnLFxuICBwZW5kaW5nX2ZpbmFuY2U6ICflvoXotKLliqHlrqHmoLgnLFxuICBwZW5kaW5nX3NlY3JldGFyeTogJ+W+hee7iOWuoScsXG4gIGFwcHJvdmVkOiAn5bey6YCa6L+HJyxcbiAgcmVqZWN0ZWQ6ICflt7LpqbPlm54nLFxufTtcblxuLy8g54q25oCB6aKc6Imy5pig5bCEXG5leHBvcnQgY29uc3QgU1RBVFVTX0NPTE9SUyA9IHtcbiAgZHJhZnQ6ICcjNmI3MjgwJyxcbiAgcGVuZGluZ19zdXBlcnZpc29yOiAnIzNiODJmNicsXG4gIHBlbmRpbmdfZmluYW5jZTogJyNmNTllMGInLFxuICBwZW5kaW5nX3NlY3JldGFyeTogJyM4YjVjZjYnLFxuICBhcHByb3ZlZDogJyMxMGI5ODEnLFxuICByZWplY3RlZDogJyNlZjQ0NDQnLFxufTtcbiJdLCJuYW1lcyI6WyJnZXRUb2tlbiIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJzZXRUb2tlbiIsInRva2VuIiwic2V0SXRlbSIsImNsZWFyVG9rZW4iLCJyZW1vdmVJdGVtIiwiZ2V0VXNlciIsInVzZXIiLCJKU09OIiwicGFyc2UiLCJzZXRVc2VyIiwic3RyaW5naWZ5IiwiYXV0aEZldGNoIiwidXJsIiwib3B0aW9ucyIsImhlYWRlcnMiLCJib2R5IiwiRm9ybURhdGEiLCJyZXNwb25zZSIsImZldGNoIiwic3RhdHVzIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiRXJyb3IiLCJST0xFX05BTUVTIiwiYWRtaW4iLCJlbXBsb3llZSIsInN1cGVydmlzb3IiLCJmaW5hbmNlIiwic2VjcmV0YXJ5IiwiU1RBVFVTX05BTUVTIiwiZHJhZnQiLCJwZW5kaW5nX3N1cGVydmlzb3IiLCJwZW5kaW5nX2ZpbmFuY2UiLCJwZW5kaW5nX3NlY3JldGFyeSIsImFwcHJvdmVkIiwicmVqZWN0ZWQiLCJTVEFUVVNfQ09MT1JTIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/lib/auth-client.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js":
|
||
/*!****************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js ***!
|
||
\****************************************************************************************/
|
||
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * react-jsx-dev-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider'); // TODO: Delete with enableRenderableContext\n\nvar REACT_CONSUMER_TYPE = Symbol.for('react.consumer');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar REACT_CACHE_TYPE = Symbol.for('react.cache');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\nvar enableRenderableContext = false;\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false;\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n}\n\nvar REACT_CLIENT_REFERENCE$2 = Symbol.for('react.client.reference'); // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n if (typeof type === 'function') {\n if (type.$$typeof === REACT_CLIENT_REFERENCE$2) {\n // TODO: Create a convention for naming client references with debug info.\n return null;\n }\n\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n case REACT_CACHE_TYPE:\n {\n return 'Cache';\n }\n\n }\n\n if (typeof type === 'object') {\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n switch (type.$$typeof) {\n case REACT_PROVIDER_TYPE:\n {\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n }\n\n case REACT_CONTEXT_TYPE:\n var context = type;\n\n {\n return getContextName(context) + '.Consumer';\n }\n\n case REACT_CONSUMER_TYPE:\n {\n return null;\n }\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n }\n }\n\n return null;\n}\n\n// $FlowFixMe[method-unbinding]\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar assign = Object.assign;\n\n/*\n * The `'' + value` pattern (used in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; // $FlowFixMe[incompatible-return]\n\n return type;\n }\n} // $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar REACT_CLIENT_REFERENCE$1 = Symbol.for('react.client.reference');\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || enableRenderableContext || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_CLIENT_REFERENCE$1 || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n/**\n * Leverages native browser/VM stack frames to get proper details (e.g.\n * filename, line + col number) for a single component in a component stack. We\n * do this by:\n * (1) throwing and catching an error in the function - this will be our\n * control error.\n * (2) calling the component which will eventually throw an error that we'll\n * catch - this will be our sample error.\n * (3) diffing the control and sample error stacks to find the stack frame\n * which represents our component.\n */\n\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if (!fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n /**\n * Finding a common stack frame between sample and control errors can be\n * tricky given the different types and levels of stack trace truncation from\n * different JS VMs. So instead we'll attempt to control what that common\n * frame should be through this object method:\n * Having both the sample and control errors be in the function under the\n * `DescribeNativeComponentFrameRoot` property, + setting the `name` and\n * `displayName` properties of the function ensures that a stack\n * frame exists that has the method name `DescribeNativeComponentFrameRoot` in\n * it for both control and sample stacks.\n */\n\n\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n var control;\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe[prop-missing]\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n } // $FlowFixMe[prop-missing] found when upgrading Flow\n\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n } // TODO(luna): This will currently only throw if the function component\n // tries to access React/ReactDOM/props. We should probably make this throw\n // in simple components too\n\n\n var maybePromise = fn(); // If the function component returns a promise, it's likely an async\n // component, which we don't yet support. Attach a noop catch handler to\n // silence the error.\n // TODO: Implement component stacks for async client components?\n\n if (maybePromise && typeof maybePromise.catch === 'function') {\n maybePromise.catch(function () {});\n }\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n return [sample.stack, control.stack];\n }\n }\n\n return [null, null];\n }\n }; // $FlowFixMe[prop-missing]\n\n RunInRootFrame.DetermineComponentFrameRoot.displayName = 'DetermineComponentFrameRoot';\n var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, 'name'); // Before ES6, the `name` property was not configurable.\n\n if (namePropDescriptor && namePropDescriptor.configurable) {\n // V8 utilizes a function's `name` property when generating a stack trace.\n Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, // Configurable properties can be updated even if its writable descriptor\n // is set to `false`.\n // $FlowFixMe[cannot-write]\n 'name', {\n value: 'DetermineComponentFrameRoot'\n });\n }\n\n try {\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n\n if (sampleStack && controlStack) {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sampleStack.split('\\n');\n var controlLines = controlStack.split('\\n');\n var s = 0;\n var c = 0;\n\n while (s < sampleLines.length && !sampleLines[s].includes('DetermineComponentFrameRoot')) {\n s++;\n }\n\n while (c < controlLines.length && !controlLines[c].includes('DetermineComponentFrameRoot')) {\n c++;\n } // We couldn't find our intentionally injected common root frame, attempt\n // to find another common root frame by search from the bottom of the\n // control stack...\n\n\n if (s === sampleLines.length || c === controlLines.length) {\n s = sampleLines.length - 1;\n c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n if (true) {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\nvar REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference');\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nfunction ReactElement(type, key, _ref, self, source, owner, props) {\n var ref;\n\n {\n ref = _ref;\n }\n\n var element;\n\n {\n // In prod, `ref` is a regular property. It will be removed in a\n // future release.\n element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n }\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // debugInfo contains Server Component debug information.\n\n Object.defineProperty(element, '_debugInfo', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: null\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n}\nvar didWarnAboutKeySpread = {};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV$1(type, config, maybeKey, isStaticChildren, source, self) {\n {\n if (!isValidElementType(type)) {\n // This is an invalid element type.\n //\n // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n } else {\n // This is a valid element type.\n // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing\n // errors. We don't want exception behavior to differ between dev and\n // prod. (Rendering will throw with a helpful message and as soon as the\n // type is fixed, the key warnings will appear.)\n var children = config.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n } // Warn about key spread regardless of whether the type is valid.\n\n\n if (hasOwnProperty.call(config, 'key')) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return k !== 'key';\n });\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n {\n ref = config.ref;\n }\n\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && // Skip over reserved prop names\n propName !== 'key' && (propName !== 'ref')) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n var element = ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n }\n\n return element;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner.current) {\n var name = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object' || !node) {\n return;\n }\n\n if (node.$$typeof === REACT_CLIENT_REFERENCE) ; else if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nvar ownerHasKeyUseWarning = {};\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement(null);\n }\n}\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = getComponentNameFromType(parentType);\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n // TODO: Move this to render phase instead of at element creation.\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement(null);\n }\n }\n}\n\nvar jsxDEV = jsxDEV$1 ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsxDEV = jsxDEV;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWIsSUFBSSxJQUFxQztBQUN6QztBQUNBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxzR0FBMEI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RDs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlHQUFpRyxlQUFlO0FBQ2hIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVIsa0RBQWtEO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLDRCQUE0QjtBQUM1QjtBQUNBLHFDQUFxQzs7QUFFckMsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBLHFFQUFxRTs7QUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHOztBQUVsRztBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZCxXQUFXLGVBQWU7QUFDMUIsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtB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QUFXLGNBQWM7QUFDekI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQjtBQUNoQixjQUFjO0FBQ2QsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcz8yYzEzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9yZWFjdFwiKTtcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50Jyk7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKTtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKTtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKTsgLy8gVE9ETzogRGVsZXRlIHdpdGggZW5hYmxlUmVuZGVyYWJsZUNvbnRleHRcblxudmFyIFJFQUNUX0NPTlNVTUVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jb25zdW1lcicpO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xudmFyIFJFQUNUX0NBQ0hFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jYWNoZScpO1xudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSBSZWFjdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcblxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cblxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBTdHJpbmcoaXRlbSk7XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxudmFyIGVuYWJsZUNhY2hlRWxlbWVudCA9IGZhbHNlO1xudmFyIGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nID0gZmFsc2U7IC8vIE5vIGtub3duIGJ1Z3MsIGJ1dCBuZWVkcyBwZXJmb3JtYW5jZSB0ZXN0aW5nXG5cbnZhciBlbmFibGVMZWdhY3lIaWRkZW4gPSBmYWxzZTsgLy8gRW5hYmxlcyB1bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayBmZWF0dXJlIGluIEZpYmVyXG52YXIgZW5hYmxlUmVuZGVyYWJsZUNvbnRleHQgPSBmYWxzZTtcbi8vIHN0dWZmLiBJbnRlbmRlZCB0byBlbmFibGUgUmVhY3QgY29yZSBtZW1iZXJzIHRvIG1vcmUgZWFzaWx5IGRlYnVnIHNjaGVkdWxpbmdcbi8vIGlzc3VlcyBpbiBERVYgYnVpbGRzLlxuXG52YXIgZW5hYmxlRGVidWdUcmFjaW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZGlzcGxheU5hbWUgPSBvdXRlclR5cGUuZGlzcGxheU5hbWU7XG5cbiAgaWYgKGRpc3BsYXlOYW1lKSB7XG4gICAgcmV0dXJuIGRpc3BsYXlOYW1lO1xuICB9XG5cbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZTtcbn0gLy8gS2VlcCBpbiBzeW5jIHdpdGggcmVhY3QtcmVjb25jaWxlci9nZXRDb21wb25lbnROYW1lRnJvbUZpYmVyXG5cblxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCc7XG59XG5cbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDIgPSBTeW1ib2wuZm9yKCdyZWFjdC5jbGllbnQucmVmZXJlbmNlJyk7IC8vIE5vdGUgdGhhdCB0aGUgcmVjb25jaWxlciBwYWNrYWdlIHNob3VsZCBnZW5lcmFsbHkgcHJlZmVyIHRvIHVzZSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKCkgaW5zdGVhZC5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMikge1xuICAgICAgLy8gVE9ETzogQ3JlYXRlIGEgY29udmVudGlvbiBmb3IgbmFtaW5nIGNsaWVudCByZWZlcmVuY2VzIHdpdGggZGVidWcgaW5mby5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcblxuICAgIGNhc2UgUkVBQ1RfQ0FDSEVfVFlQRTpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICdDYWNoZSc7XG4gICAgICB9XG5cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICB7XG4gICAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcblxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICB2YXIgb3V0ZXJOYW1lID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsO1xuXG4gICAgICAgIGlmIChvdXRlck5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gb3V0ZXJOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdNZW1vJztcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLypcbiAqIFRoZSBgJycgKyB2YWx1ZWAgcGF0dGVybiAodXNlZCBpbiBwZXJmLXNlbnNpdGl2ZSBjb2RlKSB0aHJvd3MgZm9yIFN5bWJvbFxuICogYW5kIFRlbXBvcmFsLiogdHlwZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMjA2NC5cbiAqXG4gKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHdpbGwgdGhyb3cgYW4gZWFzaWVyLXRvLXVuZGVyc3RhbmQsXG4gKiBlYXNpZXItdG8tZGVidWcgZXhjZXB0aW9uIHdpdGggYSBjbGVhciBlcnJvcnMgbWVzc2FnZSBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlXG4gKiBwcm9ibGVtLiAoSW5zdGVhZCBvZiBhIGNvbmZ1c2luZyBleGNlcHRpb24gdGhyb3duIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb25cbiAqIG9mIHRoZSBgdmFsdWVgIG9iamVjdCkuXG4gKi9cbi8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5mdW5jdGlvbiB0eXBlTmFtZSh2YWx1ZSkge1xuICB7XG4gICAgLy8gdG9TdHJpbmdUYWcgaXMgbmVlZGVkIGZvciBuYW1lc3BhY2VkIHR5cGVzIGxpa2UgVGVtcG9yYWwuSW5zdGFudFxuICAgIHZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLnRvU3RyaW5nVGFnO1xuICAgIHZhciB0eXBlID0gaGFzVG9TdHJpbmdUYWcgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxufSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dIG9ubHkgY2FsbGVkIGluIERFViwgc28gdm9pZCByZXR1cm4gaXMgbm90IHBvc3NpYmxlLlxuXG5cbmZ1bmN0aW9uIHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSB7XG4gIHtcbiAgICB0cnkge1xuICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIC8vIElmIHlvdSBlbmRlZCB1cCBoZXJlIGJ5IGZvbGxvd2luZyBhbiBleGNlcHRpb24gY2FsbCBzdGFjaywgaGVyZSdzIHdoYXQnc1xuICAvLyBoYXBwZW5lZDogeW91IHN1cHBsaWVkIGFuIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gUmVhY3QgKGFzIGEgcHJvcCwga2V5LFxuICAvLyBET00gYXR0cmlidXRlLCBDU1MgcHJvcGVydHksIHN0cmluZyByZWYsIGV0Yy4pIGFuZCB3aGVuIFJlYWN0IHRyaWVkIHRvXG4gIC8vIGNvZXJjZSBpdCB0byBhIHN0cmluZyB1c2luZyBgJycgKyB2YWx1ZWAsIGFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duLlxuICAvL1xuICAvLyBUaGUgbW9zdCBjb21tb24gdHlwZXMgdGhhdCB3aWxsIGNhdXNlIHRoaXMgZXhjZXB0aW9uIGFyZSBgU3ltYm9sYCBpbnN0YW5jZXNcbiAgLy8gYW5kIFRlbXBvcmFsIG9iamVjdHMgbGlrZSBgVGVtcG9yYWwuSW5zdGFudGAuIEJ1dCBhbnkgb2JqZWN0IHRoYXQgaGFzIGFcbiAgLy8gYHZhbHVlT2ZgIG9yIGBbU3ltYm9sLnRvUHJpbWl0aXZlXWAgbWV0aG9kIHRoYXQgdGhyb3dzIHdpbGwgYWxzbyBjYXVzZSB0aGlzXG4gIC8vIGV4Y2VwdGlvbi4gKExpYnJhcnkgYXV0aG9ycyBkbyB0aGlzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSB1c2luZyBidWlsdC1pblxuICAvLyBudW1lcmljIG9wZXJhdG9ycyBsaWtlIGArYCBvciBjb21wYXJpc29uIG9wZXJhdG9ycyBsaWtlIGA+PWAgYmVjYXVzZSBjdXN0b21cbiAgLy8gbWV0aG9kcyBhcmUgbmVlZGVkIHRvIHBlcmZvcm0gYWNjdXJhdGUgYXJpdGhtZXRpYyBvciBjb21wYXJpc29uLilcbiAgLy9cbiAgLy8gVG8gZml4IHRoZSBwcm9ibGVtLCBjb2VyY2UgdGhpcyBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIGJlZm9yZVxuICAvLyBwYXNzaW5nIGl0IHRvIFJlYWN0LiBUaGUgbW9zdCByZWxpYWJsZSB3YXkgaXMgdXN1YWxseSBgU3RyaW5nKHZhbHVlKWAuXG4gIC8vXG4gIC8vIFRvIGZpbmQgd2hpY2ggdmFsdWUgaXMgdGhyb3dpbmcsIGNoZWNrIHRoZSBicm93c2VyIG9yIGRlYnVnZ2VyIGNvbnNvbGUuXG4gIC8vIEJlZm9yZSB0aGlzIGV4Y2VwdGlvbiB3YXMgdGhyb3duLCB0aGVyZSBzaG91bGQgYmUgYGNvbnNvbGUuZXJyb3JgIG91dHB1dFxuICAvLyB0aGF0IHNob3dzIHRoZSB0eXBlIChTeW1ib2wsIFRlbXBvcmFsLlBsYWluRGF0ZSwgZXRjLikgdGhhdCBjYXVzZWQgdGhlXG4gIC8vIHByb2JsZW0gYW5kIGhvdyB0aGF0IHR5cGUgd2FzIHVzZWQ6IGtleSwgYXRycmlidXRlLCBpbnB1dCB2YWx1ZSBwcm9wLCBldGMuXG4gIC8vIEluIG1vc3QgY2FzZXMsIHRoaXMgY29uc29sZSBvdXRwdXQgYWxzbyBzaG93cyB0aGUgY29tcG9uZW50IGFuZCBpdHNcbiAgLy8gYW5jZXN0b3IgY29tcG9uZW50cyB3aGVyZSB0aGUgZXhjZXB0aW9uIGhhcHBlbmVkLlxuICAvL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBjaGVja0tleVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIHtcbiAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKSB7XG4gICAgICBlcnJvcignVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLicgKyAnIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLicsIHR5cGVOYW1lKHZhbHVlKSk7XG5cbiAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpOyAvLyB0aHJvdyAodG8gaGVscCBjYWxsZXJzIGZpbmQgdHJvdWJsZXNob290aW5nIGNvbW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG52YXIgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQxID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IGVuYWJsZURlYnVnVHJhY2luZyAgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCBlbmFibGVMZWdhY3lIaWRkZW4gIHx8IHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICB8fCBlbmFibGVDYWNoZUVsZW1lbnQgIHx8IGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgZW5hYmxlUmVuZGVyYWJsZUNvbnRleHQgIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gVGhpcyBuZWVkcyB0byBpbmNsdWRlIGFsbCBwb3NzaWJsZSBtb2R1bGUgcmVmZXJlbmNlIG9iamVjdFxuICAgIC8vIHR5cGVzIHN1cHBvcnRlZCBieSBhbnkgRmxpZ2h0IGNvbmZpZ3VyYXRpb24gYW55d2hlcmUgc2luY2VcbiAgICAvLyB3ZSBkb24ndCBrbm93IHdoaWNoIEZsaWdodCBidWlsZCB0aGlzIHdpbGwgZW5kIHVwIGJlaW5nIHVzZWRcbiAgICAvLyB3aXRoLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSB8fCB0eXBlLmdldE1vZHVsZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxuXG5mdW5jdGlvbiBpc0FycmF5KGEpIHtcbiAgcmV0dXJuIGlzQXJyYXlJbXBsKGEpO1xufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cbi8qKlxuICogTGV2ZXJhZ2VzIG5hdGl2ZSBicm93c2VyL1ZNIHN0YWNrIGZyYW1lcyB0byBnZXQgcHJvcGVyIGRldGFpbHMgKGUuZy5cbiAqIGZpbGVuYW1lLCBsaW5lICsgY29sIG51bWJlcikgZm9yIGEgc2luZ2xlIGNvbXBvbmVudCBpbiBhIGNvbXBvbmVudCBzdGFjay4gV2VcbiAqIGRvIHRoaXMgYnk6XG4gKiAgICgxKSB0aHJvd2luZyBhbmQgY2F0Y2hpbmcgYW4gZXJyb3IgaW4gdGhlIGZ1bmN0aW9uIC0gdGhpcyB3aWxsIGJlIG91clxuICogICAgICAgY29udHJvbCBlcnJvci5cbiAqICAgKDIpIGNhbGxpbmcgdGhlIGNvbXBvbmVudCB3aGljaCB3aWxsIGV2ZW50dWFsbHkgdGhyb3cgYW4gZXJyb3IgdGhhdCB3ZSdsbFxuICogICAgICAgY2F0Y2ggLSB0aGlzIHdpbGwgYmUgb3VyIHNhbXBsZSBlcnJvci5cbiAqICAgKDMpIGRpZmZpbmcgdGhlIGNvbnRyb2wgYW5kIHNhbXBsZSBlcnJvciBzdGFja3MgdG8gZmluZCB0aGUgc3RhY2sgZnJhbWVcbiAqICAgICAgIHdoaWNoIHJlcHJlc2VudHMgb3VyIGNvbXBvbmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cbiAgLyoqXG4gICAqIEZpbmRpbmcgYSBjb21tb24gc3RhY2sgZnJhbWUgYmV0d2VlbiBzYW1wbGUgYW5kIGNvbnRyb2wgZXJyb3JzIGNhbiBiZVxuICAgKiB0cmlja3kgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcyBhbmQgbGV2ZWxzIG9mIHN0YWNrIHRyYWNlIHRydW5jYXRpb24gZnJvbVxuICAgKiBkaWZmZXJlbnQgSlMgVk1zLiBTbyBpbnN0ZWFkIHdlJ2xsIGF0dGVtcHQgdG8gY29udHJvbCB3aGF0IHRoYXQgY29tbW9uXG4gICAqIGZyYW1lIHNob3VsZCBiZSB0aHJvdWdoIHRoaXMgb2JqZWN0IG1ldGhvZDpcbiAgICogSGF2aW5nIGJvdGggdGhlIHNhbXBsZSBhbmQgY29udHJvbCBlcnJvcnMgYmUgaW4gdGhlIGZ1bmN0aW9uIHVuZGVyIHRoZVxuICAgKiBgRGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZVJvb3RgIHByb3BlcnR5LCArIHNldHRpbmcgdGhlIGBuYW1lYCBhbmRcbiAgICogYGRpc3BsYXlOYW1lYCBwcm9wZXJ0aWVzIG9mIHRoZSBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgYSBzdGFja1xuICAgKiBmcmFtZSBleGlzdHMgdGhhdCBoYXMgdGhlIG1ldGhvZCBuYW1lIGBEZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lUm9vdGAgaW5cbiAgICogaXQgZm9yIGJvdGggY29udHJvbCBhbmQgc2FtcGxlIHN0YWNrcy5cbiAgICovXG5cblxuICB2YXIgUnVuSW5Sb290RnJhbWUgPSB7XG4gICAgRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290OiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY29udHJvbDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5cblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgfSAvLyBUT0RPKGx1bmEpOiBUaGlzIHdpbGwgY3VycmVudGx5IG9ubHkgdGhyb3cgaWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAgICAgICAgIC8vIHRyaWVzIHRvIGFjY2VzcyBSZWFjdC9SZWFjdERPTS9wcm9wcy4gV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyB0aHJvd1xuICAgICAgICAgIC8vIGluIHNpbXBsZSBjb21wb25lbnRzIHRvb1xuXG5cbiAgICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gZm4oKTsgLy8gSWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudCByZXR1cm5zIGEgcHJvbWlzZSwgaXQncyBsaWtlbHkgYW4gYXN5bmNcbiAgICAgICAgICAvLyBjb21wb25lbnQsIHdoaWNoIHdlIGRvbid0IHlldCBzdXBwb3J0LiBBdHRhY2ggYSBub29wIGNhdGNoIGhhbmRsZXIgdG9cbiAgICAgICAgICAvLyBzaWxlbmNlIHRoZSBlcnJvci5cbiAgICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgY29tcG9uZW50IHN0YWNrcyBmb3IgYXN5bmMgY2xpZW50IGNvbXBvbmVudHM/XG5cbiAgICAgICAgICBpZiAobWF5YmVQcm9taXNlICYmIHR5cGVvZiBtYXliZVByb21pc2UuY2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG1heWJlUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICAgICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIFtzYW1wbGUuc3RhY2ssIGNvbnRyb2wuc3RhY2tdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgfVxuICB9OyAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cblxuICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWUgPSAnRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290JztcbiAgdmFyIG5hbWVQcm9wRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LCAnbmFtZScpOyAvLyBCZWZvcmUgRVM2LCB0aGUgYG5hbWVgIHByb3BlcnR5IHdhcyBub3QgY29uZmlndXJhYmxlLlxuXG4gIGlmIChuYW1lUHJvcERlc2NyaXB0b3IgJiYgbmFtZVByb3BEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgIC8vIFY4IHV0aWxpemVzIGEgZnVuY3Rpb24ncyBgbmFtZWAgcHJvcGVydHkgd2hlbiBnZW5lcmF0aW5nIGEgc3RhY2sgdHJhY2UuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCwgLy8gQ29uZmlndXJhYmxlIHByb3BlcnRpZXMgY2FuIGJlIHVwZGF0ZWQgZXZlbiBpZiBpdHMgd3JpdGFibGUgZGVzY3JpcHRvclxuICAgIC8vIGlzIHNldCB0byBgZmFsc2VgLlxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuICAgICduYW1lJywge1xuICAgICAgdmFsdWU6ICdEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QnXG4gICAgfSk7XG4gIH1cblxuICB0cnkge1xuICAgIHZhciBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QoKSxcbiAgICAgICAgc2FtcGxlU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMF0sXG4gICAgICAgIGNvbnRyb2xTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclsxXTtcblxuICAgIGlmIChzYW1wbGVTdGFjayAmJiBjb250cm9sU3RhY2spIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZVN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sU3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSAwO1xuICAgICAgdmFyIGMgPSAwO1xuXG4gICAgICB3aGlsZSAocyA8IHNhbXBsZUxpbmVzLmxlbmd0aCAmJiAhc2FtcGxlTGluZXNbc10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIHMrKztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGMgPCBjb250cm9sTGluZXMubGVuZ3RoICYmICFjb250cm9sTGluZXNbY10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIGMrKztcbiAgICAgIH0gLy8gV2UgY291bGRuJ3QgZmluZCBvdXIgaW50ZW50aW9uYWxseSBpbmplY3RlZCBjb21tb24gcm9vdCBmcmFtZSwgYXR0ZW1wdFxuICAgICAgLy8gdG8gZmluZCBhbm90aGVyIGNvbW1vbiByb290IGZyYW1lIGJ5IHNlYXJjaCBmcm9tIHRoZSBib3R0b20gb2YgdGhlXG4gICAgICAvLyBjb250cm9sIHN0YWNrLi4uXG5cblxuICAgICAgaWYgKHMgPT09IHNhbXBsZUxpbmVzLmxlbmd0aCB8fCBjID09PSBjb250cm9sTGluZXMubGVuZ3RoKSB7XG4gICAgICAgIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgICBjLS07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7IC8vIElmIG91ciBjb21wb25lbnQgZnJhbWUgaXMgbGFiZWxlZCBcIjxhbm9ueW1vdXM+XCJcbiAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSBhIHVzZXItcHJvdmlkZWQgXCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICAgICAgLy8gc3BsaWNlIGl0IGluIHRvIG1ha2UgdGhlIHN0YWNrIG1vcmUgcmVhZGFibGUuXG5cblxuICAgICAgICAgICAgICAgIGlmIChmbi5kaXNwbGF5TmFtZSAmJiBfZnJhbWUuaW5jbHVkZXMoJzxhbm9ueW1vdXM+JykpIHtcbiAgICAgICAgICAgICAgICAgIF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKCc8YW5vbnltb3VzPicsIGZuLmRpc3BsYXlOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duO1xudmFyIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duO1xudmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG5cbntcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdDb21wb25lbnQgXCIlc1wiIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVmIFwiJXNcIi4gJyArICdTdXBwb3J0IGZvciBzdHJpbmcgcmVmcyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gJyArICdUaGlzIGNhc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uLiAnICsgJ1dlIGFzayB5b3UgdG8gbWFudWFsbHkgZml4IHRoaXMgY2FzZSBieSB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB7XG4gICAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duKSB7XG4gICAgICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZixcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxuZnVuY3Rpb24gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgX3JlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIHJlZjtcblxuICB7XG4gICAgcmVmID0gX3JlZjtcbiAgfVxuXG4gIHZhciBlbGVtZW50O1xuXG4gIHtcbiAgICAvLyBJbiBwcm9kLCBgcmVmYCBpcyBhIHJlZ3VsYXIgcHJvcGVydHkuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiBhXG4gICAgLy8gZnV0dXJlIHJlbGVhc2UuXG4gICAgZWxlbWVudCA9IHtcbiAgICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBrZXk6IGtleSxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICAgIF9vd25lcjogb3duZXJcbiAgICB9O1xuICB9XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBkZWJ1Z0luZm8gY29udGFpbnMgU2VydmVyIENvbXBvbmVudCBkZWJ1ZyBpbmZvcm1hdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX2RlYnVnSW5mbycsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IG51bGxcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cbnZhciBkaWRXYXJuQWJvdXRLZXlTcHJlYWQgPSB7fTtcbi8qKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmZjcy9wdWxsLzEwN1xuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqL1xuXG5mdW5jdGlvbiBqc3hERVYkMSh0eXBlLCBjb25maWcsIG1heWJlS2V5LCBpc1N0YXRpY0NoaWxkcmVuLCBzb3VyY2UsIHNlbGYpIHtcbiAge1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpKSB7XG4gICAgICAvLyBUaGlzIGlzIGFuIGludmFsaWQgZWxlbWVudCB0eXBlLlxuICAgICAgLy9cbiAgICAgIC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXG4gICAgICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHR5cGVTdHJpbmc7XG5cbiAgICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkodHlwZSkpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9IFwiPFwiICsgKGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdVbmtub3duJykgKyBcIiAvPlwiO1xuICAgICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlU3RyaW5nID0gdHlwZW9mIHR5cGU7XG4gICAgICB9XG5cbiAgICAgIGVycm9yKCdSZWFjdC5qc3g6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZVN0cmluZywgaW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYSB2YWxpZCBlbGVtZW50IHR5cGUuXG4gICAgICAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAgICAgLy8gZG9lc24ndCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNpbmdcbiAgICAgIC8vIGVycm9ycy4gV2UgZG9uJ3Qgd2FudCBleGNlcHRpb24gYmVoYXZpb3IgdG8gZGlmZmVyIGJldHdlZW4gZGV2IGFuZFxuICAgICAgLy8gcHJvZC4gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlXG4gICAgICAvLyB0eXBlIGlzIGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLilcbiAgICAgIHZhciBjaGlsZHJlbiA9IGNvbmZpZy5jaGlsZHJlbjtcblxuICAgICAgaWYgKGNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGlzU3RhdGljQ2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW5baV0sIHR5cGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogU3RhdGljIGNoaWxkcmVuIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXkuICcgKyAnWW91IGFyZSBsaWtlbHkgZXhwbGljaXRseSBjYWxsaW5nIFJlYWN0LmpzeHMgb3IgUmVhY3QuanN4REVWLiAnICsgJ1VzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gV2FybiBhYm91dCBrZXkgc3ByZWFkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgdHlwZSBpcyB2YWxpZC5cblxuXG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhjb25maWcpLmZpbHRlcihmdW5jdGlvbiAoaykge1xuICAgICAgICByZXR1cm4gayAhPT0gJ2tleSc7XG4gICAgICB9KTtcbiAgICAgIHZhciBiZWZvcmVFeGFtcGxlID0ga2V5cy5sZW5ndGggPiAwID8gJ3trZXk6IHNvbWVLZXksICcgKyBrZXlzLmpvaW4oJzogLi4uLCAnKSArICc6IC4uLn0nIDogJ3trZXk6IHNvbWVLZXl9JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY29tcG9uZW50TmFtZSArIGJlZm9yZUV4YW1wbGVdKSB7XG4gICAgICAgIHZhciBhZnRlckV4YW1wbGUgPSBrZXlzLmxlbmd0aCA+IDAgPyAneycgKyBrZXlzLmpvaW4oJzogLi4uLCAnKSArICc6IC4uLn0nIDogJ3t9JztcblxuICAgICAgICBlcnJvcignQSBwcm9wcyBvYmplY3QgY29udGFpbmluZyBhIFwia2V5XCIgcHJvcCBpcyBiZWluZyBzcHJlYWQgaW50byBKU1g6XFxuJyArICcgIGxldCBwcm9wcyA9ICVzO1xcbicgKyAnICA8JXMgey4uLnByb3BzfSAvPlxcbicgKyAnUmVhY3Qga2V5cyBtdXN0IGJlIHBhc3NlZCBkaXJlY3RseSB0byBKU1ggd2l0aG91dCB1c2luZyBzcHJlYWQ6XFxuJyArICcgIGxldCBwcm9wcyA9ICVzO1xcbicgKyAnICA8JXMga2V5PXtzb21lS2V5fSB7Li4ucHJvcHN9IC8+JywgYmVmb3JlRXhhbXBsZSwgY29tcG9uZW50TmFtZSwgYWZ0ZXJFeGFtcGxlLCBjb21wb25lbnROYW1lKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY29tcG9uZW50TmFtZSArIGJlZm9yZUV4YW1wbGVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICAgIHZhciBwcm9wcyA9IHt9O1xuICAgIHZhciBrZXkgPSBudWxsO1xuICAgIHZhciByZWYgPSBudWxsOyAvLyBDdXJyZW50bHksIGtleSBjYW4gYmUgc3ByZWFkIGluIGFzIGEgcHJvcC4gVGhpcyBjYXVzZXMgYSBwb3RlbnRpYWxcbiAgICAvLyBpc3N1ZSBpZiBrZXkgaXMgYWxzbyBleHBsaWNpdGx5IGRlY2xhcmVkIChpZS4gPGRpdiB7Li4ucHJvcHN9IGtleT1cIkhpXCIgLz5cbiAgICAvLyBvciA8ZGl2IGtleT1cIkhpXCIgey4uLnByb3BzfSAvPiApLiBXZSB3YW50IHRvIGRlcHJlY2F0ZSBrZXkgc3ByZWFkLFxuICAgIC8vIGJ1dCBhcyBhbiBpbnRlcm1lZGlhcnkgc3RlcCwgd2Ugd2lsbCB1c2UganN4REVWIGZvciBldmVyeXRoaW5nIGV4Y2VwdFxuICAgIC8vIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+LCBiZWNhdXNlIHdlIGFyZW4ndCBjdXJyZW50bHkgYWJsZSB0byB0ZWxsIGlmXG4gICAgLy8ga2V5IGlzIGV4cGxpY2l0bHkgZGVjbGFyZWQgdG8gYmUgdW5kZWZpbmVkIG9yIG5vdC5cblxuICAgIGlmIChtYXliZUtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24obWF5YmVLZXkpO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSAnJyArIG1heWJlS2V5O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSk7XG4gICAgICB9XG5cbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAge1xuICAgICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgfVxuXG4gICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKTtcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmIC8vIFNraXAgb3ZlciByZXNlcnZlZCBwcm9wIG5hbWVzXG4gICAgICBwcm9wTmFtZSAhPT0gJ2tleScgJiYgKHByb3BOYW1lICE9PSAncmVmJykpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSB8fCByZWYpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnQgPSBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xuXG4gICAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIHtcbiAgICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnIHx8ICFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UpIDsgZWxzZSBpZiAoaXNBcnJheShub2RlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2lzdmFsaWRlbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIEBmaW5hbFxuICovXG5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICB7XG4gICAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSA9IHRydWU7IC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXG4gICAgLy8gcHJvcGVydHksIGl0IG1heSBiZSB0aGUgY3JlYXRvciBvZiB0aGUgY2hpbGQgdGhhdCdzIHJlc3BvbnNpYmxlIGZvclxuICAgIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICAgIHZhciBjaGlsZE93bmVyID0gJyc7XG5cbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgICBjaGlsZE93bmVyID0gXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcbiAgICB9XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgIGVycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJyArICclcyVzIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLicsIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8sIGNoaWxkT3duZXIpO1xuXG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpIHtcbiAge1xuICAgIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgICBpZiAoIWluZm8pIHtcbiAgICAgIHZhciBwYXJlbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHBhcmVudFR5cGUpO1xuXG4gICAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgICBpbmZvID0gXCJcXG5cXG5DaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDxcIiArIHBhcmVudE5hbWUgKyBcIj4uXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZm87XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYSBmcmFnbWVudCwgdmFsaWRhdGUgdGhhdCBpdCBjYW4gb25seSBiZSBwcm92aWRlZCB3aXRoIGZyYWdtZW50IHByb3BzXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZnJhZ21lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmcmFnbWVudCkge1xuICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gcmVuZGVyIHBoYXNlIGluc3RlYWQgb2YgYXQgZWxlbWVudCBjcmVhdGlvbi5cbiAge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJhZ21lbnQucHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBrZXkgIT09ICdrZXknKSB7XG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFnbWVudC5yZWYgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGZyYWdtZW50KTtcblxuICAgICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIGByZWZgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuJyk7XG5cbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG52YXIganN4REVWID0ganN4REVWJDEgO1xuXG5leHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbmV4cG9ydHMuanN4REVWID0ganN4REVWO1xuICB9KSgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react/jsx-dev-runtime.js ***!
|
||
\******************************************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-dev-runtime.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LWRldi1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSw4TEFBc0U7QUFDeEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9qc3gtZGV2LXJ1bnRpbWUuanM/YzI5YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LWRldi1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\n"));
|
||
|
||
/***/ })
|
||
|
||
},
|
||
/******/ function(__webpack_require__) { // webpackRuntimeModules
|
||
/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
|
||
/******/ __webpack_require__.O(0, ["main-app"], function() { return __webpack_exec__("(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fgandanxiangzhao%2FDesktop%2F%E5%90%88%E5%90%8C%E6%B5%81%E8%BD%AC%E5%AE%A1%E6%89%B9%E7%B3%BB%E7%BB%9F%2Fsrc%2Fapp%2Fdashboard%2Fcontracts%2Fcreate%2Fpage.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"); });
|
||
/******/ var __webpack_exports__ = __webpack_require__.O();
|
||
/******/ _N_E = __webpack_exports__;
|
||
/******/ }
|
||
]); |