{"version":3,"file":"unhead-049a15ce.js","sources":["../../node_modules/unhead/dist/index.mjs"],"sourcesContent":["import { createHooks } from 'hookable';\nimport { PatchDomOnEntryUpdatesPlugin, maybeGetSSRHash } from '@unhead/dom';\nimport { defineHeadPlugin, resolveTitleTemplate, hashTag, hashCode, tagDedupeKey, HasElementTags, asArray as asArray$1, TagConfigKeys, TagsWithInnerContent, ValidHeadTags } from '@unhead/shared';\n\nconst TAG_WEIGHTS = {\n // tags\n base: -1,\n title: 1\n};\nconst TAG_ALIASES = {\n // relative scores to their default values\n critical: -8,\n high: -1,\n low: 2\n};\nfunction tagWeight(tag) {\n let weight = 10;\n const priority = tag.tagPriority;\n if (typeof priority === \"number\")\n return priority;\n if (tag.tag === \"meta\") {\n if (tag.props.charset)\n weight = -2;\n if (tag.props[\"http-equiv\"] === \"content-security-policy\")\n weight = 0;\n } else if (tag.tag in TAG_WEIGHTS) {\n weight = TAG_WEIGHTS[tag.tag];\n }\n if (typeof priority === \"string\" && priority in TAG_ALIASES) {\n return weight + TAG_ALIASES[priority];\n }\n return weight;\n}\nconst SortModifiers = [{ prefix: \"before:\", offset: -1 }, { prefix: \"after:\", offset: 1 }];\nfunction SortTagsPlugin() {\n return defineHeadPlugin({\n hooks: {\n \"tags:resolve\": (ctx) => {\n const tagPositionForKey = (key) => ctx.tags.find((tag) => tag._d === key)?._p;\n for (const { prefix, offset } of SortModifiers) {\n for (const tag of ctx.tags.filter((tag2) => typeof tag2.tagPriority === \"string\" && tag2.tagPriority.startsWith(prefix))) {\n const position = tagPositionForKey(\n tag.tagPriority.replace(prefix, \"\")\n );\n if (typeof position !== \"undefined\")\n tag._p = position + offset;\n }\n }\n ctx.tags.sort((a, b) => a._p - b._p).sort((a, b) => tagWeight(a) - tagWeight(b));\n }\n }\n });\n}\n\nfunction TitleTemplatePlugin() {\n return defineHeadPlugin({\n hooks: {\n \"tags:resolve\": (ctx) => {\n const { tags } = ctx;\n let titleTemplateIdx = tags.findIndex((i) => i.tag === \"titleTemplate\");\n const titleIdx = tags.findIndex((i) => i.tag === \"title\");\n if (titleIdx !== -1 && titleTemplateIdx !== -1) {\n const newTitle = resolveTitleTemplate(\n tags[titleTemplateIdx].textContent,\n tags[titleIdx].textContent\n );\n if (newTitle !== null) {\n tags[titleIdx].textContent = newTitle || tags[titleIdx].textContent;\n } else {\n delete tags[titleIdx];\n }\n } else if (titleTemplateIdx !== -1) {\n const newTitle = resolveTitleTemplate(\n tags[titleTemplateIdx].textContent\n );\n if (newTitle !== null) {\n tags[titleTemplateIdx].textContent = newTitle;\n tags[titleTemplateIdx].tag = \"title\";\n titleTemplateIdx = -1;\n }\n }\n if (titleTemplateIdx !== -1) {\n delete tags[titleTemplateIdx];\n }\n ctx.tags = tags.filter(Boolean);\n }\n }\n });\n}\n\nfunction DeprecatedTagAttrPlugin() {\n return defineHeadPlugin({\n hooks: {\n \"tag:normalise\": function({ tag }) {\n if (typeof tag.props.body !== \"undefined\") {\n tag.tagPosition = \"bodyClose\";\n delete tag.props.body;\n }\n }\n }\n });\n}\n\nconst DupeableTags = [\"link\", \"style\", \"script\", \"noscript\"];\nfunction ProvideTagHashPlugin() {\n return defineHeadPlugin({\n hooks: {\n \"tag:normalise\": ({ tag, resolvedOptions }) => {\n if (resolvedOptions.experimentalHashHydration === true) {\n tag._h = hashTag(tag);\n }\n if (tag.key && DupeableTags.includes(tag.tag)) {\n tag._h = hashCode(tag.key);\n tag.props[`data-h-${tag._h}`] = \"\";\n }\n }\n }\n });\n}\n\nconst ValidEventTags = [\"script\", \"link\", \"bodyAttrs\"];\nfunction EventHandlersPlugin() {\n const stripEventHandlers = (mode, tag) => {\n const props = {};\n const eventHandlers = {};\n Object.entries(tag.props).forEach(([key, value]) => {\n if (key.startsWith(\"on\") && typeof value === \"function\")\n eventHandlers[key] = value;\n else\n props[key] = value;\n });\n let delayedSrc;\n if (mode === \"dom\" && tag.tag === \"script\" && typeof props.src === \"string\" && typeof eventHandlers.onload !== \"undefined\") {\n delayedSrc = props.src;\n delete props.src;\n }\n return { props, eventHandlers, delayedSrc };\n };\n return defineHeadPlugin({\n hooks: {\n \"ssr:render\": function(ctx) {\n ctx.tags = ctx.tags.map((tag) => {\n if (!ValidEventTags.includes(tag.tag))\n return tag;\n if (!Object.entries(tag.props).find(([key, value]) => key.startsWith(\"on\") && typeof value === \"function\"))\n return tag;\n tag.props = stripEventHandlers(\"ssr\", tag).props;\n return tag;\n });\n },\n \"dom:beforeRenderTag\": function(ctx) {\n if (!ValidEventTags.includes(ctx.tag.tag))\n return;\n if (!Object.entries(ctx.tag.props).find(([key, value]) => key.startsWith(\"on\") && typeof value === \"function\"))\n return;\n const { props, eventHandlers, delayedSrc } = stripEventHandlers(\"dom\", ctx.tag);\n if (!Object.keys(eventHandlers).length)\n return;\n ctx.tag.props = props;\n ctx.tag._eventHandlers = eventHandlers;\n ctx.tag._delayedSrc = delayedSrc;\n },\n \"dom:renderTag\": function(ctx) {\n const $el = ctx.$el;\n if (!ctx.tag._eventHandlers || !$el)\n return;\n const $eventListenerTarget = ctx.tag.tag === \"bodyAttrs\" && typeof window !== \"undefined\" ? window : $el;\n Object.entries(ctx.tag._eventHandlers).forEach(([k, value]) => {\n const sdeKey = `${ctx.tag._d || ctx.tag._p}:${k}`;\n const eventName = k.slice(2).toLowerCase();\n const eventDedupeKey = `data-h-${eventName}`;\n ctx.markSideEffect(sdeKey, () => {\n });\n if ($el.hasAttribute(eventDedupeKey))\n return;\n const handler = value;\n $el.setAttribute(eventDedupeKey, \"\");\n $eventListenerTarget.addEventListener(eventName, handler);\n if (ctx.entry) {\n ctx.entry._sde[sdeKey] = () => {\n $eventListenerTarget.removeEventListener(eventName, handler);\n $el.removeAttribute(eventDedupeKey);\n };\n }\n });\n if (ctx.tag._delayedSrc) {\n $el.setAttribute(\"src\", ctx.tag._delayedSrc);\n }\n }\n }\n });\n}\n\nconst UsesMergeStrategy = [\"templateParams\", \"htmlAttrs\", \"bodyAttrs\"];\nfunction DedupesTagsPlugin() {\n return defineHeadPlugin({\n hooks: {\n \"tag:normalise\": function({ tag }) {\n [\"hid\", \"vmid\", \"key\"].forEach((key) => {\n if (tag.props[key]) {\n tag.key = tag.props[key];\n delete tag.props[key];\n }\n });\n const generatedKey = tagDedupeKey(tag);\n const dedupe = generatedKey || (tag.key ? `${tag.tag}:${tag.key}` : false);\n if (dedupe)\n tag._d = dedupe;\n },\n \"tags:resolve\": function(ctx) {\n const deduping = {};\n ctx.tags.forEach((tag) => {\n const dedupeKey = (tag.key ? `${tag.tag}:${tag.key}` : tag._d) || tag._p;\n const dupedTag = deduping[dedupeKey];\n if (dupedTag) {\n let strategy = tag?.tagDuplicateStrategy;\n if (!strategy && UsesMergeStrategy.includes(tag.tag))\n strategy = \"merge\";\n if (strategy === \"merge\") {\n const oldProps = dupedTag.props;\n [\"class\", \"style\"].forEach((key) => {\n if (tag.props[key] && oldProps[key]) {\n if (key === \"style\" && !oldProps[key].endsWith(\";\"))\n oldProps[key] += \";\";\n tag.props[key] = `${oldProps[key]} ${tag.props[key]}`;\n }\n });\n deduping[dedupeKey].props = {\n ...oldProps,\n ...tag.props\n };\n return;\n } else if (tag._e === dupedTag._e) {\n dupedTag._duped = dupedTag._duped || [];\n tag._d = `${dupedTag._d}:${dupedTag._duped.length + 1}`;\n dupedTag._duped.push(tag);\n return;\n } else if (tagWeight(tag) > tagWeight(dupedTag)) {\n return;\n }\n }\n const propCount = Object.keys(tag.props).length + (tag.innerHTML ? 1 : 0) + (tag.textContent ? 1 : 0);\n if (HasElementTags.includes(tag.tag) && propCount === 0) {\n delete deduping[dedupeKey];\n return;\n }\n deduping[dedupeKey] = tag;\n });\n const newTags = [];\n Object.values(deduping).forEach((tag) => {\n const dupes = tag._duped;\n delete tag._duped;\n newTags.push(tag);\n if (dupes)\n newTags.push(...dupes);\n });\n ctx.tags = newTags;\n }\n }\n });\n}\n\nfunction processTemplateParams(s, config) {\n function sub(token) {\n if ([\"s\", \"pageTitle\"].includes(token))\n return config.pageTitle;\n let val;\n if (token.includes(\".\")) {\n val = token.split(\".\").reduce((acc, key) => acc ? acc[key] || void 0 : void 0, config);\n } else {\n val = config[token];\n }\n return typeof val !== \"undefined\" ? val || \"\" : false;\n }\n let decoded = s;\n try {\n decoded = decodeURI(s);\n } catch {\n }\n const tokens = (decoded.match(/%(\\w+\\.+\\w+)|%(\\w+)/g) || []).sort().reverse();\n tokens.forEach((token) => {\n const re = sub(token.slice(1));\n if (typeof re === \"string\") {\n s = s.replace(new RegExp(`\\\\${token}(\\\\W|$)`, \"g\"), `${re}$1`).trim();\n }\n });\n if (config.separator) {\n if (s.endsWith(config.separator))\n s = s.slice(0, -config.separator.length).trim();\n if (s.startsWith(config.separator))\n s = s.slice(config.separator.length).trim();\n s = s.replace(new RegExp(`\\\\${config.separator}\\\\s*\\\\${config.separator}`, \"g\"), config.separator);\n }\n return s;\n}\nfunction TemplateParamsPlugin() {\n return defineHeadPlugin({\n hooks: {\n \"tags:resolve\": (ctx) => {\n const { tags } = ctx;\n const title = tags.find((tag) => tag.tag === \"title\")?.textContent;\n const idx = tags.findIndex((tag) => tag.tag === \"templateParams\");\n const params = idx !== -1 ? tags[idx].props : {};\n params.pageTitle = params.pageTitle || title || \"\";\n for (const tag of tags) {\n if ([\"titleTemplate\", \"title\"].includes(tag.tag) && typeof tag.textContent === \"string\") {\n tag.textContent = processTemplateParams(tag.textContent, params);\n } else if (tag.tag === \"meta\" && typeof tag.props.content === \"string\") {\n tag.props.content = processTemplateParams(tag.props.content, params);\n } else if (tag.tag === \"link\" && typeof tag.props.href === \"string\") {\n tag.props.href = processTemplateParams(tag.props.href, params);\n } else if (tag.tag === \"script\" && [\"application/json\", \"application/ld+json\"].includes(tag.props.type) && typeof tag.innerHTML === \"string\") {\n try {\n tag.innerHTML = JSON.stringify(JSON.parse(tag.innerHTML), (key, val) => {\n if (typeof val === \"string\")\n return processTemplateParams(val, params);\n return val;\n });\n } catch {\n }\n }\n }\n ctx.tags = tags.filter((tag) => tag.tag !== \"templateParams\");\n }\n }\n });\n}\n\nconst IsBrowser = typeof window !== \"undefined\";\n\nlet activeHead;\nfunction setActiveHead(head) {\n return activeHead = head;\n}\nfunction getActiveHead() {\n return activeHead;\n}\n\nfunction useHead(input, options = {}) {\n const head = getActiveHead();\n if (head) {\n const isBrowser = IsBrowser || head.resolvedOptions?.document;\n if (options.mode === \"server\" && isBrowser || options.mode === \"client\" && !isBrowser)\n return;\n return head.push(input, options);\n }\n}\n\nfunction useHeadSafe(input, options = {}) {\n return useHead(input, {\n ...options || {},\n transform: whitelistSafeInput\n });\n}\n\nfunction useServerHead(input, options = {}) {\n return useHead(input, { ...options, mode: \"server\" });\n}\n\nfunction useServerHeadSafe(input, options = {}) {\n return useHeadSafe(input, { ...options, mode: \"server\" });\n}\n\nfunction useSeoMeta(input, options) {\n const { title, titleTemplate, ...meta } = input;\n return useHead({\n title,\n titleTemplate,\n meta: unpackMeta(meta)\n }, options);\n}\n\nfunction useServerSeoMeta(input, options) {\n return useSeoMeta(input, {\n ...options || {},\n mode: \"server\"\n });\n}\n\nfunction useTagTitle(title) {\n return useHead({ title });\n}\nfunction useTagBase(base) {\n return useHead({ base });\n}\nfunction useTagMeta(meta) {\n return useHead({ meta: asArray$1(meta) });\n}\nfunction useTagMetaFlat(meta) {\n return useTagMeta(unpackMeta(meta));\n}\nfunction useTagLink(link) {\n return useHead({ link: asArray$1(link) });\n}\nfunction useTagScript(script) {\n return useHead({ script: asArray$1(script) });\n}\nfunction useTagStyle(style) {\n return useHead({ style: asArray$1(style) });\n}\nfunction useTagNoscript(noscript) {\n return useHead({ noscript: asArray$1(noscript) });\n}\nfunction useHtmlAttrs(attrs) {\n return useHead({ htmlAttrs: attrs });\n}\nfunction useBodyAttrs(attrs) {\n return useHead({ bodyAttrs: attrs });\n}\nfunction useTitleTemplate(titleTemplate) {\n return useHead({ titleTemplate });\n}\nfunction useServerTagTitle(title) {\n return useServerHead({ title });\n}\nfunction useServerTagBase(base) {\n return useServerHead({ base });\n}\nfunction useServerTagMeta(meta) {\n return useServerHead({ meta: asArray$1(meta) });\n}\nfunction useServerTagMetaFlat(meta) {\n return useServerTagMeta(unpackMeta(meta));\n}\nfunction useServerTagLink(link) {\n return useServerHead({ link: asArray$1(link) });\n}\nfunction useServerTagScript(script) {\n return useServerHead({ script: asArray$1(script) });\n}\nfunction useServerTagStyle(style) {\n return useServerHead({ style: asArray$1(style) });\n}\nfunction useServerTagNoscript(noscript) {\n return useServerHead({ noscript: asArray$1(noscript) });\n}\nfunction useServerHtmlAttrs(attrs) {\n return useServerHead({ htmlAttrs: attrs });\n}\nfunction useServerBodyAttrs(attrs) {\n return useServerHead({ bodyAttrs: attrs });\n}\nfunction useServerTitleTemplate(titleTemplate) {\n return useServerHead({ titleTemplate });\n}\n\nfunction asArray(input) {\n return Array.isArray(input) ? input : [input];\n}\nconst InternalKeySymbol = \"_$key\";\nfunction packObject(input, options) {\n const keys = Object.keys(input);\n let [k, v] = keys;\n options = options || {};\n options.key = options.key || k;\n options.value = options.value || v;\n options.resolveKey = options.resolveKey || ((k2) => k2);\n const resolveKey = (index) => {\n const arr = asArray(options?.[index]);\n return arr.find((k2) => {\n if (typeof k2 === \"string\" && k2.includes(\".\")) {\n return k2;\n }\n return k2 && keys.includes(k2);\n });\n };\n const resolveValue = (k2, input2) => {\n if (k2.includes(\".\")) {\n const paths = k2.split(\".\");\n let val = input2;\n for (const path of paths)\n val = val[path];\n return val;\n }\n return input2[k2];\n };\n k = resolveKey(\"key\") || k;\n v = resolveKey(\"value\") || v;\n const dedupeKeyPrefix = input.key ? `${InternalKeySymbol}${input.key}-` : \"\";\n let keyValue = resolveValue(k, input);\n keyValue = options.resolveKey(keyValue);\n return {\n [`${dedupeKeyPrefix}${keyValue}`]: resolveValue(v, input)\n };\n}\n\nfunction packArray(input, options) {\n const packed = {};\n for (const i of input) {\n const packedObj = packObject(i, options);\n const pKey = Object.keys(packedObj)[0];\n const isDedupeKey = pKey.startsWith(InternalKeySymbol);\n if (!isDedupeKey && packed[pKey]) {\n packed[pKey] = Array.isArray(packed[pKey]) ? packed[pKey] : [packed[pKey]];\n packed[pKey].push(Object.values(packedObj)[0]);\n } else {\n packed[isDedupeKey ? pKey.split(\"-\").slice(1).join(\"-\") || pKey : pKey] = packedObj[pKey];\n }\n }\n return packed;\n}\n\nfunction unpackToArray(input, options) {\n const unpacked = [];\n const kFn = options.resolveKeyData || ((ctx) => ctx.key);\n const vFn = options.resolveValueData || ((ctx) => ctx.value);\n for (const [k, v] of Object.entries(input)) {\n unpacked.push(...(Array.isArray(v) ? v : [v]).map((i) => {\n const ctx = { key: k, value: i };\n const val = vFn(ctx);\n if (typeof val === \"object\")\n return unpackToArray(val, options);\n if (Array.isArray(val))\n return val;\n return {\n [typeof options.key === \"function\" ? options.key(ctx) : options.key]: kFn(ctx),\n [typeof options.value === \"function\" ? options.value(ctx) : options.value]: val\n };\n }).flat());\n }\n return unpacked;\n}\n\nfunction unpackToString(value, options) {\n return Object.entries(value).map(([key, value2]) => {\n if (typeof value2 === \"object\")\n value2 = unpackToString(value2, options);\n if (options.resolve) {\n const resolved = options.resolve({ key, value: value2 });\n if (resolved)\n return resolved;\n }\n if (typeof value2 === \"number\")\n value2 = value2.toString();\n if (typeof value2 === \"string\" && options.wrapValue) {\n value2 = value2.replace(new RegExp(options.wrapValue, \"g\"), `\\\\${options.wrapValue}`);\n value2 = `${options.wrapValue}${value2}${options.wrapValue}`;\n }\n return `${key}${options.keyValueSeparator || \"\"}${value2}`;\n }).join(options.entrySeparator || \"\");\n}\n\nconst MetaPackingSchema = {\n robots: {\n unpack: {\n keyValueSeparator: \":\"\n }\n },\n // Pragma directives\n contentSecurityPolicy: {\n unpack: {\n keyValueSeparator: \" \",\n entrySeparator: \"; \"\n },\n metaKey: \"http-equiv\"\n },\n fbAppId: {\n keyValue: \"fb:app_id\",\n metaKey: \"property\"\n },\n ogSiteName: {\n keyValue: \"og:site_name\"\n },\n msapplicationTileImage: {\n keyValue: \"msapplication-TileImage\"\n },\n /**\n * Tile colour for windows\n */\n msapplicationTileColor: {\n keyValue: \"msapplication-TileColor\"\n },\n /**\n * URL of a config for windows tile.\n */\n msapplicationConfig: {\n keyValue: \"msapplication-Config\"\n },\n charset: {\n metaKey: \"charset\"\n },\n contentType: {\n metaKey: \"http-equiv\"\n },\n defaultStyle: {\n metaKey: \"http-equiv\"\n },\n xUaCompatible: {\n metaKey: \"http-equiv\"\n },\n refresh: {\n metaKey: \"http-equiv\"\n }\n};\n\nfunction packMeta(inputs) {\n const mappedPackingSchema = Object.entries(MetaPackingSchema).map(([key, value]) => [key, value.keyValue]);\n return packArray(inputs, {\n key: [\"name\", \"property\", \"httpEquiv\", \"http-equiv\", \"charset\"],\n value: [\"content\", \"charset\"],\n resolveKey(k) {\n let key = mappedPackingSchema.filter((sk) => sk[1] === k)?.[0]?.[0] || k;\n const replacer = (_, letter) => letter?.toUpperCase();\n key = key.replace(/:([a-z])/g, replacer).replace(/-([a-z])/g, replacer);\n return key;\n }\n });\n}\n\nconst OpenGraphInputs = [\"Image\", \"Video\", \"Audio\"];\nconst SimpleArrayUnpackMetas = [\"themeColor\"];\nconst ColonPrefixKeys = /^(og|twitter|fb)/;\nconst PropertyPrefixKeys = /^(og|fb)/;\nfunction resolveMetaKeyType(key) {\n return PropertyPrefixKeys.test(key) ? \"property\" : MetaPackingSchema[key]?.metaKey || \"name\";\n}\nfunction resolveMetaKeyValue(key) {\n return MetaPackingSchema[key]?.keyValue || fixKeyCase(key);\n}\nfunction fixKeyCase(key) {\n key = key.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n if (ColonPrefixKeys.test(key)) {\n key = key.replace(\"secure-url\", \"secure_url\").replace(/-/g, \":\");\n }\n return key;\n}\nfunction changeKeyCasingDeep(input) {\n if (Array.isArray(input)) {\n return input.map((entry) => changeKeyCasingDeep(entry));\n }\n if (typeof input !== \"object\" || Array.isArray(input))\n return input;\n const output = {};\n for (const [key, value] of Object.entries(input))\n output[fixKeyCase(key)] = changeKeyCasingDeep(value);\n return output;\n}\nfunction unpackMeta(input) {\n const extras = [];\n OpenGraphInputs.forEach((key) => {\n const ogKey = `og:${key.toLowerCase()}`;\n const inputKey = `og${key}`;\n const val = input[inputKey];\n if (typeof val === \"object\") {\n (Array.isArray(val) ? val : [val]).forEach((entry) => {\n if (!entry)\n return;\n const unpackedEntry = unpackToArray(entry, {\n key: \"property\",\n value: \"content\",\n resolveKeyData({ key: key2 }) {\n return fixKeyCase(`${ogKey}${key2 !== \"url\" ? `:${key2}` : \"\"}`);\n },\n resolveValueData({ value }) {\n return typeof value === \"number\" ? value.toString() : value;\n }\n });\n extras.push(\n ...unpackedEntry.sort((a, b) => a.property === ogKey ? -1 : b.property === ogKey ? 1 : 0)\n );\n });\n delete input[inputKey];\n }\n });\n SimpleArrayUnpackMetas.forEach((meta2) => {\n if (input[meta2]) {\n const val = Array.isArray(input[meta2]) ? input[meta2] : [input[meta2]];\n delete input[meta2];\n val.forEach((entry) => {\n extras.push({\n name: fixKeyCase(meta2),\n ...entry\n });\n });\n }\n });\n const meta = unpackToArray(input, {\n key({ key }) {\n return resolveMetaKeyType(key);\n },\n value({ key }) {\n return key === \"charset\" ? \"charset\" : \"content\";\n },\n resolveKeyData({ key }) {\n return resolveMetaKeyValue(key);\n },\n resolveValueData({ value, key }) {\n if (value === null)\n return \"_null\";\n if (typeof value === \"object\")\n return resolvePackedMetaObjectValue(value, key);\n return typeof value === \"number\" ? value.toString() : value;\n }\n });\n return [...extras, ...meta].filter((v) => typeof v.content === \"undefined\" || v.content !== \"_null\");\n}\nfunction resolvePackedMetaObjectValue(value, key) {\n const definition = MetaPackingSchema[key];\n if (key === \"refresh\")\n return `${value.seconds};url=${value.url}`;\n return unpackToString(\n changeKeyCasingDeep(value),\n {\n entrySeparator: \", \",\n keyValueSeparator: \"=\",\n resolve({ value: value2, key: key2 }) {\n if (value2 === null)\n return \"\";\n if (typeof value2 === \"boolean\")\n return `${key2}`;\n },\n ...definition?.unpack\n }\n );\n}\n\nasync function normaliseTag(tagName, input) {\n const tag = { tag: tagName, props: {} };\n if (input instanceof Promise)\n input = await input;\n if (tagName === \"templateParams\") {\n tag.props = input;\n return tag;\n }\n if ([\"title\", \"titleTemplate\"].includes(tagName)) {\n if (input && typeof input === \"object\") {\n tag.textContent = input.textContent;\n if (input.tagPriority)\n tag.tagPriority = input.tagPriority;\n } else {\n tag.textContent = input;\n }\n return tag;\n }\n if (typeof input === \"string\") {\n if (![\"script\", \"noscript\", \"style\"].includes(tagName))\n return false;\n if (tagName === \"script\" && (/^(https?:)?\\/\\//.test(input) || input.startsWith(\"/\")))\n tag.props.src = input;\n else\n tag.innerHTML = input;\n return tag;\n }\n tag.props = await normaliseProps(tagName, { ...input });\n if (tag.props.children) {\n tag.props.innerHTML = tag.props.children;\n }\n delete tag.props.children;\n Object.keys(tag.props).filter((k) => TagConfigKeys.includes(k)).forEach((k) => {\n if (![\"innerHTML\", \"textContent\"].includes(k) || TagsWithInnerContent.includes(tag.tag)) {\n tag[k] = tag.props[k];\n }\n delete tag.props[k];\n });\n [\"innerHTML\", \"textContent\"].forEach((k) => {\n if (tag.tag === \"script\" && typeof tag[k] === \"string\" && [\"application/ld+json\", \"application/json\"].includes(tag.props.type)) {\n try {\n tag[k] = JSON.parse(tag[k]);\n } catch (e) {\n tag[k] = \"\";\n }\n }\n if (typeof tag[k] === \"object\")\n tag[k] = JSON.stringify(tag[k]);\n });\n if (tag.props.class)\n tag.props.class = normaliseClassProp(tag.props.class);\n if (tag.props.content && Array.isArray(tag.props.content))\n return tag.props.content.map((v) => ({ ...tag, props: { ...tag.props, content: v } }));\n return tag;\n}\nfunction normaliseClassProp(v) {\n if (typeof v === \"object\" && !Array.isArray(v)) {\n v = Object.keys(v).filter((k) => v[k]);\n }\n return (Array.isArray(v) ? v.join(\" \") : v).split(\" \").filter((c) => c.trim()).filter(Boolean).join(\" \");\n}\nasync function normaliseProps(tagName, props) {\n for (const k of Object.keys(props)) {\n const isDataKey = k.startsWith(\"data-\");\n if (props[k] instanceof Promise) {\n props[k] = await props[k];\n }\n if (String(props[k]) === \"true\") {\n props[k] = isDataKey ? \"true\" : \"\";\n } else if (String(props[k]) === \"false\") {\n if (isDataKey) {\n props[k] = \"false\";\n } else {\n delete props[k];\n }\n }\n }\n return props;\n}\nconst TagEntityBits = 10;\nasync function normaliseEntryTags(e) {\n const tagPromises = [];\n Object.entries(e.resolvedInput).filter(([k, v]) => typeof v !== \"undefined\" && ValidHeadTags.includes(k)).forEach(([k, value]) => {\n const v = asArray$1(value);\n tagPromises.push(...v.map((props) => normaliseTag(k, props)).flat());\n });\n return (await Promise.all(tagPromises)).flat().filter(Boolean).map((t, i) => {\n t._e = e._i;\n t._p = (e._i << TagEntityBits) + i;\n return t;\n });\n}\n\nconst WhitelistAttributes = {\n htmlAttrs: [\"id\", \"class\", \"lang\", \"dir\"],\n bodyAttrs: [\"id\", \"class\"],\n meta: [\"id\", \"name\", \"property\", \"charset\", \"content\"],\n noscript: [\"id\", \"textContent\"],\n script: [\"id\", \"type\", \"textContent\"],\n link: [\"id\", \"color\", \"crossorigin\", \"fetchpriority\", \"href\", \"hreflang\", \"imagesrcset\", \"imagesizes\", \"integrity\", \"media\", \"referrerpolicy\", \"rel\", \"sizes\", \"type\"]\n};\nfunction whitelistSafeInput(input) {\n const filtered = {};\n Object.keys(input).forEach((key) => {\n const tagValue = input[key];\n if (!tagValue)\n return;\n switch (key) {\n case \"title\":\n case \"titleTemplate\":\n case \"templateParams\":\n filtered[key] = tagValue;\n break;\n case \"htmlAttrs\":\n case \"bodyAttrs\":\n filtered[key] = {};\n WhitelistAttributes[key].forEach((a) => {\n if (tagValue[a])\n filtered[key][a] = tagValue[a];\n });\n Object.keys(tagValue || {}).filter((a) => a.startsWith(\"data-\")).forEach((a) => {\n filtered[key][a] = tagValue[a];\n });\n break;\n case \"meta\":\n if (Array.isArray(tagValue)) {\n filtered[key] = tagValue.map((meta) => {\n const safeMeta = {};\n WhitelistAttributes.meta.forEach((key2) => {\n if (meta[key2] || key2.startsWith(\"data-\"))\n safeMeta[key2] = meta[key2];\n });\n return safeMeta;\n }).filter((meta) => Object.keys(meta).length > 0);\n }\n break;\n case \"link\":\n if (Array.isArray(tagValue)) {\n filtered[key] = tagValue.map((meta) => {\n const link = {};\n WhitelistAttributes.link.forEach((key2) => {\n const val = meta[key2];\n if (key2 === \"rel\" && [\"stylesheet\", \"canonical\", \"modulepreload\", \"prerender\", \"preload\", \"prefetch\"].includes(val))\n return;\n if (key2 === \"href\") {\n if (val.includes(\"javascript:\") || val.includes(\"data:\"))\n return;\n link[key2] = val;\n } else if (val || key2.startsWith(\"data-\")) {\n link[key2] = val;\n }\n });\n return link;\n }).filter((link) => Object.keys(link).length > 1 && !!link.rel);\n }\n break;\n case \"noscript\":\n if (Array.isArray(tagValue)) {\n filtered[key] = tagValue.map((meta) => {\n const noscript = {};\n WhitelistAttributes.noscript.forEach((key2) => {\n if (meta[key2] || key2.startsWith(\"data-\"))\n noscript[key2] = meta[key2];\n });\n return noscript;\n }).filter((meta) => Object.keys(meta).length > 0);\n }\n break;\n case \"script\":\n if (Array.isArray(tagValue)) {\n filtered[key] = tagValue.map((script) => {\n const safeScript = {};\n WhitelistAttributes.script.forEach((s) => {\n if (script[s] || s.startsWith(\"data-\")) {\n if (s === \"textContent\") {\n try {\n const jsonVal = typeof script[s] === \"string\" ? JSON.parse(script[s]) : script[s];\n safeScript[s] = JSON.stringify(jsonVal, null, 0);\n } catch (e) {\n }\n } else {\n safeScript[s] = script[s];\n }\n }\n });\n return safeScript;\n }).filter((meta) => Object.keys(meta).length > 0);\n }\n break;\n }\n });\n return filtered;\n}\n\nfunction CorePlugins() {\n return [\n // dedupe needs to come first\n DedupesTagsPlugin(),\n SortTagsPlugin(),\n TemplateParamsPlugin(),\n TitleTemplatePlugin(),\n ProvideTagHashPlugin(),\n EventHandlersPlugin(),\n DeprecatedTagAttrPlugin()\n ];\n}\nfunction DOMPlugins(options = {}) {\n return [\n PatchDomOnEntryUpdatesPlugin({ document: options?.document, delayFn: options?.domDelayFn })\n ];\n}\nfunction createHead(options = {}) {\n const head = createHeadCore({\n ...options,\n plugins: [...DOMPlugins(options), ...options?.plugins || []]\n });\n if (options.experimentalHashHydration && head.resolvedOptions.document)\n head._hash = maybeGetSSRHash(head.resolvedOptions.document);\n setActiveHead(head);\n return head;\n}\nfunction createServerHead(options = {}) {\n const head = createHeadCore(options);\n setActiveHead(head);\n return head;\n}\nfunction createHeadCore(options = {}) {\n let entries = [];\n let _sde = {};\n let _eid = 0;\n const hooks = createHooks();\n if (options?.hooks)\n hooks.addHooks(options.hooks);\n options.plugins = [\n ...CorePlugins(),\n ...options?.plugins || []\n ];\n options.plugins.forEach((p) => p.hooks && hooks.addHooks(p.hooks));\n options.document = options.document || (IsBrowser ? document : void 0);\n const updated = () => hooks.callHook(\"entries:updated\", head);\n const head = {\n resolvedOptions: options,\n headEntries() {\n return entries;\n },\n get hooks() {\n return hooks;\n },\n use(plugin) {\n if (plugin.hooks)\n hooks.addHooks(plugin.hooks);\n },\n push(input, options2) {\n const activeEntry = {\n _i: _eid++,\n input,\n _sde: {}\n };\n if (options2?.mode)\n activeEntry._m = options2?.mode;\n if (options2?.transform) {\n activeEntry._t = options2?.transform;\n }\n entries.push(activeEntry);\n updated();\n return {\n dispose() {\n entries = entries.filter((e) => {\n if (e._i !== activeEntry._i)\n return true;\n _sde = { ..._sde, ...e._sde || {} };\n e._sde = {};\n updated();\n return false;\n });\n },\n // a patch is the same as creating a new entry, just a nice DX\n patch(input2) {\n entries = entries.map((e) => {\n if (e._i === activeEntry._i) {\n activeEntry.input = e.input = input2;\n updated();\n }\n return e;\n });\n }\n };\n },\n async resolveTags() {\n const resolveCtx = { tags: [], entries: [...entries] };\n await hooks.callHook(\"entries:resolve\", resolveCtx);\n for (const entry of resolveCtx.entries) {\n const transformer = entry._t || ((i) => i);\n entry.resolvedInput = transformer(entry.resolvedInput || entry.input);\n if (entry.resolvedInput) {\n for (const tag of await normaliseEntryTags(entry)) {\n const tagCtx = { tag, entry, resolvedOptions: head.resolvedOptions };\n await hooks.callHook(\"tag:normalise\", tagCtx);\n resolveCtx.tags.push(tagCtx.tag);\n }\n }\n }\n await hooks.callHook(\"tags:resolve\", resolveCtx);\n return resolveCtx.tags;\n },\n _popSideEffectQueue() {\n const sde = { ..._sde };\n _sde = {};\n return sde;\n },\n _elMap: {}\n };\n head.hooks.callHook(\"init\", head);\n return head;\n}\n\nconst coreComposableNames = [\n \"getActiveHead\"\n];\nconst composableNames = [\n \"useHead\",\n \"useSeoMeta\",\n \"useHeadSafe\",\n \"useServerHead\",\n \"useServerSeoMeta\",\n \"useServerHeadSafe\",\n // deprecated\n \"useTagTitle\",\n \"useTagBase\",\n \"useTagMeta\",\n \"useTagMetaFlat\",\n \"useTagLink\",\n \"useTagScript\",\n \"useTagStyle\",\n \"useTagNoscript\",\n \"useHtmlAttrs\",\n \"useBodyAttrs\",\n \"useTitleTemplate\",\n \"useServerTagTitle\",\n \"useServerTagBase\",\n \"useServerTagMeta\",\n \"useServerTagMetaFlat\",\n \"useServerTagLink\",\n \"useServerTagScript\",\n \"useServerTagStyle\",\n \"useServerTagNoscript\",\n \"useServerHtmlAttrs\",\n \"useServerBodyAttrs\",\n \"useServerTitleTemplate\"\n];\nconst unheadComposablesImports = [\n {\n from: \"unhead\",\n imports: [...coreComposableNames, ...composableNames]\n }\n];\n\nexport { CorePlugins, DOMPlugins, DedupesTagsPlugin, DeprecatedTagAttrPlugin, EventHandlersPlugin, ProvideTagHashPlugin, SortModifiers, SortTagsPlugin, TAG_ALIASES, TAG_WEIGHTS, TagEntityBits, TemplateParamsPlugin, TitleTemplatePlugin, activeHead, composableNames, createHead, createHeadCore, createServerHead, getActiveHead, normaliseClassProp, normaliseEntryTags, normaliseProps, normaliseTag, packMeta, processTemplateParams, resolveMetaKeyType, resolveMetaKeyValue, resolvePackedMetaObjectValue, setActiveHead, tagWeight, unheadComposablesImports, unpackMeta, useBodyAttrs, useHead, useHeadSafe, useHtmlAttrs, useSeoMeta, useServerBodyAttrs, useServerHead, useServerHeadSafe, useServerHtmlAttrs, useServerSeoMeta, useServerTagBase, useServerTagLink, useServerTagMeta, useServerTagMetaFlat, useServerTagNoscript, useServerTagScript, useServerTagStyle, useServerTagTitle, useServerTitleTemplate, useTagBase, useTagLink, useTagMeta, useTagMetaFlat, useTagNoscript, useTagScript, useTagStyle, useTagTitle, useTitleTemplate, whitelistSafeInput };\n"],"names":["TAG_WEIGHTS","TAG_ALIASES","tagWeight","tag","weight","priority","SortModifiers","SortTagsPlugin","defineHeadPlugin","ctx","tagPositionForKey","key","_a","prefix","offset","tag2","position","a","b","TitleTemplatePlugin","tags","titleTemplateIdx","i","titleIdx","newTitle","resolveTitleTemplate","DeprecatedTagAttrPlugin","DupeableTags","ProvideTagHashPlugin","resolvedOptions","hashTag","hashCode","ValidEventTags","EventHandlersPlugin","stripEventHandlers","mode","props","eventHandlers","value","delayedSrc","$el","$eventListenerTarget","k","sdeKey","eventName","eventDedupeKey","handler","UsesMergeStrategy","DedupesTagsPlugin","dedupe","tagDedupeKey","deduping","dedupeKey","dupedTag","strategy","oldProps","propCount","HasElementTags","newTags","dupes","processTemplateParams","s","config","sub","token","val","acc","decoded","re","TemplateParamsPlugin","title","idx","params","IsBrowser","activeHead","setActiveHead","head","getActiveHead","normaliseTag","tagName","input","normaliseProps","TagConfigKeys","TagsWithInnerContent","normaliseClassProp","v","c","isDataKey","TagEntityBits","normaliseEntryTags","e","tagPromises","ValidHeadTags","asArray$1","CorePlugins","DOMPlugins","options","PatchDomOnEntryUpdatesPlugin","createHead","createHeadCore","maybeGetSSRHash","entries","_sde","_eid","hooks","createHooks","p","updated","plugin","options2","activeEntry","input2","resolveCtx","entry","transformer","tagCtx","sde"],"mappings":"6JAIA,MAAMA,EAAc,CAElB,KAAM,GACN,MAAO,CACT,EACMC,EAAc,CAElB,SAAU,GACV,KAAM,GACN,IAAK,CACP,EACA,SAASC,EAAUC,EAAK,CACtB,IAAIC,EAAS,GACb,MAAMC,EAAWF,EAAI,YACrB,OAAI,OAAOE,GAAa,SACfA,GACLF,EAAI,MAAQ,QACVA,EAAI,MAAM,UACZC,EAAS,IACPD,EAAI,MAAM,YAAY,IAAM,4BAC9BC,EAAS,IACFD,EAAI,OAAOH,IACpBI,EAASJ,EAAYG,EAAI,GAAG,GAE1B,OAAOE,GAAa,UAAYA,KAAYJ,EACvCG,EAASH,EAAYI,CAAQ,EAE/BD,EACT,CACA,MAAME,EAAgB,CAAC,CAAE,OAAQ,UAAW,OAAQ,IAAM,CAAE,OAAQ,SAAU,OAAQ,CAAG,CAAA,EACzF,SAASC,GAAiB,CACxB,OAAOC,EAAiB,CACtB,MAAO,CACL,eAAiBC,GAAQ,CACvB,MAAMC,EAAqBC,GAAQ,OAAA,OAAAC,EAAAH,EAAI,KAAK,KAAMN,GAAQA,EAAI,KAAOQ,CAAG,IAArC,YAAAC,EAAwC,IAC3E,SAAW,CAAE,OAAAC,EAAQ,OAAAC,CAAM,IAAMR,EAC/B,UAAWH,KAAOM,EAAI,KAAK,OAAQM,GAAS,OAAOA,EAAK,aAAgB,UAAYA,EAAK,YAAY,WAAWF,CAAM,CAAC,EAAG,CACxH,MAAMG,EAAWN,EACfP,EAAI,YAAY,QAAQU,EAAQ,EAAE,CAChD,EACgB,OAAOG,EAAa,MACtBb,EAAI,GAAKa,EAAWF,EACvB,CAEHL,EAAI,KAAK,KAAK,CAACQ,EAAGC,IAAMD,EAAE,GAAKC,EAAE,EAAE,EAAE,KAAK,CAACD,EAAGC,IAAMhB,EAAUe,CAAC,EAAIf,EAAUgB,CAAC,CAAC,CAChF,CACF,CACL,CAAG,CACH,CAEA,SAASC,GAAsB,CAC7B,OAAOX,EAAiB,CACtB,MAAO,CACL,eAAiBC,GAAQ,CACvB,KAAM,CAAE,KAAAW,CAAM,EAAGX,EACjB,IAAIY,EAAmBD,EAAK,UAAWE,GAAMA,EAAE,MAAQ,eAAe,EACtE,MAAMC,EAAWH,EAAK,UAAWE,GAAMA,EAAE,MAAQ,OAAO,EACxD,GAAIC,IAAa,IAAMF,IAAqB,GAAI,CAC9C,MAAMG,EAAWC,EACfL,EAAKC,CAAgB,EAAE,YACvBD,EAAKG,CAAQ,EAAE,WAC3B,EACcC,IAAa,KACfJ,EAAKG,CAAQ,EAAE,YAAcC,GAAYJ,EAAKG,CAAQ,EAAE,YAExD,OAAOH,EAAKG,CAAQ,CAEhC,SAAmBF,IAAqB,GAAI,CAClC,MAAMG,EAAWC,EACfL,EAAKC,CAAgB,EAAE,WACnC,EACcG,IAAa,OACfJ,EAAKC,CAAgB,EAAE,YAAcG,EACrCJ,EAAKC,CAAgB,EAAE,IAAM,QAC7BA,EAAmB,GAEtB,CACGA,IAAqB,IACvB,OAAOD,EAAKC,CAAgB,EAE9BZ,EAAI,KAAOW,EAAK,OAAO,OAAO,CAC/B,CACF,CACL,CAAG,CACH,CAEA,SAASM,GAA0B,CACjC,OAAOlB,EAAiB,CACtB,MAAO,CACL,gBAAiB,SAAS,CAAE,IAAAL,GAAO,CAC7B,OAAOA,EAAI,MAAM,KAAS,MAC5BA,EAAI,YAAc,YAClB,OAAOA,EAAI,MAAM,KAEpB,CACF,CACL,CAAG,CACH,CAEA,MAAMwB,EAAe,CAAC,OAAQ,QAAS,SAAU,UAAU,EAC3D,SAASC,GAAuB,CAC9B,OAAOpB,EAAiB,CACtB,MAAO,CACL,gBAAiB,CAAC,CAAE,IAAAL,EAAK,gBAAA0B,KAAsB,CACzCA,EAAgB,4BAA8B,KAChD1B,EAAI,GAAK2B,EAAQ3B,CAAG,GAElBA,EAAI,KAAOwB,EAAa,SAASxB,EAAI,GAAG,IAC1CA,EAAI,GAAK4B,EAAS5B,EAAI,GAAG,EACzBA,EAAI,MAAM,UAAUA,EAAI,EAAE,EAAE,EAAI,GAEnC,CACF,CACL,CAAG,CACH,CAEA,MAAM6B,EAAiB,CAAC,SAAU,OAAQ,WAAW,EACrD,SAASC,GAAsB,CAC7B,MAAMC,EAAqB,CAACC,EAAMhC,IAAQ,CACxC,MAAMiC,EAAQ,CAAA,EACRC,EAAgB,CAAA,EACtB,OAAO,QAAQlC,EAAI,KAAK,EAAE,QAAQ,CAAC,CAACQ,EAAK2B,CAAK,IAAM,CAC9C3B,EAAI,WAAW,IAAI,GAAK,OAAO2B,GAAU,WAC3CD,EAAc1B,CAAG,EAAI2B,EAErBF,EAAMzB,CAAG,EAAI2B,CACrB,CAAK,EACD,IAAIC,EACJ,OAAIJ,IAAS,OAAShC,EAAI,MAAQ,UAAY,OAAOiC,EAAM,KAAQ,UAAY,OAAOC,EAAc,OAAW,MAC7GE,EAAaH,EAAM,IACnB,OAAOA,EAAM,KAER,CAAE,MAAAA,EAAO,cAAAC,EAAe,WAAAE,EACnC,EACE,OAAO/B,EAAiB,CACtB,MAAO,CACL,aAAc,SAASC,EAAK,CAC1BA,EAAI,KAAOA,EAAI,KAAK,IAAKN,IACnB,CAAC6B,EAAe,SAAS7B,EAAI,GAAG,GAEhC,CAAC,OAAO,QAAQA,EAAI,KAAK,EAAE,KAAK,CAAC,CAACQ,EAAK2B,CAAK,IAAM3B,EAAI,WAAW,IAAI,GAAK,OAAO2B,GAAU,UAAU,IAEzGnC,EAAI,MAAQ+B,EAAmB,MAAO/B,CAAG,EAAE,OACpCA,EACR,CACF,EACD,sBAAuB,SAASM,EAAK,CAGnC,GAFI,CAACuB,EAAe,SAASvB,EAAI,IAAI,GAAG,GAEpC,CAAC,OAAO,QAAQA,EAAI,IAAI,KAAK,EAAE,KAAK,CAAC,CAACE,EAAK2B,CAAK,IAAM3B,EAAI,WAAW,IAAI,GAAK,OAAO2B,GAAU,UAAU,EAC3G,OACF,KAAM,CAAE,MAAAF,EAAO,cAAAC,EAAe,WAAAE,CAAU,EAAKL,EAAmB,MAAOzB,EAAI,GAAG,EACzE,OAAO,KAAK4B,CAAa,EAAE,SAEhC5B,EAAI,IAAI,MAAQ2B,EAChB3B,EAAI,IAAI,eAAiB4B,EACzB5B,EAAI,IAAI,YAAc8B,EACvB,EACD,gBAAiB,SAAS9B,EAAK,CAC7B,MAAM+B,EAAM/B,EAAI,IAChB,GAAI,CAACA,EAAI,IAAI,gBAAkB,CAAC+B,EAC9B,OACF,MAAMC,EAAuBhC,EAAI,IAAI,MAAQ,aAAe,OAAO,OAAW,IAAc,OAAS+B,EACrG,OAAO,QAAQ/B,EAAI,IAAI,cAAc,EAAE,QAAQ,CAAC,CAACiC,EAAGJ,CAAK,IAAM,CAC7D,MAAMK,EAAS,GAAGlC,EAAI,IAAI,IAAMA,EAAI,IAAI,EAAE,IAAIiC,CAAC,GACzCE,EAAYF,EAAE,MAAM,CAAC,EAAE,YAAW,EAClCG,EAAiB,UAAUD,CAAS,GAG1C,GAFAnC,EAAI,eAAekC,EAAQ,IAAM,CAC3C,CAAW,EACGH,EAAI,aAAaK,CAAc,EACjC,OACF,MAAMC,EAAUR,EAChBE,EAAI,aAAaK,EAAgB,EAAE,EACnCJ,EAAqB,iBAAiBG,EAAWE,CAAO,EACpDrC,EAAI,QACNA,EAAI,MAAM,KAAKkC,CAAM,EAAI,IAAM,CAC7BF,EAAqB,oBAAoBG,EAAWE,CAAO,EAC3DN,EAAI,gBAAgBK,CAAc,CAChD,EAEA,CAAS,EACGpC,EAAI,IAAI,aACV+B,EAAI,aAAa,MAAO/B,EAAI,IAAI,WAAW,CAE9C,CACF,CACL,CAAG,CACH,CAEA,MAAMsC,EAAoB,CAAC,iBAAkB,YAAa,WAAW,EACrE,SAASC,GAAoB,CAC3B,OAAOxC,EAAiB,CACtB,MAAO,CACL,gBAAiB,SAAS,CAAE,IAAAL,GAAO,CACjC,CAAC,MAAO,OAAQ,KAAK,EAAE,QAASQ,GAAQ,CAClCR,EAAI,MAAMQ,CAAG,IACfR,EAAI,IAAMA,EAAI,MAAMQ,CAAG,EACvB,OAAOR,EAAI,MAAMQ,CAAG,EAEhC,CAAS,EAED,MAAMsC,EADeC,EAAa/C,CAAG,IACLA,EAAI,IAAM,GAAGA,EAAI,GAAG,IAAIA,EAAI,GAAG,GAAK,IAChE8C,IACF9C,EAAI,GAAK8C,EACZ,EACD,eAAgB,SAASxC,EAAK,CAC5B,MAAM0C,EAAW,CAAA,EACjB1C,EAAI,KAAK,QAASN,GAAQ,CACxB,MAAMiD,GAAajD,EAAI,IAAM,GAAGA,EAAI,GAAG,IAAIA,EAAI,GAAG,GAAKA,EAAI,KAAOA,EAAI,GAChEkD,EAAWF,EAASC,CAAS,EACnC,GAAIC,EAAU,CACZ,IAAIC,EAAWnD,GAAA,YAAAA,EAAK,qBAGpB,GAFI,CAACmD,GAAYP,EAAkB,SAAS5C,EAAI,GAAG,IACjDmD,EAAW,SACTA,IAAa,QAAS,CACxB,MAAMC,EAAWF,EAAS,MAC1B,CAAC,QAAS,OAAO,EAAE,QAAS1C,GAAQ,CAC9BR,EAAI,MAAMQ,CAAG,GAAK4C,EAAS5C,CAAG,IAC5BA,IAAQ,SAAW,CAAC4C,EAAS5C,CAAG,EAAE,SAAS,GAAG,IAChD4C,EAAS5C,CAAG,GAAK,KACnBR,EAAI,MAAMQ,CAAG,EAAI,GAAG4C,EAAS5C,CAAG,CAAC,IAAIR,EAAI,MAAMQ,CAAG,CAAC,GAErE,CAAe,EACDwC,EAASC,CAAS,EAAE,MAAQ,CAC1B,GAAGG,EACH,GAAGpD,EAAI,KACvB,EACc,MACD,SAAUA,EAAI,KAAOkD,EAAS,GAAI,CACjCA,EAAS,OAASA,EAAS,QAAU,CAAA,EACrClD,EAAI,GAAK,GAAGkD,EAAS,EAAE,IAAIA,EAAS,OAAO,OAAS,CAAC,GACrDA,EAAS,OAAO,KAAKlD,CAAG,EACxB,MACD,SAAUD,EAAUC,CAAG,EAAID,EAAUmD,CAAQ,EAC5C,MAEH,CACD,MAAMG,EAAY,OAAO,KAAKrD,EAAI,KAAK,EAAE,QAAUA,EAAI,UAAY,EAAI,IAAMA,EAAI,YAAc,EAAI,GACnG,GAAIsD,EAAe,SAAStD,EAAI,GAAG,GAAKqD,IAAc,EAAG,CACvD,OAAOL,EAASC,CAAS,EACzB,MACD,CACDD,EAASC,CAAS,EAAIjD,CAChC,CAAS,EACD,MAAMuD,EAAU,CAAA,EAChB,OAAO,OAAOP,CAAQ,EAAE,QAAShD,GAAQ,CACvC,MAAMwD,EAAQxD,EAAI,OAClB,OAAOA,EAAI,OACXuD,EAAQ,KAAKvD,CAAG,EACZwD,GACFD,EAAQ,KAAK,GAAGC,CAAK,CACjC,CAAS,EACDlD,EAAI,KAAOiD,CACZ,CACF,CACL,CAAG,CACH,CAEA,SAASE,EAAsBC,EAAGC,EAAQ,CACxC,SAASC,EAAIC,EAAO,CAClB,GAAI,CAAC,IAAK,WAAW,EAAE,SAASA,CAAK,EACnC,OAAOF,EAAO,UAChB,IAAIG,EACJ,OAAID,EAAM,SAAS,GAAG,EACpBC,EAAMD,EAAM,MAAM,GAAG,EAAE,OAAO,CAACE,EAAKvD,IAAQuD,GAAMA,EAAIvD,CAAG,GAAK,OAAiBmD,CAAM,EAErFG,EAAMH,EAAOE,CAAK,EAEb,OAAOC,EAAQ,IAAcA,GAAO,GAAK,EACjD,CACD,IAAIE,EAAUN,EACd,GAAI,CACFM,EAAU,UAAUN,CAAC,CACzB,MAAU,CACP,CAED,OADgBM,EAAQ,MAAM,sBAAsB,GAAK,IAAI,OAAO,UAC7D,QAASH,GAAU,CACxB,MAAMI,EAAKL,EAAIC,EAAM,MAAM,CAAC,CAAC,EACzB,OAAOI,GAAO,WAChBP,EAAIA,EAAE,QAAQ,IAAI,OAAO,KAAKG,CAAK,UAAW,GAAG,EAAG,GAAGI,CAAE,IAAI,EAAE,OAErE,CAAG,EACGN,EAAO,YACLD,EAAE,SAASC,EAAO,SAAS,IAC7BD,EAAIA,EAAE,MAAM,EAAG,CAACC,EAAO,UAAU,MAAM,EAAE,QACvCD,EAAE,WAAWC,EAAO,SAAS,IAC/BD,EAAIA,EAAE,MAAMC,EAAO,UAAU,MAAM,EAAE,QACvCD,EAAIA,EAAE,QAAQ,IAAI,OAAO,KAAKC,EAAO,SAAS,SAASA,EAAO,SAAS,GAAI,GAAG,EAAGA,EAAO,SAAS,GAE5FD,CACT,CACA,SAASQ,GAAuB,CAC9B,OAAO7D,EAAiB,CACtB,MAAO,CACL,eAAiBC,GAAQ,OACvB,KAAM,CAAE,KAAAW,CAAM,EAAGX,EACX6D,GAAQ1D,EAAAQ,EAAK,KAAMjB,GAAQA,EAAI,MAAQ,OAAO,IAAtC,YAAAS,EAAyC,YACjD2D,EAAMnD,EAAK,UAAWjB,GAAQA,EAAI,MAAQ,gBAAgB,EAC1DqE,EAASD,IAAQ,GAAKnD,EAAKmD,CAAG,EAAE,MAAQ,GAC9CC,EAAO,UAAYA,EAAO,WAAaF,GAAS,GAChD,UAAWnE,KAAOiB,EAChB,GAAI,CAAC,gBAAiB,OAAO,EAAE,SAASjB,EAAI,GAAG,GAAK,OAAOA,EAAI,aAAgB,SAC7EA,EAAI,YAAcyD,EAAsBzD,EAAI,YAAaqE,CAAM,UACtDrE,EAAI,MAAQ,QAAU,OAAOA,EAAI,MAAM,SAAY,SAC5DA,EAAI,MAAM,QAAUyD,EAAsBzD,EAAI,MAAM,QAASqE,CAAM,UAC1DrE,EAAI,MAAQ,QAAU,OAAOA,EAAI,MAAM,MAAS,SACzDA,EAAI,MAAM,KAAOyD,EAAsBzD,EAAI,MAAM,KAAMqE,CAAM,UACpDrE,EAAI,MAAQ,UAAY,CAAC,mBAAoB,qBAAqB,EAAE,SAASA,EAAI,MAAM,IAAI,GAAK,OAAOA,EAAI,WAAc,SAClI,GAAI,CACFA,EAAI,UAAY,KAAK,UAAU,KAAK,MAAMA,EAAI,SAAS,EAAG,CAACQ,EAAKsD,IAC1D,OAAOA,GAAQ,SACVL,EAAsBK,EAAKO,CAAM,EACnCP,CACR,CACf,MAAoB,CACP,CAGLxD,EAAI,KAAOW,EAAK,OAAQjB,GAAQA,EAAI,MAAQ,gBAAgB,CAC7D,CACF,CACL,CAAG,CACH,CAEA,MAAMsE,EAAY,OAAO,OAAW,IAEpC,IAAIC,EACJ,SAASC,EAAcC,EAAM,CAC3B,OAAOF,EAAaE,CACtB,CACA,SAASC,GAAgB,CACvB,OAAOH,CACT,CA4XA,eAAeI,EAAaC,EAASC,EAAO,CAC1C,MAAM7E,EAAM,CAAE,IAAK4E,EAAS,MAAO,CAAE,CAAA,EAGrC,OAFIC,aAAiB,UACnBA,EAAQ,MAAMA,GACZD,IAAY,kBACd5E,EAAI,MAAQ6E,EACL7E,GAEL,CAAC,QAAS,eAAe,EAAE,SAAS4E,CAAO,GACzCC,GAAS,OAAOA,GAAU,UAC5B7E,EAAI,YAAc6E,EAAM,YACpBA,EAAM,cACR7E,EAAI,YAAc6E,EAAM,cAE1B7E,EAAI,YAAc6E,EAEb7E,GAEL,OAAO6E,GAAU,SACd,CAAC,SAAU,WAAY,OAAO,EAAE,SAASD,CAAO,GAEjDA,IAAY,WAAa,kBAAkB,KAAKC,CAAK,GAAKA,EAAM,WAAW,GAAG,GAChF7E,EAAI,MAAM,IAAM6E,EAEhB7E,EAAI,UAAY6E,EACX7E,GALE,IAOXA,EAAI,MAAQ,MAAM8E,EAAeF,EAAS,CAAE,GAAGC,CAAK,CAAE,EAClD7E,EAAI,MAAM,WACZA,EAAI,MAAM,UAAYA,EAAI,MAAM,UAElC,OAAOA,EAAI,MAAM,SACjB,OAAO,KAAKA,EAAI,KAAK,EAAE,OAAQuC,GAAMwC,EAAc,SAASxC,CAAC,CAAC,EAAE,QAASA,GAAM,EACzE,CAAC,CAAC,YAAa,aAAa,EAAE,SAASA,CAAC,GAAKyC,EAAqB,SAAShF,EAAI,GAAG,KACpFA,EAAIuC,CAAC,EAAIvC,EAAI,MAAMuC,CAAC,GAEtB,OAAOvC,EAAI,MAAMuC,CAAC,CACtB,CAAG,EACD,CAAC,YAAa,aAAa,EAAE,QAASA,GAAM,CAC1C,GAAIvC,EAAI,MAAQ,UAAY,OAAOA,EAAIuC,CAAC,GAAM,UAAY,CAAC,sBAAuB,kBAAkB,EAAE,SAASvC,EAAI,MAAM,IAAI,EAC3H,GAAI,CACFA,EAAIuC,CAAC,EAAI,KAAK,MAAMvC,EAAIuC,CAAC,CAAC,CAC3B,MAAW,CACVvC,EAAIuC,CAAC,EAAI,EACV,CAEC,OAAOvC,EAAIuC,CAAC,GAAM,WACpBvC,EAAIuC,CAAC,EAAI,KAAK,UAAUvC,EAAIuC,CAAC,CAAC,EACpC,CAAG,EACGvC,EAAI,MAAM,QACZA,EAAI,MAAM,MAAQiF,EAAmBjF,EAAI,MAAM,KAAK,GAClDA,EAAI,MAAM,SAAW,MAAM,QAAQA,EAAI,MAAM,OAAO,EAC/CA,EAAI,MAAM,QAAQ,IAAKkF,IAAO,CAAE,GAAGlF,EAAK,MAAO,CAAE,GAAGA,EAAI,MAAO,QAASkF,CAAC,CAAI,EAAC,EAChFlF,EACT,CACA,SAASiF,EAAmBC,EAAG,CAC7B,OAAI,OAAOA,GAAM,UAAY,CAAC,MAAM,QAAQA,CAAC,IAC3CA,EAAI,OAAO,KAAKA,CAAC,EAAE,OAAQ3C,GAAM2C,EAAE3C,CAAC,CAAC,IAE/B,MAAM,QAAQ2C,CAAC,EAAIA,EAAE,KAAK,GAAG,EAAIA,GAAG,MAAM,GAAG,EAAE,OAAQC,GAAMA,EAAE,KAAM,CAAA,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CACzG,CACA,eAAeL,EAAeF,EAAS3C,EAAO,CAC5C,UAAWM,KAAK,OAAO,KAAKN,CAAK,EAAG,CAClC,MAAMmD,EAAY7C,EAAE,WAAW,OAAO,EAClCN,EAAMM,CAAC,YAAa,UACtBN,EAAMM,CAAC,EAAI,MAAMN,EAAMM,CAAC,GAEtB,OAAON,EAAMM,CAAC,CAAC,IAAM,OACvBN,EAAMM,CAAC,EAAI6C,EAAY,OAAS,GACvB,OAAOnD,EAAMM,CAAC,CAAC,IAAM,UAC1B6C,EACFnD,EAAMM,CAAC,EAAI,QAEX,OAAON,EAAMM,CAAC,EAGnB,CACD,OAAON,CACT,CACA,MAAMoD,EAAgB,GACtB,eAAeC,EAAmBC,EAAG,CACnC,MAAMC,EAAc,CAAA,EACpB,cAAO,QAAQD,EAAE,aAAa,EAAE,OAAO,CAAC,CAAChD,EAAG2C,CAAC,IAAM,OAAOA,EAAM,KAAeO,EAAc,SAASlD,CAAC,CAAC,EAAE,QAAQ,CAAC,CAACA,EAAGJ,CAAK,IAAM,CAChI,MAAM+C,EAAIQ,EAAUvD,CAAK,EACzBqD,EAAY,KAAK,GAAGN,EAAE,IAAKjD,GAAU0C,EAAapC,EAAGN,CAAK,CAAC,EAAE,KAAM,CAAA,CACvE,CAAG,GACO,MAAM,QAAQ,IAAIuD,CAAW,GAAG,KAAI,EAAG,OAAO,OAAO,EAAE,IAAI,CAAC,EAAGrE,KACrE,EAAE,GAAKoE,EAAE,GACT,EAAE,IAAMA,EAAE,IAAMF,GAAiBlE,EAC1B,EACR,CACH,CAuGA,SAASwE,GAAc,CACrB,MAAO,CAEL9C,EAAmB,EACnBzC,EAAgB,EAChB8D,EAAsB,EACtBlD,EAAqB,EACrBS,EAAsB,EACtBK,EAAqB,EACrBP,EAAyB,CAC7B,CACA,CACA,SAASqE,EAAWC,EAAU,GAAI,CAChC,MAAO,CACLC,EAA6B,CAAE,SAAUD,GAAA,YAAAA,EAAS,SAAU,QAASA,GAAA,YAAAA,EAAS,WAAY,CAC9F,CACA,CACA,SAASE,GAAWF,EAAU,GAAI,CAChC,MAAMpB,EAAOuB,EAAe,CAC1B,GAAGH,EACH,QAAS,CAAC,GAAGD,EAAWC,CAAO,EAAG,IAAGA,GAAA,YAAAA,EAAS,UAAW,EAAE,CAC/D,CAAG,EACD,OAAIA,EAAQ,2BAA6BpB,EAAK,gBAAgB,WAC5DA,EAAK,MAAQwB,EAAgBxB,EAAK,gBAAgB,QAAQ,GAC5DD,EAAcC,CAAI,EACXA,CACT,CAMA,SAASuB,EAAeH,EAAU,GAAI,CACpC,IAAIK,EAAU,CAAA,EACVC,EAAO,CAAA,EACPC,EAAO,EACX,MAAMC,EAAQC,IACVT,GAAA,MAAAA,EAAS,OACXQ,EAAM,SAASR,EAAQ,KAAK,EAC9BA,EAAQ,QAAU,CAChB,GAAGF,EAAa,EAChB,IAAGE,GAAA,YAAAA,EAAS,UAAW,CAAE,CAC7B,EACEA,EAAQ,QAAQ,QAASU,GAAMA,EAAE,OAASF,EAAM,SAASE,EAAE,KAAK,CAAC,EACjEV,EAAQ,SAAWA,EAAQ,WAAavB,EAAY,SAAW,QAC/D,MAAMkC,EAAU,IAAMH,EAAM,SAAS,kBAAmB5B,CAAI,EACtDA,EAAO,CACX,gBAAiBoB,EACjB,aAAc,CACZ,OAAOK,CACR,EACD,IAAI,OAAQ,CACV,OAAOG,CACR,EACD,IAAII,EAAQ,CACNA,EAAO,OACTJ,EAAM,SAASI,EAAO,KAAK,CAC9B,EACD,KAAK5B,EAAO6B,EAAU,CACpB,MAAMC,EAAc,CAClB,GAAIP,IACJ,MAAAvB,EACA,KAAM,CAAE,CAChB,EACM,OAAI6B,GAAA,MAAAA,EAAU,OACZC,EAAY,GAAKD,GAAA,YAAAA,EAAU,MACzBA,GAAA,MAAAA,EAAU,YACZC,EAAY,GAAKD,GAAA,YAAAA,EAAU,WAE7BR,EAAQ,KAAKS,CAAW,EACxBH,IACO,CACL,SAAU,CACRN,EAAUA,EAAQ,OAAQX,GACpBA,EAAE,KAAOoB,EAAY,GAChB,IACTR,EAAO,CAAE,GAAGA,EAAM,GAAGZ,EAAE,MAAQ,CAAA,GAC/BA,EAAE,KAAO,GACTiB,IACO,GACR,CACF,EAED,MAAMI,EAAQ,CACZV,EAAUA,EAAQ,IAAKX,IACjBA,EAAE,KAAOoB,EAAY,KACvBA,EAAY,MAAQpB,EAAE,MAAQqB,EAC9BJ,KAEKjB,EACR,CACF,CACT,CACK,EACD,MAAM,aAAc,CAClB,MAAMsB,EAAa,CAAE,KAAM,CAAA,EAAI,QAAS,CAAC,GAAGX,CAAO,GACnD,MAAMG,EAAM,SAAS,kBAAmBQ,CAAU,EAClD,UAAWC,KAASD,EAAW,QAAS,CACtC,MAAME,EAAcD,EAAM,KAAQ3F,GAAMA,GAExC,GADA2F,EAAM,cAAgBC,EAAYD,EAAM,eAAiBA,EAAM,KAAK,EAChEA,EAAM,cACR,UAAW9G,KAAO,MAAMsF,EAAmBwB,CAAK,EAAG,CACjD,MAAME,EAAS,CAAE,IAAAhH,EAAK,MAAA8G,EAAO,gBAAiBrC,EAAK,iBACnD,MAAM4B,EAAM,SAAS,gBAAiBW,CAAM,EAC5CH,EAAW,KAAK,KAAKG,EAAO,GAAG,CAChC,CAEJ,CACD,aAAMX,EAAM,SAAS,eAAgBQ,CAAU,EACxCA,EAAW,IACnB,EACD,qBAAsB,CACpB,MAAMI,EAAM,CAAE,GAAGd,GACjB,OAAAA,EAAO,CAAA,EACAc,CACR,EACD,OAAQ,CAAE,CACd,EACE,OAAAxC,EAAK,MAAM,SAAS,OAAQA,CAAI,EACzBA,CACT","x_google_ignoreList":[0]}