"use strict"; /* * ATTENTION: An "eval-source-map" devtool has been used. * This devtool is neither made for production nor for readable output files. * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ exports.id = "vendor-chunks/cheerio"; exports.ids = ["vendor-chunks/cheerio"]; exports.modules = { /***/ "(rsc)/./node_modules/cheerio/dist/esm/api/attributes.js": /*!*********************************************************!*\ !*** ./node_modules/cheerio/dist/esm/api/attributes.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ addClass: () => (/* binding */ addClass),\n/* harmony export */ attr: () => (/* binding */ attr),\n/* harmony export */ data: () => (/* binding */ data),\n/* harmony export */ hasClass: () => (/* binding */ hasClass),\n/* harmony export */ prop: () => (/* binding */ prop),\n/* harmony export */ removeAttr: () => (/* binding */ removeAttr),\n/* harmony export */ removeClass: () => (/* binding */ removeClass),\n/* harmony export */ toggleClass: () => (/* binding */ toggleClass),\n/* harmony export */ val: () => (/* binding */ val)\n/* harmony export */ });\n/* harmony import */ var _static_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../static.js */ \"(rsc)/./node_modules/cheerio/dist/esm/static.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.js */ \"(rsc)/./node_modules/cheerio/dist/esm/utils.js\");\n/* harmony import */ var domhandler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! domhandler */ \"(rsc)/./node_modules/domhandler/lib/esm/index.js\");\n/* harmony import */ var domutils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! domutils */ \"(rsc)/./node_modules/domutils/lib/esm/index.js\");\n/* harmony import */ var htmlparser2__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! htmlparser2 */ \"(rsc)/./node_modules/htmlparser2/dist/esm/index.js\");\n/**\n * Methods for getting and modifying attributes.\n *\n * @module cheerio/attributes\n */\nvar _a;\n\n\n\n\n\nconst hasOwn = \n// @ts-expect-error `hasOwn` is a standard object method\n(_a = Object.hasOwn) !== null && _a !== void 0 ? _a : ((object, prop) => Object.prototype.hasOwnProperty.call(object, prop));\nconst rspace = /\\s+/;\nconst dataAttrPrefix = 'data-';\n// Attributes that are booleans\nconst rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i;\n// Matches strings that look like JSON objects or arrays\nconst rbrace = /^{[^]*}$|^\\[[^]*]$/;\nfunction getAttr(elem, name, xmlMode) {\n var _a;\n if (!elem || !(0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(elem))\n return undefined;\n (_a = elem.attribs) !== null && _a !== void 0 ? _a : (elem.attribs = {});\n // Return the entire attribs object if no attribute specified\n if (!name) {\n return elem.attribs;\n }\n if (hasOwn(elem.attribs, name)) {\n // Get the (decoded) attribute\n return !xmlMode && rboolean.test(name) ? name : elem.attribs[name];\n }\n // Mimic the DOM and return text content as value for `option's`\n if (elem.name === 'option' && name === 'value') {\n return (0,_static_js__WEBPACK_IMPORTED_MODULE_0__.text)(elem.children);\n }\n // Mimic DOM with default value for radios/checkboxes\n if (elem.name === 'input' &&\n (elem.attribs['type'] === 'radio' || elem.attribs['type'] === 'checkbox') &&\n name === 'value') {\n return 'on';\n }\n return undefined;\n}\n/**\n * Sets the value of an attribute. The attribute will be deleted if the value is\n * `null`.\n *\n * @private\n * @param el - The element to set the attribute on.\n * @param name - The attribute's name.\n * @param value - The attribute's value.\n */\nfunction setAttr(el, name, value) {\n if (value === null) {\n removeAttribute(el, name);\n }\n else {\n el.attribs[name] = `${value}`;\n }\n}\nfunction attr(name, value) {\n // Set the value (with attr map support)\n if (typeof name === 'object' || value !== undefined) {\n if (typeof value === 'function') {\n if (typeof name !== 'string') {\n {\n throw new Error('Bad combination of arguments.');\n }\n }\n return (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.domEach)(this, (el, i) => {\n if ((0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(el))\n setAttr(el, name, value.call(el, i, el.attribs[name]));\n });\n }\n return (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.domEach)(this, (el) => {\n if (!(0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(el))\n return;\n if (typeof name === 'object') {\n for (const objName of Object.keys(name)) {\n const objValue = name[objName];\n setAttr(el, objName, objValue);\n }\n }\n else {\n setAttr(el, name, value);\n }\n });\n }\n return arguments.length > 1\n ? this\n : getAttr(this[0], name, this.options.xmlMode);\n}\n/**\n * Gets a node's prop.\n *\n * @private\n * @category Attributes\n * @param el - Element to get the prop of.\n * @param name - Name of the prop.\n * @param xmlMode - Disable handling of special HTML attributes.\n * @returns The prop's value.\n */\nfunction getProp(el, name, xmlMode) {\n return name in el\n ? // @ts-expect-error TS doesn't like us accessing the value directly here.\n el[name]\n : !xmlMode && rboolean.test(name)\n ? getAttr(el, name, false) !== undefined\n : getAttr(el, name, xmlMode);\n}\n/**\n * Sets the value of a prop.\n *\n * @private\n * @param el - The element to set the prop on.\n * @param name - The prop's name.\n * @param value - The prop's value.\n * @param xmlMode - Disable handling of special HTML attributes.\n */\nfunction setProp(el, name, value, xmlMode) {\n if (name in el) {\n // @ts-expect-error Overriding value\n el[name] = value;\n }\n else {\n setAttr(el, name, !xmlMode && rboolean.test(name)\n ? value\n ? ''\n : null\n : `${value}`);\n }\n}\nfunction prop(name, value) {\n var _a;\n if (typeof name === 'string' && value === undefined) {\n const el = this[0];\n if (!el)\n return undefined;\n switch (name) {\n case 'style': {\n const property = this.css();\n const keys = Object.keys(property);\n for (let i = 0; i < keys.length; i++) {\n property[i] = keys[i];\n }\n property.length = keys.length;\n return property;\n }\n case 'tagName':\n case 'nodeName': {\n if (!(0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(el))\n return undefined;\n return el.name.toUpperCase();\n }\n case 'href':\n case 'src': {\n if (!(0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(el))\n return undefined;\n const prop = (_a = el.attribs) === null || _a === void 0 ? void 0 : _a[name];\n if (typeof URL !== 'undefined' &&\n ((name === 'href' && (el.tagName === 'a' || el.tagName === 'link')) ||\n (name === 'src' &&\n (el.tagName === 'img' ||\n el.tagName === 'iframe' ||\n el.tagName === 'audio' ||\n el.tagName === 'video' ||\n el.tagName === 'source'))) &&\n prop !== undefined &&\n this.options.baseURI) {\n return new URL(prop, this.options.baseURI).href;\n }\n return prop;\n }\n case 'innerText': {\n return (0,domutils__WEBPACK_IMPORTED_MODULE_3__.innerText)(el);\n }\n case 'textContent': {\n return (0,domutils__WEBPACK_IMPORTED_MODULE_3__.textContent)(el);\n }\n case 'outerHTML': {\n if (el.type === htmlparser2__WEBPACK_IMPORTED_MODULE_4__.ElementType.Root)\n return this.html();\n return this.clone().wrap('').parent().html();\n }\n case 'innerHTML': {\n return this.html();\n }\n default: {\n if (!(0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(el))\n return undefined;\n return getProp(el, name, this.options.xmlMode);\n }\n }\n }\n if (typeof name === 'object' || value !== undefined) {\n if (typeof value === 'function') {\n if (typeof name === 'object') {\n throw new TypeError('Bad combination of arguments.');\n }\n return (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.domEach)(this, (el, i) => {\n if ((0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(el)) {\n setProp(el, name, value.call(el, i, getProp(el, name, this.options.xmlMode)), this.options.xmlMode);\n }\n });\n }\n return (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.domEach)(this, (el) => {\n if (!(0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(el))\n return;\n if (typeof name === 'object') {\n for (const key of Object.keys(name)) {\n const val = name[key];\n setProp(el, key, val, this.options.xmlMode);\n }\n }\n else {\n setProp(el, name, value, this.options.xmlMode);\n }\n });\n }\n return undefined;\n}\n/**\n * Sets the value of a data attribute.\n *\n * @private\n * @param elem - The element to set the data attribute on.\n * @param name - The data attribute's name.\n * @param value - The data attribute's value.\n */\nfunction setData(elem, name, value) {\n var _a;\n (_a = elem.data) !== null && _a !== void 0 ? _a : (elem.data = {});\n if (typeof name === 'object')\n Object.assign(elem.data, name);\n else if (typeof name === 'string' && value !== undefined) {\n elem.data[name] = value;\n }\n}\n/**\n * Read _all_ HTML5 `data-*` attributes from the equivalent HTML5 `data-*`\n * attribute, and cache the value in the node's internal data store.\n *\n * @private\n * @category Attributes\n * @param el - Element to get the data attribute of.\n * @returns A map with all of the data attributes.\n */\nfunction readAllData(el) {\n for (const domName of Object.keys(el.attribs)) {\n if (!domName.startsWith(dataAttrPrefix)) {\n continue;\n }\n const jsName = (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.camelCase)(domName.slice(dataAttrPrefix.length));\n if (!hasOwn(el.data, jsName)) {\n el.data[jsName] = parseDataValue(el.attribs[domName]);\n }\n }\n return el.data;\n}\n/**\n * Read the specified attribute from the equivalent HTML5 `data-*` attribute,\n * and (if present) cache the value in the node's internal data store.\n *\n * @private\n * @category Attributes\n * @param el - Element to get the data attribute of.\n * @param name - Name of the data attribute.\n * @returns The data attribute's value.\n */\nfunction readData(el, name) {\n const domName = dataAttrPrefix + (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.cssCase)(name);\n const data = el.data;\n if (hasOwn(data, name)) {\n return data[name];\n }\n if (hasOwn(el.attribs, domName)) {\n return (data[name] = parseDataValue(el.attribs[domName]));\n }\n return undefined;\n}\n/**\n * Coerce string data-* attributes to their corresponding JavaScript primitives.\n *\n * @private\n * @category Attributes\n * @param value - The value to parse.\n * @returns The parsed value.\n */\nfunction parseDataValue(value) {\n if (value === 'null')\n return null;\n if (value === 'true')\n return true;\n if (value === 'false')\n return false;\n const num = Number(value);\n if (value === String(num))\n return num;\n if (rbrace.test(value)) {\n try {\n return JSON.parse(value);\n }\n catch {\n /* Ignore */\n }\n }\n return value;\n}\nfunction data(name, value) {\n var _a;\n const elem = this[0];\n if (!elem || !(0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(elem))\n return;\n const dataEl = elem;\n (_a = dataEl.data) !== null && _a !== void 0 ? _a : (dataEl.data = {});\n // Return the entire data object if no data specified\n if (name == null) {\n return readAllData(dataEl);\n }\n // Set the value (with attr map support)\n if (typeof name === 'object' || value !== undefined) {\n (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.domEach)(this, (el) => {\n if ((0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(el)) {\n if (typeof name === 'object')\n setData(el, name);\n else\n setData(el, name, value);\n }\n });\n return this;\n }\n return readData(dataEl, name);\n}\nfunction val(value) {\n const querying = arguments.length === 0;\n const element = this[0];\n if (!element || !(0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(element))\n return querying ? undefined : this;\n switch (element.name) {\n case 'textarea': {\n return this.text(value);\n }\n case 'select': {\n const option = this.find('option:selected');\n if (!querying) {\n if (this.attr('multiple') == null && typeof value === 'object') {\n return this;\n }\n this.find('option').removeAttr('selected');\n const values = typeof value === 'object' ? value : [value];\n for (const val of values) {\n this.find(`option[value=\"${val}\"]`).attr('selected', '');\n }\n return this;\n }\n return this.attr('multiple')\n ? option.toArray().map((el) => (0,_static_js__WEBPACK_IMPORTED_MODULE_0__.text)(el.children))\n : option.attr('value');\n }\n case 'input':\n case 'option': {\n return querying\n ? this.attr('value')\n : this.attr('value', value);\n }\n }\n return undefined;\n}\n/**\n * Remove an attribute.\n *\n * @private\n * @param elem - Node to remove attribute from.\n * @param name - Name of the attribute to remove.\n */\nfunction removeAttribute(elem, name) {\n if (!elem.attribs || !hasOwn(elem.attribs, name))\n return;\n delete elem.attribs[name];\n}\n/**\n * Splits a space-separated list of names to individual names.\n *\n * @category Attributes\n * @param names - Names to split.\n * @returns - Split names.\n */\nfunction splitNames(names) {\n return names ? names.trim().split(rspace) : [];\n}\n/**\n * Method for removing attributes by `name`.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('.pear').removeAttr('class').prop('outerHTML');\n * //=>
  • Pear
  • \n *\n * $('.apple').attr('id', 'favorite');\n * $('.apple').removeAttr('id class').prop('outerHTML');\n * //=>
  • Apple
  • \n * ```\n *\n * @param name - Name of the attribute.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/removeAttr/}\n */\nfunction removeAttr(name) {\n const attrNames = splitNames(name);\n for (const attrName of attrNames) {\n (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.domEach)(this, (elem) => {\n if ((0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(elem))\n removeAttribute(elem, attrName);\n });\n }\n return this;\n}\n/**\n * Check to see if _any_ of the matched elements have the given `className`.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('.pear').hasClass('pear');\n * //=> true\n *\n * $('apple').hasClass('fruit');\n * //=> false\n *\n * $('li').hasClass('pear');\n * //=> true\n * ```\n *\n * @param className - Name of the class.\n * @returns Indicates if an element has the given `className`.\n * @see {@link https://api.jquery.com/hasClass/}\n */\nfunction hasClass(className) {\n return this.toArray().some((elem) => {\n const clazz = (0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(elem) && elem.attribs['class'];\n let idx = -1;\n if (clazz && className.length > 0) {\n while ((idx = clazz.indexOf(className, idx + 1)) > -1) {\n const end = idx + className.length;\n if ((idx === 0 || rspace.test(clazz[idx - 1])) &&\n (end === clazz.length || rspace.test(clazz[end]))) {\n return true;\n }\n }\n }\n return false;\n });\n}\n/**\n * Adds class(es) to all of the matched elements. Also accepts a `function`.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('.pear').addClass('fruit').prop('outerHTML');\n * //=>
  • Pear
  • \n *\n * $('.apple').addClass('fruit red').prop('outerHTML');\n * //=>
  • Apple
  • \n * ```\n *\n * @param value - Name of new class.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/addClass/}\n */\nfunction addClass(value) {\n // Support functions\n if (typeof value === 'function') {\n return (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.domEach)(this, (el, i) => {\n if ((0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(el)) {\n const className = el.attribs['class'] || '';\n addClass.call([el], value.call(el, i, className));\n }\n });\n }\n // Return if no value or not a string or function\n if (!value || typeof value !== 'string')\n return this;\n const classNames = value.split(rspace);\n const numElements = this.length;\n for (let i = 0; i < numElements; i++) {\n const el = this[i];\n // If selected element isn't a tag, move on\n if (!(0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(el))\n continue;\n // If we don't already have classes — always set xmlMode to false here, as it doesn't matter for classes\n const className = getAttr(el, 'class', false);\n if (className) {\n let setClass = ` ${className} `;\n // Check if class already exists\n for (const cn of classNames) {\n const appendClass = `${cn} `;\n if (!setClass.includes(` ${appendClass}`))\n setClass += appendClass;\n }\n setAttr(el, 'class', setClass.trim());\n }\n else {\n setAttr(el, 'class', classNames.join(' ').trim());\n }\n }\n return this;\n}\n/**\n * Removes one or more space-separated classes from the selected elements. If no\n * `className` is defined, all classes will be removed. Also accepts a\n * `function`.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('.pear').removeClass('pear').prop('outerHTML');\n * //=>
  • Pear
  • \n *\n * $('.apple').addClass('red').removeClass().prop('outerHTML');\n * //=>
  • Apple
  • \n * ```\n *\n * @param name - Name of the class. If not specified, removes all elements.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/removeClass/}\n */\nfunction removeClass(name) {\n // Handle if value is a function\n if (typeof name === 'function') {\n return (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.domEach)(this, (el, i) => {\n if ((0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(el)) {\n removeClass.call([el], name.call(el, i, el.attribs['class'] || ''));\n }\n });\n }\n const classes = splitNames(name);\n const numClasses = classes.length;\n const removeAll = arguments.length === 0;\n return (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.domEach)(this, (el) => {\n if (!(0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(el))\n return;\n if (removeAll) {\n // Short circuit the remove all case as this is the nice one\n el.attribs['class'] = '';\n }\n else {\n const elClasses = splitNames(el.attribs['class']);\n let changed = false;\n for (let j = 0; j < numClasses; j++) {\n const index = elClasses.indexOf(classes[j]);\n if (index !== -1) {\n elClasses.splice(index, 1);\n changed = true;\n /*\n * We have to do another pass to ensure that there are not duplicate\n * classes listed\n */\n j--;\n }\n }\n if (changed) {\n el.attribs['class'] = elClasses.join(' ');\n }\n }\n });\n}\n/**\n * Add or remove class(es) from the matched elements, depending on either the\n * class's presence or the value of the switch argument. Also accepts a\n * `function`.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('.apple.green').toggleClass('fruit green red').prop('outerHTML');\n * //=>
  • Apple
  • \n *\n * $('.apple.green').toggleClass('fruit green red', true).prop('outerHTML');\n * //=>
  • Apple
  • \n * ```\n *\n * @param value - Name of the class. Can also be a function.\n * @param stateVal - If specified the state of the class.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/toggleClass/}\n */\nfunction toggleClass(value, stateVal) {\n // Support functions\n if (typeof value === 'function') {\n return (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.domEach)(this, (el, i) => {\n if ((0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(el)) {\n toggleClass.call([el], value.call(el, i, el.attribs['class'] || '', stateVal), stateVal);\n }\n });\n }\n // Return if no value or not a string or function\n if (!value || typeof value !== 'string')\n return this;\n const classNames = value.split(rspace);\n const numClasses = classNames.length;\n const state = typeof stateVal === 'boolean' ? (stateVal ? 1 : -1) : 0;\n const numElements = this.length;\n for (let i = 0; i < numElements; i++) {\n const el = this[i];\n // If selected element isn't a tag, move on\n if (!(0,domhandler__WEBPACK_IMPORTED_MODULE_2__.isTag)(el))\n continue;\n const elementClasses = splitNames(el.attribs['class']);\n // Check if class already exists\n for (let j = 0; j < numClasses; j++) {\n // Check if the class name is currently defined\n const index = elementClasses.indexOf(classNames[j]);\n // Add if stateValue === true or we are toggling and there is no value\n if (state >= 0 && index === -1) {\n elementClasses.push(classNames[j]);\n }\n else if (state <= 0 && index !== -1) {\n // Otherwise remove but only if the item exists\n elementClasses.splice(index, 1);\n }\n }\n el.attribs['class'] = elementClasses.join(' ');\n }\n return this;\n}\n//# sourceMappingURL=attributes.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvY2hlZXJpby9kaXN0L2VzbS9hcGkvYXR0cmlidXRlcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNvQztBQUNzQjtBQUN2QjtBQUNlO0FBQ1I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixLQUFLO0FBQ3ZCO0FBQ0E7QUFDQSxrQkFBa0IsaURBQUs7QUFDdkI7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdEQUFJO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsTUFBTTtBQUNwQztBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGtEQUFPO0FBQzFCLG9CQUFvQixpREFBSztBQUN6QjtBQUNBLGFBQWE7QUFDYjtBQUNBLGVBQWUsa0RBQU87QUFDdEIsaUJBQWlCLGlEQUFLO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFp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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDTztBQUNQO0FBQ0E7QUFDQSxlQUFlLGtEQUFPO0FBQ3RCLGdCQUFnQixpREFBSztBQUNyQjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQSxhQUFhLGlEQUFLO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixnQkFBZ0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ob2xpZGF5LWRlYWwtZmluZGVyLy4vbm9kZV9tb2R1bGVzL2NoZWVyaW8vZGlzdC9lc20vYXBpL2F0dHJpYnV0ZXMuanM/YWIxMiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1ldGhvZHMgZm9yIGdldHRpbmcgYW5kIG1vZGlmeWluZyBhdHRyaWJ1dGVzLlxuICpcbiAqIEBtb2R1bGUgY2hlZXJpby9hdHRyaWJ1dGVzXG4gKi9cbnZhciBfYTtcbmltcG9ydCB7IHRleHQgfSBmcm9tICcuLi9zdGF0aWMuanMnO1xuaW1wb3J0IHsgZG9tRWFjaCwgY2FtZWxDYXNlLCBjc3NDYXNlIH0gZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHsgaXNUYWcgfSBmcm9tICdkb21oYW5kbGVyJztcbmltcG9ydCB7IGlubmVyVGV4dCwgdGV4dENvbnRlbnQgfSBmcm9tICdkb211dGlscyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJ2h0bWxwYXJzZXIyJztcbmNvbnN0IGhhc093biA9IFxuLy8gQHRzLWV4cGVjdC1lcnJvciBgaGFzT3duYCBpcyBhIHN0YW5kYXJkIG9iamVjdCBtZXRob2RcbihfYSA9IE9iamVjdC5oYXNPd24pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICgob2JqZWN0LCBwcm9wKSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wKSk7XG5jb25zdCByc3BhY2UgPSAvXFxzKy87XG5jb25zdCBkYXRhQXR0clByZWZpeCA9ICdkYXRhLSc7XG4vLyBBdHRyaWJ1dGVzIHRoYXQgYXJlIGJvb2xlYW5zXG5jb25zdCByYm9vbGVhbiA9IC9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNoZWNrZWR8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWR8c2VsZWN0ZWQpJC9pO1xuLy8gTWF0Y2hlcyBzdHJpbmdzIHRoYXQgbG9vayBsaWtlIEpTT04gb2JqZWN0cyBvciBhcnJheXNcbmNvbnN0IHJicmFjZSA9IC9ee1teXSp9JHxeXFxbW15dKl0kLztcbmZ1bmN0aW9uIGdldEF0dHIoZWxlbSwgbmFtZSwgeG1sTW9kZSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoIWVsZW0gfHwgIWlzVGFnKGVsZW0pKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIChfYSA9IGVsZW0uYXR0cmlicykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKGVsZW0uYXR0cmlicyA9IHt9KTtcbiAgICAvLyBSZXR1cm4gdGhlIGVudGlyZSBhdHRyaWJzIG9iamVjdCBpZiBubyBhdHRyaWJ1dGUgc3BlY2lmaWVkXG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIHJldHVybiBlbGVtLmF0dHJpYnM7XG4gICAgfVxuICAgIGlmIChoYXNPd24oZWxlbS5hdHRyaWJzLCBuYW1lKSkge1xuICAgICAgICAvLyBHZXQgdGhlIChkZWNvZGVkKSBhdHRyaWJ1dGVcbiAgICAgICAgcmV0dXJuICF4bWxNb2RlICYmIHJib29sZWFuLnRlc3QobmFtZSkgPyBuYW1lIDogZWxlbS5hdHRyaWJzW25hbWVdO1xuICAgIH1cbiAgICAvLyBNaW1pYyB0aGUgRE9NIGFuZCByZXR1cm4gdGV4dCBjb250ZW50IGFzIHZhbHVlIGZvciBgb3B0aW9uJ3NgXG4gICAgaWYgKGVsZW0ubmFtZSA9PT0gJ29wdGlvbicgJiYgbmFtZSA9PT0gJ3ZhbHVlJykge1xuICAgICAgICByZXR1cm4gdGV4dChlbGVtLmNoaWxkcmVuKTtcbiAgICB9XG4gICAgLy8gTWltaWMgRE9NIHdpdGggZGVmYXVsdCB2YWx1ZSBmb3IgcmFkaW9zL2NoZWNrYm94ZXNcbiAgICBpZiAoZWxlbS5uYW1lID09PSAnaW5wdXQnICYmXG4gICAgICAgIChlbGVtLmF0dHJpYnNbJ3R5cGUnXSA9PT0gJ3JhZGlvJyB8fCBlbGVtLmF0dHJpYnNbJ3R5cGUnXSA9PT0gJ2NoZWNrYm94JykgJiZcbiAgICAgICAgbmFtZSA9PT0gJ3ZhbHVlJykge1xuICAgICAgICByZXR1cm4gJ29uJztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlLiBUaGUgYXR0cmlidXRlIHdpbGwgYmUgZGVsZXRlZCBpZiB0aGUgdmFsdWUgaXNcbiAqIGBudWxsYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGVsIC0gVGhlIGVsZW1lbnQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgb24uXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBhdHRyaWJ1dGUncyBuYW1lLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIGF0dHJpYnV0ZSdzIHZhbHVlLlxuICovXG5mdW5jdGlvbiBzZXRBdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZW1vdmVBdHRyaWJ1dGUoZWwsIG5hbWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZWwuYXR0cmlic1tuYW1lXSA9IGAke3ZhbHVlfWA7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGF0dHIobmFtZSwgdmFsdWUpIHtcbiAgICAvLyBTZXQgdGhlIHZhbHVlICh3aXRoIGF0dHIgbWFwIHN1cHBvcnQpXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0JyB8fCB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQmFkIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cy4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZG9tRWFjaCh0aGlzLCAoZWwsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNUYWcoZWwpKVxuICAgICAgICAgICAgICAgICAgICBzZXRBdHRyKGVsLCBuYW1lLCB2YWx1ZS5jYWxsKGVsLCBpLCBlbC5hdHRyaWJzW25hbWVdKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9tRWFjaCh0aGlzLCAoZWwpID0+IHtcbiAgICAgICAgICAgIGlmICghaXNUYWcoZWwpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9iak5hbWUgb2YgT2JqZWN0LmtleXMobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqVmFsdWUgPSBuYW1lW29iak5hbWVdO1xuICAgICAgICAgICAgICAgICAgICBzZXRBdHRyKGVsLCBvYmpOYW1lLCBvYmpWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0QXR0cihlbCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICAgID8gdGhpc1xuICAgICAgICA6IGdldEF0dHIodGhpc1swXSwgbmFtZSwgdGhpcy5vcHRpb25zLnhtbE1vZGUpO1xufVxuLyoqXG4gKiBHZXRzIGEgbm9kZSdzIHByb3AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjYXRlZ29yeSBBdHRyaWJ1dGVzXG4gKiBAcGFyYW0gZWwgLSBFbGVtZW50IHRvIGdldCB0aGUgcHJvcCBvZi5cbiAqIEBwYXJhbSBuYW1lIC0gTmFtZSBvZiB0aGUgcHJvcC5cbiAqIEBwYXJhbSB4bWxNb2RlIC0gRGlzYWJsZSBoYW5kbGluZyBvZiBzcGVjaWFsIEhUTUwgYXR0cmlidXRlcy5cbiAqIEByZXR1cm5zIFRoZSBwcm9wJ3MgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFByb3AoZWwsIG5hbWUsIHhtbE1vZGUpIHtcbiAgICByZXR1cm4gbmFtZSBpbiBlbFxuICAgICAgICA/IC8vIEB0cy1leHBlY3QtZXJyb3IgVFMgZG9lc24ndCBsaWtlIHVzIGFjY2Vzc2luZyB0aGUgdmFsdWUgZGlyZWN0bHkgaGVyZS5cbiAgICAgICAgICAgIGVsW25hbWVdXG4gICAgICAgIDogIXhtbE1vZGUgJiYgcmJvb2xlYW4udGVzdChuYW1lKVxuICAgICAgICAgICAgPyBnZXRBdHRyKGVsLCBuYW1lLCBmYWxzZSkgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiBnZXRBdHRyKGVsLCBuYW1lLCB4bWxNb2RlKTtcbn1cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9wLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZWwgLSBUaGUgZWxlbWVudCB0byBzZXQgdGhlIHByb3Agb24uXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBwcm9wJ3MgbmFtZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBwcm9wJ3MgdmFsdWUuXG4gKiBAcGFyYW0geG1sTW9kZSAtIERpc2FibGUgaGFuZGxpbmcgb2Ygc3BlY2lhbCBIVE1MIGF0dHJpYnV0ZXMuXG4gKi9cbmZ1bmN0aW9uIHNldFByb3AoZWwsIG5hbWUsIHZhbHVlLCB4bWxNb2RlKSB7XG4gICAgaWYgKG5hbWUgaW4gZWwpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBPdmVycmlkaW5nIHZhbHVlXG4gICAgICAgIGVsW25hbWVdID0gdmFsdWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzZXRBdHRyKGVsLCBuYW1lLCAheG1sTW9kZSAmJiByYm9vbGVhbi50ZXN0KG5hbWUpXG4gICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgOiBgJHt2YWx1ZX1gKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gcHJvcChuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnICYmIHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzWzBdO1xuICAgICAgICBpZiAoIWVsKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdzdHlsZSc6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMuY3NzKCk7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlbaV0gPSBrZXlzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9wZXJ0eS5sZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICd0YWdOYW1lJzpcbiAgICAgICAgICAgIGNhc2UgJ25vZGVOYW1lJzoge1xuICAgICAgICAgICAgICAgIGlmICghaXNUYWcoZWwpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBlbC5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdocmVmJzpcbiAgICAgICAgICAgIGNhc2UgJ3NyYyc6IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVGFnKGVsKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wID0gKF9hID0gZWwuYXR0cmlicykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgVVJMICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgICAgICAgICAoKG5hbWUgPT09ICdocmVmJyAmJiAoZWwudGFnTmFtZSA9PT0gJ2EnIHx8IGVsLnRhZ05hbWUgPT09ICdsaW5rJykpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAobmFtZSA9PT0gJ3NyYycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWwudGFnTmFtZSA9PT0gJ2ltZycgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwudGFnTmFtZSA9PT0gJ2lmcmFtZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwudGFnTmFtZSA9PT0gJ2F1ZGlvJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC50YWdOYW1lID09PSAndmlkZW8nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLnRhZ05hbWUgPT09ICdzb3VyY2UnKSkpICYmXG4gICAgICAgICAgICAgICAgICAgIHByb3AgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuYmFzZVVSSSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVSTChwcm9wLCB0aGlzLm9wdGlvbnMuYmFzZVVSSSkuaHJlZjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpbm5lclRleHQnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlubmVyVGV4dChlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICd0ZXh0Q29udGVudCc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dENvbnRlbnQoZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnb3V0ZXJIVE1MJzoge1xuICAgICAgICAgICAgICAgIGlmIChlbC50eXBlID09PSBFbGVtZW50VHlwZS5Sb290KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5odG1sKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS53cmFwKCc8Y29udGFpbmVyIC8+JykucGFyZW50KCkuaHRtbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaW5uZXJIVE1MJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmh0bWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVGFnKGVsKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UHJvcChlbCwgbmFtZSwgdGhpcy5vcHRpb25zLnhtbE1vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcgfHwgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQmFkIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkb21FYWNoKHRoaXMsIChlbCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc1RhZyhlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0UHJvcChlbCwgbmFtZSwgdmFsdWUuY2FsbChlbCwgaSwgZ2V0UHJvcChlbCwgbmFtZSwgdGhpcy5vcHRpb25zLnhtbE1vZGUpKSwgdGhpcy5vcHRpb25zLnhtbE1vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkb21FYWNoKHRoaXMsIChlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFpc1RhZyhlbCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IG5hbWVba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgc2V0UHJvcChlbCwga2V5LCB2YWwsIHRoaXMub3B0aW9ucy54bWxNb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRQcm9wKGVsLCBuYW1lLCB2YWx1ZSwgdGhpcy5vcHRpb25zLnhtbE1vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgb2YgYSBkYXRhIGF0dHJpYnV0ZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGVsZW0gLSBUaGUgZWxlbWVudCB0byBzZXQgdGhlIGRhdGEgYXR0cmlidXRlIG9uLlxuICogQHBhcmFtIG5hbWUgLSBUaGUgZGF0YSBhdHRyaWJ1dGUncyBuYW1lLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIGRhdGEgYXR0cmlidXRlJ3MgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHNldERhdGEoZWxlbSwgbmFtZSwgdmFsdWUpIHtcbiAgICB2YXIgX2E7XG4gICAgKF9hID0gZWxlbS5kYXRhKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoZWxlbS5kYXRhID0ge30pO1xuICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpXG4gICAgICAgIE9iamVjdC5hc3NpZ24oZWxlbS5kYXRhLCBuYW1lKTtcbiAgICBlbHNlIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlbGVtLmRhdGFbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG59XG4vKipcbiAqIFJlYWQgX2FsbF8gSFRNTDUgYGRhdGEtKmAgYXR0cmlidXRlcyBmcm9tIHRoZSBlcXVpdmFsZW50IEhUTUw1IGBkYXRhLSpgXG4gKiBhdHRyaWJ1dGUsIGFuZCBjYWNoZSB0aGUgdmFsdWUgaW4gdGhlIG5vZGUncyBpbnRlcm5hbCBkYXRhIHN0b3JlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2F0ZWdvcnkgQXR0cmlidXRlc1xuICogQHBhcmFtIGVsIC0gRWxlbWVudCB0byBnZXQgdGhlIGRhdGEgYXR0cmlidXRlIG9mLlxuICogQHJldHVybnMgQSBtYXAgd2l0aCBhbGwgb2YgdGhlIGRhdGEgYXR0cmlidXRlcy5cbiAqL1xuZnVuY3Rpb24gcmVhZEFsbERhdGEoZWwpIHtcbiAgICBmb3IgKGNvbnN0IGRvbU5hbWUgb2YgT2JqZWN0LmtleXMoZWwuYXR0cmlicykpIHtcbiAgICAgICAgaWYgKCFkb21OYW1lLnN0YXJ0c1dpdGgoZGF0YUF0dHJQcmVmaXgpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc05hbWUgPSBjYW1lbENhc2UoZG9tTmFtZS5zbGljZShkYXRhQXR0clByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgaWYgKCFoYXNPd24oZWwuZGF0YSwganNOYW1lKSkge1xuICAgICAgICAgICAgZWwuZGF0YVtqc05hbWVdID0gcGFyc2VEYXRhVmFsdWUoZWwuYXR0cmlic1tkb21OYW1lXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVsLmRhdGE7XG59XG4vKipcbiAqIFJlYWQgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGUgZnJvbSB0aGUgZXF1aXZhbGVudCBIVE1MNSBgZGF0YS0qYCBhdHRyaWJ1dGUsXG4gKiBhbmQgKGlmIHByZXNlbnQpIGNhY2hlIHRoZSB2YWx1ZSBpbiB0aGUgbm9kZSdzIGludGVybmFsIGRhdGEgc3RvcmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjYXRlZ29yeSBBdHRyaWJ1dGVzXG4gKiBAcGFyYW0gZWwgLSBFbGVtZW50IHRvIGdldCB0aGUgZGF0YSBhdHRyaWJ1dGUgb2YuXG4gKiBAcGFyYW0gbmFtZSAtIE5hbWUgb2YgdGhlIGRhdGEgYXR0cmlidXRlLlxuICogQHJldHVybnMgVGhlIGRhdGEgYXR0cmlidXRlJ3MgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHJlYWREYXRhKGVsLCBuYW1lKSB7XG4gICAgY29uc3QgZG9tTmFtZSA9IGRhdGFBdHRyUHJlZml4ICsgY3NzQ2FzZShuYW1lKTtcbiAgICBjb25zdCBkYXRhID0gZWwuZGF0YTtcbiAgICBpZiAoaGFzT3duKGRhdGEsIG5hbWUpKSB7XG4gICAgICAgIHJldHVybiBkYXRhW25hbWVdO1xuICAgIH1cbiAgICBpZiAoaGFzT3duKGVsLmF0dHJpYnMsIGRvbU5hbWUpKSB7XG4gICAgICAgIHJldHVybiAoZGF0YVtuYW1lXSA9IHBhcnNlRGF0YVZhbHVlKGVsLmF0dHJpYnNbZG9tTmFtZV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbi8qKlxuICogQ29lcmNlIHN0cmluZyBkYXRhLSogYXR0cmlidXRlcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIEphdmFTY3JpcHQgcHJpbWl0aXZlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNhdGVnb3J5IEF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRGF0YVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSAnbnVsbCcpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodmFsdWUgPT09ICdmYWxzZScpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgIGlmICh2YWx1ZSA9PT0gU3RyaW5nKG51bSkpXG4gICAgICAgIHJldHVybiBudW07XG4gICAgaWYgKHJicmFjZS50ZXN0KHZhbHVlKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIC8qIElnbm9yZSAqL1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkYXRhKG5hbWUsIHZhbHVlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGVsZW0gPSB0aGlzWzBdO1xuICAgIGlmICghZWxlbSB8fCAhaXNUYWcoZWxlbSkpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBkYXRhRWwgPSBlbGVtO1xuICAgIChfYSA9IGRhdGFFbC5kYXRhKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoZGF0YUVsLmRhdGEgPSB7fSk7XG4gICAgLy8gUmV0dXJuIHRoZSBlbnRpcmUgZGF0YSBvYmplY3QgaWYgbm8gZGF0YSBzcGVjaWZpZWRcbiAgICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZWFkQWxsRGF0YShkYXRhRWwpO1xuICAgIH1cbiAgICAvLyBTZXQgdGhlIHZhbHVlICh3aXRoIGF0dHIgbWFwIHN1cHBvcnQpXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0JyB8fCB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvbUVhY2godGhpcywgKGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNUYWcoZWwpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICAgICAgc2V0RGF0YShlbCwgbmFtZSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBzZXREYXRhKGVsLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIHJlYWREYXRhKGRhdGFFbCwgbmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsKHZhbHVlKSB7XG4gICAgY29uc3QgcXVlcnlpbmcgPSBhcmd1bWVudHMubGVuZ3RoID09PSAwO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzWzBdO1xuICAgIGlmICghZWxlbWVudCB8fCAhaXNUYWcoZWxlbWVudCkpXG4gICAgICAgIHJldHVybiBxdWVyeWluZyA/IHVuZGVmaW5lZCA6IHRoaXM7XG4gICAgc3dpdGNoIChlbGVtZW50Lm5hbWUpIHtcbiAgICAgICAgY2FzZSAndGV4dGFyZWEnOiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdzZWxlY3QnOiB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmZpbmQoJ29wdGlvbjpzZWxlY3RlZCcpO1xuICAgICAgICAgICAgaWYgKCFxdWVyeWluZykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF0dHIoJ211bHRpcGxlJykgPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZpbmQoJ29wdGlvbicpLnJlbW92ZUF0dHIoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kKGBvcHRpb25bdmFsdWU9XCIke3ZhbH1cIl1gKS5hdHRyKCdzZWxlY3RlZCcsICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hdHRyKCdtdWx0aXBsZScpXG4gICAgICAgICAgICAgICAgPyBvcHRpb24udG9BcnJheSgpLm1hcCgoZWwpID0+IHRleHQoZWwuY2hpbGRyZW4pKVxuICAgICAgICAgICAgICAgIDogb3B0aW9uLmF0dHIoJ3ZhbHVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnaW5wdXQnOlxuICAgICAgICBjYXNlICdvcHRpb24nOiB7XG4gICAgICAgICAgICByZXR1cm4gcXVlcnlpbmdcbiAgICAgICAgICAgICAgICA/IHRoaXMuYXR0cigndmFsdWUnKVxuICAgICAgICAgICAgICAgIDogdGhpcy5hdHRyKCd2YWx1ZScsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBSZW1vdmUgYW4gYXR0cmlidXRlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZWxlbSAtIE5vZGUgdG8gcmVtb3ZlIGF0dHJpYnV0ZSBmcm9tLlxuICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcmVtb3ZlLlxuICovXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGUoZWxlbSwgbmFtZSkge1xuICAgIGlmICghZWxlbS5hdHRyaWJzIHx8ICFoYXNPd24oZWxlbS5hdHRyaWJzLCBuYW1lKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGRlbGV0ZSBlbGVtLmF0dHJpYnNbbmFtZV07XG59XG4vKipcbiAqIFNwbGl0cyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIG5hbWVzIHRvIGluZGl2aWR1YWwgbmFtZXMuXG4gKlxuICogQGNhdGVnb3J5IEF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBuYW1lcyAtIE5hbWVzIHRvIHNwbGl0LlxuICogQHJldHVybnMgLSBTcGxpdCBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gc3BsaXROYW1lcyhuYW1lcykge1xuICAgIHJldHVybiBuYW1lcyA/IG5hbWVzLnRyaW0oKS5zcGxpdChyc3BhY2UpIDogW107XG59XG4vKipcbiAqIE1ldGhvZCBmb3IgcmVtb3ZpbmcgYXR0cmlidXRlcyBieSBgbmFtZWAuXG4gKlxuICogQGNhdGVnb3J5IEF0dHJpYnV0ZXNcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJy5wZWFyJykucmVtb3ZlQXR0cignY2xhc3MnKS5wcm9wKCdvdXRlckhUTUwnKTtcbiAqIC8vPT4gPGxpPlBlYXI8L2xpPlxuICpcbiAqICQoJy5hcHBsZScpLmF0dHIoJ2lkJywgJ2Zhdm9yaXRlJyk7XG4gKiAkKCcuYXBwbGUnKS5yZW1vdmVBdHRyKCdpZCBjbGFzcycpLnByb3AoJ291dGVySFRNTCcpO1xuICogLy89PiA8bGk+QXBwbGU8L2xpPlxuICogYGBgXG4gKlxuICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSBhdHRyaWJ1dGUuXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9yZW1vdmVBdHRyL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUF0dHIobmFtZSkge1xuICAgIGNvbnN0IGF0dHJOYW1lcyA9IHNwbGl0TmFtZXMobmFtZSk7XG4gICAgZm9yIChjb25zdCBhdHRyTmFtZSBvZiBhdHRyTmFtZXMpIHtcbiAgICAgICAgZG9tRWFjaCh0aGlzLCAoZWxlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzVGFnKGVsZW0pKVxuICAgICAgICAgICAgICAgIHJlbW92ZUF0dHJpYnV0ZShlbGVtLCBhdHRyTmFtZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn1cbi8qKlxuICogQ2hlY2sgdG8gc2VlIGlmIF9hbnlfIG9mIHRoZSBtYXRjaGVkIGVsZW1lbnRzIGhhdmUgdGhlIGdpdmVuIGBjbGFzc05hbWVgLlxuICpcbiAqIEBjYXRlZ29yeSBBdHRyaWJ1dGVzXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCcucGVhcicpLmhhc0NsYXNzKCdwZWFyJyk7XG4gKiAvLz0+IHRydWVcbiAqXG4gKiAkKCdhcHBsZScpLmhhc0NsYXNzKCdmcnVpdCcpO1xuICogLy89PiBmYWxzZVxuICpcbiAqICQoJ2xpJykuaGFzQ2xhc3MoJ3BlYXInKTtcbiAqIC8vPT4gdHJ1ZVxuICogYGBgXG4gKlxuICogQHBhcmFtIGNsYXNzTmFtZSAtIE5hbWUgb2YgdGhlIGNsYXNzLlxuICogQHJldHVybnMgSW5kaWNhdGVzIGlmIGFuIGVsZW1lbnQgaGFzIHRoZSBnaXZlbiBgY2xhc3NOYW1lYC5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vaGFzQ2xhc3MvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzQ2xhc3MoY2xhc3NOYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMudG9BcnJheSgpLnNvbWUoKGVsZW0pID0+IHtcbiAgICAgICAgY29uc3QgY2xhenogPSBpc1RhZyhlbGVtKSAmJiBlbGVtLmF0dHJpYnNbJ2NsYXNzJ107XG4gICAgICAgIGxldCBpZHggPSAtMTtcbiAgICAgICAgaWYgKGNsYXp6ICYmIGNsYXNzTmFtZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGlkeCA9IGNsYXp6LmluZGV4T2YoY2xhc3NOYW1lLCBpZHggKyAxKSkgPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGlkeCArIGNsYXNzTmFtZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKChpZHggPT09IDAgfHwgcnNwYWNlLnRlc3QoY2xhenpbaWR4IC0gMV0pKSAmJlxuICAgICAgICAgICAgICAgICAgICAoZW5kID09PSBjbGF6ei5sZW5ndGggfHwgcnNwYWNlLnRlc3QoY2xhenpbZW5kXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG59XG4vKipcbiAqIEFkZHMgY2xhc3MoZXMpIHRvIGFsbCBvZiB0aGUgbWF0Y2hlZCBlbGVtZW50cy4gQWxzbyBhY2NlcHRzIGEgYGZ1bmN0aW9uYC5cbiAqXG4gKiBAY2F0ZWdvcnkgQXR0cmlidXRlc1xuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnLnBlYXInKS5hZGRDbGFzcygnZnJ1aXQnKS5wcm9wKCdvdXRlckhUTUwnKTtcbiAqIC8vPT4gPGxpIGNsYXNzPVwicGVhciBmcnVpdFwiPlBlYXI8L2xpPlxuICpcbiAqICQoJy5hcHBsZScpLmFkZENsYXNzKCdmcnVpdCByZWQnKS5wcm9wKCdvdXRlckhUTUwnKTtcbiAqIC8vPT4gPGxpIGNsYXNzPVwiYXBwbGUgZnJ1aXQgcmVkXCI+QXBwbGU8L2xpPlxuICogYGBgXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gTmFtZSBvZiBuZXcgY2xhc3MuXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9hZGRDbGFzcy99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRDbGFzcyh2YWx1ZSkge1xuICAgIC8vIFN1cHBvcnQgZnVuY3Rpb25zXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gZG9tRWFjaCh0aGlzLCAoZWwsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChpc1RhZyhlbCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBlbC5hdHRyaWJzWydjbGFzcyddIHx8ICcnO1xuICAgICAgICAgICAgICAgIGFkZENsYXNzLmNhbGwoW2VsXSwgdmFsdWUuY2FsbChlbCwgaSwgY2xhc3NOYW1lKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBSZXR1cm4gaWYgbm8gdmFsdWUgb3Igbm90IGEgc3RyaW5nIG9yIGZ1bmN0aW9uXG4gICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICBjb25zdCBjbGFzc05hbWVzID0gdmFsdWUuc3BsaXQocnNwYWNlKTtcbiAgICBjb25zdCBudW1FbGVtZW50cyA9IHRoaXMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXNbaV07XG4gICAgICAgIC8vIElmIHNlbGVjdGVkIGVsZW1lbnQgaXNuJ3QgYSB0YWcsIG1vdmUgb25cbiAgICAgICAgaWYgKCFpc1RhZyhlbCkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGNsYXNzZXMg4oCUIGFsd2F5cyBzZXQgeG1sTW9kZSB0byBmYWxzZSBoZXJlLCBhcyBpdCBkb2Vzbid0IG1hdHRlciBmb3IgY2xhc3Nlc1xuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBnZXRBdHRyKGVsLCAnY2xhc3MnLCBmYWxzZSk7XG4gICAgICAgIGlmIChjbGFzc05hbWUpIHtcbiAgICAgICAgICAgIGxldCBzZXRDbGFzcyA9IGAgJHtjbGFzc05hbWV9IGA7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBjbGFzcyBhbHJlYWR5IGV4aXN0c1xuICAgICAgICAgICAgZm9yIChjb25zdCBjbiBvZiBjbGFzc05hbWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXBwZW5kQ2xhc3MgPSBgJHtjbn0gYDtcbiAgICAgICAgICAgICAgICBpZiAoIXNldENsYXNzLmluY2x1ZGVzKGAgJHthcHBlbmRDbGFzc31gKSlcbiAgICAgICAgICAgICAgICAgICAgc2V0Q2xhc3MgKz0gYXBwZW5kQ2xhc3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRBdHRyKGVsLCAnY2xhc3MnLCBzZXRDbGFzcy50cmltKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0QXR0cihlbCwgJ2NsYXNzJywgY2xhc3NOYW1lcy5qb2luKCcgJykudHJpbSgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn1cbi8qKlxuICogUmVtb3ZlcyBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgY2xhc3NlcyBmcm9tIHRoZSBzZWxlY3RlZCBlbGVtZW50cy4gSWYgbm9cbiAqIGBjbGFzc05hbWVgIGlzIGRlZmluZWQsIGFsbCBjbGFzc2VzIHdpbGwgYmUgcmVtb3ZlZC4gQWxzbyBhY2NlcHRzIGFcbiAqIGBmdW5jdGlvbmAuXG4gKlxuICogQGNhdGVnb3J5IEF0dHJpYnV0ZXNcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJy5wZWFyJykucmVtb3ZlQ2xhc3MoJ3BlYXInKS5wcm9wKCdvdXRlckhUTUwnKTtcbiAqIC8vPT4gPGxpIGNsYXNzPVwiXCI+UGVhcjwvbGk+XG4gKlxuICogJCgnLmFwcGxlJykuYWRkQ2xhc3MoJ3JlZCcpLnJlbW92ZUNsYXNzKCkucHJvcCgnb3V0ZXJIVE1MJyk7XG4gKiAvLz0+IDxsaSBjbGFzcz1cIlwiPkFwcGxlPC9saT5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBuYW1lIC0gTmFtZSBvZiB0aGUgY2xhc3MuIElmIG5vdCBzcGVjaWZpZWQsIHJlbW92ZXMgYWxsIGVsZW1lbnRzLlxuICogQHJldHVybnMgVGhlIGluc3RhbmNlIGl0c2VsZi5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vcmVtb3ZlQ2xhc3MvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQ2xhc3MobmFtZSkge1xuICAgIC8vIEhhbmRsZSBpZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBkb21FYWNoKHRoaXMsIChlbCwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzVGFnKGVsKSkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzLmNhbGwoW2VsXSwgbmFtZS5jYWxsKGVsLCBpLCBlbC5hdHRyaWJzWydjbGFzcyddIHx8ICcnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBjbGFzc2VzID0gc3BsaXROYW1lcyhuYW1lKTtcbiAgICBjb25zdCBudW1DbGFzc2VzID0gY2xhc3Nlcy5sZW5ndGg7XG4gICAgY29uc3QgcmVtb3ZlQWxsID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4gZG9tRWFjaCh0aGlzLCAoZWwpID0+IHtcbiAgICAgICAgaWYgKCFpc1RhZyhlbCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChyZW1vdmVBbGwpIHtcbiAgICAgICAgICAgIC8vIFNob3J0IGNpcmN1aXQgdGhlIHJlbW92ZSBhbGwgY2FzZSBhcyB0aGlzIGlzIHRoZSBuaWNlIG9uZVxuICAgICAgICAgICAgZWwuYXR0cmlic1snY2xhc3MnXSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZWxDbGFzc2VzID0gc3BsaXROYW1lcyhlbC5hdHRyaWJzWydjbGFzcyddKTtcbiAgICAgICAgICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bUNsYXNzZXM7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZWxDbGFzc2VzLmluZGV4T2YoY2xhc3Nlc1tqXSk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBlbENsYXNzZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAqIFdlIGhhdmUgdG8gZG8gYW5vdGhlciBwYXNzIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZSBub3QgZHVwbGljYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIGNsYXNzZXMgbGlzdGVkXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICBlbC5hdHRyaWJzWydjbGFzcyddID0gZWxDbGFzc2VzLmpvaW4oJyAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBBZGQgb3IgcmVtb3ZlIGNsYXNzKGVzKSBmcm9tIHRoZSBtYXRjaGVkIGVsZW1lbnRzLCBkZXBlbmRpbmcgb24gZWl0aGVyIHRoZVxuICogY2xhc3MncyBwcmVzZW5jZSBvciB0aGUgdmFsdWUgb2YgdGhlIHN3aXRjaCBhcmd1bWVudC4gQWxzbyBhY2NlcHRzIGFcbiAqIGBmdW5jdGlvbmAuXG4gKlxuICogQGNhdGVnb3J5IEF0dHJpYnV0ZXNcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJy5hcHBsZS5ncmVlbicpLnRvZ2dsZUNsYXNzKCdmcnVpdCBncmVlbiByZWQnKS5wcm9wKCdvdXRlckhUTUwnKTtcbiAqIC8vPT4gPGxpIGNsYXNzPVwiYXBwbGUgZnJ1aXQgcmVkXCI+QXBwbGU8L2xpPlxuICpcbiAqICQoJy5hcHBsZS5ncmVlbicpLnRvZ2dsZUNsYXNzKCdmcnVpdCBncmVlbiByZWQnLCB0cnVlKS5wcm9wKCdvdXRlckhUTUwnKTtcbiAqIC8vPT4gPGxpIGNsYXNzPVwiYXBwbGUgZ3JlZW4gZnJ1aXQgcmVkXCI+QXBwbGU8L2xpPlxuICogYGBgXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gTmFtZSBvZiB0aGUgY2xhc3MuIENhbiBhbHNvIGJlIGEgZnVuY3Rpb24uXG4gKiBAcGFyYW0gc3RhdGVWYWwgLSBJZiBzcGVjaWZpZWQgdGhlIHN0YXRlIG9mIHRoZSBjbGFzcy5cbiAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBpdHNlbGYuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL3RvZ2dsZUNsYXNzL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKHZhbHVlLCBzdGF0ZVZhbCkge1xuICAgIC8vIFN1cHBvcnQgZnVuY3Rpb25zXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gZG9tRWFjaCh0aGlzLCAoZWwsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChpc1RhZyhlbCkpIHtcbiAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcy5jYWxsKFtlbF0sIHZhbHVlLmNhbGwoZWwsIGksIGVsLmF0dHJpYnNbJ2NsYXNzJ10gfHwgJycsIHN0YXRlVmFsKSwgc3RhdGVWYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gUmV0dXJuIGlmIG5vIHZhbHVlIG9yIG5vdCBhIHN0cmluZyBvciBmdW5jdGlvblxuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJylcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IHZhbHVlLnNwbGl0KHJzcGFjZSk7XG4gICAgY29uc3QgbnVtQ2xhc3NlcyA9IGNsYXNzTmFtZXMubGVuZ3RoO1xuICAgIGNvbnN0IHN0YXRlID0gdHlwZW9mIHN0YXRlVmFsID09PSAnYm9vbGVhbicgPyAoc3RhdGVWYWwgPyAxIDogLTEpIDogMDtcbiAgICBjb25zdCBudW1FbGVtZW50cyA9IHRoaXMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXNbaV07XG4gICAgICAgIC8vIElmIHNlbGVjdGVkIGVsZW1lbnQgaXNuJ3QgYSB0YWcsIG1vdmUgb25cbiAgICAgICAgaWYgKCFpc1RhZyhlbCkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY29uc3QgZWxlbWVudENsYXNzZXMgPSBzcGxpdE5hbWVzKGVsLmF0dHJpYnNbJ2NsYXNzJ10pO1xuICAgICAgICAvLyBDaGVjayBpZiBjbGFzcyBhbHJlYWR5IGV4aXN0c1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bUNsYXNzZXM7IGorKykge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNsYXNzIG5hbWUgaXMgY3VycmVudGx5IGRlZmluZWRcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZWxlbWVudENsYXNzZXMuaW5kZXhPZihjbGFzc05hbWVzW2pdKTtcbiAgICAgICAgICAgIC8vIEFkZCBpZiBzdGF0ZVZhbHVlID09PSB0cnVlIG9yIHdlIGFyZSB0b2dnbGluZyBhbmQgdGhlcmUgaXMgbm8gdmFsdWVcbiAgICAgICAgICAgIGlmIChzdGF0ZSA+PSAwICYmIGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRDbGFzc2VzLnB1c2goY2xhc3NOYW1lc1tqXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdGF0ZSA8PSAwICYmIGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSByZW1vdmUgYnV0IG9ubHkgaWYgdGhlIGl0ZW0gZXhpc3RzXG4gICAgICAgICAgICAgICAgZWxlbWVudENsYXNzZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbC5hdHRyaWJzWydjbGFzcyddID0gZWxlbWVudENsYXNzZXMuam9pbignICcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF0dHJpYnV0ZXMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/cheerio/dist/esm/api/attributes.js\n"); /***/ }), /***/ "(rsc)/./node_modules/cheerio/dist/esm/api/css.js": /*!**************************************************!*\ !*** ./node_modules/cheerio/dist/esm/api/css.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ css: () => (/* binding */ css)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ \"(rsc)/./node_modules/cheerio/dist/esm/utils.js\");\n/* harmony import */ var domhandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! domhandler */ \"(rsc)/./node_modules/domhandler/lib/esm/index.js\");\n\n\n/**\n * Set multiple CSS properties for every matched element.\n *\n * @category CSS\n * @param prop - The names of the properties.\n * @param val - The new values.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/css/}\n */\nfunction css(prop, val) {\n if ((prop != null && val != null) ||\n // When `prop` is a \"plain\" object\n (typeof prop === 'object' && !Array.isArray(prop))) {\n return (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.domEach)(this, (el, i) => {\n if ((0,domhandler__WEBPACK_IMPORTED_MODULE_1__.isTag)(el)) {\n // `prop` can't be an array here anymore.\n setCss(el, prop, val, i);\n }\n });\n }\n if (this.length === 0) {\n return undefined;\n }\n return getCss(this[0], prop);\n}\n/**\n * Set styles of all elements.\n *\n * @private\n * @param el - Element to set style of.\n * @param prop - Name of property.\n * @param value - Value to set property to.\n * @param idx - Optional index within the selection.\n */\nfunction setCss(el, prop, value, idx) {\n if (typeof prop === 'string') {\n const styles = getCss(el);\n const val = typeof value === 'function' ? value.call(el, idx, styles[prop]) : value;\n if (val === '') {\n delete styles[prop];\n }\n else if (val != null) {\n styles[prop] = val;\n }\n el.attribs['style'] = stringify(styles);\n }\n else if (typeof prop === 'object') {\n const keys = Object.keys(prop);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n setCss(el, k, prop[k], i);\n }\n }\n}\nfunction getCss(el, prop) {\n if (!el || !(0,domhandler__WEBPACK_IMPORTED_MODULE_1__.isTag)(el))\n return;\n const styles = parse(el.attribs['style']);\n if (typeof prop === 'string') {\n return styles[prop];\n }\n if (Array.isArray(prop)) {\n const newStyles = {};\n for (const item of prop) {\n if (styles[item] != null) {\n newStyles[item] = styles[item];\n }\n }\n return newStyles;\n }\n return styles;\n}\n/**\n * Stringify `obj` to styles.\n *\n * @private\n * @category CSS\n * @param obj - Object to stringify.\n * @returns The serialized styles.\n */\nfunction stringify(obj) {\n return Object.keys(obj).reduce((str, prop) => `${str}${str ? ' ' : ''}${prop}: ${obj[prop]};`, '');\n}\n/**\n * Parse `styles`.\n *\n * @private\n * @category CSS\n * @param styles - Styles to be parsed.\n * @returns The parsed styles.\n */\nfunction parse(styles) {\n styles = (styles || '').trim();\n if (!styles)\n return {};\n const obj = {};\n let key;\n for (const str of styles.split(';')) {\n const n = str.indexOf(':');\n // If there is no :, or if it is the first/last character, add to the previous item's value\n if (n < 1 || n === str.length - 1) {\n const trimmed = str.trimEnd();\n if (trimmed.length > 0 && key !== undefined) {\n obj[key] += `;${trimmed}`;\n }\n }\n else {\n key = str.slice(0, n).trim();\n obj[key] = str.slice(n + 1).trim();\n }\n }\n return obj;\n}\n//# sourceMappingURL=css.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvY2hlZXJpby9kaXN0L2VzbS9hcGkvY3NzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFzQztBQUNIO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtEQUFPO0FBQ3RCLGdCQUFnQixpREFBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlEQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxJQUFJLFdBQVc7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsRUFBRSxRQUFRO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaG9saWRheS1kZWFsLWZpbmRlci8uL25vZGVfbW9kdWxlcy9jaGVlcmlvL2Rpc3QvZXNtL2FwaS9jc3MuanM/MTI4ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkb21FYWNoIH0gZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHsgaXNUYWcgfSBmcm9tICdkb21oYW5kbGVyJztcbi8qKlxuICogU2V0IG11bHRpcGxlIENTUyBwcm9wZXJ0aWVzIGZvciBldmVyeSBtYXRjaGVkIGVsZW1lbnQuXG4gKlxuICogQGNhdGVnb3J5IENTU1xuICogQHBhcmFtIHByb3AgLSBUaGUgbmFtZXMgb2YgdGhlIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gdmFsIC0gVGhlIG5ldyB2YWx1ZXMuXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9jc3MvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzKHByb3AsIHZhbCkge1xuICAgIGlmICgocHJvcCAhPSBudWxsICYmIHZhbCAhPSBudWxsKSB8fFxuICAgICAgICAvLyBXaGVuIGBwcm9wYCBpcyBhIFwicGxhaW5cIiBvYmplY3RcbiAgICAgICAgKHR5cGVvZiBwcm9wID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShwcm9wKSkpIHtcbiAgICAgICAgcmV0dXJuIGRvbUVhY2godGhpcywgKGVsLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNUYWcoZWwpKSB7XG4gICAgICAgICAgICAgICAgLy8gYHByb3BgIGNhbid0IGJlIGFuIGFycmF5IGhlcmUgYW55bW9yZS5cbiAgICAgICAgICAgICAgICBzZXRDc3MoZWwsIHByb3AsIHZhbCwgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGdldENzcyh0aGlzWzBdLCBwcm9wKTtcbn1cbi8qKlxuICogU2V0IHN0eWxlcyBvZiBhbGwgZWxlbWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBlbCAtIEVsZW1lbnQgdG8gc2V0IHN0eWxlIG9mLlxuICogQHBhcmFtIHByb3AgLSBOYW1lIG9mIHByb3BlcnR5LlxuICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gc2V0IHByb3BlcnR5IHRvLlxuICogQHBhcmFtIGlkeCAtIE9wdGlvbmFsIGluZGV4IHdpdGhpbiB0aGUgc2VsZWN0aW9uLlxuICovXG5mdW5jdGlvbiBzZXRDc3MoZWwsIHByb3AsIHZhbHVlLCBpZHgpIHtcbiAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlcyA9IGdldENzcyhlbCk7XG4gICAgICAgIGNvbnN0IHZhbCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLmNhbGwoZWwsIGlkeCwgc3R5bGVzW3Byb3BdKSA6IHZhbHVlO1xuICAgICAgICBpZiAodmFsID09PSAnJykge1xuICAgICAgICAgICAgZGVsZXRlIHN0eWxlc1twcm9wXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgc3R5bGVzW3Byb3BdID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIGVsLmF0dHJpYnNbJ3N0eWxlJ10gPSBzdHJpbmdpZnkoc3R5bGVzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHByb3AgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9wKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBrID0ga2V5c1tpXTtcbiAgICAgICAgICAgIHNldENzcyhlbCwgaywgcHJvcFtrXSwgaSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBnZXRDc3MoZWwsIHByb3ApIHtcbiAgICBpZiAoIWVsIHx8ICFpc1RhZyhlbCkpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBzdHlsZXMgPSBwYXJzZShlbC5hdHRyaWJzWydzdHlsZSddKTtcbiAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBzdHlsZXNbcHJvcF07XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3ApKSB7XG4gICAgICAgIGNvbnN0IG5ld1N0eWxlcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcHJvcCkge1xuICAgICAgICAgICAgaWYgKHN0eWxlc1tpdGVtXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbmV3U3R5bGVzW2l0ZW1dID0gc3R5bGVzW2l0ZW1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdTdHlsZXM7XG4gICAgfVxuICAgIHJldHVybiBzdHlsZXM7XG59XG4vKipcbiAqIFN0cmluZ2lmeSBgb2JqYCB0byBzdHlsZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjYXRlZ29yeSBDU1NcbiAqIEBwYXJhbSBvYmogLSBPYmplY3QgdG8gc3RyaW5naWZ5LlxuICogQHJldHVybnMgVGhlIHNlcmlhbGl6ZWQgc3R5bGVzLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnkob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikucmVkdWNlKChzdHIsIHByb3ApID0+IGAke3N0cn0ke3N0ciA/ICcgJyA6ICcnfSR7cHJvcH06ICR7b2JqW3Byb3BdfTtgLCAnJyk7XG59XG4vKipcbiAqIFBhcnNlIGBzdHlsZXNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2F0ZWdvcnkgQ1NTXG4gKiBAcGFyYW0gc3R5bGVzIC0gU3R5bGVzIHRvIGJlIHBhcnNlZC5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgc3R5bGVzLlxuICovXG5mdW5jdGlvbiBwYXJzZShzdHlsZXMpIHtcbiAgICBzdHlsZXMgPSAoc3R5bGVzIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCFzdHlsZXMpXG4gICAgICAgIHJldHVybiB7fTtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBsZXQga2V5O1xuICAgIGZvciAoY29uc3Qgc3RyIG9mIHN0eWxlcy5zcGxpdCgnOycpKSB7XG4gICAgICAgIGNvbnN0IG4gPSBzdHIuaW5kZXhPZignOicpO1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyA6LCBvciBpZiBpdCBpcyB0aGUgZmlyc3QvbGFzdCBjaGFyYWN0ZXIsIGFkZCB0byB0aGUgcHJldmlvdXMgaXRlbSdzIHZhbHVlXG4gICAgICAgIGlmIChuIDwgMSB8fCBuID09PSBzdHIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY29uc3QgdHJpbW1lZCA9IHN0ci50cmltRW5kKCk7XG4gICAgICAgICAgICBpZiAodHJpbW1lZC5sZW5ndGggPiAwICYmIGtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgb2JqW2tleV0gKz0gYDske3RyaW1tZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGtleSA9IHN0ci5zbGljZSgwLCBuKS50cmltKCk7XG4gICAgICAgICAgICBvYmpba2V5XSA9IHN0ci5zbGljZShuICsgMSkudHJpbSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jc3MuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/cheerio/dist/esm/api/css.js\n"); /***/ }), /***/ "(rsc)/./node_modules/cheerio/dist/esm/api/extract.js": /*!******************************************************!*\ !*** ./node_modules/cheerio/dist/esm/api/extract.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ extract: () => (/* binding */ extract)\n/* harmony export */ });\nfunction getExtractDescr(descr) {\n var _a;\n if (typeof descr === 'string') {\n return { selector: descr, value: 'textContent' };\n }\n return {\n selector: descr.selector,\n value: (_a = descr.value) !== null && _a !== void 0 ? _a : 'textContent',\n };\n}\n/**\n * Extract multiple values from a document, and store them in an object.\n *\n * @param map - An object containing key-value pairs. The keys are the names of\n * the properties to be created on the object, and the values are the\n * selectors to be used to extract the values.\n * @returns An object containing the extracted values.\n */\nfunction extract(map) {\n const ret = {};\n for (const key in map) {\n const descr = map[key];\n const isArray = Array.isArray(descr);\n const { selector, value } = getExtractDescr(isArray ? descr[0] : descr);\n const fn = typeof value === 'function'\n ? value\n : typeof value === 'string'\n ? (el) => this._make(el).prop(value)\n : (el) => this._make(el).extract(value);\n if (isArray) {\n ret[key] = this._findBySelector(selector, Number.POSITIVE_INFINITY)\n .map((_, el) => fn(el, key, ret))\n .get();\n }\n else {\n const $ = this._findBySelector(selector, 1);\n ret[key] = $.length > 0 ? fn($[0], key, ret) : undefined;\n }\n }\n return ret;\n}\n//# sourceMappingURL=extract.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvY2hlZXJpby9kaXN0L2VzbS9hcGkvZXh0cmFjdC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGtCQUFrQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ob2xpZGF5LWRlYWwtZmluZGVyLy4vbm9kZV9tb2R1bGVzL2NoZWVyaW8vZGlzdC9lc20vYXBpL2V4dHJhY3QuanM/ZTQ5ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBnZXRFeHRyYWN0RGVzY3IoZGVzY3IpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHR5cGVvZiBkZXNjciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHsgc2VsZWN0b3I6IGRlc2NyLCB2YWx1ZTogJ3RleHRDb250ZW50JyB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBzZWxlY3RvcjogZGVzY3Iuc2VsZWN0b3IsXG4gICAgICAgIHZhbHVlOiAoX2EgPSBkZXNjci52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ3RleHRDb250ZW50JyxcbiAgICB9O1xufVxuLyoqXG4gKiBFeHRyYWN0IG11bHRpcGxlIHZhbHVlcyBmcm9tIGEgZG9jdW1lbnQsIGFuZCBzdG9yZSB0aGVtIGluIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWFwIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzLiBUaGUga2V5cyBhcmUgdGhlIG5hbWVzIG9mXG4gKiAgIHRoZSBwcm9wZXJ0aWVzIHRvIGJlIGNyZWF0ZWQgb24gdGhlIG9iamVjdCwgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZVxuICogICBzZWxlY3RvcnMgdG8gYmUgdXNlZCB0byBleHRyYWN0IHRoZSB2YWx1ZXMuXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgZXh0cmFjdGVkIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3QobWFwKSB7XG4gICAgY29uc3QgcmV0ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gbWFwKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyID0gbWFwW2tleV07XG4gICAgICAgIGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGRlc2NyKTtcbiAgICAgICAgY29uc3QgeyBzZWxlY3RvciwgdmFsdWUgfSA9IGdldEV4dHJhY3REZXNjcihpc0FycmF5ID8gZGVzY3JbMF0gOiBkZXNjcik7XG4gICAgICAgIGNvbnN0IGZuID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICA6IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICA/IChlbCkgPT4gdGhpcy5fbWFrZShlbCkucHJvcCh2YWx1ZSlcbiAgICAgICAgICAgICAgICA6IChlbCkgPT4gdGhpcy5fbWFrZShlbCkuZXh0cmFjdCh2YWx1ZSk7XG4gICAgICAgIGlmIChpc0FycmF5KSB7XG4gICAgICAgICAgICByZXRba2V5XSA9IHRoaXMuX2ZpbmRCeVNlbGVjdG9yKHNlbGVjdG9yLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpXG4gICAgICAgICAgICAgICAgLm1hcCgoXywgZWwpID0+IGZuKGVsLCBrZXksIHJldCkpXG4gICAgICAgICAgICAgICAgLmdldCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgJCA9IHRoaXMuX2ZpbmRCeVNlbGVjdG9yKHNlbGVjdG9yLCAxKTtcbiAgICAgICAgICAgIHJldFtrZXldID0gJC5sZW5ndGggPiAwID8gZm4oJFswXSwga2V5LCByZXQpIDogdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leHRyYWN0LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/cheerio/dist/esm/api/extract.js\n"); /***/ }), /***/ "(rsc)/./node_modules/cheerio/dist/esm/api/forms.js": /*!****************************************************!*\ !*** ./node_modules/cheerio/dist/esm/api/forms.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ serialize: () => (/* binding */ serialize),\n/* harmony export */ serializeArray: () => (/* binding */ serializeArray)\n/* harmony export */ });\n/* harmony import */ var domhandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! domhandler */ \"(rsc)/./node_modules/domhandler/lib/esm/index.js\");\n\n/*\n * https://github.com/jquery/jquery/blob/2.1.3/src/manipulation/var/rcheckableType.js\n * https://github.com/jquery/jquery/blob/2.1.3/src/serialize.js\n */\nconst submittableSelector = 'input,select,textarea,keygen';\nconst r20 = /%20/g;\nconst rCRLF = /\\r?\\n/g;\n/**\n * Encode a set of form elements as a string for submission.\n *\n * @category Forms\n * @example\n *\n * ```js\n * $('
    ').serialize();\n * //=> 'foo=bar'\n * ```\n *\n * @returns The serialized form.\n * @see {@link https://api.jquery.com/serialize/}\n */\nfunction serialize() {\n // Convert form elements into name/value objects\n const arr = this.serializeArray();\n // Serialize each element into a key/value string\n const retArr = arr.map((data) => `${encodeURIComponent(data.name)}=${encodeURIComponent(data.value)}`);\n // Return the resulting serialization\n return retArr.join('&').replace(r20, '+');\n}\n/**\n * Encode a set of form elements as an array of names and values.\n *\n * @category Forms\n * @example\n *\n * ```js\n * $('
    ').serializeArray();\n * //=> [ { name: 'foo', value: 'bar' } ]\n * ```\n *\n * @returns The serialized form.\n * @see {@link https://api.jquery.com/serializeArray/}\n */\nfunction serializeArray() {\n // Resolve all form elements from either forms or collections of form elements\n return this.map((_, elem) => {\n const $elem = this._make(elem);\n if ((0,domhandler__WEBPACK_IMPORTED_MODULE_0__.isTag)(elem) && elem.name === 'form') {\n return $elem.find(submittableSelector).toArray();\n }\n return $elem.filter(submittableSelector).toArray();\n })\n .filter(\n // Verify elements have a name (`attr.name`) and are not disabled (`:enabled`)\n '[name!=\"\"]:enabled' +\n // And cannot be clicked (`[type=submit]`) or are used in `x-www-form-urlencoded` (`[type=file]`)\n ':not(:submit, :button, :image, :reset, :file)' +\n // And are either checked/don't have a checkable state\n ':matches([checked], :not(:checkbox, :radio))')\n .map((_, elem) => {\n var _a;\n const $elem = this._make(elem);\n const name = $elem.attr('name'); // We have filtered for elements with a name before.\n // If there is no value set (e.g. `undefined`, `null`), then default value to empty\n const value = (_a = $elem.val()) !== null && _a !== void 0 ? _a : '';\n // If we have an array of values (e.g. `