{"version":3,"file":"main-89ddf503.js","sources":["../../.tmp/js/components/autocomplete/autocomplete.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/constants.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/array.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/is.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/tabOrder.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/tabUtils.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/tabbables.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/DOMutils.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/all-affected.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/getActiveElement.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/focusInside.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/correctFocus.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/firstFocus.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/solver.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/auto-focus.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/parenting.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/focusMerge.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/setFocus.js","../../node_modules/dom-focus-lock/dist/index.esm.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/focusIsHidden.js","../../.tmp/js/functions/setScrollbarWidthOnDocument.js","../../.tmp/js/functions/toggleAriaHiddenOnBodyChildren.js","../../.tmp/js/functions/reducedMotion.js","../../.tmp/js/components/header/toggleMenu.js","../../.tmp/js/components/header/toggleSearch.js","../../.tmp/js/components/pagination/pagination.js","../../.tmp/js/components/header/header.js","../../.tmp/js/components/search-page/search-page.js","../../.tmp/js/components/planned-work/planned-work.js","../../.tmp/js/components/line-direction/line-direction.js","../../.tmp/js/components/card/card.js","../../.tmp/js/components/table-of-contents/table-of-contents.js","../../.tmp/js/components/generictoc-page/generictoc-page.js","../../.tmp/js/functions/debounce.js","../../.tmp/js/functions/inviewCallback.js","../../.tmp/js/components/responsive-table/responsive-table.js","../../.tmp/js/functions/makeResponsiveTable.js","../../.tmp/js/components/list-filter/list-filter.js","../../.tmp/js/functions/addClassWhenInView.js","../../.tmp/js/components/help/help.js","../../.tmp/js/components/accordion/accordion.js","../../.tmp/js/components/tabs/tabs.js","../../.tmp/js/components/tagfilter/helpers.js","../../.tmp/js/components/tagfilter/tagfilter.js","../../.tmp/js/components/autosavedform/autosavedform.js","../../.tmp/js/components/autosavedform/editmode-toggler.js","../../.tmp/js/components/autosavedform/check-for-duplicate-ids.js","../../.tmp/js/components/readmore/readmore.js","../../.tmp/js/components/fileupload/fileupload.js","../../.tmp/js/components/more-results/more-results.js","../../.tmp/js/components/reorderable-section-form/reorderable-section-form.js","../../.tmp/js/components/boilerplate/boilerplate.js","../../.tmp/js/components/start-page/start-page-hero.js","../../.tmp/js/components/start-page/start-page-bg.js","../../.tmp/js/components/textarea-length-counter/counter.js","../../.tmp/js/components/sorted/sorted.js"],"sourcesContent":["export default function autocomplete(element) {\n const searchForm = document.getElementById(element.elementID);\n if (searchForm) {\n import('./lazy-autocomplete.js').then(({ default: lazyAutocomplete }) => lazyAutocomplete(searchForm));\n }\n}\n//# sourceMappingURL=autocomplete.js.map","/**\n * defines a focus group\n */\nexport var FOCUS_GROUP = 'data-focus-lock';\n/**\n * disables element discovery inside a group marked by key\n */\nexport var FOCUS_DISABLED = 'data-focus-lock-disabled';\n/**\n * allows uncontrolled focus within the marked area, effectively disabling focus lock for it's content\n */\nexport var FOCUS_ALLOW = 'data-no-focus-lock';\n/**\n * instructs autofocus engine to pick default autofocus inside a given node\n * can be set on the element or container\n */\nexport var FOCUS_AUTO = 'data-autofocus-inside';\n/**\n * instructs autofocus to ignore elements within a given node\n * can be set on the element or container\n */\nexport var FOCUS_NO_AUTOFOCUS = 'data-no-autofocus';\n","/*\nIE11 support\n */\nexport var toArray = function (a) {\n var ret = Array(a.length);\n for (var i = 0; i < a.length; ++i) {\n ret[i] = a[i];\n }\n return ret;\n};\nexport var asArray = function (a) { return (Array.isArray(a) ? a : [a]); };\nexport var getFirst = function (a) { return (Array.isArray(a) ? a[0] : a); };\n","import { FOCUS_NO_AUTOFOCUS } from '../constants';\nvar isElementHidden = function (node) {\n // we can measure only \"elements\"\n // consider others as \"visible\"\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n var computedStyle = window.getComputedStyle(node, null);\n if (!computedStyle || !computedStyle.getPropertyValue) {\n return false;\n }\n return (computedStyle.getPropertyValue('display') === 'none' || computedStyle.getPropertyValue('visibility') === 'hidden');\n};\nvar getParentNode = function (node) {\n // DOCUMENT_FRAGMENT_NODE can also point on ShadowRoot. In this case .host will point on the next node\n return node.parentNode && node.parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node.parentNode.host\n : node.parentNode;\n};\nvar isTopNode = function (node) {\n // @ts-ignore\n return node === document || (node && node.nodeType === Node.DOCUMENT_NODE);\n};\nvar isVisibleUncached = function (node, checkParent) {\n return !node || isTopNode(node) || (!isElementHidden(node) && checkParent(getParentNode(node)));\n};\nexport var isVisibleCached = function (visibilityCache, node) {\n var cached = visibilityCache.get(node);\n if (cached !== undefined) {\n return cached;\n }\n var result = isVisibleUncached(node, isVisibleCached.bind(undefined, visibilityCache));\n visibilityCache.set(node, result);\n return result;\n};\nvar isAutoFocusAllowedUncached = function (node, checkParent) {\n return node && !isTopNode(node) ? (isAutoFocusAllowed(node) ? checkParent(getParentNode(node)) : false) : true;\n};\nexport var isAutoFocusAllowedCached = function (cache, node) {\n var cached = cache.get(node);\n if (cached !== undefined) {\n return cached;\n }\n var result = isAutoFocusAllowedUncached(node, isAutoFocusAllowedCached.bind(undefined, cache));\n cache.set(node, result);\n return result;\n};\nexport var getDataset = function (node) {\n // @ts-ignore\n return node.dataset;\n};\nexport var isHTMLButtonElement = function (node) { return node.tagName === 'BUTTON'; };\nexport var isHTMLInputElement = function (node) { return node.tagName === 'INPUT'; };\nexport var isRadioElement = function (node) {\n return isHTMLInputElement(node) && node.type === 'radio';\n};\nexport var notHiddenInput = function (node) {\n return !((isHTMLInputElement(node) || isHTMLButtonElement(node)) && (node.type === 'hidden' || node.disabled));\n};\nexport var isAutoFocusAllowed = function (node) {\n var attribute = node.getAttribute(FOCUS_NO_AUTOFOCUS);\n return ![true, 'true', ''].includes(attribute);\n};\nexport var isGuard = function (node) { var _a; return Boolean(node && ((_a = getDataset(node)) === null || _a === void 0 ? void 0 : _a.focusGuard)); };\nexport var isNotAGuard = function (node) { return !isGuard(node); };\nexport var isDefined = function (x) { return Boolean(x); };\n","import { toArray } from './array';\nexport var tabSort = function (a, b) {\n var tabDiff = a.tabIndex - b.tabIndex;\n var indexDiff = a.index - b.index;\n if (tabDiff) {\n if (!a.tabIndex) {\n return 1;\n }\n if (!b.tabIndex) {\n return -1;\n }\n }\n return tabDiff || indexDiff;\n};\nexport var orderByTabIndex = function (nodes, filterNegative, keepGuards) {\n return toArray(nodes)\n .map(function (node, index) { return ({\n node: node,\n index: index,\n tabIndex: keepGuards && node.tabIndex === -1 ? ((node.dataset || {}).focusGuard ? 0 : -1) : node.tabIndex,\n }); })\n .filter(function (data) { return !filterNegative || data.tabIndex >= 0; })\n .sort(tabSort);\n};\n","import { FOCUS_AUTO } from '../constants';\nimport { toArray } from './array';\nimport { tabbables } from './tabbables';\nvar queryTabbables = tabbables.join(',');\nvar queryGuardTabbables = \"\".concat(queryTabbables, \", [data-focus-guard]\");\nvar getFocusablesWithShadowDom = function (parent, withGuards) {\n var _a;\n return toArray(((_a = parent.shadowRoot) === null || _a === void 0 ? void 0 : _a.children) || parent.children).reduce(function (acc, child) {\n return acc.concat(child.matches(withGuards ? queryGuardTabbables : queryTabbables) ? [child] : [], getFocusablesWithShadowDom(child));\n }, []);\n};\nvar getFocusablesWithIFrame = function (parent, withGuards) {\n if (parent instanceof HTMLIFrameElement && parent.contentDocument) {\n return getFocusables([parent.contentDocument.body], withGuards);\n }\n return [parent];\n};\nexport var getFocusables = function (parents, withGuards) {\n return parents.reduce(function (acc, parent) {\n var _a;\n var focusableWithShadowDom = getFocusablesWithShadowDom(parent, withGuards);\n var focusableWithIframes = (_a = []).concat.apply(_a, focusableWithShadowDom.map(function (node) { return getFocusablesWithIFrame(node, withGuards); }));\n return acc.concat(\n // add all tabbables inside and within shadow DOMs in DOM order\n focusableWithIframes, \n // add if node is tabbable itself\n parent.parentNode\n ? toArray(parent.parentNode.querySelectorAll(queryTabbables)).filter(function (node) { return node === parent; })\n : []);\n }, []);\n};\n/**\n * return a list of focusable nodes within an area marked as \"auto-focusable\"\n * @param parent\n */\nexport var getParentAutofocusables = function (parent) {\n var parentFocus = parent.querySelectorAll(\"[\".concat(FOCUS_AUTO, \"]\"));\n return toArray(parentFocus)\n .map(function (node) { return getFocusables([node]); })\n .reduce(function (acc, nodes) { return acc.concat(nodes); }, []);\n};\n","/**\n * list of the object to be considered as focusable\n */\nexport var tabbables = [\n 'button:enabled',\n 'select:enabled',\n 'textarea:enabled',\n 'input:enabled',\n // elements with explicit roles will also use explicit tabindex\n // '[role=\"button\"]',\n 'a[href]',\n 'area[href]',\n 'summary',\n 'iframe',\n 'object',\n 'embed',\n 'audio[controls]',\n 'video[controls]',\n '[tabindex]',\n '[contenteditable]',\n '[autofocus]',\n];\n","import { toArray } from './array';\nimport { isAutoFocusAllowedCached, isVisibleCached, notHiddenInput } from './is';\nimport { orderByTabIndex } from './tabOrder';\nimport { getFocusables, getParentAutofocusables } from './tabUtils';\n/**\n * given list of focusable elements keeps the ones user can interact with\n * @param nodes\n * @param visibilityCache\n */\nexport var filterFocusable = function (nodes, visibilityCache) {\n return toArray(nodes)\n .filter(function (node) { return isVisibleCached(visibilityCache, node); })\n .filter(function (node) { return notHiddenInput(node); });\n};\nexport var filterAutoFocusable = function (nodes, cache) {\n if (cache === void 0) { cache = new Map(); }\n return toArray(nodes).filter(function (node) { return isAutoFocusAllowedCached(cache, node); });\n};\n/**\n * only tabbable ones\n * (but with guards which would be ignored)\n */\nexport var getTabbableNodes = function (topNodes, visibilityCache, withGuards) {\n return orderByTabIndex(filterFocusable(getFocusables(topNodes, withGuards), visibilityCache), true, withGuards);\n};\n/**\n * actually anything \"focusable\", not only tabbable\n * (without guards, as long as they are not expected to be focused)\n */\nexport var getAllTabbableNodes = function (topNodes, visibilityCache) {\n return orderByTabIndex(filterFocusable(getFocusables(topNodes), visibilityCache), false);\n};\n/**\n * return list of nodes which are expected to be auto-focused\n * @param topNode\n * @param visibilityCache\n */\nexport var parentAutofocusables = function (topNode, visibilityCache) {\n return filterFocusable(getParentAutofocusables(topNode), visibilityCache);\n};\n/*\n * Determines if element is contained in scope, including nested shadow DOMs\n */\nexport var contains = function (scope, element) {\n if (scope.shadowRoot) {\n return contains(scope.shadowRoot, element);\n }\n else {\n if (Object.getPrototypeOf(scope).contains !== undefined &&\n Object.getPrototypeOf(scope).contains.call(scope, element)) {\n return true;\n }\n return toArray(scope.children).some(function (child) {\n var _a;\n if (child instanceof HTMLIFrameElement) {\n var iframeBody = (_a = child.contentDocument) === null || _a === void 0 ? void 0 : _a.body;\n if (iframeBody) {\n return contains(iframeBody, element);\n }\n return false;\n }\n return contains(child, element);\n });\n }\n};\n","import { FOCUS_DISABLED, FOCUS_GROUP } from '../constants';\nimport { asArray, toArray } from './array';\n/**\n * in case of multiple nodes nested inside each other\n * keeps only top ones\n * this is O(nlogn)\n * @param nodes\n * @returns {*}\n */\nvar filterNested = function (nodes) {\n var contained = new Set();\n var l = nodes.length;\n for (var i = 0; i < l; i += 1) {\n for (var j = i + 1; j < l; j += 1) {\n var position = nodes[i].compareDocumentPosition(nodes[j]);\n /* eslint-disable no-bitwise */\n if ((position & Node.DOCUMENT_POSITION_CONTAINED_BY) > 0) {\n contained.add(j);\n }\n if ((position & Node.DOCUMENT_POSITION_CONTAINS) > 0) {\n contained.add(i);\n }\n /* eslint-enable */\n }\n }\n return nodes.filter(function (_, index) { return !contained.has(index); });\n};\n/**\n * finds top most parent for a node\n * @param node\n * @returns {*}\n */\nvar getTopParent = function (node) {\n return node.parentNode ? getTopParent(node.parentNode) : node;\n};\n/**\n * returns all \"focus containers\" inside a given node\n * @param node\n * @returns {T}\n */\nexport var getAllAffectedNodes = function (node) {\n var nodes = asArray(node);\n return nodes.filter(Boolean).reduce(function (acc, currentNode) {\n var group = currentNode.getAttribute(FOCUS_GROUP);\n acc.push.apply(acc, (group\n ? filterNested(toArray(getTopParent(currentNode).querySelectorAll(\"[\".concat(FOCUS_GROUP, \"=\\\"\").concat(group, \"\\\"]:not([\").concat(FOCUS_DISABLED, \"=\\\"disabled\\\"])\"))))\n : [currentNode]));\n return acc;\n }, []);\n};\n","/**\n * returns active element from document or from nested shadowdoms\n */\nexport var getActiveElement = function (inDocument) {\n var _a;\n if (inDocument === void 0) { inDocument = document; }\n if (!inDocument || !inDocument.activeElement) {\n return undefined;\n }\n var activeElement = inDocument.activeElement;\n return (activeElement.shadowRoot\n ? getActiveElement(activeElement.shadowRoot)\n : activeElement instanceof HTMLIFrameElement && ((_a = activeElement.contentWindow) === null || _a === void 0 ? void 0 : _a.document)\n ? getActiveElement(activeElement.contentWindow.document)\n : activeElement);\n};\n","import { contains } from './utils/DOMutils';\nimport { getAllAffectedNodes } from './utils/all-affected';\nimport { getFirst, toArray } from './utils/array';\nimport { getActiveElement } from './utils/getActiveElement';\nvar focusInFrame = function (frame, activeElement) { return frame === activeElement; };\nvar focusInsideIframe = function (topNode, activeElement) {\n return Boolean(toArray(topNode.querySelectorAll('iframe')).some(function (node) { return focusInFrame(node, activeElement); }));\n};\n/**\n * @returns {Boolean} true, if the current focus is inside given node or nodes\n */\nexport var focusInside = function (topNode, activeElement) {\n // const activeElement = document && getActiveElement();\n if (activeElement === void 0) { activeElement = getActiveElement(getFirst(topNode).ownerDocument); }\n if (!activeElement || (activeElement.dataset && activeElement.dataset.focusGuard)) {\n return false;\n }\n return getAllAffectedNodes(topNode).some(function (node) {\n return contains(node, activeElement) || focusInsideIframe(node, activeElement);\n });\n};\n","import { isRadioElement } from './is';\nvar findSelectedRadio = function (node, nodes) {\n return nodes\n .filter(isRadioElement)\n .filter(function (el) { return el.name === node.name; })\n .filter(function (el) { return el.checked; })[0] || node;\n};\nexport var correctNode = function (node, nodes) {\n if (isRadioElement(node) && node.name) {\n return findSelectedRadio(node, nodes);\n }\n return node;\n};\n/**\n * giving a set of radio inputs keeps only selected (tabbable) ones\n * @param nodes\n */\nexport var correctNodes = function (nodes) {\n // IE11 has no Set(array) constructor\n var resultSet = new Set();\n nodes.forEach(function (node) { return resultSet.add(correctNode(node, nodes)); });\n // using filter to support IE11\n return nodes.filter(function (node) { return resultSet.has(node); });\n};\n","import { correctNode } from './correctFocus';\nexport var pickFirstFocus = function (nodes) {\n if (nodes[0] && nodes.length > 1) {\n return correctNode(nodes[0], nodes);\n }\n return nodes[0];\n};\nexport var pickFocusable = function (nodes, index) {\n if (nodes.length > 1) {\n return nodes.indexOf(correctNode(nodes[index], nodes));\n }\n return index;\n};\n","import { correctNodes } from './utils/correctFocus';\nimport { pickFocusable } from './utils/firstFocus';\nimport { isGuard } from './utils/is';\nexport var NEW_FOCUS = 'NEW_FOCUS';\n/**\n * Main solver for the \"find next focus\" question\n * @param innerNodes\n * @param outerNodes\n * @param activeElement\n * @param lastNode\n * @returns {number|string|undefined|*}\n */\nexport var newFocus = function (innerNodes, outerNodes, activeElement, lastNode) {\n var cnt = innerNodes.length;\n var firstFocus = innerNodes[0];\n var lastFocus = innerNodes[cnt - 1];\n var isOnGuard = isGuard(activeElement);\n // focus is inside\n if (activeElement && innerNodes.indexOf(activeElement) >= 0) {\n return undefined;\n }\n var activeIndex = activeElement !== undefined ? outerNodes.indexOf(activeElement) : -1;\n var lastIndex = lastNode ? outerNodes.indexOf(lastNode) : activeIndex;\n var lastNodeInside = lastNode ? innerNodes.indexOf(lastNode) : -1;\n var indexDiff = activeIndex - lastIndex;\n var firstNodeIndex = outerNodes.indexOf(firstFocus);\n var lastNodeIndex = outerNodes.indexOf(lastFocus);\n var correctedNodes = correctNodes(outerNodes);\n var correctedIndex = activeElement !== undefined ? correctedNodes.indexOf(activeElement) : -1;\n var correctedIndexDiff = correctedIndex - (lastNode ? correctedNodes.indexOf(lastNode) : activeIndex);\n var returnFirstNode = pickFocusable(innerNodes, 0);\n var returnLastNode = pickFocusable(innerNodes, cnt - 1);\n // new focus\n if (activeIndex === -1 || lastNodeInside === -1) {\n return NEW_FOCUS;\n }\n // old focus\n if (!indexDiff && lastNodeInside >= 0) {\n return lastNodeInside;\n }\n // first element\n if (activeIndex <= firstNodeIndex && isOnGuard && Math.abs(indexDiff) > 1) {\n return returnLastNode;\n }\n // last element\n if (activeIndex >= lastNodeIndex && isOnGuard && Math.abs(indexDiff) > 1) {\n return returnFirstNode;\n }\n // jump out, but not on the guard\n if (indexDiff && Math.abs(correctedIndexDiff) > 1) {\n return lastNodeInside;\n }\n // focus above lock\n if (activeIndex <= firstNodeIndex) {\n return returnLastNode;\n }\n // focus below lock\n if (activeIndex > lastNodeIndex) {\n return returnFirstNode;\n }\n // index is inside tab order, but outside Lock\n if (indexDiff) {\n if (Math.abs(indexDiff) > 1) {\n return lastNodeInside;\n }\n return (cnt + lastNodeInside + indexDiff) % cnt;\n }\n // do nothing\n return undefined;\n};\n","import { filterAutoFocusable } from './DOMutils';\nimport { pickFirstFocus } from './firstFocus';\nimport { getDataset } from './is';\nvar findAutoFocused = function (autoFocusables) {\n return function (node) {\n var _a;\n var autofocus = (_a = getDataset(node)) === null || _a === void 0 ? void 0 : _a.autofocus;\n return (\n // @ts-expect-error\n node.autofocus ||\n //\n (autofocus !== undefined && autofocus !== 'false') ||\n //\n autoFocusables.indexOf(node) >= 0);\n };\n};\nexport var pickAutofocus = function (nodesIndexes, orderedNodes, groups) {\n var nodes = nodesIndexes.map(function (_a) {\n var node = _a.node;\n return node;\n });\n var autoFocusable = filterAutoFocusable(nodes.filter(findAutoFocused(groups)));\n if (autoFocusable && autoFocusable.length) {\n return pickFirstFocus(autoFocusable);\n }\n return pickFirstFocus(filterAutoFocusable(orderedNodes));\n};\n","import { parentAutofocusables } from './DOMutils';\nimport { contains } from './DOMutils';\nimport { asArray } from './array';\nvar getParents = function (node, parents) {\n if (parents === void 0) { parents = []; }\n parents.push(node);\n if (node.parentNode) {\n getParents(node.parentNode.host || node.parentNode, parents);\n }\n return parents;\n};\n/**\n * finds a parent for both nodeA and nodeB\n * @param nodeA\n * @param nodeB\n * @returns {boolean|*}\n */\nexport var getCommonParent = function (nodeA, nodeB) {\n var parentsA = getParents(nodeA);\n var parentsB = getParents(nodeB);\n // tslint:disable-next-line:prefer-for-of\n for (var i = 0; i < parentsA.length; i += 1) {\n var currentParent = parentsA[i];\n if (parentsB.indexOf(currentParent) >= 0) {\n return currentParent;\n }\n }\n return false;\n};\nexport var getTopCommonParent = function (baseActiveElement, leftEntry, rightEntries) {\n var activeElements = asArray(baseActiveElement);\n var leftEntries = asArray(leftEntry);\n var activeElement = activeElements[0];\n var topCommon = false;\n leftEntries.filter(Boolean).forEach(function (entry) {\n topCommon = getCommonParent(topCommon || entry, entry) || topCommon;\n rightEntries.filter(Boolean).forEach(function (subEntry) {\n var common = getCommonParent(activeElement, subEntry);\n if (common) {\n if (!topCommon || contains(common, topCommon)) {\n topCommon = common;\n }\n else {\n topCommon = getCommonParent(common, topCommon);\n }\n }\n });\n });\n // TODO: add assert here?\n return topCommon;\n};\n/**\n * return list of nodes which are expected to be autofocused inside a given top nodes\n * @param entries\n * @param visibilityCache\n */\nexport var allParentAutofocusables = function (entries, visibilityCache) {\n return entries.reduce(function (acc, node) { return acc.concat(parentAutofocusables(node, visibilityCache)); }, []);\n};\n","import { NEW_FOCUS, newFocus } from './solver';\nimport { getAllTabbableNodes, getTabbableNodes } from './utils/DOMutils';\nimport { getAllAffectedNodes } from './utils/all-affected';\nimport { asArray, getFirst } from './utils/array';\nimport { pickAutofocus } from './utils/auto-focus';\nimport { getActiveElement } from './utils/getActiveElement';\nimport { isDefined, isNotAGuard } from './utils/is';\nimport { allParentAutofocusables, getTopCommonParent } from './utils/parenting';\nvar reorderNodes = function (srcNodes, dstNodes) {\n var remap = new Map();\n // no Set(dstNodes) for IE11 :(\n dstNodes.forEach(function (entity) { return remap.set(entity.node, entity); });\n // remap to dstNodes\n return srcNodes.map(function (node) { return remap.get(node); }).filter(isDefined);\n};\n/**\n * given top node(s) and the last active element return the element to be focused next\n * @param topNode\n * @param lastNode\n */\nexport var getFocusMerge = function (topNode, lastNode) {\n var activeElement = getActiveElement(asArray(topNode).length > 0 ? document : getFirst(topNode).ownerDocument);\n var entries = getAllAffectedNodes(topNode).filter(isNotAGuard);\n var commonParent = getTopCommonParent(activeElement || topNode, topNode, entries);\n var visibilityCache = new Map();\n var anyFocusable = getAllTabbableNodes(entries, visibilityCache);\n var innerElements = getTabbableNodes(entries, visibilityCache).filter(function (_a) {\n var node = _a.node;\n return isNotAGuard(node);\n });\n if (!innerElements[0]) {\n innerElements = anyFocusable;\n if (!innerElements[0]) {\n return undefined;\n }\n }\n var outerNodes = getAllTabbableNodes([commonParent], visibilityCache).map(function (_a) {\n var node = _a.node;\n return node;\n });\n var orderedInnerElements = reorderNodes(outerNodes, innerElements);\n var innerNodes = orderedInnerElements.map(function (_a) {\n var node = _a.node;\n return node;\n });\n var newId = newFocus(innerNodes, outerNodes, activeElement, lastNode);\n if (newId === NEW_FOCUS) {\n var focusNode = pickAutofocus(anyFocusable, innerNodes, allParentAutofocusables(entries, visibilityCache));\n if (focusNode) {\n return { node: focusNode };\n }\n else {\n console.warn('focus-lock: cannot find any node to move focus into');\n return undefined;\n }\n }\n if (newId === undefined) {\n return newId;\n }\n return orderedInnerElements[newId];\n};\n","import { getFocusMerge } from './focusMerge';\nexport var focusOn = function (target, focusOptions) {\n if ('focus' in target) {\n target.focus(focusOptions);\n }\n if ('contentWindow' in target && target.contentWindow) {\n target.contentWindow.focus();\n }\n};\nvar guardCount = 0;\nvar lockDisabled = false;\n/**\n * Sets focus at a given node. The last focused element will help to determine which element(first or last) should be focused.\n * HTML markers (see {@link import('./constants').FOCUS_AUTO} constants) can control autofocus\n * @param topNode\n * @param lastNode\n * @param options\n */\nexport var setFocus = function (topNode, lastNode, options) {\n if (options === void 0) { options = {}; }\n var focusable = getFocusMerge(topNode, lastNode);\n if (lockDisabled) {\n return;\n }\n if (focusable) {\n if (guardCount > 2) {\n // tslint:disable-next-line:no-console\n console.error('FocusLock: focus-fighting detected. Only one focus management system could be active. ' +\n 'See https://github.com/theKashey/focus-lock/#focus-fighting');\n lockDisabled = true;\n setTimeout(function () {\n lockDisabled = false;\n }, 1);\n return;\n }\n guardCount++;\n focusOn(focusable.node, options.focusOptions);\n guardCount--;\n }\n};\n","import moveFocusInside, { focusIsHidden, focusInside } from 'focus-lock';\n\nvar lastActiveTrap = 0;\nvar lastActiveFocus = null;\n\nvar focusOnBody = function focusOnBody() {\n return document && document.activeElement === document.body;\n};\n\nvar isFreeFocus = function isFreeFocus() {\n return focusOnBody() || focusIsHidden();\n};\n\nvar activateTrap = function activateTrap() {\n var result = false;\n\n if (lastActiveTrap) {\n var observed = lastActiveTrap;\n\n if (!isFreeFocus()) {\n if (observed && !focusInside(observed)) {\n result = moveFocusInside(observed, lastActiveFocus);\n }\n\n lastActiveFocus = document.activeElement;\n }\n }\n\n return result;\n};\n\nvar reducePropsToState = function reducePropsToState(propsList) {\n return propsList.filter(function (node) {\n return node;\n }).slice(-1)[0];\n};\n\nvar handleStateChangeOnClient = function handleStateChangeOnClient(trap) {\n lastActiveTrap = trap;\n\n if (trap) {\n activateTrap();\n }\n};\n\nvar instances = [];\n\nvar emitChange = function emitChange(event) {\n if (handleStateChangeOnClient(reducePropsToState(instances))) {\n event && event.preventDefault();\n return true;\n }\n\n return false;\n};\n\nvar attachHandler = function attachHandler() {\n document.addEventListener('focusin', emitChange);\n};\n\nvar detachHandler = function detachHandler() {\n document.removeEventListener('focusin', emitChange);\n};\n\nvar focusLock = {\n on: function on(domNode) {\n if (instances.length === 0) {\n attachHandler();\n }\n\n if (instances.indexOf(domNode) < 0) {\n instances.push(domNode);\n emitChange();\n }\n },\n off: function off(domNode) {\n instances = instances.filter(function (node) {\n return node !== domNode;\n });\n emitChange();\n\n if (instances.length === 0) {\n detachHandler();\n }\n }\n};\n\nexport default focusLock;\n","import { FOCUS_ALLOW } from './constants';\nimport { contains } from './utils/DOMutils';\nimport { toArray } from './utils/array';\nimport { getActiveElement } from './utils/getActiveElement';\n/**\n * focus is hidden FROM the focus-lock\n * ie contained inside a node focus-lock shall ignore\n * @returns {boolean} focus is currently is in \"allow\" area\n */\nexport var focusIsHidden = function (inDocument) {\n if (inDocument === void 0) { inDocument = document; }\n var activeElement = getActiveElement(inDocument);\n if (!activeElement) {\n return false;\n }\n // this does not support setting FOCUS_ALLOW within shadow dom\n return toArray(inDocument.querySelectorAll(\"[\".concat(FOCUS_ALLOW, \"]\"))).some(function (node) { return contains(node, activeElement); });\n};\n","export function setScrollbarWidthOnDocument() {\n const docElement = document.documentElement;\n const scrollbarWidthBefore = window.innerWidth - docElement.clientWidth;\n if (scrollbarWidthBefore > 0) {\n const scrollbarWidthAfter = docElement.clientWidth - docElement.offsetWidth;\n const scrollbarWidth = scrollbarWidthBefore - scrollbarWidthAfter;\n docElement.style.setProperty('--scrollbar-width', scrollbarWidth + 'px');\n }\n}\n//# sourceMappingURL=setScrollbarWidthOnDocument.js.map","export function toggleAriaHiddenOnBodyChildren(dialogNode, toggle) {\n if (!dialogNode)\n return;\n Array.prototype.forEach.call(document.querySelectorAll('body > *'), node => {\n if (node === dialogNode) {\n return;\n }\n if (toggle === 'off') {\n node.removeAttribute('aria-hidden');\n }\n else {\n node.setAttribute('aria-hidden', 'true');\n }\n });\n}\n//# sourceMappingURL=toggleAriaHiddenOnBodyChildren.js.map","export const prefersReducedMotionMediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\nexport const noPreferenceMediaQuery = window.matchMedia('(prefers-reduced-motion: no-preference)');\nexport const noPreferenceReducedMotion = noPreferenceMediaQuery.matches;\nexport const prefersReducedMotion = prefersReducedMotionMediaQuery.matches;\n//# sourceMappingURL=reducedMotion.js.map","import focusLock from 'dom-focus-lock';\nimport { setScrollbarWidthOnDocument } from '../../functions/setScrollbarWidthOnDocument';\nimport { toggleAriaHiddenOnBodyChildren } from '../../functions/toggleAriaHiddenOnBodyChildren';\nimport { noPreferenceReducedMotion } from '../../functions/reducedMotion';\nexport default function toggleMenu(menuSelector, buttonSelector, headerSelector, close) {\n const menu = document.querySelector(menuSelector);\n const menuButton = document.querySelector(buttonSelector);\n const header = document.querySelector(headerSelector);\n const shellHeader = document.querySelector('#spv-shell-header');\n const allMenus = Array.from(document.querySelectorAll(menuSelector));\n if (!menu || !menuButton || !header)\n return;\n const menuItems = Array.from(menu.querySelectorAll('li'));\n function closeAllMenus() {\n allMenus.forEach((menu) => {\n if (menu?.classList.contains('spv-header__menu--isOpen')) {\n closeNavigation();\n }\n });\n }\n function closeNavigation() {\n menu?.classList.remove('spv-header__menu--isOpen');\n header?.classList.remove('spv-header--menuIsOpen');\n menuButton?.setAttribute('aria-expanded', 'false');\n window.removeEventListener('keyup', escapeEvent);\n toggleAriaHiddenOnBodyChildren(shellHeader, 'off');\n setScrollbarWidthOnDocument();\n if (!close) {\n focusLock.off(header);\n document.documentElement.classList.remove('spv-scrollLock');\n menuButton?.focus();\n }\n }\n function openNavigation() {\n closeAllMenus();\n setScrollbarWidthOnDocument();\n document.documentElement.classList.add('spv-scrollLock');\n menu?.classList.add('spv-header__menu--isOpen');\n header?.classList.add('spv-header--menuIsOpen');\n menuButton?.setAttribute('aria-expanded', 'true');\n window.addEventListener('keyup', escapeEvent);\n toggleAriaHiddenOnBodyChildren(shellHeader, 'on');\n focusLock.on(header);\n if (noPreferenceReducedMotion) {\n import('gsap').then(({ gsap }) => {\n gsap.set(menuItems, { y: '-100%', opacity: 0 });\n gsap.to(menuItems, {\n y: 0,\n opacity: 1,\n duration: 0.2,\n stagger: 0.02,\n ease: 'back.out',\n });\n });\n }\n }\n function escapeEvent(event) {\n if (event.defaultPrevented) {\n return;\n }\n const key = event.key || event.code;\n if (key === 'Escape' || key === 'Esc' || key === '27') {\n closeNavigation();\n }\n }\n if (menu?.classList.contains('spv-header__menu--isOpen') || close) {\n closeNavigation();\n }\n else {\n openNavigation();\n }\n}\n//# sourceMappingURL=toggleMenu.js.map","import focusLock from 'dom-focus-lock';\nimport { setScrollbarWidthOnDocument } from '../../functions/setScrollbarWidthOnDocument';\nimport { toggleAriaHiddenOnBodyChildren } from '../../functions/toggleAriaHiddenOnBodyChildren';\nexport default function toggleSearch(close) {\n const searchModal = document.querySelector('#header-search');\n const searchButton = document.querySelector('#header-search-button');\n const header = document.querySelector('.spv-header');\n const shellHeader = document.querySelector('#spv-shell-header');\n if (!searchModal || !searchButton || !header)\n return;\n function syncHeight() {\n document.documentElement.style.setProperty('--window-inner-height', `${window.innerHeight}px`);\n }\n function closeSearchModal() {\n searchModal?.classList.remove('spv-headerSearch--open');\n header?.classList.remove('spv-header--searchIsOpen');\n searchButton?.setAttribute('aria-expanded', 'false');\n window.removeEventListener('keyup', escapeEvent);\n toggleAriaHiddenOnBodyChildren(shellHeader, 'off');\n setScrollbarWidthOnDocument();\n if (!close) {\n focusLock.off(header);\n document.documentElement.classList.remove('spv-scrollLock');\n searchButton.focus();\n }\n }\n function openSearchModal() {\n toggleAriaHiddenOnBodyChildren(shellHeader, 'on');\n setScrollbarWidthOnDocument();\n document.documentElement.classList.add('spv-scrollLock');\n searchModal?.classList.add('spv-headerSearch--open');\n header?.classList.add('spv-header--searchIsOpen');\n searchButton?.setAttribute('aria-expanded', 'true');\n window.addEventListener('keyup', escapeEvent);\n focusLock.on(header);\n searchModal.querySelector('input')?.focus();\n syncHeight();\n }\n function escapeEvent(event) {\n if (event.defaultPrevented) {\n return;\n }\n const key = event.key || event.code;\n if (key === 'Escape' || key === 'Esc' || key === '27') {\n closeSearchModal();\n }\n }\n if (searchModal?.classList.contains('spv-headerSearch--open') || close) {\n closeSearchModal();\n }\n else {\n openSearchModal();\n }\n}\n//# sourceMappingURL=toggleSearch.js.map","export function pagination() {\n const pagination = document.querySelector('#pagination');\n if (!pagination)\n return;\n const text = pagination.dataset.text;\n const listElements = pagination.querySelectorAll('li:not(:first-child):not(:last-child):not(.spv-pagination__item--disabled)');\n listElements.forEach(element => {\n const link = element.querySelector('.js-pagination-link');\n const string = `${text} ${link.innerText}`;\n if (element.classList.contains('js-pagination-active')) {\n link.setAttribute('aria-current', 'page');\n }\n link.setAttribute('aria-label', string);\n });\n}\npagination();\n//# sourceMappingURL=pagination.js.map","import autocomplete from '../autocomplete/autocomplete';\nimport toggleMenu from './toggleMenu';\nimport toggleSearch from './toggleSearch';\nexport default function header() {\n const menuButton = document.querySelector('#spv-menuButton');\n const searchButton = document.querySelector('#header-search-button');\n const shortcutsButton = document.querySelector('#header-shortcuts-button');\n const systemsButton = document.querySelector('#header-systems-button');\n autocomplete({ elementID: 'header-autocomplete' });\n function syncHeight() {\n document.documentElement.style.setProperty('--window-inner-height', `${window.innerHeight}px`);\n }\n function closeAllMenus(exclude) {\n if (exclude !== '#header-systems') {\n toggleMenu('#header-systems', '#header-systems-button', '.spv-header', true);\n }\n if (exclude !== '#header-menu') {\n toggleMenu('#header-menu', '#spv-menuButton', '.spv-header', true);\n }\n if (exclude !== '#header-shortcuts') {\n toggleMenu('#header-shortcuts', '#header-shortcuts-button', '.spv-header', true);\n }\n }\n function handleSystemsMenu() {\n syncHeight();\n toggleSearch(true);\n closeAllMenus('#header-systems');\n toggleMenu('#header-systems', '#header-systems-button', '.spv-header');\n }\n function handleShortcutsMenu() {\n syncHeight();\n toggleSearch(true);\n closeAllMenus('#header-shortcuts');\n toggleMenu('#header-shortcuts', '#header-shortcuts-button', '.spv-header');\n }\n function handleGlobalMenu() {\n syncHeight();\n toggleSearch(true);\n closeAllMenus('#header-menu');\n toggleMenu('#header-menu', '#spv-menuButton', '.spv-header');\n }\n function handleSearch() {\n syncHeight();\n closeAllMenus();\n toggleSearch();\n }\n menuButton.addEventListener('click', handleGlobalMenu);\n searchButton.addEventListener('click', handleSearch);\n if (shortcutsButton) {\n shortcutsButton.addEventListener('click', handleShortcutsMenu);\n }\n if (systemsButton) {\n systemsButton.addEventListener('click', handleSystemsMenu);\n }\n}\nheader();\n//# sourceMappingURL=header.js.map","import autocomplete from '../autocomplete/autocomplete';\nexport default function searchPage() {\n autocomplete({ elementID: 'search-page-autocomplete' });\n}\nsearchPage();\n//# sourceMappingURL=search-page.js.map","export default function plannedWork() {\n const plannedWorkView = document.querySelector('#spv-plannedWorkView');\n const ongoingWorkView = document.querySelector('#spv-ongoingWorkView');\n const ongoingWorkButton = document.querySelector('#spv-ongoingWorkButton');\n const plannedWorkButton = document.querySelector('#spv-plannedWorkButton');\n if (!plannedWorkView || !ongoingWorkView || !ongoingWorkButton || !plannedWorkButton) {\n return;\n }\n plannedWorkView.style.display = 'none';\n function togglePlanned() {\n if (plannedWorkView.style.display === 'none') {\n plannedWorkView.style.display = 'block';\n ongoingWorkView.style.display = 'none';\n plannedWorkButton.classList.remove('spv-button--secondary');\n plannedWorkButton.classList.add('spv-button--primary');\n ongoingWorkButton.classList.remove('spv-button--primary');\n ongoingWorkButton.classList.add('spv-button--secondary');\n plannedWorkButton.ariaPressed = 'true';\n ongoingWorkButton.ariaPressed = 'false';\n }\n else {\n return;\n }\n }\n function toggleOngoing() {\n if (ongoingWorkView.style.display === 'none') {\n ongoingWorkView.style.display = 'block';\n plannedWorkView.style.display = 'none';\n plannedWorkButton.classList.remove('spv-button--primary');\n plannedWorkButton.classList.add('spv-button--secondary');\n ongoingWorkButton.classList.remove('spv-button--secondary');\n ongoingWorkButton.classList.add('spv-button--primary');\n ongoingWorkButton.ariaPressed = 'true';\n plannedWorkButton.ariaPressed = 'false';\n }\n else {\n return;\n }\n }\n ongoingWorkButton.onclick = toggleOngoing;\n plannedWorkButton.onclick = togglePlanned;\n}\nplannedWork();\n//# sourceMappingURL=planned-work.js.map","export default function linedirection() {\n const button = document.querySelector('#spv-reverseButton');\n const list = document.querySelector('#spv-list');\n const unreversedNameOfStation = (document.querySelector('#unreversed-station-name'));\n const reversedNameOfStation = (document.querySelector('#reversed-station-name'));\n function toggleDirection() {\n let i = 0;\n if (list) {\n i = list.childNodes.length;\n while (i--)\n list.appendChild(list?.childNodes[i]);\n }\n if (unreversedNameOfStation.style.display === 'none') {\n unreversedNameOfStation.style.display = 'block';\n }\n else {\n unreversedNameOfStation.style.display = 'none';\n }\n if (reversedNameOfStation.style.display === 'block') {\n reversedNameOfStation.style.display = 'none';\n }\n else {\n reversedNameOfStation.style.display = 'block';\n }\n }\n button?.addEventListener('click', toggleDirection);\n}\nlinedirection();\n//# sourceMappingURL=line-direction.js.map","export default function findCardLinks() {\n const cards = document.querySelectorAll('.spv-card, .spv-listCard');\n cards?.forEach(card => {\n let down;\n let up;\n let ctrlIsPressed;\n const link = card.querySelector('a');\n const originalTargetAttribute = link?.getAttribute('target');\n function setOrRemoveAttr() {\n originalTargetAttribute\n ? link?.setAttribute('target', originalTargetAttribute)\n : link?.removeAttribute('target');\n }\n card.onmousedown = e => {\n ctrlIsPressed = e.ctrlKey || e.metaKey;\n down = +new Date();\n };\n card.onmouseup = e => {\n up = +new Date();\n const fastClick = up - down < 200;\n ctrlIsPressed ? link?.setAttribute('target', '_blank') : setOrRemoveAttr();\n if (e.button === 0 && fastClick) {\n link?.click();\n }\n };\n });\n}\nfindCardLinks();\n//# sourceMappingURL=card.js.map","export class TOC {\n static parse(headingSet) {\n const tocData = [];\n headingSet.forEach((heading, index) => {\n const titleText = heading.innerText;\n const id = heading.id\n ? heading.id\n : `toc-${titleText.replace(/ /g, '-').toLowerCase()}-${index}`;\n const currentTocItem = { id: id, text: titleText };\n if (heading.id === '') {\n heading.id = id;\n }\n tocData.push(currentTocItem);\n });\n return tocData;\n }\n static build(tocData) {\n let result = '';\n }\n}\n//# sourceMappingURL=table-of-contents.js.map","import { TOC } from '../table-of-contents/table-of-contents';\nexport function generictocPage() {\n const tocCreate = document.querySelector('[data-toccreate]');\n const tocNavElement = document.querySelector('[data-tocnav]');\n if (!tocCreate || !tocNavElement)\n return;\n const headingSet = tocCreate.querySelectorAll('h2');\n if (!headingSet.length) {\n tocNavElement.remove();\n }\n else {\n const tocData = TOC.parse(headingSet);\n const tocNavigation = TOC.build(tocData);\n tocNavElement.innerHTML = tocNavigation;\n }\n}\ngenerictocPage();\n//# sourceMappingURL=generictoc-page.js.map","export function debounce(fn, ms = 300) {\n let timeoutId;\n return function (...args) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn.apply(this, args), ms);\n };\n}\n//# sourceMappingURL=debounce.js.map","export function inViewCallback(entries) {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n entry.target.classList.add('spv-inview--visible');\n }\n else {\n }\n });\n}\n//# sourceMappingURL=inviewCallback.js.map","import { makeResponsiveTable } from '../../functions/makeResponsiveTable';\nexport default function responsiveTable() {\n const responsiveWrappers = document.querySelectorAll('[data-responsive-table]');\n responsiveWrappers?.forEach((wrapper) => {\n makeResponsiveTable(wrapper);\n });\n}\nresponsiveTable();\n//# sourceMappingURL=responsive-table.js.map","export function makeResponsiveTable(element, messagetext) {\n const text = element.dataset.responsiveTable || messagetext || '';\n const svgSpriteUrl = element.dataset.spriteUrl || '/images/icons/icons.sprite.svg';\n const message = document.createElement('div');\n const messageTextContainer = document.createElement('div');\n const iconContainer = document.createElement('div');\n const iconPointer = ``;\n message.classList.add('spv-scrollbox__message');\n messageTextContainer.classList.add('spv-scrollbox__message__text');\n iconContainer.classList.add('spv-scrollbox__message__icon');\n iconContainer.innerHTML = `${iconPointer}`;\n iconContainer.setAttribute('aria-hidden', 'true');\n function addScrollStuff(target) {\n target.classList.add('spv-scrollbox--hasScrollBar');\n target.setAttribute('tabindex', '0');\n }\n function removeScrollStuff(target) {\n target.classList.remove('spv-scrollbox--hasScrollBar');\n target.removeAttribute('tabindex');\n }\n function addScrolledClass() {\n if (element.scrollLeft > 1) {\n element.classList.add('spv-scrollbox--isScrolled');\n element.removeEventListener('scroll', addScrolledClass);\n }\n }\n const resizeObserver = new ResizeObserver(entries => {\n for (const entry of entries) {\n const { target } = entry;\n target.scrollWidth > target.clientWidth ? addScrollStuff(target) : removeScrollStuff(target);\n }\n });\n messageTextContainer.innerText = text;\n message.insertAdjacentElement('afterbegin', iconContainer);\n message.insertAdjacentElement('beforeend', messageTextContainer);\n element.insertAdjacentElement('afterbegin', message);\n resizeObserver.observe(element);\n element.addEventListener('scroll', addScrolledClass);\n}\n//# sourceMappingURL=makeResponsiveTable.js.map","import { debounce } from '../../functions/debounce';\nexport default function listFilter() {\n const form = document.querySelector('[data-filter-form]');\n const input = document.querySelector(`[data-filter-input]`);\n const resultStatus = document.querySelector('[data-filter-status]');\n const resultHits = document.querySelector('[data-filter-hits]');\n const list = document.querySelector('[data-filter-list]');\n const listItems = list?.querySelectorAll(':scope > li');\n const texts = {\n hit: form?.dataset.filterLiveareaHit,\n hits: form?.dataset.filterLiveareaHits,\n inlist: form?.dataset.filterLiveareaInlist,\n };\n const createStatusText = (number) => {\n return `${number} ${number === 1 ? texts.hit : texts.hits} ${texts.inlist}`;\n };\n const createHitsText = (number) => {\n return `${number} ${number === 1 ? texts.hit : texts.hits}`;\n };\n const handleStatus = debounce((number) => {\n if (resultStatus)\n resultStatus.innerText = createStatusText(number);\n }, 1000);\n const handleHits = (number) => {\n if (resultHits) {\n resultHits.innerText = createHitsText(number);\n }\n };\n const handleInputChange = (e) => {\n let noLi = listItems?.length ?? 0;\n const target = e.target;\n listItems?.forEach(function (item) {\n const query = item.textContent || '';\n if (query.toLowerCase().indexOf(target.value.toLowerCase()) > -1) {\n item.hidden = false;\n item.classList.remove('spv-displayHidden');\n }\n else {\n item.hidden = true;\n item.classList.add('spv-displayHidden');\n noLi--;\n }\n });\n handleStatus(noLi);\n handleHits(noLi);\n };\n handleHits(listItems?.length ?? 0);\n handleStatus(listItems?.length ?? 0);\n input?.addEventListener('input', (e) => {\n handleInputChange(e);\n });\n form?.addEventListener('submit', (e) => {\n e.preventDefault();\n });\n}\nlistFilter();\n//# sourceMappingURL=list-filter.js.map","import { inViewCallback } from './inviewCallback';\nexport default function addClassWhenInView(params) {\n const scope = params.scope && document.querySelector(params.scope);\n const observedElements = scope\n ? scope.querySelectorAll(params.elements)\n : document.querySelectorAll(params.elements);\n observedElements.forEach((element) => {\n element.classList.add('spv-inview');\n });\n const observer = new IntersectionObserver(inViewCallback, params.options);\n observedElements.forEach(element => {\n observer.observe(element);\n });\n}\naddClassWhenInView({\n elements: '[data-inview]',\n options: {\n threshold: 0.1,\n },\n});\n//# sourceMappingURL=addClassWhenInView.js.map","export default function findTooltips() {\n const tooltips = document.querySelectorAll('.spv-help');\n const tooltipButtons = document.querySelectorAll('.spv-help__button');\n const tooltipContents = document.querySelectorAll('.spv-help__content');\n tooltipButtons.forEach(function (toggleButton, index) {\n const tooltip = tooltips[index];\n const tooltipContent = tooltipContents[index];\n toggleButton.addEventListener('click', function () {\n function HelpTextOpen() {\n tooltip.classList.remove('spv-help--expanded');\n toggleButton.setAttribute('aria-expanded', 'false');\n tooltipContent.setAttribute('aria-hidden', 'true');\n toggleButton.querySelector('.spv-help__openText')?.setAttribute('aria-hidden', 'false');\n toggleButton.querySelector('.spv-help__closeText')?.setAttribute('aria-hidden', 'true');\n }\n function HelpTextClose() {\n tooltip.className += ' spv-help--expanded';\n toggleButton.setAttribute('aria-expanded', 'true');\n toggleButton.querySelector('.spv-help__openText')?.setAttribute('aria-hidden', 'true');\n toggleButton.querySelector('.spv-help__closeText')?.setAttribute('aria-hidden', 'false');\n tooltipContent.setAttribute('aria-hidden', 'false');\n }\n if (tooltip?.classList.contains('spv-help--expanded')) {\n HelpTextOpen();\n }\n else {\n HelpTextClose();\n }\n });\n });\n}\nfindTooltips();\n//# sourceMappingURL=help.js.map","import { noPreferenceReducedMotion } from '../../functions/reducedMotion';\n(function () {\n const accordionItems = document.querySelectorAll('[data-accordion-item]');\n const openClass = 'spv-accordion__item--open';\n const ease = 'circ.inOut';\n const duration = noPreferenceReducedMotion ? 0.3 : 0;\n if (!accordionItems)\n return;\n const handleAccordionToggleAnimated = (gsap, accordionItem, collapsibleElement, clickTarget) => {\n if (accordionItem.classList.contains(openClass)) {\n gsap.to(collapsibleElement, {\n duration: duration,\n height: 0,\n ease: ease,\n onComplete: () => {\n accordionItem.classList.remove(openClass);\n clickTarget.ariaExpanded = 'false';\n collapsibleElement.setAttribute('hidden', 'until-found');\n },\n });\n }\n else {\n clickTarget.ariaExpanded = 'true';\n collapsibleElement.hidden = false;\n accordionItem.classList.add(openClass);\n gsap.set(collapsibleElement, { height: 'auto' });\n gsap.from(collapsibleElement, {\n duration: duration,\n height: 0,\n ease: ease,\n onComplete: () => {\n collapsibleElement.style.height = 'auto';\n },\n });\n }\n };\n const handleAccordionTogglePlain = (accordionItem, collapsibleElement, clickTarget) => {\n if (accordionItem.classList.contains(openClass)) {\n accordionItem.classList.remove(openClass);\n clickTarget.ariaExpanded = 'false';\n collapsibleElement.setAttribute('hidden', 'until-found');\n collapsibleElement.style.height = '0';\n }\n else {\n clickTarget.ariaExpanded = 'true';\n collapsibleElement.hidden = false;\n accordionItem.classList.add(openClass);\n collapsibleElement.style.height = 'auto';\n }\n };\n accordionItems.forEach(accordionItem => {\n const clickTarget = accordionItem.querySelector('[data-accordion-button]');\n const collapsibleElement = accordionItem.querySelector('[data-accordion-content]');\n if (noPreferenceReducedMotion) {\n import('gsap').then(({ gsap }) => {\n collapsibleElement.addEventListener('beforematch', () => handleAccordionToggleAnimated(gsap, accordionItem, collapsibleElement, clickTarget));\n clickTarget.onclick = function () {\n handleAccordionToggleAnimated(gsap, accordionItem, collapsibleElement, clickTarget);\n };\n });\n }\n else {\n collapsibleElement.addEventListener('beforematch', () => handleAccordionTogglePlain(accordionItem, collapsibleElement, clickTarget));\n clickTarget.onclick = function () {\n handleAccordionTogglePlain(accordionItem, collapsibleElement, clickTarget);\n };\n }\n });\n})();\n//# sourceMappingURL=accordion.js.map","export default function tabs() {\n const tabContainers = document.querySelectorAll('.spv-tabs');\n function changeTabs(e) {\n const targetTab = e.target;\n const tabList = targetTab.parentNode;\n const tabWrapper = tabList.parentNode;\n const index = parseInt(targetTab.getAttribute('data-index') || '0', 10);\n const stateName = targetTab.getAttribute('data-history-state-name') || 'tab';\n const newHistoryState = { ...history.state, [stateName]: index };\n history.pushState(newHistoryState, '');\n tabList\n .querySelectorAll('[aria-selected=\"true\"]')\n .forEach(t => t.setAttribute('aria-selected', 'false'));\n targetTab.setAttribute('aria-selected', 'true');\n tabWrapper.querySelectorAll('[role=\"tabpanel\"]').forEach(p => p.setAttribute('hidden', 'true'));\n tabWrapper\n .querySelector(`#${targetTab.getAttribute('aria-controls')}`)\n ?.removeAttribute('hidden');\n }\n tabContainers?.forEach(tabContainer => {\n const prefix = tabContainer.getAttribute('data-prefix') || '';\n const historyStateName = 'tab' + prefix;\n const panes = tabContainer.querySelectorAll('.spv-tabs__panel');\n if (panes.length < 2) {\n return;\n }\n const preSelectedIndex = window.history.state && window.history.state[historyStateName]\n ? parseInt(window.history.state[historyStateName], 10)\n : 0 || 0;\n panes.forEach((panel, i) => {\n panel.setAttribute('id', `${prefix}panel-${i}`);\n panel.setAttribute('role', 'tabpanel');\n panel.setAttribute('tabindex', '0');\n panel.setAttribute('aria-labelledby', `${prefix}tab-${i}`);\n if (i === preSelectedIndex) {\n panel.classList.add('spv-tabs__panel--selected');\n }\n else {\n panel.setAttribute('hidden', 'true');\n }\n });\n const premadeTablist = tabContainer.querySelector('.spv-tabs__tabList');\n let tablist;\n let tabs = [];\n if (premadeTablist) {\n tabs = Array.from(premadeTablist.children);\n tabs.forEach((tab, i) => {\n tab.setAttribute('aria-selected', i === preSelectedIndex ? 'true' : 'false');\n tab.setAttribute('aria-controls', `${prefix}panel-${i}`);\n tab.setAttribute('id', `${prefix}tab-${i}`);\n tab.setAttribute('tabindex', i === preSelectedIndex ? '0' : '-1');\n tab.setAttribute('data-index', i.toString());\n tab.setAttribute('data-history-state-name', historyStateName);\n tab.addEventListener('click', changeTabs);\n if (i === preSelectedIndex) {\n tab.classList.add('spv-tabs__tabButton--selected');\n }\n else {\n tab.classList.remove('spv-tabs__tabButton--selected');\n }\n });\n tablist = premadeTablist;\n }\n else {\n tabs = Array.from(panes).map((panel, i) => {\n const title = panel.querySelector('.spv-tabs__title');\n const tab = document.createElement('button');\n tab.classList.add('spv-tabs__tabButton');\n tab.innerHTML = title?.innerHTML || 'Fane uten navn';\n title?.remove();\n tab.setAttribute('role', 'tab');\n tab.setAttribute('aria-selected', i === preSelectedIndex ? 'true' : 'false');\n tab.setAttribute('aria-controls', `${prefix}panel-${i}`);\n tab.setAttribute('id', `${prefix}tab-${i}`);\n tab.setAttribute('tabindex', i === preSelectedIndex ? '0' : '-1');\n tab.setAttribute('data-index', i.toString());\n tab.setAttribute('data-history-state-name', historyStateName);\n tab.addEventListener('click', changeTabs);\n if (i === preSelectedIndex) {\n tab.classList.add('spv-tabs__tabButton--selected');\n }\n return tab;\n });\n tablist = document.createElement('div');\n tablist.classList.add('spv-tabs__tabList');\n tablist.setAttribute('role', 'tablist');\n tablist.append(...tabs);\n }\n let tabFocus = 0;\n tablist.addEventListener('keydown', e => {\n if (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {\n tabs[tabFocus].setAttribute('tabindex', '-1');\n if (e.key === 'ArrowRight') {\n tabFocus++;\n if (tabFocus >= tabs.length) {\n tabFocus = 0;\n }\n }\n else if (e.key === 'ArrowLeft') {\n tabFocus--;\n if (tabFocus < 0) {\n tabFocus = tabs.length - 1;\n }\n }\n tabs[tabFocus].setAttribute('tabindex', '0');\n tabs[tabFocus].focus();\n }\n });\n tabContainer.prepend(tablist);\n });\n}\nwindow.addEventListener('DOMContentLoaded', () => {\n console.debug('DOMContentLoaded TABS');\n tabs();\n});\n//# sourceMappingURL=tabs.js.map","export const handleButtonModifications = (button, actualButton) => {\n if (button === actualButton) {\n button.setAttribute('aria-pressed', 'true');\n button.classList.add('spv-button--primary');\n button.classList.remove('spv-button--secondary');\n }\n else {\n button.setAttribute('aria-pressed', 'false');\n button.classList.remove('spv-button--primary');\n button.classList.add('spv-button--secondary');\n }\n};\nexport const sortTags = (tags) => {\n return tags.sort((a, b) => {\n if (a.toLocaleLowerCase() === 'ongoing')\n return -1;\n if (b.toLocaleLowerCase() === 'ongoing')\n return 1;\n return 0;\n });\n};\n//# sourceMappingURL=helpers.js.map","import { handleButtonModifications, sortTags } from './helpers';\nfunction getMappedName(value) {\n switch (value) {\n case 'Alle':\n return 'Alle';\n case 'Trikken':\n return 'Trikken';\n case 'T-Banen':\n return 'T-banen';\n case 'Konsern':\n return 'Konsern';\n case 'Ongoing':\n return 'Aktive prosjekter';\n case 'Finished':\n case 'Fullført':\n case 'Ferdig':\n case 'Avsluttet':\n case 'Avsluttede':\n return 'Avsluttede prosjekter';\n default:\n return value;\n }\n}\nfunction isFinisedProjectTag(tag) {\n const tagToLower = tag.toLocaleLowerCase();\n return (tagToLower === 'finished' ||\n tagToLower === 'fullført' ||\n tagToLower === 'ferdig' ||\n tagToLower === 'avsluttet' ||\n tagToLower === 'avsluttede' ||\n tagToLower === 'avsluttede prosjekter');\n}\nfunction tagfilter(tagContainer) {\n const listContainerId = tagContainer.dataset.tagFilterListContainer;\n if (!listContainerId) {\n console.debug('No list container id found');\n return;\n }\n const listContainer = document.getElementById(listContainerId);\n if (!listContainer) {\n console.debug('No list container found');\n return;\n }\n const allListItems = listContainer.querySelectorAll('li.spv-listCard');\n const tagfilterables = listContainer.querySelectorAll('[data-tag-filterable]');\n if (tagfilterables.length === 0) {\n console.debug('Found no tag-filterables');\n return;\n }\n console.debug('Found tag-filterables: ', tagfilterables.length);\n const filterMap = new Map();\n tagfilterables.forEach(tagfilterable => {\n const tags = tagfilterable.dataset.tagFilterable?.split(',') || [];\n tags\n .filter(t => t?.length > 0)\n .forEach(tag => {\n const tagList = filterMap.get(tag) || [];\n tagList.push(tagfilterable);\n filterMap.set(tag, tagList);\n });\n });\n const tags = sortTags(Array.from(filterMap.keys()));\n if (tags.length === 0) {\n console.debug('Found no tags');\n return;\n }\n const tagButtons = tags.map(tag => {\n const tagButton = document.createElement('button');\n tagButton.classList.add('spv-tagFilter__button', 'spv-button', 'spv-button--secondary');\n const tagName = getMappedName(tag);\n const isFinishedProjectButtonTag = isFinisedProjectTag(tag);\n tagButton.innerHTML = tagName;\n tagButton.setAttribute('aria-pressed', 'false');\n tagButton.setAttribute('aria-label', 'Filter: Vis ' + tagName);\n tagButton.addEventListener('click', () => {\n if (isFinishedProjectButtonTag) {\n allListItems.forEach(item => {\n item.classList.add('spv-tagFilter__hidden');\n });\n }\n else {\n allListItems.forEach(item => {\n item.classList.remove('spv-tagFilter__hidden');\n });\n }\n tagfilterables.forEach(tagfilterable => {\n tagfilterable.classList.add('spv-tagFilter__hidden');\n });\n const tagList = filterMap.get(tag) || [];\n tagList.forEach(tagfilterable => {\n tagfilterable.classList.remove('spv-tagFilter__hidden');\n });\n tagButtons.forEach(button => {\n handleButtonModifications(button, tagButton);\n });\n });\n return tagButton;\n });\n const allButtonText = tagContainer.dataset.tagFilterAllText || 'Alle';\n const allButton = document.createElement('button');\n allButton.classList.add('spv-tagFilter__button', 'spv-button', 'spv-button--primary');\n allButton.innerHTML = allButtonText;\n allButton.setAttribute('aria-pressed', 'true');\n allButton.setAttribute('aria-label', 'Filter: ' + allButtonText);\n allButton.addEventListener('click', () => {\n allListItems.forEach(item => {\n item.classList.remove('spv-tagFilter__hidden');\n });\n tagButtons.forEach(button => {\n handleButtonModifications(button, allButton);\n });\n });\n tagButtons.unshift(allButton);\n tagContainer.append(...tagButtons);\n}\nexport default function initTagfilters() {\n const tagContainers = document.querySelectorAll('[data-tag-filter-list-container]');\n tagContainers.forEach(tagContainer => {\n tagfilter(tagContainer);\n });\n}\nwindow.addEventListener('DOMContentLoaded', () => {\n initTagfilters();\n});\n//# sourceMappingURL=tagfilter.js.map","import { debounce } from '../../functions/debounce';\nimport { initEditModeTogglers } from './editmode-toggler';\nimport { checkForDuplicateIds } from './check-for-duplicate-ids';\nfunction initForm(form) {\n const spinner = form.querySelector('.spv-spinner');\n if (!spinner) {\n console.warn('No spinner found in form');\n return;\n }\n spinner.setAttribute('aria-live', 'polite');\n const action = form.getAttribute('action');\n if (!action) {\n console.warn('Form had no action!', form);\n return;\n }\n const statusMessage = document.createElement('div');\n statusMessage.classList.add('spv-screenreader', 'svp-statusMessage');\n statusMessage.setAttribute('role', 'status');\n statusMessage.setAttribute('aria-live', 'polite');\n statusMessage.setAttribute('aria-atomic', 'true');\n form.appendChild(statusMessage);\n console.debug('initForm', form);\n const method = form.getAttribute('method');\n const inputs = form.getElementsByTagName('input');\n const onSubmit = async (e) => {\n e.preventDefault();\n if (!form.reportValidity()) {\n console.debug('On submit, form is not valid');\n return;\n }\n console.debug('On submit, form is valid');\n spinner.classList.remove('spv-spinner--done');\n spinner.classList.add('spv-spinner--active');\n statusMessage.innerText = '';\n const data = new FormData(form);\n const response = await fetch(action, {\n method: method || 'POST',\n body: data,\n });\n if (response.ok) {\n statusMessage.innerText = 'Lagret!';\n setTimeout(() => {\n spinner.classList.remove('spv-spinner--active');\n spinner.classList.add('spv-spinner--done');\n }, 200);\n setTimeout(() => {\n spinner.classList.remove('spv-spinner--done');\n statusMessage.innerText = '';\n }, 5000);\n }\n };\n form.addEventListener('submit', onSubmit);\n const debouncedSubmit = debounce(() => onSubmit(new Event('submit')));\n const debouncedSubmitLong = debounce(() => onSubmit(new Event('submit')), 500);\n const onLetterTyped = function (ev) {\n if (ev.key?.length === 1 || ev.key === 'Backspace' || ev.key === 'Delete') {\n console.debug('Printable keyup ', ev.key);\n debouncedSubmitLong();\n }\n else {\n if (ev.key) {\n console.debug('Non printable keyup key:', ev.key);\n }\n else {\n console.debug('Non printable keyup no key attribute', ev);\n }\n }\n };\n const onTextInputChanged = function (ev) {\n console.debug('Text input changed', ev);\n debouncedSubmitLong();\n };\n const onOtherInputChanged = function (ev) {\n console.debug('Form element changed', ev);\n debouncedSubmit();\n };\n const arrayOfInputs = Array.from(inputs);\n arrayOfInputs.forEach((input) => {\n switch (input.type) {\n case 'text':\n case 'url':\n case 'email':\n case 'tel':\n case 'textarea':\n input.addEventListener('keyup', onLetterTyped);\n input.addEventListener('change', onTextInputChanged);\n break;\n default:\n input.addEventListener('change', onOtherInputChanged);\n break;\n }\n });\n const deleteButton = form.querySelector('[data-delete-action]');\n if (deleteButton) {\n const deleteAction = deleteButton.dataset.deleteAction;\n const onDelete = async (e) => {\n if (!deleteAction) {\n console.warn('No delete action found, using fallback');\n return;\n }\n e.preventDefault();\n if (!confirm('Er du sikker på at du vil slette?')) {\n return;\n }\n spinner.classList.remove('spv-spinner--done');\n spinner.classList.add('spv-spinner--active');\n statusMessage.innerText = '';\n const data = new FormData(form);\n const response = await fetch(deleteAction, {\n method: method || 'POST',\n body: data,\n });\n if (response.ok) {\n statusMessage.innerText = 'Slettet!';\n form.classList.add('spv-autosavedForm--deleting');\n setTimeout(() => {\n form.remove();\n }, 2550);\n }\n };\n deleteButton.addEventListener('click', onDelete);\n }\n}\nexport default function initAutoSavedForms() {\n const forms = document.querySelectorAll('.spv-autosavedForm');\n console.debug('initAutoSavedForms', forms);\n forms.forEach(form => {\n initForm(form);\n });\n}\nfunction initValidation() {\n const forms = document.querySelectorAll('.spv-validate');\n forms.forEach(form => {\n form.addEventListener('submit', e => {\n if (!form.reportValidity()) {\n e.preventDefault();\n }\n });\n });\n}\nwindow.addEventListener('DOMContentLoaded', () => {\n console.debug('DOMContentLoaded AUTOSAVED FORMS');\n initAutoSavedForms();\n initValidation();\n initEditModeTogglers();\n checkForDuplicateIds();\n});\n//# sourceMappingURL=autosavedform.js.map","export function initEditModeTogglers() {\n const editTogglers = document.querySelectorAll('.spv-editToggler');\n editTogglers.forEach(editToggler => {\n editToggler.addEventListener('click', () => {\n const wrapperId = editToggler.dataset.wrapperId;\n const wrapper = wrapperId ? document.getElementById(wrapperId) : null;\n wrapper?.classList.add('spv-editMode');\n wrapper?.classList.remove('spv-viewMode');\n editToggler.classList.add('spv-screenreader');\n editToggler.setAttribute('aria-hidden', 'true');\n });\n });\n}\n//# sourceMappingURL=editmode-toggler.js.map","export function checkForDuplicateIds() {\n const toCeckWrappers = document.querySelectorAll('[data-check-id-duplicates]');\n toCeckWrappers.forEach(wrapper => {\n const ids = new Set();\n const elements = wrapper.querySelectorAll('[id]');\n elements.forEach(element => {\n const id = element.id;\n if (ids.has(id)) {\n console.warn('Duplicate id', id, element);\n }\n else {\n ids.add(id);\n }\n });\n });\n}\n//# sourceMappingURL=check-for-duplicate-ids.js.map","export default function readmore() {\n const readmores = document.querySelectorAll('[data-readmore]');\n console.log('Found readmores: ', readmores.length);\n readmores.forEach(readmore => {\n readmore.classList.add('spv-readmore', 'spv-readmore--hide');\n const maxNum = parseInt(readmore.dataset.readmore || '3');\n const children = Array.from(readmore.children);\n if (children.length <= maxNum) {\n return;\n }\n const readmoreButton = document.createElement('button');\n readmoreButton.innerHTML = `Se ${children.length - maxNum} flere`;\n readmoreButton.setAttribute('aria-hidden', 'true');\n readmoreButton.setAttribute('tabindex', '-1');\n children.forEach((child, index) => {\n if (index >= maxNum) {\n child.classList.add('spv-readmore__hidden');\n child.getElementsByTagName('a')[0]?.addEventListener('focus', () => {\n child.classList.remove('spv-readmore__hidden');\n const hiddenCount = readmore.getElementsByClassName('spv-readmore__hidden').length;\n readmoreButton.innerHTML = `Se ${hiddenCount} flere`;\n if (hiddenCount <= 0) {\n readmoreButton.remove();\n }\n });\n }\n });\n readmoreButton.classList.add('spv-readmore__button', 'spv-button', 'spv-button--pill', 'spv-button--primary', 'spv-colSpan--full');\n readmoreButton.addEventListener('click', () => {\n readmore.classList.remove('spv-readmore--hide');\n children.forEach(child => {\n child.classList.remove('spv-readmore__hidden');\n });\n readmoreButton.remove();\n });\n readmore.after(readmoreButton);\n });\n}\nwindow.addEventListener('DOMContentLoaded', () => {\n readmore();\n});\n//# sourceMappingURL=readmore.js.map","\"use strict\";\nfunction initFileUpload(input) {\n const inputId = input.id;\n const fileListElement = document.querySelector('#fileList_' + inputId);\n let filesList = [];\n input.addEventListener('change', () => {\n if (input.files?.length) {\n if (!input.multiple) {\n filesList = [];\n }\n for (let index = 0; index < input.files.length; index++) {\n filesList.push(input.files[index]);\n }\n updateFileInput();\n renderFileList();\n }\n });\n function renderFileList() {\n if (!fileListElement) {\n return;\n }\n fileListElement.innerHTML = '';\n filesList.forEach((file, index) => {\n const li = document.createElement('li');\n li.classList.add('spv-uploadedFileContainer');\n const fileName = document.createElement('p');\n fileName.textContent = 'Valgt fil: ' + file.name;\n const removeButton = document.createElement('button');\n removeButton.setAttribute('aria-label', 'Fjern filen');\n removeButton.setAttribute('id', `${fileName}-remove-button`);\n removeButton.setAttribute('type', `button`);\n removeButton.classList.add('spv-removeButton');\n removeButton.addEventListener('click', () => {\n removeFile(index);\n });\n li.appendChild(fileName);\n li.appendChild(removeButton);\n fileListElement.appendChild(li);\n });\n }\n function updateFileInput() {\n const dataTransfer = new DataTransfer();\n filesList.forEach(file => dataTransfer.items.add(file));\n input.files = dataTransfer.files;\n }\n function removeFile(index) {\n filesList.splice(index, 1);\n updateFileInput();\n renderFileList();\n }\n}\nwindow.addEventListener('DOMContentLoaded', () => {\n console.debug('DOMContentLoaded fileupload');\n const fileUploads = document.querySelectorAll('input.spv-fileUpload');\n fileUploads.forEach((input) => initFileUpload(input));\n});\n//# sourceMappingURL=fileupload.js.map","\"use strict\";\nfunction configureForm(resultContainer, currentFormEl, spinner) {\n const method = currentFormEl.method;\n const action = currentFormEl.action;\n currentFormEl.addEventListener('submit', e => {\n e.preventDefault();\n e.stopPropagation();\n currentFormEl.style.display = 'none';\n spinner.classList.remove('spv-spinner--done');\n spinner.classList.add('spv-spinner--active');\n new FormData(currentFormEl);\n });\n currentFormEl.addEventListener('formdata', e => {\n const data = e.formData;\n fetch(action, {\n method: method,\n body: data,\n })\n .then(response => response.text())\n .then(text => {\n applyResponse(text, resultContainer, currentFormEl, spinner);\n setTimeout(() => {\n spinner.classList.remove('spv-spinner--active');\n }, 200);\n });\n });\n}\nfunction applyResponse(res, resultContainer, currentFormEl, spinner) {\n const resAsDom = document.createRange().createContextualFragment(res);\n const newResults = resAsDom.querySelector('.spv-moreResults__container');\n const newResultsItems = newResults?.children;\n if (newResultsItems) {\n for (let i = 0; i < newResultsItems.length; i++) {\n resultContainer.appendChild(newResultsItems[i]);\n if (i === 0) {\n const firstLink = resultContainer.lastElementChild?.querySelector('a');\n firstLink?.focus();\n }\n }\n }\n else {\n console.warn('Got no results!?');\n }\n const newForm = resAsDom.querySelector('form.spv-moreResults__form');\n if (newForm) {\n currentFormEl.after(newForm);\n configureForm(resultContainer, newForm, spinner);\n currentFormEl.remove();\n }\n}\nfunction moreResults() {\n const moreForm = document.querySelector('form.spv-moreResults__form');\n const moreContainer = document.querySelector('.spv-moreResults__container');\n const spinner = document.querySelector('.spv-moreResults__spinner');\n if (moreForm && moreContainer && spinner) {\n spinner.setAttribute('aria-live', 'polite');\n configureForm(moreContainer, moreForm, spinner);\n }\n}\nwindow.addEventListener('DOMContentLoaded', () => {\n moreResults();\n});\n//# sourceMappingURL=more-results.js.map","function makeSectionReorderable(containerId) {\n const container = document.getElementById(containerId);\n if (!container) {\n console.error(`Container with id ${containerId} not found.`);\n return;\n }\n let draggedItem = null;\n const draggableForms = container.querySelectorAll('.spv-draggable');\n draggableForms.forEach(draggableForm => {\n draggableForm.addEventListener('dragstart', function () {\n draggedItem = draggableForm;\n draggableForm.classList.add('spv-dragging');\n });\n draggableForm.addEventListener('dragend', async function () {\n if (draggedItem) {\n draggedItem.classList.remove('spv-dragging');\n draggedItem = null;\n await updateAndSubmitOrder(container);\n }\n });\n const checkbox = draggableForm.querySelector('input[name=\"SegmentShow\"]');\n if (checkbox) {\n checkbox.addEventListener('change', async function () {\n await updateAndSubmitShowElementForm(draggableForm);\n });\n }\n });\n container.addEventListener('dragover', (e) => {\n e.preventDefault();\n if (!draggedItem)\n return;\n const afterElement = getDragAfterElement(container, e.clientY);\n if (afterElement === null) {\n container.appendChild(draggedItem);\n }\n else {\n container.insertBefore(draggedItem, afterElement);\n }\n });\n function getDragAfterElement(container, y) {\n const remainingDraggableElements = [\n ...container.querySelectorAll('.spv-draggable:not(.dragging)'),\n ];\n return remainingDraggableElements.reduce((closest, child) => {\n const box = child.getBoundingClientRect();\n const offset = y - box.top - box.height / 3;\n if (offset < 0 && offset > closest.offset) {\n return { offset: offset, element: child };\n }\n else {\n return closest;\n }\n }, { offset: Number.NEGATIVE_INFINITY, element: null }).element;\n }\n async function updateAndSubmitOrder(container) {\n const draggableFormItems = Array.from(container.querySelectorAll('.spv-draggable'));\n let endpoint = '';\n let method = '';\n const updatedOrderData = draggableFormItems\n .map((draggableForm, index) => {\n if (index === 0) {\n endpoint = draggableForm.action;\n method = draggableForm.method;\n }\n const segmentName = draggableForm.name;\n const segmentReferenceName = draggableForm.querySelector('input[name=\"SegmentReference\"]');\n const segmentId = draggableForm.querySelector('input[name=\"SegmentId\"]');\n const segmentActive = draggableForm.querySelector('input[name=\"SegmentShow\"]');\n const segmentOrder = draggableForm.querySelector('input[name=\"SegmentOrder\"]');\n if (!segmentId || !segmentActive || !segmentOrder) {\n console.error('Form inputs missing');\n return null;\n }\n segmentOrder.value = (index + 1).toString();\n return {\n referenceName: segmentName,\n id: segmentId.value,\n referenceType: segmentReferenceName?.value,\n active: segmentActive.checked,\n order: index + 1,\n };\n })\n .filter(Boolean);\n try {\n const response = await fetch(endpoint, {\n method: method || 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(updatedOrderData),\n });\n if (response.ok) {\n console.log('Updated order submitted successfully');\n }\n else {\n console.warn('Failed to submit updated order');\n }\n }\n catch (e) {\n console.error('Error submitting order: ', e);\n }\n }\n async function updateAndSubmitShowElementForm(draggableForm) {\n const endpoint = draggableForm.action;\n const method = draggableForm.method;\n const spinner = draggableForm.querySelector('.spv-spinner');\n spinner.setAttribute('aria-live', 'polite');\n spinner.classList.remove('spv-spinner--done');\n spinner.classList.add('spv-spinner--active');\n const segmentName = draggableForm.name;\n const segmentReferenceName = draggableForm.querySelector('input[name=\"SegmentReference\"]');\n const segmentId = draggableForm.querySelector('input[name=\"SegmentId\"]');\n const segmentActive = draggableForm.querySelector('input[name=\"SegmentShow\"]');\n const segmentOrder = draggableForm.querySelector('input[name=\"SegmentOrder\"]');\n const formData = [\n {\n referenceName: segmentName,\n id: segmentId?.value,\n referenceType: segmentReferenceName?.value || '',\n active: segmentActive?.checked,\n order: Number.parseInt(segmentOrder?.value || '0'),\n },\n ];\n try {\n const response = await fetch(endpoint, {\n method: method || 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(formData),\n });\n if (response.ok) {\n console.log('Show element form submitted successfully');\n setTimeout(() => {\n spinner.classList.remove('spv-spinner--active');\n spinner.classList.add('spv-spinner--done');\n }, 200);\n setTimeout(() => {\n spinner.classList.remove('spv-spinner--done');\n }, 5000);\n }\n else {\n console.warn('Failed to submit show element form');\n }\n }\n catch (e) {\n console.error('Error submitting show element form: ', e);\n }\n }\n}\nexport default function initReordableSectionForms() {\n document\n .querySelectorAll('.spv-draggable-container')\n .forEach(el => makeSectionReorderable(el.id));\n}\ndocument.addEventListener('DOMContentLoaded', () => {\n initReordableSectionForms();\n});\n//# sourceMappingURL=reorderable-section-form.js.map","import { noPreferenceReducedMotion } from '../../functions/reducedMotion';\nconst boilerplate = () => {\n const expandedButton = document.getElementById('expand-button');\n const collapsibleText = document.getElementById('collapsible-text');\n if (noPreferenceReducedMotion) {\n import('gsap').then(({ gsap }) => {\n const handleExtendAnimated = () => {\n if (!expandedButton || !collapsibleText) {\n return console.log('Missing expand button or collapsible text element');\n }\n if (expandedButton.innerText.toLowerCase() === 'les mer') {\n expandedButton.innerText = 'Les mindre';\n collapsibleText.classList.add('spv-expanded');\n gsap.to(collapsibleText, { maxHeight: '10000px', duration: 0.5, ease: 'circ.inOut' });\n }\n else {\n expandedButton.innerText = 'Les mer';\n collapsibleText.classList.remove('spv-expanded');\n gsap.to(collapsibleText, { maxHeight: '320px', duration: 0.5, ease: 'circ.inOut' });\n }\n };\n expandedButton?.addEventListener('click', handleExtendAnimated);\n });\n }\n else {\n const handleExtendPlain = () => {\n if (!expandedButton || !collapsibleText) {\n return console.log('Missing expand button or collapsible text element');\n }\n if (expandedButton.innerText.toLowerCase() === 'les mer') {\n expandedButton.innerText = 'Les mindre';\n collapsibleText.classList.add('spv-expanded');\n collapsibleText.style.maxHeight = 'none';\n }\n else {\n expandedButton.innerText = 'Les mer';\n collapsibleText.classList.remove('spv-expanded');\n collapsibleText.style.maxHeight = '320px';\n }\n };\n expandedButton?.addEventListener('click', handleExtendPlain);\n }\n};\nboilerplate();\nexport default boilerplate;\n//# sourceMappingURL=boilerplate.js.map","import { noPreferenceReducedMotion } from '../../functions/reducedMotion';\n(function () {\n const startPageHero = document.getElementById('start-page-hero');\n if (!startPageHero)\n return;\n if (!noPreferenceReducedMotion)\n return;\n import('gsap').then(({ gsap }) => {\n const startPageHeroContent = document.getElementById('start-page-hero__content');\n const staggerItems = Array.from(startPageHeroContent?.querySelectorAll('[data-stagger-item]'));\n gsap.from(staggerItems, {\n y: -48,\n opacity: 0,\n duration: 0.6,\n stagger: 0.1,\n ease: 'back.out',\n });\n });\n})();\n//# sourceMappingURL=start-page-hero.js.map","import { noPreferenceReducedMotion } from '../../functions/reducedMotion';\n(function () {\n const startPageBgSVG = document.querySelector('#start-page-bg > svg');\n if (!startPageBgSVG)\n return;\n if (!noPreferenceReducedMotion)\n return;\n import('gsap').then(({ gsap }) => {\n import('gsap/ScrollTrigger').then(({ ScrollTrigger }) => {\n gsap.registerPlugin(ScrollTrigger);\n const trigger = {\n start: 0,\n end: 400,\n scrub: 1,\n invalidateOnRefresh: true,\n };\n if (noPreferenceReducedMotion) {\n gsap.to(startPageBgSVG, {\n y: 150,\n ease: 'none',\n scrollTrigger: trigger,\n });\n }\n });\n });\n})();\n//# sourceMappingURL=start-page-bg.js.map","\"use strict\";\n(function () {\n const labelElement = document.querySelector('.spv-textarea--textlimit');\n const guid = labelElement?.dataset['guid'];\n const length = labelElement?.dataset['length'];\n if (guid && length) {\n const input = document.getElementById(guid);\n const display = document.getElementById(guid + '-counter');\n input?.addEventListener('keyup', e => {\n const { target } = e;\n if (target instanceof HTMLTextAreaElement) {\n display.innerHTML = `${Number(length) - target.value.length}`;\n }\n });\n }\n})();\n//# sourceMappingURL=counter.js.map","\"use strict\";\nfunction sortLists() {\n const lists = document.querySelectorAll('.spv-autoSortedList');\n lists.forEach(list => {\n const items = list.querySelectorAll('[data-sort-by]');\n const sortedItems = Array.from(items).sort((a, b) => {\n const aText = a.dataset.sortBy || '';\n const bText = b.dataset.sortBy || '';\n return aText.localeCompare(bText);\n });\n sortedItems.forEach(item => list.appendChild(item));\n });\n}\nwindow.addEventListener('DOMContentLoaded', () => {\n console.debug('DOMContentLoaded SORTED');\n sortLists();\n});\n//# sourceMappingURL=sorted.js.map"],"names":["autocomplete","element","searchForm","document","getElementById","elementID","import","then","default","lazyAutocomplete","FOCUS_GROUP","toArray","a","ret","Array","length","i","asArray","isArray","getFirst","getParentNode","node","parentNode","nodeType","Node","DOCUMENT_FRAGMENT_NODE","host","isTopNode","DOCUMENT_NODE","isVisibleUncached","checkParent","ELEMENT_NODE","computedStyle","window","getComputedStyle","getPropertyValue","isElementHidden","isVisibleCached","visibilityCache","cached","get","undefined","result","bind","set","isAutoFocusAllowedCached","cache","isAutoFocusAllowed","isAutoFocusAllowedUncached","getDataset","dataset","isHTMLInputElement","tagName","isRadioElement","type","attribute","getAttribute","includes","isGuard","_a","Boolean","focusGuard","isNotAGuard","isDefined","x","tabSort","b","tabDiff","tabIndex","indexDiff","index","orderByTabIndex","nodes","filterNegative","keepGuards","map","filter","data","sort","queryTabbables","join","queryGuardTabbables","concat","getFocusablesWithShadowDom","parent","withGuards","shadowRoot","children","reduce","acc","child","matches","getFocusables","parents","focusableWithShadowDom","focusableWithIframes","apply","HTMLIFrameElement","contentDocument","body","getFocusablesWithIFrame","querySelectorAll","filterFocusable","isHTMLButtonElement","disabled","notHiddenInput","filterAutoFocusable","Map","getAllTabbableNodes","topNodes","parentAutofocusables","topNode","parentFocus","contains","scope","Object","getPrototypeOf","call","some","iframeBody","getTopParent","getAllAffectedNodes","currentNode","group","push","contained","Set","l","j","position","compareDocumentPosition","DOCUMENT_POSITION_CONTAINED_BY","add","DOCUMENT_POSITION_CONTAINS","_","has","filterNested","getActiveElement","inDocument","activeElement","contentWindow","focusInside","ownerDocument","frame","focusInFrame","focusInsideIframe","correctNode","name","el","checked","findSelectedRadio","pickFirstFocus","pickFocusable","indexOf","NEW_FOCUS","newFocus","innerNodes","outerNodes","lastNode","cnt","firstFocus","lastFocus","isOnGuard","resultSet","activeIndex","lastIndex","lastNodeInside","firstNodeIndex","lastNodeIndex","correctedNodes","forEach","correctedIndexDiff","returnFirstNode","returnLastNode","Math","abs","pickAutofocus","nodesIndexes","orderedNodes","groups","autoFocusables","autoFocusable","autofocus","getParents","getCommonParent","nodeA","nodeB","parentsA","parentsB","currentParent","getFocusMerge","entries","commonParent","baseActiveElement","leftEntry","rightEntries","activeElements","leftEntries","topCommon","entry","subEntry","common","getTopCommonParent","anyFocusable","innerElements","getTabbableNodes","srcNodes","dstNodes","remap","orderedInnerElements","entity","newId","focusNode","allParentAutofocusables","console","warn","guardCount","lockDisabled","lastActiveTrap","lastActiveFocus","isFreeFocus","focusIsHidden","activateTrap","observed","options","target","focusOptions","focusable","error","setTimeout","focus","moveFocusInside","instances","emitChange","event","trap","slice","preventDefault","focusLock","on","domNode","addEventListener","off","removeEventListener","setScrollbarWidthOnDocument","docElement","documentElement","scrollbarWidthBefore","innerWidth","clientWidth","scrollbarWidth","offsetWidth","style","setProperty","toggleAriaHiddenOnBodyChildren","dialogNode","toggle","prototype","removeAttribute","setAttribute","prefersReducedMotionMediaQuery","matchMedia","noPreferenceReducedMotion","toggleMenu","menuSelector","buttonSelector","headerSelector","close","menu","querySelector","menuButton","header","shellHeader","allMenus","from","menuItems","closeNavigation","classList","remove","escapeEvent","defaultPrevented","key","code","gsap","y","opacity","to","duration","stagger","ease","toggleSearch","searchModal","searchButton","closeSearchModal","innerHeight","pagination","text","link","string","innerText","shortcutsButton","systemsButton","syncHeight","closeAllMenus","exclude","plannedWorkView","ongoingWorkView","ongoingWorkButton","plannedWorkButton","display","onclick","ariaPressed","plannedWork","button","list","unreversedNameOfStation","reversedNameOfStation","childNodes","appendChild","linedirection","card","down","up","ctrlIsPressed","originalTargetAttribute","onmousedown","e","ctrlKey","metaKey","Date","onmouseup","fastClick","click","TOC","static","headingSet","tocData","heading","titleText","id","replace","toLowerCase","currentTocItem","toc","generictocPage","tocCreate","tocNavElement","parse","tocNavigation","build","innerHTML","debounce","fn","ms","timeoutId","args","clearTimeout","this","inViewCallback","isIntersecting","wrapper","messagetext","responsiveTable","svgSpriteUrl","spriteUrl","message","createElement","messageTextContainer","iconContainer","iconPointer","addScrollStuff","removeScrollStuff","resizeObserver","ResizeObserver","scrollWidth","insertAdjacentElement","observe","addScrolledClass","scrollLeft","makeResponsiveTable","form","input","resultStatus","resultHits","listItems","texts","filterLiveareaHit","filterLiveareaHits","filterLiveareaInlist","handleStatus","number","createStatusText","handleHits","createHitsText","noLi","item","textContent","value","hidden","handleInputChange","listFilter","params","observedElements","elements","observer","IntersectionObserver","addClassWhenInView","threshold","tooltips","tooltipButtons","tooltipContents","toggleButton","tooltip","tooltipContent","className","findTooltips","accordionItems","openClass","handleAccordionToggleAnimated","accordionItem","collapsibleElement","clickTarget","height","onComplete","ariaExpanded","handleAccordionTogglePlain","debug","changeTabs","targetTab","tabList","tabWrapper","parseInt","stateName","newHistoryState","history","state","pushState","t","p","tabContainer","prefix","historyStateName","panes","preSelectedIndex","panel","premadeTablist","tablist","tabs","tab","toString","title","append","tabFocus","prepend","handleButtonModifications","actualButton","sortTags","tags","toLocaleLowerCase","initTagfilters","tagContainer","listContainerId","tagFilterListContainer","listContainer","allListItems","tagfilterables","filterMap","tagfilterable","tagFilterable","split","tag","tagList","keys","tagButtons","tagButton","getMappedName","isFinishedProjectButtonTag","tagToLower","isFinisedProjectTag","allButtonText","tagFilterAllText","allButton","unshift","tagfilter","initAutoSavedForms","forms","spinner","action","statusMessage","method","inputs","getElementsByTagName","onSubmit","async","reportValidity","FormData","fetch","ok","debouncedSubmit","Event","debouncedSubmitLong","onLetterTyped","ev","onTextInputChanged","onOtherInputChanged","deleteButton","deleteAction","onDelete","confirm","initForm","editToggler","wrapperId","ids","readmores","log","readmore","maxNum","readmoreButton","hiddenCount","getElementsByClassName","after","initFileUpload","inputId","fileListElement","filesList","renderFileList","file","li","fileName","removeButton","splice","updateFileInput","removeFile","dataTransfer","DataTransfer","items","files","multiple","configureForm","resultContainer","currentFormEl","stopPropagation","formData","response","res","resAsDom","createRange","createContextualFragment","newResultsItems","firstLink","lastElementChild","newForm","applyResponse","makeSectionReorderable","containerId","container","draggedItem","draggableForm","draggableFormItems","endpoint","updatedOrderData","segmentName","segmentReferenceName","segmentId","segmentActive","segmentOrder","referenceName","referenceType","active","order","headers","JSON","stringify","updateAndSubmitOrder","checkbox","Number","updateAndSubmitShowElementForm","afterElement","remainingDraggableElements","closest","box","getBoundingClientRect","offset","top","NEGATIVE_INFINITY","getDragAfterElement","clientY","insertBefore","expandedButton","collapsibleText","maxHeight","handleExtendPlain","boilerplate","startPageHeroContent","staggerItems","startPageBgSVG","ScrollTrigger","registerPlugin","trigger","start","end","scrub","invalidateOnRefresh","scrollTrigger","labelElement","guid","HTMLTextAreaElement","aText","sortBy","bText","localeCompare","moreForm","moreContainer","moreResults"],"mappings":";AAAe,SAASA,EAAaC,GACjC,MAAMC,EAAaC,SAASC,eAAeH,EAAQI,WAC/CH,GACAI,OAAO,mCAA0BC,MAAK,EAAGC,QAASC,KAAuBA,EAAiBP,IAElG,CCFO,IAAIQ,EAAc,kBCAdC,EAAU,SAAUC,GAE3B,IADA,IAAIC,EAAMC,MAAMF,EAAEG,QACTC,EAAI,EAAGA,EAAIJ,EAAEG,SAAUC,EAC5BH,EAAIG,GAAKJ,EAAEI,GAEf,OAAOH,CACX,EACWI,EAAU,SAAUL,GAAK,OAAQE,MAAMI,QAAQN,GAAKA,EAAI,CAACA,EAAI,EAC7DO,EAAW,SAAUP,GAAK,OAAQE,MAAMI,QAAQN,GAAKA,EAAE,GAAKA,CAAK,ECExEQ,EAAgB,SAAUC,GAE1B,OAAOA,EAAKC,YAAcD,EAAKC,WAAWC,WAAaC,KAAKC,uBAEpDJ,EAAKC,WAAWI,KAClBL,EAAKC,UACf,EACIK,EAAY,SAAUN,GAEtB,OAAOA,IAASlB,UAAakB,GAAQA,EAAKE,WAAaC,KAAKI,aAChE,EACIC,EAAoB,SAAUR,EAAMS,GACpC,OAAQT,GAAQM,EAAUN,KAxBR,SAAUA,GAG5B,GAAIA,EAAKE,WAAaC,KAAKO,aACvB,OAAO,EAEX,IAAIC,EAAgBC,OAAOC,iBAAiBb,EAAM,MAClD,SAAKW,IAAkBA,EAAcG,kBAGiB,SAA9CH,EAAcG,iBAAiB,YAA0E,WAAjDH,EAAcG,iBAAiB,cACnG,CAayCC,CAAgBf,IAASS,EAAYV,EAAcC,GAC5F,EACWgB,EAAkB,SAAUC,EAAiBjB,GACpD,IAAIkB,EAASD,EAAgBE,IAAInB,GACjC,QAAeoB,IAAXF,EACA,OAAOA,EAEX,IAAIG,EAASb,EAAkBR,EAAMgB,EAAgBM,UAAKF,EAAWH,IAErE,OADAA,EAAgBM,IAAIvB,EAAMqB,GACnBA,CACX,EAIWG,EAA2B,SAAUC,EAAOzB,GACnD,IAAIkB,EAASO,EAAMN,IAAInB,GACvB,QAAeoB,IAAXF,EACA,OAAOA,EAEX,IAAIG,EARyB,SAAUrB,EAAMS,GAC7C,QAAOT,IAASM,EAAUN,OAAS0B,EAAmB1B,IAAQS,EAAYV,EAAcC,GAC5F,CAMiB2B,CAA2B3B,EAAMwB,EAAyBF,UAAKF,EAAWK,IAEvF,OADAA,EAAMF,IAAIvB,EAAMqB,GACTA,CACX,EACWO,EAAa,SAAU5B,GAE9B,OAAOA,EAAK6B,OAChB,EAEWC,EAAqB,SAAU9B,GAAQ,MAAwB,UAAjBA,EAAK+B,SACnDC,EAAiB,SAAUhC,GAClC,OAAO8B,EAAmB9B,IAAuB,UAAdA,EAAKiC,IAC5C,EAIWP,EAAqB,SAAU1B,GACtC,IAAIkC,EAAYlC,EAAKmC,aFxCO,qBEyC5B,OAAQ,EAAC,EAAM,OAAQ,IAAIC,SAASF,EACxC,EACWG,EAAU,SAAUrC,GAAQ,IAAIsC,EAAI,OAAOC,QAAQvC,IAAqC,QAA3BsC,EAAKV,EAAW5B,UAA0B,IAAPsC,OAAgB,EAASA,EAAGE,cAC5HC,EAAc,SAAUzC,GAAQ,OAAQqC,EAAQrC,IAChD0C,EAAY,SAAUC,GAAK,OAAOJ,QAAQI,EAAK,ECjE/CC,EAAU,SAAUrD,EAAGsD,GAC9B,IAAIC,EAAUvD,EAAEwD,SAAWF,EAAEE,SACzBC,EAAYzD,EAAE0D,MAAQJ,EAAEI,MAC5B,GAAIH,EAAS,CACT,IAAKvD,EAAEwD,SACH,OAAO,EAEX,IAAKF,EAAEE,SACH,OAAQ,CAEf,CACD,OAAOD,GAAWE,CACtB,EACWE,EAAkB,SAAUC,EAAOC,EAAgBC,GAC1D,OAAO/D,EAAQ6D,GACVG,KAAI,SAAUtD,EAAMiD,GAAS,MAAQ,CACtCjD,KAAMA,EACNiD,MAAOA,EACPF,SAAUM,IAAiC,IAAnBrD,EAAK+C,UAAoB/C,EAAK6B,SAAW,CAAA,GAAIW,WAAa,GAAK,EAAKxC,EAAK+C,aAEhGQ,QAAO,SAAUC,GAAQ,OAAQJ,GAAkBI,EAAKT,UAAY,KACpEU,KAAKb,EACd,ECpBIc,ECAmB,CACnB,iBACA,iBACA,mBACA,gBAGA,UACA,aACA,UACA,SACA,SACA,QACA,kBACA,kBACA,aACA,oBACA,eDjB2BC,KAAK,KAChCC,EAAsB,GAAGC,OAAOH,EAAgB,wBAChDI,EAA6B,SAAUC,EAAQC,GAC/C,IAAI1B,EACJ,OAAOhD,GAAsC,QAA5BgD,EAAKyB,EAAOE,kBAA+B,IAAP3B,OAAgB,EAASA,EAAG4B,WAAaH,EAAOG,UAAUC,QAAO,SAAUC,EAAKC,GACjI,OAAOD,EAAIP,OAAOQ,EAAMC,QAAQN,EAAaJ,EAAsBF,GAAkB,CAACW,GAAS,GAAIP,EAA2BO,GACjI,GAAE,GACP,EAOWE,EAAgB,SAAUC,EAASR,GAC1C,OAAOQ,EAAQL,QAAO,SAAUC,EAAKL,GACjC,IAAIzB,EACAmC,EAAyBX,EAA2BC,EAAQC,GAC5DU,GAAwBpC,EAAK,IAAIuB,OAAOc,MAAMrC,EAAImC,EAAuBnB,KAAI,SAAUtD,GAAQ,OAV7E,SAAU+D,EAAQC,GAC5C,OAAID,aAAkBa,mBAAqBb,EAAOc,gBACvCN,EAAc,CAACR,EAAOc,gBAAgBC,MAAOd,GAEjD,CAACD,EACZ,CAKkHgB,CAAwB/E,EAAMgE,EAAc,KACtJ,OAAOI,EAAIP,OAEXa,EAEAX,EAAO9D,WACDX,EAAQyE,EAAO9D,WAAW+E,iBAAiBtB,IAAiBH,QAAO,SAAUvD,GAAQ,OAAOA,IAAS+D,CAAO,IAC5G,GACT,GAAE,GACP,EErBWkB,EAAkB,SAAU9B,EAAOlC,GAC1C,OAAO3B,EAAQ6D,GACVI,QAAO,SAAUvD,GAAQ,OAAOgB,EAAgBC,EAAiBjB,MACjEuD,QAAO,SAAUvD,GAAQ,OJ6CN,SAAUA,GAClC,SAAU8B,EAAmB9B,IANA,SAAUA,GAAQ,MAAwB,WAAjBA,EAAK+B,QAMrBmD,CAAoBlF,MAAyB,WAAdA,EAAKiC,MAAqBjC,EAAKmF,UACxG,CI/CyCC,CAAepF,EAAM,GAC9D,EACWqF,EAAsB,SAAUlC,EAAO1B,GAE9C,YADc,IAAVA,IAAoBA,EAAQ,IAAI6D,KAC7BhG,EAAQ6D,GAAOI,QAAO,SAAUvD,GAAQ,OAAOwB,EAAyBC,EAAOzB,EAAQ,GAClG,EAYWuF,EAAsB,SAAUC,EAAUvE,GACjD,OAAOiC,EAAgB+B,EAAgBV,EAAciB,GAAWvE,IAAkB,EACtF,EAMWwE,EAAuB,SAAUC,EAASzE,GACjD,OAAOgE,GFFHU,EEE2CD,EFFtBV,iBAAiB,IAAInB,OJpB1B,wBIoB6C,MAC1DvE,EAAQqG,GACVrC,KAAI,SAAUtD,GAAQ,OAAOuE,EAAc,CAACvE,OAC5CmE,QAAO,SAAUC,EAAKjB,GAAS,OAAOiB,EAAIP,OAAOV,KAAW,KEDRlC,GFHxB,IAC7B0E,CEGR,EAIWC,EAAW,SAAUC,EAAOjH,GACnC,OAAIiH,EAAM5B,WACC2B,EAASC,EAAM5B,WAAYrF,UAGYwC,IAA1C0E,OAAOC,eAAeF,GAAOD,WAC7BE,OAAOC,eAAeF,GAAOD,SAASI,KAAKH,EAAOjH,KAG/CU,EAAQuG,EAAM3B,UAAU+B,MAAK,SAAU5B,GAC1C,IAAI/B,EACJ,GAAI+B,aAAiBO,kBAAmB,CACpC,IAAIsB,EAA8C,QAAhC5D,EAAK+B,EAAMQ,uBAAoC,IAAPvC,OAAgB,EAASA,EAAGwC,KACtF,QAAIoB,GACON,EAASM,EAAYtH,EAGnC,CACD,OAAOgH,EAASvB,EAAOzF,EACnC,GAEA,EChCIuH,EAAe,SAAUnG,GACzB,OAAOA,EAAKC,WAAakG,EAAanG,EAAKC,YAAcD,CAC7D,EAMWoG,EAAsB,SAAUpG,GAEvC,OADYJ,EAAQI,GACPuD,OAAOhB,SAAS4B,QAAO,SAAUC,EAAKiC,GAC/C,IAAIC,EAAQD,EAAYlE,aAAa9C,GAIrC,OAHA+E,EAAImC,KAAK5B,MAAMP,EAAMkC,EAnCV,SAAUnD,GAGzB,IAFA,IAAIqD,EAAY,IAAIC,IAChBC,EAAIvD,EAAMzD,OACLC,EAAI,EAAGA,EAAI+G,EAAG/G,GAAK,EACxB,IAAK,IAAIgH,EAAIhH,EAAI,EAAGgH,EAAID,EAAGC,GAAK,EAAG,CAC/B,IAAIC,EAAWzD,EAAMxD,GAAGkH,wBAAwB1D,EAAMwD,KAEjDC,EAAWzG,KAAK2G,gCAAkC,GACnDN,EAAUO,IAAIJ,IAEbC,EAAWzG,KAAK6G,4BAA8B,GAC/CR,EAAUO,IAAIpH,EAGrB,CAEL,OAAOwD,EAAMI,QAAO,SAAU0D,EAAGhE,GAAS,OAAQuD,EAAUU,IAAIjE,EAAS,GAC7E,CAmBckE,CAAa7H,EAAQ6G,EAAaE,GAAarB,iBAAiB,IAAInB,OAAOxE,EAAa,MAAOwE,OAAOyC,EAAO,YAAazC,OPtC5G,2BOsCmI,oBACjJ,CAACwC,IACAjC,CACV,GAAE,GACP,EC9CWgD,EAAmB,SAAUC,GACpC,IAAI/E,EAEJ,QADmB,IAAf+E,IAAyBA,EAAavI,UACrCuI,GAAeA,EAAWC,cAA/B,CAGA,IAAIA,EAAgBD,EAAWC,cAC/B,OAAQA,EAAcrD,WAChBmD,EAAiBE,EAAcrD,YAC/BqD,aAAyB1C,oBAA6D,QAAtCtC,EAAKgF,EAAcC,qBAAkC,IAAPjF,OAAgB,EAASA,EAAGxD,UACtHsI,EAAiBE,EAAcC,cAAczI,UAC7CwI,CANT,CAOL,ECJWE,EAAc,SAAU9B,EAAS4B,GAGxC,YADsB,IAAlBA,IAA4BA,EAAgBF,EAAiBtH,EAAS4F,GAAS+B,mBAC9EH,GAAkBA,EAAczF,SAAWyF,EAAczF,QAAQW,aAG/D4D,EAAoBV,GAASO,MAAK,SAAUjG,GAC/C,OAAO4F,EAAS5F,EAAMsH,IAbN,SAAU5B,EAAS4B,GACvC,OAAO/E,QAAQjD,EAAQoG,EAAQV,iBAAiB,WAAWiB,MAAK,SAAUjG,GAAQ,OAFnE,SAAU0H,EAAOJ,GAAiB,OAAOI,IAAUJ,EAEuBK,CAAa3H,EAAMsH,EAAiB,IACjI,CAWgDM,CAAkB5H,EAAMsH,EACxE,GACA,ECbWO,EAAc,SAAU7H,EAAMmD,GACrC,OAAInB,EAAehC,IAASA,EAAK8H,KAPb,SAAU9H,EAAMmD,GACpC,OAAOA,EACFI,OAAOvB,GACPuB,QAAO,SAAUwE,GAAM,OAAOA,EAAGD,OAAS9H,EAAK8H,QAC/CvE,QAAO,SAAUwE,GAAM,OAAOA,EAAGC,WAAY,IAAMhI,CAC5D,CAGeiI,CAAkBjI,EAAMmD,GAE5BnD,CACX,ECXWkI,EAAiB,SAAU/E,GAClC,OAAIA,EAAM,IAAMA,EAAMzD,OAAS,EACpBmI,EAAY1E,EAAM,GAAIA,GAE1BA,EAAM,EACjB,EACWgF,EAAgB,SAAUhF,EAAOF,GACxC,OAAIE,EAAMzD,OAAS,EACRyD,EAAMiF,QAAQP,EAAY1E,EAAMF,GAAQE,IAE5CF,CACX,ECTWoF,EAAY,YASZC,EAAW,SAAUC,EAAYC,EAAYlB,EAAemB,GACnE,IAAIC,EAAMH,EAAW7I,OACjBiJ,EAAaJ,EAAW,GACxBK,EAAYL,EAAWG,EAAM,GAC7BG,EAAYxG,EAAQiF,GAExB,KAAIA,GAAiBiB,EAAWH,QAAQd,IAAkB,GAA1D,CAGA,IFJgCnE,EAE5B2F,EEEAC,OAAgC3H,IAAlBkG,EAA8BkB,EAAWJ,QAAQd,IAAkB,EACjF0B,EAAYP,EAAWD,EAAWJ,QAAQK,GAAYM,EACtDE,EAAiBR,EAAWF,EAAWH,QAAQK,IAAa,EAC5DzF,EAAY+F,EAAcC,EAC1BE,EAAiBV,EAAWJ,QAAQO,GACpCQ,EAAgBX,EAAWJ,QAAQQ,GACnCQ,GFV4BjG,EEUEqF,EFR9BM,EAAY,IAAIrC,IACpBtD,EAAMkG,SAAQ,SAAUrJ,GAAQ,OAAO8I,EAAU/B,IAAIc,EAAY7H,EAAMmD,GAAU,IAE1EA,EAAMI,QAAO,SAAUvD,GAAQ,OAAO8I,EAAU5B,IAAIlH,EAAM,KEO7DsJ,QADmClI,IAAlBkG,EAA8B8B,EAAehB,QAAQd,IAAkB,IACjDmB,EAAWW,EAAehB,QAAQK,GAAYM,GACrFQ,EAAkBpB,EAAcI,EAAY,GAC5CiB,EAAiBrB,EAAcI,EAAYG,EAAM,GAErD,OAAqB,IAAjBK,IAA0C,IAApBE,EACfZ,GAGNrF,GAAaiG,GAAkB,EACzBA,EAGPF,GAAeG,GAAkBL,GAAaY,KAAKC,IAAI1G,GAAa,EAC7DwG,EAGPT,GAAeI,GAAiBN,GAAaY,KAAKC,IAAI1G,GAAa,EAC5DuG,EAGPvG,GAAayG,KAAKC,IAAIJ,GAAsB,EACrCL,EAGPF,GAAeG,EACRM,EAGPT,EAAcI,EACPI,EAGPvG,EACIyG,KAAKC,IAAI1G,GAAa,EACfiG,GAEHP,EAAMO,EAAiBjG,GAAa0F,OAJhD,CAzCC,CAiDL,ECrDWiB,EAAgB,SAAUC,EAAcC,EAAcC,GAC7D,IAd4BC,EAcxB5G,EAAQyG,EAAatG,KAAI,SAAUhB,GAEnC,OADWA,EAAGtC,IAEtB,IACQgK,EAAgB3E,EAAoBlC,EAAMI,QAlBlBwG,EAkByCD,EAjB9D,SAAU9J,GACb,IAAIsC,EACA2H,EAAwC,QAA3B3H,EAAKV,EAAW5B,UAA0B,IAAPsC,OAAgB,EAASA,EAAG2H,UAChF,OAEAjK,EAAKiK,gBAEc7I,IAAd6I,GAAyC,UAAdA,GAE5BF,EAAe3B,QAAQpI,IAAS,CAC5C,KAQI,OAAIgK,GAAiBA,EAActK,OACxBwI,EAAe8B,GAEnB9B,EAAe7C,EAAoBwE,GAC9C,ECvBIK,EAAa,SAAUlK,EAAMwE,GAM7B,YALgB,IAAZA,IAAsBA,EAAU,IACpCA,EAAQ+B,KAAKvG,GACTA,EAAKC,YACLiK,EAAWlK,EAAKC,WAAWI,MAAQL,EAAKC,WAAYuE,GAEjDA,CACX,EAOW2F,EAAkB,SAAUC,EAAOC,GAI1C,IAHA,IAAIC,EAAWJ,EAAWE,GACtBG,EAAWL,EAAWG,GAEjB1K,EAAI,EAAGA,EAAI2K,EAAS5K,OAAQC,GAAK,EAAG,CACzC,IAAI6K,EAAgBF,EAAS3K,GAC7B,GAAI4K,EAASnC,QAAQoC,IAAkB,EACnC,OAAOA,CAEd,CACD,OAAO,CACX,ECRWC,EAAgB,SAAU/E,EAAS+C,GAC1C,IAAInB,EAAgBF,EAAiBxH,EAAQ8F,GAAShG,OAAS,EAAIZ,SAAWgB,EAAS4F,GAAS+B,eAC5FiD,EAAUtE,EAAoBV,GAASnC,OAAOd,GAC9CkI,EDMwB,SAAUC,EAAmBC,EAAWC,GACpE,IAAIC,EAAiBnL,EAAQgL,GACzBI,EAAcpL,EAAQiL,GACtBvD,EAAgByD,EAAe,GAC/BE,GAAY,EAgBhB,OAfAD,EAAYzH,OAAOhB,SAAS8G,SAAQ,SAAU6B,GAC1CD,EAAYd,EAAgBc,GAAaC,EAAOA,IAAUD,EAC1DH,EAAavH,OAAOhB,SAAS8G,SAAQ,SAAU8B,GAC3C,IAAIC,EAASjB,EAAgB7C,EAAe6D,GACxCC,IAEIH,GADCA,GAAarF,EAASwF,EAAQH,GACnBG,EAGAjB,EAAgBiB,EAAQH,GAGxD,GACA,IAEWA,CACX,CC3BuBI,CAAmB/D,GAAiB5B,EAASA,EAASgF,GACrEzJ,EAAkB,IAAIqE,IACtBgG,EAAe/F,EAAoBmF,EAASzJ,GAC5CsK,ETJsB,SAAU/F,EAAUvE,EAAiB+C,GAC/D,OAAOd,EAAgB+B,EAAgBV,EAAciB,EAAUxB,GAAa/C,IAAkB,EAAM+C,EACxG,CSEwBwH,CAAiBd,EAASzJ,GAAiBsC,QAAO,SAAUjB,GAC5E,IAAItC,EAAOsC,EAAGtC,KACd,OAAOyC,EAAYzC,EAC3B,IACI,GAAKuL,EAAc,KACfA,EAAgBD,GACG,GAFvB,CAMA,IA5ByBG,EAAUC,EAC/BC,EA2BAnD,EAAajD,EAAoB,CAACoF,GAAe1J,GAAiBqC,KAAI,SAAUhB,GAEhF,OADWA,EAAGtC,IAEtB,IACQ4L,GAhCqBH,EAgCejD,EAhCLkD,EAgCiBH,EA/BhDI,EAAQ,IAAIrG,IAEhBoG,EAASrC,SAAQ,SAAUwC,GAAU,OAAOF,EAAMpK,IAAIsK,EAAO7L,KAAM6L,EAAU,IAEtEJ,EAASnI,KAAI,SAAUtD,GAAQ,OAAO2L,EAAMxK,IAAInB,EAAQ,IAAEuD,OAAOb,IA4BpE6F,EAAaqD,EAAqBtI,KAAI,SAAUhB,GAEhD,OADWA,EAAGtC,IAEtB,IACQ8L,EAAQxD,EAASC,EAAYC,EAAYlB,EAAemB,GAC5D,GAAIqD,IAAUzD,EAAW,CACrB,IAAI0D,EAAYpC,EAAc2B,EAAc/C,EDSf,SAAUmC,EAASzJ,GACpD,OAAOyJ,EAAQvG,QAAO,SAAUC,EAAKpE,GAAQ,OAAOoE,EAAIP,OAAO4B,EAAqBzF,EAAMiB,GAAoB,GAAE,GACpH,CCXgE+K,CAAwBtB,EAASzJ,IACzF,OAAI8K,EACO,CAAE/L,KAAM+L,QAGfE,QAAQC,KAAK,sDAGpB,CACD,YAAc9K,IAAV0K,EACOA,EAEJF,EAAqBE,EAxB3B,CAyBL,ECnDIK,EAAa,EACbC,GAAe,ECRfC,EAAiB,EACjBC,EAAkB,KAMlBC,EAAc,WAChB,OAJOzN,UAAYA,SAASwI,gBAAkBxI,SAASgG,MCG9B,SAAUuC,QACd,IAAfA,IAAyBA,EAAavI,UAC1C,IAAIwI,EAAgBF,EAAiBC,GACrC,QAAKC,GAIEhI,EAAQ+H,EAAWrC,iBAAiB,IAAInB,OlBL1B,qBkBK8C,OAAOoC,MAAK,SAAUjG,GAAQ,OAAO4F,EAAS5F,EAAMsH,EAAe,GAC1I,CDP0BkF,EAC1B,EAEIC,EAAe,WACjB,IAAIpL,GAAS,EAEb,GAAIgL,EAAgB,CAClB,IAAIK,EAAWL,EAEVE,MACCG,IAAalF,EAAYkF,KAC3BrL,EDHc,SAAUqE,EAAS+C,EAAUkE,QAC/B,IAAZA,IAAsBA,EAAU,CAAE,GACtC,IAnB2BC,EAAQC,EAmB/BC,EAAYrC,EAAc/E,EAAS+C,GACvC,IAAI2D,GAGAU,EAAW,CACX,GAAIX,EAAa,EAQb,OANAF,QAAQc,MAAM,qJAEdX,GAAe,OACfY,YAAW,WACPZ,GAAe,CAClB,GAAE,GAGPD,IAlCuBS,EAmCfE,EAAU9M,KAnCa6M,EAmCPF,EAAQE,aAlChC,UAAWD,GACXA,EAAOK,MAAMJ,GAEb,kBAAmBD,GAAUA,EAAOrF,eACpCqF,EAAOrF,cAAc0F,QA+BrBd,GACH,CACL,CClBiBe,CAAgBR,EAAUJ,IAGrCA,EAAkBxN,SAASwI,cAE9B,CAED,OAAOjG,CACT,EAgBI8L,EAAY,GAEZC,EAAa,SAAoBC,GACnC,OAXiEC,EAWhBH,EAhBhC5J,QAAO,SAAUvD,GAChC,OAAOA,CACR,IAAEuN,OAAO,GAAG,GAIblB,EAAiBiB,SAEbA,GACFb,OAQAY,GAASA,EAAMG,kBACR,GAbqB,IAAmCF,CAiBnE,EAUIG,EAAY,CACdC,GAAI,SAAYC,GACW,IAArBR,EAAUzN,QAThBZ,SAAS8O,iBAAiB,UAAWR,GAa/BD,EAAU/E,QAAQuF,GAAW,IAC/BR,EAAU5G,KAAKoH,GACfP,IAEH,EACDS,IAAK,SAAaF,GAChBR,EAAYA,EAAU5J,QAAO,SAAUvD,GACrC,OAAOA,IAAS2N,CACtB,IACIP,IAEyB,IAArBD,EAAUzN,QApBhBZ,SAASgP,oBAAoB,UAAWV,EAuBvC,GEpFI,SAASW,IACZ,MAAMC,EAAalP,SAASmP,gBACtBC,EAAuBtN,OAAOuN,WAAaH,EAAWI,YAC5D,GAAIF,EAAuB,EAAG,CAC1B,MACMG,EAAiBH,GADKF,EAAWI,YAAcJ,EAAWM,aAEhEN,EAAWO,MAAMC,YAAY,oBAAqBH,EAAiB,KACtE,CACL,CCRO,SAASI,EAA+BC,EAAYC,GAClDD,GAELjP,MAAMmP,UAAUvF,QAAQrD,KAAKlH,SAASkG,iBAAiB,aAAahF,IAC5DA,IAAS0O,IAGE,QAAXC,EACA3O,EAAK6O,gBAAgB,eAGrB7O,EAAK8O,aAAa,cAAe,QACpC,GAET,CCdO,MAAMC,EAAiCnO,OAAOoO,WAAW,oCAEnDC,EADyBrO,OAAOoO,WAAW,2CACQ1K,QCEjD,SAAS4K,GAAWC,EAAcC,EAAgBC,EAAgBC,GAC7E,MAAMC,EAAOzQ,SAAS0Q,cAAcL,GAC9BM,EAAa3Q,SAAS0Q,cAAcJ,GACpCM,EAAS5Q,SAAS0Q,cAAcH,GAChCM,EAAc7Q,SAAS0Q,cAAc,qBACrCI,EAAWnQ,MAAMoQ,KAAK/Q,SAASkG,iBAAiBmK,IACtD,IAAKI,IAASE,IAAeC,EACzB,OACJ,MAAMI,EAAYrQ,MAAMoQ,KAAKN,EAAKvK,iBAAiB,OAQnD,SAAS+K,IACLR,GAAMS,UAAUC,OAAO,4BACvBP,GAAQM,UAAUC,OAAO,0BACzBR,GAAYX,aAAa,gBAAiB,SAC1ClO,OAAOkN,oBAAoB,QAASoC,GACpCzB,EAA+BkB,EAAa,OAC5C5B,IACKuB,IACD7B,EAAUI,IAAI6B,GACd5Q,SAASmP,gBAAgB+B,UAAUC,OAAO,kBAC1CR,GAAYxC,QAEnB,CAwBD,SAASiD,EAAY7C,GACjB,GAAIA,EAAM8C,iBACN,OAEJ,MAAMC,EAAM/C,EAAM+C,KAAO/C,EAAMgD,KACnB,WAARD,GAA4B,QAARA,GAAyB,OAARA,GACrCL,GAEP,CACGR,GAAMS,UAAUpK,SAAS,6BAA+B0J,EACxDS,KApDAH,EAASvG,SAASkG,IACVA,GAAMS,UAAUpK,SAAS,6BACzBmK,GACH,IAkBLhC,IACAjP,SAASmP,gBAAgB+B,UAAUjJ,IAAI,kBACvCwI,GAAMS,UAAUjJ,IAAI,4BACpB2I,GAAQM,UAAUjJ,IAAI,0BACtB0I,GAAYX,aAAa,gBAAiB,QAC1ClO,OAAOgN,iBAAiB,QAASsC,GACjCzB,EAA+BkB,EAAa,MAC5ClC,EAAUC,GAAGgC,GACTT,GACAhQ,OAAO,uBAAQC,MAAK,EAAGoR,WACnBA,EAAK/O,IAAIuO,EAAW,CAAES,EAAG,QAASC,QAAS,IAC3CF,EAAKG,GAAGX,EAAW,CACfS,EAAG,EACHC,QAAS,EACTE,SAAU,GACVC,QAAS,IACTC,KAAM,YACR,IAmBlB,CCpEe,SAASC,GAAavB,GACjC,MAAMwB,EAAchS,SAAS0Q,cAAc,kBACrCuB,EAAejS,SAAS0Q,cAAc,yBACtCE,EAAS5Q,SAAS0Q,cAAc,eAChCG,EAAc7Q,SAAS0Q,cAAc,qBAM3C,SAASwB,IACLF,GAAad,UAAUC,OAAO,0BAC9BP,GAAQM,UAAUC,OAAO,4BACzBc,GAAcjC,aAAa,gBAAiB,SAC5ClO,OAAOkN,oBAAoB,QAASoC,GACpCzB,EAA+BkB,EAAa,OAC5C5B,IACKuB,IACD7B,EAAUI,IAAI6B,GACd5Q,SAASmP,gBAAgB+B,UAAUC,OAAO,kBAC1Cc,EAAa9D,QAEpB,CAaD,SAASiD,EAAY7C,GACjB,GAAIA,EAAM8C,iBACN,OAEJ,MAAMC,EAAM/C,EAAM+C,KAAO/C,EAAMgD,KACnB,WAARD,GAA4B,QAARA,GAAyB,OAARA,GACrCY,GAEP,CAtCIF,GAAgBC,GAAiBrB,IAuClCoB,GAAad,UAAUpK,SAAS,2BAA6B0J,EAC7D0B,KArBAvC,EAA+BkB,EAAa,MAC5C5B,IACAjP,SAASmP,gBAAgB+B,UAAUjJ,IAAI,kBACvC+J,GAAad,UAAUjJ,IAAI,0BAC3B2I,GAAQM,UAAUjJ,IAAI,4BACtBgK,GAAcjC,aAAa,gBAAiB,QAC5ClO,OAAOgN,iBAAiB,QAASsC,GACjCzC,EAAUC,GAAGgC,GACboB,EAAYtB,cAAc,UAAUvC,QAxBpCnO,SAASmP,gBAAgBM,MAAMC,YAAY,wBAAyB,GAAG5N,OAAOqQ,kBA0CtF,CCrDO,SAASC,KACZ,MAAMA,EAAapS,SAAS0Q,cAAc,eAC1C,IAAK0B,EACD,OACJ,MAAMC,EAAOD,EAAWrP,QAAQsP,KACXD,EAAWlM,iBAAiB,8EACpCqE,SAAQzK,IACjB,MAAMwS,EAAOxS,EAAQ4Q,cAAc,uBAC7B6B,EAAS,GAAGF,KAAQC,EAAKE,YAC3B1S,EAAQoR,UAAUpK,SAAS,yBAC3BwL,EAAKtC,aAAa,eAAgB,QAEtCsC,EAAKtC,aAAa,aAAcuC,EAAO,GAE/C,CHXoCtC,EAA+BzK,QIApD,WACX,MAAMmL,EAAa3Q,SAAS0Q,cAAc,mBACpCuB,EAAejS,SAAS0Q,cAAc,yBACtC+B,EAAkBzS,SAAS0Q,cAAc,4BACzCgC,EAAgB1S,SAAS0Q,cAAc,0BAE7C,SAASiC,IACL3S,SAASmP,gBAAgBM,MAAMC,YAAY,wBAAyB,GAAG5N,OAAOqQ,gBACjF,CACD,SAASS,EAAcC,GACH,oBAAZA,GACAzC,GAAW,kBAAmB,yBAA0B,eAAe,GAE3D,iBAAZyC,GACAzC,GAAW,eAAgB,kBAAmB,eAAe,GAEjD,sBAAZyC,GACAzC,GAAW,oBAAqB,2BAA4B,eAAe,EAElF,CAdDvQ,EAAa,CAAEK,UAAW,wBAsC1ByQ,EAAW7B,iBAAiB,SAX5B,WACI6D,IACAZ,IAAa,GACba,EAAc,gBACdxC,GAAW,eAAgB,kBAAmB,cACjD,IAOD6B,EAAanD,iBAAiB,SAN9B,WACI6D,IACAC,IACAb,IACH,IAGGU,GACAA,EAAgB3D,iBAAiB,SApBrC,WACI6D,IACAZ,IAAa,GACba,EAAc,qBACdxC,GAAW,oBAAqB,2BAA4B,cAC/D,IAiBGsC,GACAA,EAAc5D,iBAAiB,SA7BnC,WACI6D,IACAZ,IAAa,GACba,EAAc,mBACdxC,GAAW,kBAAmB,yBAA0B,cAC3D,GA0BL,CACAQ,GCrDI/Q,EAAa,CAAEK,UAAW,6BCFf,WACX,MAAM4S,EAAkB9S,SAAS0Q,cAAc,wBACzCqC,EAAkB/S,SAAS0Q,cAAc,wBACzCsC,EAAoBhT,SAAS0Q,cAAc,0BAC3CuC,EAAoBjT,SAAS0Q,cAAc,0BAC5CoC,GAAoBC,GAAoBC,GAAsBC,IAGnEH,EAAgBrD,MAAMyD,QAAU,OA+BhCF,EAAkBG,QAflB,WAC0C,SAAlCJ,EAAgBtD,MAAMyD,UACtBH,EAAgBtD,MAAMyD,QAAU,QAChCJ,EAAgBrD,MAAMyD,QAAU,OAChCD,EAAkB/B,UAAUC,OAAO,uBACnC8B,EAAkB/B,UAAUjJ,IAAI,yBAChC+K,EAAkB9B,UAAUC,OAAO,yBACnC6B,EAAkB9B,UAAUjJ,IAAI,uBAChC+K,EAAkBI,YAAc,OAChCH,EAAkBG,YAAc,QAKvC,EAEDH,EAAkBE,QA/BlB,WAC0C,SAAlCL,EAAgBrD,MAAMyD,UACtBJ,EAAgBrD,MAAMyD,QAAU,QAChCH,EAAgBtD,MAAMyD,QAAU,OAChCD,EAAkB/B,UAAUC,OAAO,yBACnC8B,EAAkB/B,UAAUjJ,IAAI,uBAChC+K,EAAkB9B,UAAUC,OAAO,uBACnC6B,EAAkB9B,UAAUjJ,IAAI,yBAChCgL,EAAkBG,YAAc,OAChCJ,EAAkBI,YAAc,QAKvC,EAkBL,CACAC,GC1Ce,WACX,MAAMC,EAAStT,SAAS0Q,cAAc,sBAChC6C,EAAOvT,SAAS0Q,cAAc,aAC9B8C,EAA2BxT,SAAS0Q,cAAc,4BAClD+C,EAAyBzT,SAAS0Q,cAAc,0BAqBtD4C,GAAQxE,iBAAiB,SApBzB,WACI,IAAIjO,EAAI,EACR,GAAI0S,EAEA,IADA1S,EAAI0S,EAAKG,WAAW9S,OACbC,KACH0S,EAAKI,YAAYJ,GAAMG,WAAW7S,IAEI,SAA1C2S,EAAwB/D,MAAMyD,QAC9BM,EAAwB/D,MAAMyD,QAAU,QAGxCM,EAAwB/D,MAAMyD,QAAU,OAEA,UAAxCO,EAAsBhE,MAAMyD,QAC5BO,EAAsBhE,MAAMyD,QAAU,OAGtCO,EAAsBhE,MAAMyD,QAAU,OAE7C,GAEL,CACAU,GC1BkB5T,SAASkG,iBAAiB,6BACjCqE,SAAQsJ,IACX,IAAIC,EACAC,EACAC,EACJ,MAAM1B,EAAOuB,EAAKnD,cAAc,KAC1BuD,EAA0B3B,GAAMjP,aAAa,UAMnDwQ,EAAKK,YAAcC,IACfH,EAAgBG,EAAEC,SAAWD,EAAEE,QAC/BP,GAAQ,IAAIQ,IAAM,EAEtBT,EAAKU,UAAYJ,IACbJ,GAAM,IAAIO,KACV,MAAME,EAAYT,EAAKD,EAAO,IAC9BE,EAAgB1B,GAAMtC,aAAa,SAAU,UAX7CiE,EACM3B,GAAMtC,aAAa,SAAUiE,GAC7B3B,GAAMvC,gBAAgB,UAUX,IAAboE,EAAEb,QAAgBkB,GAClBlC,GAAMmC,OACT,CACJ,ILTTrC,KMfO,MAAMsC,GACTC,aAAaC,GACT,MAAMC,EAAU,GAYhB,OAXAD,EAAWrK,SAAQ,CAACuK,EAAS3Q,KACzB,MAAM4Q,EAAYD,EAAQtC,UACpBwC,EAAKF,EAAQE,GACbF,EAAQE,GACR,OAAOD,EAAUE,QAAQ,KAAM,KAAKC,iBAAiB/Q,IACrDgR,EAAiB,CAAEH,GAAIA,EAAI3C,KAAM0C,GACpB,KAAfD,EAAQE,KACRF,EAAQE,GAAKA,GAEjBH,EAAQpN,KAAK0N,EAAe,IAEzBN,CACV,CACDF,aAAaE,GACT,IAAItS,EAAS,0EAIb,OAHAsS,EAAQtK,SAAQ6K,IACZ7S,GAAU,4CAA4C6S,EAAIJ,+CAA+CI,EAAI/C,eAAe,IAEzH9P,EAAS,OACnB,ECrBE,SAAS8S,KACZ,MAAMC,EAAYtV,SAAS0Q,cAAc,oBACnC6E,EAAgBvV,SAAS0Q,cAAc,iBAC7C,IAAK4E,IAAcC,EACf,OACJ,MAAMX,EAAaU,EAAUpP,iBAAiB,MAC9C,GAAK0O,EAAWhU,OAGX,CACD,MAAMiU,EAAUH,GAAIc,MAAMZ,GACpBa,EAAgBf,GAAIgB,MAAMb,GAChCU,EAAcI,UAAYF,CAC7B,MANGF,EAAcpE,QAOtB,CCfO,SAASyE,GAASC,EAAIC,EAAK,KAC9B,IAAIC,EACJ,OAAO,YAAaC,GAChBC,aAAaF,GACbA,EAAY7H,YAAW,IAAM2H,EAAGhQ,MAAMqQ,KAAMF,IAAOF,EAC3D,CACA,CCNO,SAASK,GAAevK,GAC3BA,EAAQrB,SAAQ6B,IACRA,EAAMgK,gBACNhK,EAAM0B,OAAOoD,UAAUjJ,IAAI,sBAG9B,GAET,CFQAoN,KGd+BrV,SAASkG,iBAAiB,4BACjCqE,SAAS8L,KCH1B,SAA6BvW,EAASwW,GACzC,MAAMjE,EAAOvS,EAAQiD,QAAQwT,iBAAmBD,GAAe,GACzDE,EAAe1W,EAAQiD,QAAQ0T,WAAa,iCAC5CC,EAAU1W,SAAS2W,cAAc,OACjCC,EAAuB5W,SAAS2W,cAAc,OAC9CE,EAAgB7W,SAAS2W,cAAc,OACvCG,EAAc,oGAAoGN,0CAMxH,SAASO,EAAejJ,GACpBA,EAAOoD,UAAUjJ,IAAI,+BACrB6F,EAAOkC,aAAa,WAAY,IACnC,CACD,SAASgH,EAAkBlJ,GACvBA,EAAOoD,UAAUC,OAAO,+BACxBrD,EAAOiC,gBAAgB,WAC1B,CAZD2G,EAAQxF,UAAUjJ,IAAI,0BACtB2O,EAAqB1F,UAAUjJ,IAAI,gCACnC4O,EAAc3F,UAAUjJ,IAAI,gCAC5B4O,EAAclB,UAAY,SAASmB,WACnCD,EAAc7G,aAAa,cAAe,QAe1C,MAAMiH,EAAiB,IAAIC,gBAAetL,IACtC,IAAK,MAAMQ,KAASR,EAAS,CACzB,MAAMkC,OAAEA,GAAW1B,EACnB0B,EAAOqJ,YAAcrJ,EAAOwB,YAAcyH,EAAejJ,GAAUkJ,EAAkBlJ,EACxF,KAEL8I,EAAqBpE,UAAYH,EACjCqE,EAAQU,sBAAsB,aAAcP,GAC5CH,EAAQU,sBAAsB,YAAaR,GAC3C9W,EAAQsX,sBAAsB,aAAcV,GAC5CO,EAAeI,QAAQvX,GACvBA,EAAQgP,iBAAiB,UAjBzB,SAASwI,IACDxX,EAAQyX,WAAa,IACrBzX,EAAQoR,UAAUjJ,IAAI,6BACtBnI,EAAQkP,oBAAoB,SAAUsI,GAE7C,GAaL,CDlCQE,CAAoBnB,EAAQ,IEHrB,WACX,MAAMoB,EAAOzX,SAAS0Q,cAAc,sBAC9BgH,EAAQ1X,SAAS0Q,cAAc,uBAC/BiH,EAAe3X,SAAS0Q,cAAc,wBACtCkH,EAAa5X,SAAS0Q,cAAc,sBAEpCmH,EADO7X,SAAS0Q,cAAc,uBACZxK,iBAAiB,eACnC4R,EACGL,GAAM1U,QAAQgV,kBADjBD,EAEIL,GAAM1U,QAAQiV,mBAFlBF,EAGML,GAAM1U,QAAQkV,qBAQpBC,EAAetC,IAAUuC,IACvBR,IACAA,EAAanF,UARI,CAAC2F,GACf,GAAGA,KAAqB,IAAXA,EAAeL,EAAYA,KAAcA,IAOhCM,CAAiBD,GAAO,GACtD,KACGE,EAAcF,IACZP,IACAA,EAAWpF,UATI,CAAC2F,GACb,GAAGA,KAAqB,IAAXA,EAAeL,EAAYA,IAQpBQ,CAAeH,GACzC,EAoBLE,EAAWR,GAAWjX,QAAU,GAChCsX,EAAaL,GAAWjX,QAAU,GAClC8W,GAAO5I,iBAAiB,SAAUqF,IApBR,CAACA,IACvB,IAAIoE,EAAOV,GAAWjX,QAAU,EAChC,MAAMkN,EAASqG,EAAErG,OACjB+J,GAAWtN,SAAQ,SAAUiO,IACXA,EAAKC,aAAe,IACxBvD,cAAc5L,QAAQwE,EAAO4K,MAAMxD,gBAAkB,GAC3DsD,EAAKG,QAAS,EACdH,EAAKtH,UAAUC,OAAO,uBAGtBqH,EAAKG,QAAS,EACdH,EAAKtH,UAAUjJ,IAAI,qBACnBsQ,IAEhB,IACQL,EAAaK,GACbF,EAAWE,EAAK,EAKhBK,CAAkBzE,EAAE,IAExBsD,GAAM3I,iBAAiB,UAAWqF,IAC9BA,EAAEzF,gBAAgB,GAE1B,CACAmK,GCtDe,SAA4BC,GACvC,MAAM/R,EAAQ+R,EAAO/R,OAAS/G,SAAS0Q,cAAcoI,EAAO/R,OACtDgS,EAAmBhS,EACnBA,EAAMb,iBAAiB4S,EAAOE,UAC9BhZ,SAASkG,iBAAiB4S,EAAOE,UACvCD,EAAiBxO,SAASzK,IACtBA,EAAQoR,UAAUjJ,IAAI,aAAa,IAEvC,MAAMgR,EAAW,IAAIC,qBAAqB/C,GAAgB2C,EAAOjL,SACjEkL,EAAiBxO,SAAQzK,IACrBmZ,EAAS5B,QAAQvX,EAAQ,GAEjC,CACAqZ,CAAmB,CACfH,SAAU,gBACVnL,QAAS,CACLuL,UAAW,MCjBJ,WACX,MAAMC,EAAWrZ,SAASkG,iBAAiB,aACrCoT,EAAiBtZ,SAASkG,iBAAiB,qBAC3CqT,EAAkBvZ,SAASkG,iBAAiB,sBAClDoT,EAAe/O,SAAQ,SAAUiP,EAAcrV,GAC3C,MAAMsV,EAAUJ,EAASlV,GACnBuV,EAAiBH,EAAgBpV,GACvCqV,EAAa1K,iBAAiB,SAAS,WAe/B2K,GAASvI,UAAUpK,SAAS,uBAb5B2S,EAAQvI,UAAUC,OAAO,sBACzBqI,EAAaxJ,aAAa,gBAAiB,SAC3C0J,EAAe1J,aAAa,cAAe,QAC3CwJ,EAAa9I,cAAc,wBAAwBV,aAAa,cAAe,SAC/EwJ,EAAa9I,cAAc,yBAAyBV,aAAa,cAAe,UAGhFyJ,EAAQE,WAAa,sBACrBH,EAAaxJ,aAAa,gBAAiB,QAC3CwJ,EAAa9I,cAAc,wBAAwBV,aAAa,cAAe,QAC/EwJ,EAAa9I,cAAc,yBAAyBV,aAAa,cAAe,SAChF0J,EAAe1J,aAAa,cAAe,SAQ3D,GACA,GACA,CACA4J,GC9BA,WACI,MAAMC,EAAiB7Z,SAASkG,iBAAiB,yBAC3C4T,EAAY,4BACZhI,EAAO,aACPF,EAAWzB,EAA4B,GAAM,EACnD,IAAK0J,EACD,OACJ,MAAME,EAAgC,CAACvI,EAAMwI,EAAeC,EAAoBC,KACxEF,EAAc9I,UAAUpK,SAASgT,GACjCtI,EAAKG,GAAGsI,EAAoB,CACxBrI,SAAUA,EACVuI,OAAQ,EACRrI,KAAMA,EACNsI,WAAY,KACRJ,EAAc9I,UAAUC,OAAO2I,GAC/BI,EAAYG,aAAe,QAC3BJ,EAAmBjK,aAAa,SAAU,cAAc,KAKhEkK,EAAYG,aAAe,OAC3BJ,EAAmBtB,QAAS,EAC5BqB,EAAc9I,UAAUjJ,IAAI6R,GAC5BtI,EAAK/O,IAAIwX,EAAoB,CAAEE,OAAQ,SACvC3I,EAAKT,KAAKkJ,EAAoB,CAC1BrI,SAAUA,EACVuI,OAAQ,EACRrI,KAAMA,EACNsI,WAAY,KACRH,EAAmBxK,MAAM0K,OAAS,MAAM,IAGnD,EAECG,EAA6B,CAACN,EAAeC,EAAoBC,KAC/DF,EAAc9I,UAAUpK,SAASgT,IACjCE,EAAc9I,UAAUC,OAAO2I,GAC/BI,EAAYG,aAAe,QAC3BJ,EAAmBjK,aAAa,SAAU,eAC1CiK,EAAmBxK,MAAM0K,OAAS,MAGlCD,EAAYG,aAAe,OAC3BJ,EAAmBtB,QAAS,EAC5BqB,EAAc9I,UAAUjJ,IAAI6R,GAC5BG,EAAmBxK,MAAM0K,OAAS,OACrC,EAELN,EAAetP,SAAQyP,IACnB,MAAME,EAAcF,EAActJ,cAAc,2BAC1CuJ,EAAqBD,EAActJ,cAAc,4BACnDP,EACAhQ,OAAO,uBAAQC,MAAK,EAAGoR,WACnByI,EAAmBnL,iBAAiB,eAAe,IAAMiL,EAA8BvI,EAAMwI,EAAeC,EAAoBC,KAChIA,EAAY/G,QAAU,WAClB4G,EAA8BvI,EAAMwI,EAAeC,EAAoBC,EAC3F,CAAiB,KAILD,EAAmBnL,iBAAiB,eAAe,IAAMwL,EAA2BN,EAAeC,EAAoBC,KACvHA,EAAY/G,QAAU,WAClBmH,EAA2BN,EAAeC,EAAoBC,EAC9E,EACS,GAER,CAnED,GC8GApY,OAAOgN,iBAAiB,oBAAoB,KACxC3B,QAAQoN,MAAM,yBAhHH,WAEX,SAASC,EAAWrG,GAChB,MAAMsG,EAAYtG,EAAErG,OACd4M,EAAUD,EAAUtZ,WACpBwZ,EAAaD,EAAQvZ,WACrBgD,EAAQyW,SAASH,EAAUpX,aAAa,eAAiB,IAAK,IAC9DwX,EAAYJ,EAAUpX,aAAa,4BAA8B,MACjEyX,EAAkB,IAAKC,QAAQC,MAAOH,CAACA,GAAY1W,GACzD4W,QAAQE,UAAUH,EAAiB,IACnCJ,EACKxU,iBAAiB,0BACjBqE,SAAQ2Q,GAAKA,EAAElL,aAAa,gBAAiB,WAClDyK,EAAUzK,aAAa,gBAAiB,QACxC2K,EAAWzU,iBAAiB,qBAAqBqE,SAAQ4Q,GAAKA,EAAEnL,aAAa,SAAU,UACvF2K,EACKjK,cAAc,IAAI+J,EAAUpX,aAAa,qBACxC0M,gBAAgB,SACzB,CAjBqB/P,SAASkG,iBAAiB,cAkBjCqE,SAAQ6Q,IACnB,MAAMC,EAASD,EAAa/X,aAAa,gBAAkB,GACrDiY,EAAmB,MAAQD,EAC3BE,EAAQH,EAAalV,iBAAiB,oBAC5C,GAAIqV,EAAM3a,OAAS,EACf,OAEJ,MAAM4a,EAAmB1Z,OAAOiZ,QAAQC,OAASlZ,OAAOiZ,QAAQC,MAAMM,GAChEV,SAAS9Y,OAAOiZ,QAAQC,MAAMM,GAAmB,IAC5C,EACXC,EAAMhR,SAAQ,CAACkR,EAAO5a,KAClB4a,EAAMzL,aAAa,KAAM,GAAGqL,UAAexa,KAC3C4a,EAAMzL,aAAa,OAAQ,YAC3ByL,EAAMzL,aAAa,WAAY,KAC/ByL,EAAMzL,aAAa,kBAAmB,GAAGqL,QAAaxa,KAClDA,IAAM2a,EACNC,EAAMvK,UAAUjJ,IAAI,6BAGpBwT,EAAMzL,aAAa,SAAU,OAChC,IAEL,MAAM0L,EAAiBN,EAAa1K,cAAc,sBAClD,IAAIiL,EACAC,EAAO,GACPF,GACAE,EAAOjb,MAAMoQ,KAAK2K,EAAetW,UACjCwW,EAAKrR,SAAQ,CAACsR,EAAKhb,KACfgb,EAAI7L,aAAa,gBAAiBnP,IAAM2a,EAAmB,OAAS,SACpEK,EAAI7L,aAAa,gBAAiB,GAAGqL,UAAexa,KACpDgb,EAAI7L,aAAa,KAAM,GAAGqL,QAAaxa,KACvCgb,EAAI7L,aAAa,WAAYnP,IAAM2a,EAAmB,IAAM,MAC5DK,EAAI7L,aAAa,aAAcnP,EAAEib,YACjCD,EAAI7L,aAAa,0BAA2BsL,GAC5CO,EAAI/M,iBAAiB,QAAS0L,GAC1B3Z,IAAM2a,EACNK,EAAI3K,UAAUjJ,IAAI,iCAGlB4T,EAAI3K,UAAUC,OAAO,gCACxB,IAELwK,EAAUD,IAGVE,EAAOjb,MAAMoQ,KAAKwK,GAAO/W,KAAI,CAACiX,EAAO5a,KACjC,MAAMkb,EAAQN,EAAM/K,cAAc,oBAC5BmL,EAAM7b,SAAS2W,cAAc,UAenC,OAdAkF,EAAI3K,UAAUjJ,IAAI,uBAClB4T,EAAIlG,UAAYoG,GAAOpG,WAAa,iBACpCoG,GAAO5K,SACP0K,EAAI7L,aAAa,OAAQ,OACzB6L,EAAI7L,aAAa,gBAAiBnP,IAAM2a,EAAmB,OAAS,SACpEK,EAAI7L,aAAa,gBAAiB,GAAGqL,UAAexa,KACpDgb,EAAI7L,aAAa,KAAM,GAAGqL,QAAaxa,KACvCgb,EAAI7L,aAAa,WAAYnP,IAAM2a,EAAmB,IAAM,MAC5DK,EAAI7L,aAAa,aAAcnP,EAAEib,YACjCD,EAAI7L,aAAa,0BAA2BsL,GAC5CO,EAAI/M,iBAAiB,QAAS0L,GAC1B3Z,IAAM2a,GACNK,EAAI3K,UAAUjJ,IAAI,iCAEf4T,CAAG,IAEdF,EAAU3b,SAAS2W,cAAc,OACjCgF,EAAQzK,UAAUjJ,IAAI,qBACtB0T,EAAQ3L,aAAa,OAAQ,WAC7B2L,EAAQK,UAAUJ,IAEtB,IAAIK,EAAW,EACfN,EAAQ7M,iBAAiB,WAAWqF,IAClB,eAAVA,EAAE7C,KAAkC,cAAV6C,EAAE7C,MAC5BsK,EAAKK,GAAUjM,aAAa,WAAY,MAC1B,eAAVmE,EAAE7C,KACF2K,IACIA,GAAYL,EAAKhb,SACjBqb,EAAW,IAGA,cAAV9H,EAAE7C,MACP2K,IACIA,EAAW,IACXA,EAAWL,EAAKhb,OAAS,IAGjCgb,EAAKK,GAAUjM,aAAa,WAAY,KACxC4L,EAAKK,GAAU9N,QAClB,IAELiN,EAAac,QAAQP,EAAQ,GAErC,CAGIC,EAAM,ICjHH,MAAMO,GAA4B,CAAC7I,EAAQ8I,KAC1C9I,IAAW8I,GACX9I,EAAOtD,aAAa,eAAgB,QACpCsD,EAAOpC,UAAUjJ,IAAI,uBACrBqL,EAAOpC,UAAUC,OAAO,2BAGxBmC,EAAOtD,aAAa,eAAgB,SACpCsD,EAAOpC,UAAUC,OAAO,uBACxBmC,EAAOpC,UAAUjJ,IAAI,yBACxB,EAEQoU,GAAYC,GACdA,EAAK3X,MAAK,CAAClE,EAAGsD,IACa,YAA1BtD,EAAE8b,qBACM,EACkB,YAA1BxY,EAAEwY,oBACK,EACJ,ICiGA,SAASC,KACExc,SAASkG,iBAAiB,oCAClCqE,SAAQkS,KArF1B,SAAmBA,GACf,MAAMC,EAAkBD,EAAa1Z,QAAQ4Z,uBAC7C,IAAKD,EAED,YADAvP,QAAQoN,MAAM,8BAGlB,MAAMqC,EAAgB5c,SAASC,eAAeyc,GAC9C,IAAKE,EAED,YADAzP,QAAQoN,MAAM,2BAGlB,MAAMsC,EAAeD,EAAc1W,iBAAiB,mBAC9C4W,EAAiBF,EAAc1W,iBAAiB,yBACtD,GAA8B,IAA1B4W,EAAelc,OAEf,YADAuM,QAAQoN,MAAM,4BAGlBpN,QAAQoN,MAAM,0BAA2BuC,EAAelc,QACxD,MAAMmc,EAAY,IAAIvW,IACtBsW,EAAevS,SAAQyS,KACNA,EAAcja,QAAQka,eAAeC,MAAM,MAAQ,IAE3DzY,QAAOyW,GAAKA,GAAGta,OAAS,IACxB2J,SAAQ4S,IACT,MAAMC,EAAUL,EAAU1a,IAAI8a,IAAQ,GACtCC,EAAQ3V,KAAKuV,GACbD,EAAUta,IAAI0a,EAAKC,EAAQ,GAC7B,IAEN,MAAMd,EAAOD,GAAS1b,MAAMoQ,KAAKgM,EAAUM,SAC3C,GAAoB,IAAhBf,EAAK1b,OAEL,YADAuM,QAAQoN,MAAM,iBAGlB,MAAM+C,EAAahB,EAAK9X,KAAI2Y,IACxB,MAAMI,EAAYvd,SAAS2W,cAAc,UACzC4G,EAAUrM,UAAUjJ,IAAI,wBAAyB,aAAc,yBAC/D,MAAMhF,EApEd,SAAuByV,GACnB,OAAQA,GACJ,IAAK,OACD,MAAO,OACX,IAAK,UACD,MAAO,UACX,IAAK,UACD,MAAO,UACX,IAAK,UACD,MAAO,UACX,IAAK,UACD,MAAO,oBACX,IAAK,WACL,IAAK,WACL,IAAK,SACL,IAAK,YACL,IAAK,aACD,MAAO,wBACX,QACI,OAAOA,EAEnB,CA+CwB8E,CAAcL,GACxBM,EA/Cd,SAA6BN,GACzB,MAAMO,EAAaP,EAAIZ,oBACvB,MAAuB,aAAfmB,GACW,aAAfA,GACe,WAAfA,GACe,cAAfA,GACe,eAAfA,GACe,0BAAfA,CACR,CAuC2CC,CAAoBR,GA0BvD,OAzBAI,EAAU5H,UAAY1S,EACtBsa,EAAUvN,aAAa,eAAgB,SACvCuN,EAAUvN,aAAa,aAAc,eAAiB/M,GACtDsa,EAAUzO,iBAAiB,SAAS,KAC5B2O,EACAZ,EAAatS,SAAQiO,IACjBA,EAAKtH,UAAUjJ,IAAI,wBAAwB,IAI/C4U,EAAatS,SAAQiO,IACjBA,EAAKtH,UAAUC,OAAO,wBAAwB,IAGtD2L,EAAevS,SAAQyS,IACnBA,EAAc9L,UAAUjJ,IAAI,wBAAwB,KAExC8U,EAAU1a,IAAI8a,IAAQ,IAC9B5S,SAAQyS,IACZA,EAAc9L,UAAUC,OAAO,wBAAwB,IAE3DmM,EAAW/S,SAAQ+I,IACf6I,GAA0B7I,EAAQiK,EAAU,GAC9C,IAECA,CAAS,IAEdK,EAAgBnB,EAAa1Z,QAAQ8a,kBAAoB,OACzDC,EAAY9d,SAAS2W,cAAc,UACzCmH,EAAU5M,UAAUjJ,IAAI,wBAAyB,aAAc,uBAC/D6V,EAAUnI,UAAYiI,EACtBE,EAAU9N,aAAa,eAAgB,QACvC8N,EAAU9N,aAAa,aAAc,WAAa4N,GAClDE,EAAUhP,iBAAiB,SAAS,KAChC+N,EAAatS,SAAQiO,IACjBA,EAAKtH,UAAUC,OAAO,wBAAwB,IAElDmM,EAAW/S,SAAQ+I,IACf6I,GAA0B7I,EAAQwK,EAAU,GAC9C,IAENR,EAAWS,QAAQD,GACnBrB,EAAaT,UAAUsB,EAC3B,CAIQU,CAAUvB,EAAa,GAE/B,CCGe,SAASwB,KACpB,MAAMC,EAAQle,SAASkG,iBAAiB,sBACxCiH,QAAQoN,MAAM,qBAAsB2D,GACpCA,EAAM3T,SAAQkN,KA3HlB,SAAkBA,GACd,MAAM0G,EAAU1G,EAAK/G,cAAc,gBACnC,IAAKyN,EAED,YADAhR,QAAQC,KAAK,4BAGjB+Q,EAAQnO,aAAa,YAAa,UAClC,MAAMoO,EAAS3G,EAAKpU,aAAa,UACjC,IAAK+a,EAED,YADAjR,QAAQC,KAAK,sBAAuBqK,GAGxC,MAAM4G,EAAgBre,SAAS2W,cAAc,OAC7C0H,EAAcnN,UAAUjJ,IAAI,mBAAoB,qBAChDoW,EAAcrO,aAAa,OAAQ,UACnCqO,EAAcrO,aAAa,YAAa,UACxCqO,EAAcrO,aAAa,cAAe,QAC1CyH,EAAK9D,YAAY0K,GACjBlR,QAAQoN,MAAM,WAAY9C,GAC1B,MAAM6G,EAAS7G,EAAKpU,aAAa,UAC3Bkb,EAAS9G,EAAK+G,qBAAqB,SACnCC,EAAWC,MAAOvK,IAEpB,GADAA,EAAEzF,kBACG+I,EAAKkH,iBAEN,YADAxR,QAAQoN,MAAM,gCAGlBpN,QAAQoN,MAAM,4BACd4D,EAAQjN,UAAUC,OAAO,qBACzBgN,EAAQjN,UAAUjJ,IAAI,uBACtBoW,EAAc7L,UAAY,GAC1B,MAAM9N,EAAO,IAAIka,SAASnH,UACHoH,MAAMT,EAAQ,CACjCE,OAAQA,GAAU,OAClBtY,KAAMtB,KAEGoa,KACTT,EAAc7L,UAAY,UAC1BtE,YAAW,KACPiQ,EAAQjN,UAAUC,OAAO,uBACzBgN,EAAQjN,UAAUjJ,IAAI,oBAAoB,GAC3C,KACHiG,YAAW,KACPiQ,EAAQjN,UAAUC,OAAO,qBACzBkN,EAAc7L,UAAY,EAAE,GAC7B,KACN,EAELiF,EAAK3I,iBAAiB,SAAU2P,GAChC,MAAMM,EAAkBnJ,IAAS,IAAM6I,EAAS,IAAIO,MAAM,aACpDC,EAAsBrJ,IAAS,IAAM6I,EAAS,IAAIO,MAAM,YAAY,KACpEE,EAAgB,SAAUC,GACL,IAAnBA,EAAG7N,KAAK1Q,QAA2B,cAAXue,EAAG7N,KAAkC,WAAX6N,EAAG7N,KACrDnE,QAAQoN,MAAM,mBAAoB4E,EAAG7N,KACrC2N,KAGIE,EAAG7N,IACHnE,QAAQoN,MAAM,2BAA4B4E,EAAG7N,KAG7CnE,QAAQoN,MAAM,uCAAwC4E,EAGtE,EACUC,EAAqB,SAAUD,GACjChS,QAAQoN,MAAM,qBAAsB4E,GACpCF,GACR,EACUI,EAAsB,SAAUF,GAClChS,QAAQoN,MAAM,uBAAwB4E,GACtCJ,GACR,EAC0Bpe,MAAMoQ,KAAKwN,GACnBhU,SAASmN,IACnB,OAAQA,EAAMvU,MACV,IAAK,OACL,IAAK,MACL,IAAK,QACL,IAAK,MACL,IAAK,WACDuU,EAAM5I,iBAAiB,QAASoQ,GAChCxH,EAAM5I,iBAAiB,SAAUsQ,GACjC,MACJ,QACI1H,EAAM5I,iBAAiB,SAAUuQ,GAExC,IAEL,MAAMC,EAAe7H,EAAK/G,cAAc,wBACxC,GAAI4O,EAAc,CACd,MAAMC,EAAeD,EAAavc,QAAQwc,aACpCC,EAAWd,MAAOvK,IACpB,IAAKoL,EAED,YADApS,QAAQC,KAAK,0CAIjB,GADA+G,EAAEzF,kBACG+Q,QAAQ,qCACT,OAEJtB,EAAQjN,UAAUC,OAAO,qBACzBgN,EAAQjN,UAAUjJ,IAAI,uBACtBoW,EAAc7L,UAAY,GAC1B,MAAM9N,EAAO,IAAIka,SAASnH,UACHoH,MAAMU,EAAc,CACvCjB,OAAQA,GAAU,OAClBtY,KAAMtB,KAEGoa,KACTT,EAAc7L,UAAY,WAC1BiF,EAAKvG,UAAUjJ,IAAI,+BACnBiG,YAAW,KACPuJ,EAAKtG,QAAQ,GACd,MACN,EAELmO,EAAaxQ,iBAAiB,QAAS0Q,EAC1C,CACL,CAKQE,CAASjI,EAAK,GAEtB,CDRA3V,OAAOgN,iBAAiB,oBAAoB,KACxC0N,IAAgB,ICkBpB1a,OAAOgN,iBAAiB,oBAAoB,KACxC3B,QAAQoN,MAAM,oCACd0D,KAXcje,SAASkG,iBAAiB,iBAClCqE,SAAQkN,IACVA,EAAK3I,iBAAiB,UAAUqF,IACvBsD,EAAKkH,kBACNxK,EAAEzF,gBACL,GACH,ICxIe1O,SAASkG,iBAAiB,oBAClCqE,SAAQoV,IACjBA,EAAY7Q,iBAAiB,SAAS,KAClC,MAAM8Q,EAAYD,EAAY5c,QAAQ6c,UAChCvJ,EAAUuJ,EAAY5f,SAASC,eAAe2f,GAAa,KACjEvJ,GAASnF,UAAUjJ,IAAI,gBACvBoO,GAASnF,UAAUC,OAAO,gBAC1BwO,EAAYzO,UAAUjJ,IAAI,oBAC1B0X,EAAY3P,aAAa,cAAe,OAAO,GACjD,ICTiBhQ,SAASkG,iBAAiB,8BAClCqE,SAAQ8L,IACnB,MAAMwJ,EAAM,IAAIlY,IACC0O,EAAQnQ,iBAAiB,QACjCqE,SAAQzK,IACb,MAAMkV,EAAKlV,EAAQkV,GACf6K,EAAIzX,IAAI4M,GACR7H,QAAQC,KAAK,eAAgB4H,EAAIlV,GAGjC+f,EAAI5X,IAAI+M,EACX,GACH,GFoIgB,IG3G1BlT,OAAOgN,iBAAiB,oBAAoB,MAtC7B,WACX,MAAMgR,EAAY9f,SAASkG,iBAAiB,mBAC5CiH,QAAQ4S,IAAI,oBAAqBD,EAAUlf,QAC3Ckf,EAAUvV,SAAQyV,IACdA,EAAS9O,UAAUjJ,IAAI,eAAgB,sBACvC,MAAMgY,EAASrF,SAASoF,EAASjd,QAAQid,UAAY,KAC/C5a,EAAWzE,MAAMoQ,KAAKiP,EAAS5a,UACrC,GAAIA,EAASxE,QAAUqf,EACnB,OAEJ,MAAMC,EAAiBlgB,SAAS2W,cAAc,UAC9CuJ,EAAevK,UAAY,MAAMvQ,EAASxE,OAASqf,UACnDC,EAAelQ,aAAa,cAAe,QAC3CkQ,EAAelQ,aAAa,WAAY,MACxC5K,EAASmF,SAAQ,CAAChF,EAAOpB,KACjBA,GAAS8b,IACT1a,EAAM2L,UAAUjJ,IAAI,wBACpB1C,EAAMiZ,qBAAqB,KAAK,IAAI1P,iBAAiB,SAAS,KAC1DvJ,EAAM2L,UAAUC,OAAO,wBACvB,MAAMgP,EAAcH,EAASI,uBAAuB,wBAAwBxf,OAC5Esf,EAAevK,UAAY,MAAMwK,UAC7BA,GAAe,GACfD,EAAe/O,QAClB,IAER,IAEL+O,EAAehP,UAAUjJ,IAAI,uBAAwB,aAAc,mBAAoB,sBAAuB,qBAC9GiY,EAAepR,iBAAiB,SAAS,KACrCkR,EAAS9O,UAAUC,OAAO,sBAC1B/L,EAASmF,SAAQhF,IACbA,EAAM2L,UAAUC,OAAO,uBAAuB,IAElD+O,EAAe/O,QAAQ,IAE3B6O,EAASK,MAAMH,EAAe,GAEtC,CAEIF,EAAU,ICtCd,SAASM,GAAe5I,GACpB,MAAM6I,EAAU7I,EAAM1C,GAChBwL,EAAkBxgB,SAAS0Q,cAAc,aAAe6P,GAC9D,IAAIE,EAAY,GAahB,SAASC,IACAF,IAGLA,EAAgB7K,UAAY,GAC5B8K,EAAUlW,SAAQ,CAACoW,EAAMxc,KACrB,MAAMyc,EAAK5gB,SAAS2W,cAAc,MAClCiK,EAAG1P,UAAUjJ,IAAI,6BACjB,MAAM4Y,EAAW7gB,SAAS2W,cAAc,KACxCkK,EAASpI,YAAc,cAAgBkI,EAAK3X,KAC5C,MAAM8X,EAAe9gB,SAAS2W,cAAc,UAC5CmK,EAAa9Q,aAAa,aAAc,eACxC8Q,EAAa9Q,aAAa,KAAM,GAAG6Q,mBACnCC,EAAa9Q,aAAa,OAAQ,UAClC8Q,EAAa5P,UAAUjJ,IAAI,oBAC3B6Y,EAAahS,iBAAiB,SAAS,MAa/C,SAAoB3K,GAChBsc,EAAUM,OAAO5c,EAAO,GACxB6c,IACAN,GACH,CAhBWO,CAAW9c,EAAM,IAErByc,EAAGjN,YAAYkN,GACfD,EAAGjN,YAAYmN,GACfN,EAAgB7M,YAAYiN,EAAG,IAEtC,CACD,SAASI,IACL,MAAME,EAAe,IAAIC,aACzBV,EAAUlW,SAAQoW,GAAQO,EAAaE,MAAMnZ,IAAI0Y,KACjDjJ,EAAM2J,MAAQH,EAAaG,KAC9B,CAvCD3J,EAAM5I,iBAAiB,UAAU,KAC7B,GAAI4I,EAAM2J,OAAOzgB,OAAQ,CAChB8W,EAAM4J,WACPb,EAAY,IAEhB,IAAK,IAAItc,EAAQ,EAAGA,EAAQuT,EAAM2J,MAAMzgB,OAAQuD,IAC5Csc,EAAUhZ,KAAKiQ,EAAM2J,MAAMld,IAE/B6c,IACAN,GACH,IAmCT,CCjDA,SAASa,GAAcC,EAAiBC,EAAetD,GACnD,MAAMG,EAASmD,EAAcnD,OACvBF,EAASqD,EAAcrD,OAC7BqD,EAAc3S,iBAAiB,UAAUqF,IACrCA,EAAEzF,iBACFyF,EAAEuN,kBACFD,EAAchS,MAAMyD,QAAU,OAC9BiL,EAAQjN,UAAUC,OAAO,qBACzBgN,EAAQjN,UAAUjJ,IAAI,uBACtB,IAAI2W,SAAS6C,EAAc,IAE/BA,EAAc3S,iBAAiB,YAAYqF,IACvC,MAAMzP,EAAOyP,EAAEwN,SACf9C,MAAMT,EAAQ,CACVE,OAAQA,EACRtY,KAAMtB,IAELtE,MAAKwhB,GAAYA,EAASvP,SAC1BjS,MAAKiS,KAQlB,SAAuBwP,EAAKL,EAAiBC,EAAetD,GACxD,MAAM2D,EAAW9hB,SAAS+hB,cAAcC,yBAAyBH,GAE3DI,EADaH,EAASpR,cAAc,gCACNtL,SACpC,GAAI6c,GACA,IAAK,IAAIphB,EAAI,EAAGA,EAAIohB,EAAgBrhB,OAAQC,IAExC,GADA2gB,EAAgB7N,YAAYsO,EAAgBphB,IAClC,IAANA,EAAS,CACT,MAAMqhB,EAAYV,EAAgBW,kBAAkBzR,cAAc,KAClEwR,GAAW/T,OACd,OAILhB,QAAQC,KAAK,oBAEjB,MAAMgV,EAAUN,EAASpR,cAAc,8BACnC0R,IACAX,EAAcpB,MAAM+B,GACpBb,GAAcC,EAAiBY,EAASjE,GACxCsD,EAActQ,SAEtB,CA7BYkR,CAAchQ,EAAMmP,EAAiBC,EAAetD,GACpDjQ,YAAW,KACPiQ,EAAQjN,UAAUC,OAAO,sBAAsB,GAChD,IAAI,GACT,GAEV,CC1BA,SAASmR,GAAuBC,GAC5B,MAAMC,EAAYxiB,SAASC,eAAesiB,GAC1C,IAAKC,EAED,YADArV,QAAQc,MAAM,qBAAqBsU,gBAGvC,IAAIE,EAAc,KACKD,EAAUtc,iBAAiB,kBACnCqE,SAAQmY,IACnBA,EAAc5T,iBAAiB,aAAa,WACxC2T,EAAcC,EACdA,EAAcxR,UAAUjJ,IAAI,eACxC,IACQya,EAAc5T,iBAAiB,WAAW4P,iBAClC+D,IACAA,EAAYvR,UAAUC,OAAO,gBAC7BsR,EAAc,WAsC1B/D,eAAoC8D,GAChC,MAAMG,EAAqBhiB,MAAMoQ,KAAKyR,EAAUtc,iBAAiB,mBACjE,IAAI0c,EAAW,GACXtE,EAAS,GACb,MAAMuE,EAAmBF,EACpBne,KAAI,CAACke,EAAeve,KACP,IAAVA,IACAye,EAAWF,EAActE,OACzBE,EAASoE,EAAcpE,QAE3B,MAAMwE,EAAcJ,EAAc1Z,KAC5B+Z,EAAuBL,EAAchS,cAAc,kCACnDsS,EAAYN,EAAchS,cAAc,2BACxCuS,EAAgBP,EAAchS,cAAc,6BAC5CwS,EAAeR,EAAchS,cAAc,8BACjD,OAAKsS,GAAcC,GAAkBC,GAIrCA,EAAaxK,OAASvU,EAAQ,GAAG2X,WAC1B,CACHqH,cAAeL,EACf9N,GAAIgO,EAAUtK,MACd0K,cAAeL,GAAsBrK,MACrC2K,OAAQJ,EAAc/Z,QACtBoa,MAAOnf,EAAQ,KATfgJ,QAAQc,MAAM,uBACP,KASV,IAEAxJ,OAAOhB,SACZ,WAC2Bob,MAAM+D,EAAU,CACnCtE,OAAQA,GAAU,OAClBiF,QAAS,CACL,eAAgB,oBAEpBvd,KAAMwd,KAAKC,UAAUZ,MAEZ/D,GACT3R,QAAQ4S,IAAI,wCAGZ5S,QAAQC,KAAK,iCAKpB,CAFD,MAAO+G,GACHhH,QAAQc,MAAM,2BAA4BkG,EAC7C,CACJ,CApFiBuP,CAAqBlB,GAE3C,IACQ,MAAMmB,EAAWjB,EAAchS,cAAc,6BACzCiT,GACAA,EAAS7U,iBAAiB,UAAU4P,uBAgF5CA,eAA8CgE,GAC1C,MAAME,EAAWF,EAActE,OACzBE,EAASoE,EAAcpE,OACvBH,EAAUuE,EAAchS,cAAc,gBAC5CyN,EAAQnO,aAAa,YAAa,UAClCmO,EAAQjN,UAAUC,OAAO,qBACzBgN,EAAQjN,UAAUjJ,IAAI,uBACtB,MAAM6a,EAAcJ,EAAc1Z,KAC5B+Z,EAAuBL,EAAchS,cAAc,kCACnDsS,EAAYN,EAAchS,cAAc,2BACxCuS,EAAgBP,EAAchS,cAAc,6BAC5CwS,EAAeR,EAAchS,cAAc,8BAC3CiR,EAAW,CACb,CACIwB,cAAeL,EACf9N,GAAIgO,GAAWtK,MACf0K,cAAeL,GAAsBrK,OAAS,GAC9C2K,OAAQJ,GAAe/Z,QACvBoa,MAAOM,OAAOhJ,SAASsI,GAAcxK,OAAS,OAGtD,WAC2BmG,MAAM+D,EAAU,CACnCtE,OAAQA,GAAU,OAClBiF,QAAS,CACL,eAAgB,oBAEpBvd,KAAMwd,KAAKC,UAAU9B,MAEZ7C,IACT3R,QAAQ4S,IAAI,4CACZ7R,YAAW,KACPiQ,EAAQjN,UAAUC,OAAO,uBACzBgN,EAAQjN,UAAUjJ,IAAI,oBAAoB,GAC3C,KACHiG,YAAW,KACPiQ,EAAQjN,UAAUC,OAAO,oBAAoB,GAC9C,MAGHhE,QAAQC,KAAK,qCAKpB,CAFD,MAAO+G,GACHhH,QAAQc,MAAM,uCAAwCkG,EACzD,CACJ,CA7HiB0P,CAA+BnB,EACrD,GACS,IAELF,EAAU1T,iBAAiB,YAAaqF,IAEpC,GADAA,EAAEzF,kBACG+T,EACD,OACJ,MAAMqB,EAQV,SAA6BtB,EAAW/Q,GACpC,MAAMsS,EAA6B,IAC5BvB,EAAUtc,iBAAiB,kCAElC,OAAO6d,EAA2B1e,QAAO,CAAC2e,EAASze,KAC/C,MAAM0e,EAAM1e,EAAM2e,wBACZC,EAAS1S,EAAIwS,EAAIG,IAAMH,EAAI9J,OAAS,EAC1C,OAAIgK,EAAS,GAAKA,EAASH,EAAQG,OACxB,CAAEA,OAAQA,EAAQrkB,QAASyF,GAG3Bye,CACV,GACF,CAAEG,OAAQP,OAAOS,kBAAmBvkB,QAAS,OAAQA,OAC3D,CAtBwBwkB,CAAoB9B,EAAWrO,EAAEoQ,SACjC,OAAjBT,EACAtB,EAAU7O,YAAY8O,GAGtBD,EAAUgC,aAAa/B,EAAaqB,EACvC,GAgHT,CCpJoB,MAChB,MAAMW,EAAiBzkB,SAASC,eAAe,iBACzCykB,EAAkB1kB,SAASC,eAAe,oBAChD,GAAIkQ,EACAhQ,OAAO,uBAAQC,MAAK,EAAGoR,WAgBnBiT,GAAgB3V,iBAAiB,SAfJ,KACzB,IAAK2V,IAAmBC,EACpB,OAAOvX,QAAQ4S,IAAI,qDAEwB,YAA3C0E,EAAejS,UAAU0C,eACzBuP,EAAejS,UAAY,aAC3BkS,EAAgBxT,UAAUjJ,IAAI,gBAC9BuJ,EAAKG,GAAG+S,EAAiB,CAAEC,UAAW,UAAW/S,SAAU,GAAKE,KAAM,iBAGtE2S,EAAejS,UAAY,UAC3BkS,EAAgBxT,UAAUC,OAAO,gBACjCK,EAAKG,GAAG+S,EAAiB,CAAEC,UAAW,QAAS/S,SAAU,GAAKE,KAAM,eACvE,GAE0D,QAGlE,CACD,MAAM8S,EAAoB,KACtB,IAAKH,IAAmBC,EACpB,OAAOvX,QAAQ4S,IAAI,qDAEwB,YAA3C0E,EAAejS,UAAU0C,eACzBuP,EAAejS,UAAY,aAC3BkS,EAAgBxT,UAAUjJ,IAAI,gBAC9Byc,EAAgBjV,MAAMkV,UAAY,SAGlCF,EAAejS,UAAY,UAC3BkS,EAAgBxT,UAAUC,OAAO,gBACjCuT,EAAgBjV,MAAMkV,UAAY,QACrC,EAELF,GAAgB3V,iBAAiB,QAAS8V,EAC7C,GAELC,GHQA/iB,OAAOgN,iBAAiB,oBAAoB,KACxC3B,QAAQoN,MAAM,+BACMva,SAASkG,iBAAiB,wBAClCqE,SAASmN,GAAU4I,GAAe5I,IAAO,IIpD/B1X,SAASC,eAAe,oBAGzCkQ,GAELhQ,OAAO,uBAAQC,MAAK,EAAGoR,WACnB,MAAMsT,EAAuB9kB,SAASC,eAAe,4BAC/C8kB,EAAepkB,MAAMoQ,KAAK+T,GAAsB5e,iBAAiB,wBACvEsL,EAAKT,KAAKgU,EAAc,CACpBtT,GAAI,GACJC,QAAS,EACTE,SAAU,GACVC,QAAS,GACTC,KAAM,YACR,ICfV,WACI,MAAMkT,EAAiBhlB,SAAS0Q,cAAc,wBACzCsU,GAEA7U,GAELhQ,OAAO,uBAAQC,MAAK,EAAGoR,WACnBrR,OAAO,+BAAsBC,MAAK,EAAG6kB,oBACjCzT,EAAK0T,eAAeD,GACpB,MAAME,EAAU,CACZC,MAAO,EACPC,IAAK,IACLC,MAAO,EACPC,qBAAqB,GAErBpV,GACAqB,EAAKG,GAAGqT,EAAgB,CACpBvT,EAAG,IACHK,KAAM,OACN0T,cAAeL,GAEtB,GACH,GAET,CAxBD,GCAA,WACI,MAAMM,EAAezlB,SAAS0Q,cAAc,4BACtCgV,EAAOD,GAAc1iB,QAAc,KACnCnC,EAAS6kB,GAAc1iB,QAAgB,OAC7C,GAAI2iB,GAAQ9kB,EAAQ,CAChB,MAAM8W,EAAQ1X,SAASC,eAAeylB,GAChCxS,EAAUlT,SAASC,eAAeylB,EAAO,YAC/ChO,GAAO5I,iBAAiB,SAASqF,IAC7B,MAAMrG,OAAEA,GAAWqG,EACfrG,aAAkB6X,sBAClBzS,EAAQyC,UAAY,IAAGiO,OAAOhjB,GAAUkN,EAAO4K,MAAM9X,QACxD,GAER,CACJ,CAdD,GCYAkB,OAAOgN,iBAAiB,oBAAoB,KACxC3B,QAAQoN,MAAM,2BAZAva,SAASkG,iBAAiB,uBAClCqE,SAAQgJ,IACV,MAAM6N,EAAQ7N,EAAKrN,iBAAiB,kBAChBvF,MAAMoQ,KAAKqQ,GAAOzc,MAAK,CAAClE,EAAGsD,KAC3C,MAAM6hB,EAAQnlB,EAAEsC,QAAQ8iB,QAAU,GAC5BC,EAAQ/hB,EAAEhB,QAAQ8iB,QAAU,GAClC,OAAOD,EAAMG,cAAcD,EAAM,IAEzBvb,SAAQiO,GAAQjF,EAAKI,YAAY6E,IAAM,GAK5C,IN4Cf1W,OAAOgN,iBAAiB,oBAAoB,MAT5C,WACI,MAAMkX,EAAWhmB,SAAS0Q,cAAc,8BAClCuV,EAAgBjmB,SAAS0Q,cAAc,+BACvCyN,EAAUne,SAAS0Q,cAAc,6BACnCsV,GAAYC,GAAiB9H,IAC7BA,EAAQnO,aAAa,YAAa,UAClCuR,GAAc0E,EAAeD,EAAU7H,GAE/C,CAEI+H,EAAa,IC+FjBlmB,SAAS8O,iBAAiB,oBAAoB,KAJ1C9O,SACKkG,iBAAiB,4BACjBqE,SAAQtB,GAAMqZ,GAAuBrZ,EAAG+L,KAGlB","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]}