{"version":3,"file":"server.mjs","sources":["../../node_modules/svelte/src/runtime/internal/utils.js","../../node_modules/svelte/src/runtime/internal/dom.js","../../node_modules/svelte/src/runtime/internal/lifecycle.js","../../node_modules/svelte/src/runtime/internal/scheduler.js","../../node_modules/svelte/src/runtime/internal/each.js","../../node_modules/svelte/src/shared/boolean_attributes.js","../../node_modules/svelte/src/shared/utils/escape.js","../../node_modules/svelte/src/shared/utils/names.js","../../node_modules/svelte/src/runtime/internal/ssr.js","../../node_modules/svelte/src/runtime/store/index.js","../../src/context/root.ts","../../src/utils/wrapError.ts","../../src/utils/makeStyle.ts","../../src/utils/pxToEm.ts","../../src/utils/padLeft.ts","../../src/utils/correctColor.ts","../../src/utils/htmlFilter.ts","../../src/utils/truthy.ts","../../src/utils/background.ts","../../src/utils/correctNonNegativeNumber.ts","../../src/use/visibilityAction.ts","../../src/utils/genClassName.ts","../../src/context/state.ts","../../src/utils/edgeInsertsToCss.ts","../../src/utils/isNumber.ts","../../src/utils/isNonNegativeNumber.ts","../../src/utils/correctEdgeInserts.ts","../../src/utils/correctAlpha.ts","../../src/utils/isDeepEqual.ts","../../src/utils/assignIfDifferent.ts","../../src/utils/correctVisibility.ts","../../src/utils/correctCSSInterpolator.ts","../../src/utils/correctNumber.ts","../../src/utils/flattenAnimation.ts","../../src/utils/correctEdgeInsertsObject.ts","../../src/utils/sumEdgeInsets.ts","../../src/utils/correctBorderRadiusObject.ts","../../src/utils/borderRadius.ts","../../src/utils/shadow.ts","../../src/utils/filterEnabledActions.ts","../../src/utils/isPrefersReducedMotion.ts","../../src/use/layoutProvider.ts","../../src/context/enabled.ts","../../src/utils/correctBooleanInt.ts","../../src/utils/composeAccessibilityDescription.ts","../../src/utils/doNothing.ts","../../src/context/action.ts","../../src/utils/url.ts","../../src/components/utilities/Actionable.svelte","../../src/utils/isPositiveNumber.ts","../../src/utils/filters.ts","../../src/components/utilities/OuterBackground.svelte","../../src/components/utilities/Outer.svelte","../../src/utils/correctPositiveNumber.ts","../../src/utils/fontWeightToCss.ts","../../src/utils/correctFontWeight.ts","../../src/utils/edgeInsetsMultiply.ts","../../src/components/text/TextRange.svelte","../../src/utils/correctAlignmentHorizontal.ts","../../src/utils/correctAlignmentVertical.ts","../../src/utils/propToString.ts","../../src/utils/correctTintMode.ts","../../src/utils/debounce.ts","../../src/components/text/Text.svelte","../../src/utils/container.ts","../../src/utils/correctContainerOrientation.ts","../../src/utils/correctDrawableStyles.ts","../../src/utils/hasGapSupport.ts","../../src/utils/correctContentAlignmentVertical.ts","../../src/utils/correctContentAlignmentHorizontal.ts","../../src/utils/constStore.ts","../../src/utils/itemBuilder.ts","../../src/utils/simpleThrottle.ts","../../src/utils/getMarginBox.ts","../../src/components/container/ContainerSeparators.svelte","../../src/components/container/Container.svelte","../../src/utils/correctGeneralOrientation.ts","../../src/components/separator/Separator.svelte","../../src/utils/correctImagePosition.ts","../../src/utils/prepareBase64.ts","../../src/components/image/Image.svelte","../../src/utils/gridCalcTemplates.ts","../../src/components/grid/Grid.svelte","../../src/utils/correctAlignment.ts","../../src/utils/joinTemplateSizes.ts","../../src/utils/nonNegativeModulo.ts","../../src/components/gallery/Gallery.svelte","../../src/utils/correctTabDelimiterStyle.ts","../../src/utils/correctBorderRadius.ts","../../src/components/utilities/EnabledContext.svelte","../../src/components/tabs/Tabs.svelte","../../node_modules/svelte/src/runtime/easing/index.js","../../src/utils/easings/interpolateEasing.ts","../../src/utils/easings/ease.ts","../../src/utils/easings/spring.ts","../../src/utils/easing.ts","../../src/utils/lerp.ts","../../src/components/state/State.svelte","../../src/components/pager/Pager.svelte","../../src/components/indicator/Indicator.svelte","../../src/utils/correctSliderTextStyle.ts","../../src/utils/clamp.ts","../../src/expressions/bigint.ts","../../src/expressions/variable.ts","../../src/components/slider/Slider.svelte","../../src/utils/textDiff.ts","../../src/utils/mask/baseInputMask.ts","../../src/utils/mask/fixedLengthInputMask.ts","../../src/utils/updateFixedMask.ts","../../src/utils/mask/currencyInputMask.ts","../../src/utils/updateCurrencyMask.ts","../../src/utils/mask/phoneInputMask.ts","../../src/utils/updatePhoneMask.ts","../../src/components/input/Input.svelte","../../src/components/select/Select.svelte","../../src/utils/correctVideoSource.ts","../../src/utils/video.ts","../../src/components/video/Video.svelte","../../src/utils/booleanInt.ts","../../src/components/switch/Switch.svelte","../../src/components/custom/Custom.svelte","../../src/components/typeMap.ts","../../src/components/utilities/Unknown.svelte","../../src/components/utilities/RootSvgFilters.svelte","../../src/utils/applyTemplate.ts","../../src/expressions/const.ts","../../src/expressions/walk.ts","../../src/expressions/utils.ts","../../src/expressions/funcs/funcs.ts","../../src/expressions/funcs/std.ts","../../src/utils/formatDate.ts","../../src/expressions/funcs/datetime.ts","../../src/utils/escapeRegExp.ts","../../src/expressions/funcs/strings.ts","../../src/expressions/funcs/math.ts","../../src/expressions/funcs/colors.ts","../../src/expressions/funcs/interval.ts","../../src/expressions/funcs/dict.ts","../../src/expressions/funcs/array.ts","../../src/expressions/funcs/stored.ts","../../src/expressions/funcs/trigonometry.ts","../../src/expressions/funcs/index.ts","../../src/expressions/eval.ts","../../src/expressions/expressions.js","../../src/expressions/parserCache.ts","../../src/expressions/funcs/customFuncs.ts","../../src/utils/simpleCheckInput.ts","../../src/utils/uniq.ts","../../src/expressions/json.ts","../../src/expressions/globalVariablesController.ts","../../src/utils/timers.ts","../../src/actions/array.ts","../../src/actions/dict.ts","../../src/actions/copyToClipboard.ts","../../src/utils/animators.ts","../../src/utils/componentUtils.ts","../../src/utils/checkSubmitAction.ts","../../src/utils/hasDialogSupport.ts","../../src/components/tooltip/Tooltip.svelte","../../src/components/menu/Menu.svelte","../../src/components/Root.svelte","../../src/server.ts"],"sourcesContent":["/** @returns {void} */\nexport function noop() {}\n\nexport const identity = (x) => x;\n\n/**\n * @template T\n * @template S\n * @param {T} tar\n * @param {S} src\n * @returns {T & S}\n */\nexport function assign(tar, src) {\n\t// @ts-ignore\n\tfor (const k in src) tar[k] = src[k];\n\treturn /** @type {T & S} */ (tar);\n}\n\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\n/**\n * @param {any} value\n * @returns {value is PromiseLike<any>}\n */\nexport function is_promise(value) {\n\treturn (\n\t\t!!value &&\n\t\t(typeof value === 'object' || typeof value === 'function') &&\n\t\ttypeof (/** @type {any} */ (value).then) === 'function'\n\t);\n}\n\n/** @returns {void} */\nexport function add_location(element, file, line, column, char) {\n\telement.__svelte_meta = {\n\t\tloc: { file, line, column, char }\n\t};\n}\n\nexport function run(fn) {\n\treturn fn();\n}\n\nexport function blank_object() {\n\treturn Object.create(null);\n}\n\n/**\n * @param {Function[]} fns\n * @returns {void}\n */\nexport function run_all(fns) {\n\tfns.forEach(run);\n}\n\n/**\n * @param {any} thing\n * @returns {thing is Function}\n */\nexport function is_function(thing) {\n\treturn typeof thing === 'function';\n}\n\n/** @returns {boolean} */\nexport function safe_not_equal(a, b) {\n\treturn a != a ? b == b : a !== b || (a && typeof a === 'object') || typeof a === 'function';\n}\n\nlet src_url_equal_anchor;\n\n/**\n * @param {string} element_src\n * @param {string} url\n * @returns {boolean}\n */\nexport function src_url_equal(element_src, url) {\n\tif (element_src === url) return true;\n\tif (!src_url_equal_anchor) {\n\t\tsrc_url_equal_anchor = document.createElement('a');\n\t}\n\t// This is actually faster than doing URL(..).href\n\tsrc_url_equal_anchor.href = url;\n\treturn element_src === src_url_equal_anchor.href;\n}\n\n/** @param {string} srcset */\nfunction split_srcset(srcset) {\n\treturn srcset.split(',').map((src) => src.trim().split(' ').filter(Boolean));\n}\n\n/**\n * @param {HTMLSourceElement | HTMLImageElement} element_srcset\n * @param {string | undefined | null} srcset\n * @returns {boolean}\n */\nexport function srcset_url_equal(element_srcset, srcset) {\n\tconst element_urls = split_srcset(element_srcset.srcset);\n\tconst urls = split_srcset(srcset || '');\n\n\treturn (\n\t\turls.length === element_urls.length &&\n\t\turls.every(\n\t\t\t([url, width], i) =>\n\t\t\t\twidth === element_urls[i][1] &&\n\t\t\t\t// We need to test both ways because Vite will create an a full URL with\n\t\t\t\t// `new URL(asset, import.meta.url).href` for the client when `base: './'`, and the\n\t\t\t\t// relative URLs inside srcset are not automatically resolved to absolute URLs by\n\t\t\t\t// browsers (in contrast to img.src). This means both SSR and DOM code could\n\t\t\t\t// contain relative or absolute URLs.\n\t\t\t\t(src_url_equal(element_urls[i][0], url) || src_url_equal(url, element_urls[i][0]))\n\t\t)\n\t);\n}\n\n/** @returns {boolean} */\nexport function not_equal(a, b) {\n\treturn a != a ? b == b : a !== b;\n}\n\n/** @returns {boolean} */\nexport function is_empty(obj) {\n\treturn Object.keys(obj).length === 0;\n}\n\n/** @returns {void} */\nexport function validate_store(store, name) {\n\tif (store != null && typeof store.subscribe !== 'function') {\n\t\tthrow new Error(`'${name}' is not a store with a 'subscribe' method`);\n\t}\n}\n\nexport function subscribe(store, ...callbacks) {\n\tif (store == null) {\n\t\tfor (const callback of callbacks) {\n\t\t\tcallback(undefined);\n\t\t}\n\t\treturn noop;\n\t}\n\tconst unsub = store.subscribe(...callbacks);\n\treturn unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\n\n/**\n * Get the current value from a store by subscribing and immediately unsubscribing.\n *\n * https://svelte.dev/docs/svelte-store#get\n * @template T\n * @param {import('../store/public.js').Readable<T>} store\n * @returns {T}\n */\nexport function get_store_value(store) {\n\tlet value;\n\tsubscribe(store, (_) => (value = _))();\n\treturn value;\n}\n\n/** @returns {void} */\nexport function component_subscribe(component, store, callback) {\n\tcomponent.$$.on_destroy.push(subscribe(store, callback));\n}\n\nexport function create_slot(definition, ctx, $$scope, fn) {\n\tif (definition) {\n\t\tconst slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n\t\treturn definition[0](slot_ctx);\n\t}\n}\n\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n\treturn definition[1] && fn ? assign($$scope.ctx.slice(), definition[1](fn(ctx))) : $$scope.ctx;\n}\n\nexport function get_slot_changes(definition, $$scope, dirty, fn) {\n\tif (definition[2] && fn) {\n\t\tconst lets = definition[2](fn(dirty));\n\t\tif ($$scope.dirty === undefined) {\n\t\t\treturn lets;\n\t\t}\n\t\tif (typeof lets === 'object') {\n\t\t\tconst merged = [];\n\t\t\tconst len = Math.max($$scope.dirty.length, lets.length);\n\t\t\tfor (let i = 0; i < len; i += 1) {\n\t\t\t\tmerged[i] = $$scope.dirty[i] | lets[i];\n\t\t\t}\n\t\t\treturn merged;\n\t\t}\n\t\treturn $$scope.dirty | lets;\n\t}\n\treturn $$scope.dirty;\n}\n\n/** @returns {void} */\nexport function update_slot_base(\n\tslot,\n\tslot_definition,\n\tctx,\n\t$$scope,\n\tslot_changes,\n\tget_slot_context_fn\n) {\n\tif (slot_changes) {\n\t\tconst slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n\t\tslot.p(slot_context, slot_changes);\n\t}\n}\n\n/** @returns {void} */\nexport function update_slot(\n\tslot,\n\tslot_definition,\n\tctx,\n\t$$scope,\n\tdirty,\n\tget_slot_changes_fn,\n\tget_slot_context_fn\n) {\n\tconst slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n\tupdate_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\n\n/** @returns {any[] | -1} */\nexport function get_all_dirty_from_scope($$scope) {\n\tif ($$scope.ctx.length > 32) {\n\t\tconst dirty = [];\n\t\tconst length = $$scope.ctx.length / 32;\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tdirty[i] = -1;\n\t\t}\n\t\treturn dirty;\n\t}\n\treturn -1;\n}\n\n/** @returns {{}} */\nexport function exclude_internal_props(props) {\n\tconst result = {};\n\tfor (const k in props) if (k[0] !== '$') result[k] = props[k];\n\treturn result;\n}\n\n/** @returns {{}} */\nexport function compute_rest_props(props, keys) {\n\tconst rest = {};\n\tkeys = new Set(keys);\n\tfor (const k in props) if (!keys.has(k) && k[0] !== '$') rest[k] = props[k];\n\treturn rest;\n}\n\n/** @returns {{}} */\nexport function compute_slots(slots) {\n\tconst result = {};\n\tfor (const key in slots) {\n\t\tresult[key] = true;\n\t}\n\treturn result;\n}\n\n/** @returns {(this: any, ...args: any[]) => void} */\nexport function once(fn) {\n\tlet ran = false;\n\treturn function (...args) {\n\t\tif (ran) return;\n\t\tran = true;\n\t\tfn.call(this, ...args);\n\t};\n}\n\nexport function null_to_empty(value) {\n\treturn value == null ? '' : value;\n}\n\nexport function set_store_value(store, ret, value) {\n\tstore.set(value);\n\treturn ret;\n}\n\nexport const has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\n\nexport function action_destroyer(action_result) {\n\treturn action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\n/** @param {number | string} value\n * @returns {[number, string]}\n */\nexport function split_css_unit(value) {\n\tconst split = typeof value === 'string' && value.match(/^\\s*(-?[\\d.]+)([^\\s]*)\\s*$/);\n\treturn split ? [parseFloat(split[1]), split[2] || 'px'] : [/** @type {number} */ (value), 'px'];\n}\n\nexport const contenteditable_truthy_values = ['', true, 1, 'true', 'contenteditable'];\n","import { contenteditable_truthy_values, has_prop } from './utils.js';\n\nimport { ResizeObserverSingleton } from './ResizeObserverSingleton.js';\n\n// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM\n// at the end of hydration without touching the remaining nodes.\nlet is_hydrating = false;\n\n/**\n * @returns {void}\n */\nexport function start_hydrating() {\n\tis_hydrating = true;\n}\n\n/**\n * @returns {void}\n */\nexport function end_hydrating() {\n\tis_hydrating = false;\n}\n\n/**\n * @param {number} low\n * @param {number} high\n * @param {(index: number) => number} key\n * @param {number} value\n * @returns {number}\n */\nfunction upper_bound(low, high, key, value) {\n\t// Return first index of value larger than input value in the range [low, high)\n\twhile (low < high) {\n\t\tconst mid = low + ((high - low) >> 1);\n\t\tif (key(mid) <= value) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\thigh = mid;\n\t\t}\n\t}\n\treturn low;\n}\n\n/**\n * @param {NodeEx} target\n * @returns {void}\n */\nfunction init_hydrate(target) {\n\tif (target.hydrate_init) return;\n\ttarget.hydrate_init = true;\n\t// We know that all children have claim_order values since the unclaimed have been detached if target is not <head>\n\n\tlet children = /** @type {ArrayLike<NodeEx2>} */ (target.childNodes);\n\t// If target is <head>, there may be children without claim_order\n\tif (target.nodeName === 'HEAD') {\n\t\tconst my_children = [];\n\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\tconst node = children[i];\n\t\t\tif (node.claim_order !== undefined) {\n\t\t\t\tmy_children.push(node);\n\t\t\t}\n\t\t}\n\t\tchildren = my_children;\n\t}\n\t/*\n\t * Reorder claimed children optimally.\n\t * We can reorder claimed children optimally by finding the longest subsequence of\n\t * nodes that are already claimed in order and only moving the rest. The longest\n\t * subsequence of nodes that are claimed in order can be found by\n\t * computing the longest increasing subsequence of .claim_order values.\n\t *\n\t * This algorithm is optimal in generating the least amount of reorder operations\n\t * possible.\n\t *\n\t * Proof:\n\t * We know that, given a set of reordering operations, the nodes that do not move\n\t * always form an increasing subsequence, since they do not move among each other\n\t * meaning that they must be already ordered among each other. Thus, the maximal\n\t * set of nodes that do not move form a longest increasing subsequence.\n\t */\n\t// Compute longest increasing subsequence\n\t// m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n\tconst m = new Int32Array(children.length + 1);\n\t// Predecessor indices + 1\n\tconst p = new Int32Array(children.length);\n\tm[0] = -1;\n\tlet longest = 0;\n\tfor (let i = 0; i < children.length; i++) {\n\t\tconst current = children[i].claim_order;\n\t\t// Find the largest subsequence length such that it ends in a value less than our current value\n\t\t// upper_bound returns first greater value, so we subtract one\n\t\t// with fast path for when we are on the current longest subsequence\n\t\tconst seq_len =\n\t\t\t(longest > 0 && children[m[longest]].claim_order <= current\n\t\t\t\t? longest + 1\n\t\t\t\t: upper_bound(1, longest, (idx) => children[m[idx]].claim_order, current)) - 1;\n\t\tp[i] = m[seq_len] + 1;\n\t\tconst new_len = seq_len + 1;\n\t\t// We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n\t\tm[new_len] = i;\n\t\tlongest = Math.max(new_len, longest);\n\t}\n\t// The longest increasing subsequence of nodes (initially reversed)\n\n\t/**\n\t * @type {NodeEx2[]}\n\t */\n\tconst lis = [];\n\t// The rest of the nodes, nodes that will be moved\n\n\t/**\n\t * @type {NodeEx2[]}\n\t */\n\tconst to_move = [];\n\tlet last = children.length - 1;\n\tfor (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n\t\tlis.push(children[cur - 1]);\n\t\tfor (; last >= cur; last--) {\n\t\t\tto_move.push(children[last]);\n\t\t}\n\t\tlast--;\n\t}\n\tfor (; last >= 0; last--) {\n\t\tto_move.push(children[last]);\n\t}\n\tlis.reverse();\n\t// We sort the nodes being moved to guarantee that their insertion order matches the claim order\n\tto_move.sort((a, b) => a.claim_order - b.claim_order);\n\t// Finally, we move the nodes\n\tfor (let i = 0, j = 0; i < to_move.length; i++) {\n\t\twhile (j < lis.length && to_move[i].claim_order >= lis[j].claim_order) {\n\t\t\tj++;\n\t\t}\n\t\tconst anchor = j < lis.length ? lis[j] : null;\n\t\ttarget.insertBefore(to_move[i], anchor);\n\t}\n}\n\n/**\n * @param {Node} target\n * @param {Node} node\n * @returns {void}\n */\nexport function append(target, node) {\n\ttarget.appendChild(node);\n}\n\n/**\n * @param {Node} target\n * @param {string} style_sheet_id\n * @param {string} styles\n * @returns {void}\n */\nexport function append_styles(target, style_sheet_id, styles) {\n\tconst append_styles_to = get_root_for_style(target);\n\tif (!append_styles_to.getElementById(style_sheet_id)) {\n\t\tconst style = element('style');\n\t\tstyle.id = style_sheet_id;\n\t\tstyle.textContent = styles;\n\t\tappend_stylesheet(append_styles_to, style);\n\t}\n}\n\n/**\n * @param {Node} node\n * @returns {ShadowRoot | Document}\n */\nexport function get_root_for_style(node) {\n\tif (!node) return document;\n\tconst root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n\tif (root && /** @type {ShadowRoot} */ (root).host) {\n\t\treturn /** @type {ShadowRoot} */ (root);\n\t}\n\treturn node.ownerDocument;\n}\n\n/**\n * @param {Node} node\n * @returns {CSSStyleSheet}\n */\nexport function append_empty_stylesheet(node) {\n\tconst style_element = element('style');\n\t// For transitions to work without 'style-src: unsafe-inline' Content Security Policy,\n\t// these empty tags need to be allowed with a hash as a workaround until we move to the Web Animations API.\n\t// Using the hash for the empty string (for an empty tag) works in all browsers except Safari.\n\t// So as a workaround for the workaround, when we append empty style tags we set their content to /* empty */.\n\t// The hash 'sha256-9OlNO0DNEeaVzHL4RZwCLsBHA8WBQ8toBp/4F5XV2nc=' will then work even in Safari.\n\tstyle_element.textContent = '/* empty */';\n\tappend_stylesheet(get_root_for_style(node), style_element);\n\treturn style_element.sheet;\n}\n\n/**\n * @param {ShadowRoot | Document} node\n * @param {HTMLStyleElement} style\n * @returns {CSSStyleSheet}\n */\nfunction append_stylesheet(node, style) {\n\tappend(/** @type {Document} */ (node).head || node, style);\n\treturn style.sheet;\n}\n\n/**\n * @param {NodeEx} target\n * @param {NodeEx} node\n * @returns {void}\n */\nexport function append_hydration(target, node) {\n\tif (is_hydrating) {\n\t\tinit_hydrate(target);\n\t\tif (\n\t\t\ttarget.actual_end_child === undefined ||\n\t\t\t(target.actual_end_child !== null && target.actual_end_child.parentNode !== target)\n\t\t) {\n\t\t\ttarget.actual_end_child = target.firstChild;\n\t\t}\n\t\t// Skip nodes of undefined ordering\n\t\twhile (target.actual_end_child !== null && target.actual_end_child.claim_order === undefined) {\n\t\t\ttarget.actual_end_child = target.actual_end_child.nextSibling;\n\t\t}\n\t\tif (node !== target.actual_end_child) {\n\t\t\t// We only insert if the ordering of this node should be modified or the parent node is not target\n\t\t\tif (node.claim_order !== undefined || node.parentNode !== target) {\n\t\t\t\ttarget.insertBefore(node, target.actual_end_child);\n\t\t\t}\n\t\t} else {\n\t\t\ttarget.actual_end_child = node.nextSibling;\n\t\t}\n\t} else if (node.parentNode !== target || node.nextSibling !== null) {\n\t\ttarget.appendChild(node);\n\t}\n}\n\n/**\n * @param {Node} target\n * @param {Node} node\n * @param {Node} [anchor]\n * @returns {void}\n */\nexport function insert(target, node, anchor) {\n\ttarget.insertBefore(node, anchor || null);\n}\n\n/**\n * @param {NodeEx} target\n * @param {NodeEx} node\n * @param {NodeEx} [anchor]\n * @returns {void}\n */\nexport function insert_hydration(target, node, anchor) {\n\tif (is_hydrating && !anchor) {\n\t\tappend_hydration(target, node);\n\t} else if (node.parentNode !== target || node.nextSibling != anchor) {\n\t\ttarget.insertBefore(node, anchor || null);\n\t}\n}\n\n/**\n * @param {Node} node\n * @returns {void}\n */\nexport function detach(node) {\n\tif (node.parentNode) {\n\t\tnode.parentNode.removeChild(node);\n\t}\n}\n\n/**\n * @returns {void} */\nexport function destroy_each(iterations, detaching) {\n\tfor (let i = 0; i < iterations.length; i += 1) {\n\t\tif (iterations[i]) iterations[i].d(detaching);\n\t}\n}\n\n/**\n * @template {keyof HTMLElementTagNameMap} K\n * @param {K} name\n * @returns {HTMLElementTagNameMap[K]}\n */\nexport function element(name) {\n\treturn document.createElement(name);\n}\n\n/**\n * @template {keyof HTMLElementTagNameMap} K\n * @param {K} name\n * @param {string} is\n * @returns {HTMLElementTagNameMap[K]}\n */\nexport function element_is(name, is) {\n\treturn document.createElement(name, { is });\n}\n\n/**\n * @template T\n * @template {keyof T} K\n * @param {T} obj\n * @param {K[]} exclude\n * @returns {Pick<T, Exclude<keyof T, K>>}\n */\nexport function object_without_properties(obj, exclude) {\n\tconst target = /** @type {Pick<T, Exclude<keyof T, K>>} */ ({});\n\tfor (const k in obj) {\n\t\tif (\n\t\t\thas_prop(obj, k) &&\n\t\t\t// @ts-ignore\n\t\t\texclude.indexOf(k) === -1\n\t\t) {\n\t\t\t// @ts-ignore\n\t\t\ttarget[k] = obj[k];\n\t\t}\n\t}\n\treturn target;\n}\n\n/**\n * @template {keyof SVGElementTagNameMap} K\n * @param {K} name\n * @returns {SVGElement}\n */\nexport function svg_element(name) {\n\treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n}\n\n/**\n * @param {string} data\n * @returns {Text}\n */\nexport function text(data) {\n\treturn document.createTextNode(data);\n}\n\n/**\n * @returns {Text} */\nexport function space() {\n\treturn text(' ');\n}\n\n/**\n * @returns {Text} */\nexport function empty() {\n\treturn text('');\n}\n\n/**\n * @param {string} content\n * @returns {Comment}\n */\nexport function comment(content) {\n\treturn document.createComment(content);\n}\n\n/**\n * @param {EventTarget} node\n * @param {string} event\n * @param {EventListenerOrEventListenerObject} handler\n * @param {boolean | AddEventListenerOptions | EventListenerOptions} [options]\n * @returns {() => void}\n */\nexport function listen(node, event, handler, options) {\n\tnode.addEventListener(event, handler, options);\n\treturn () => node.removeEventListener(event, handler, options);\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function prevent_default(fn) {\n\treturn function (event) {\n\t\tevent.preventDefault();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function stop_propagation(fn) {\n\treturn function (event) {\n\t\tevent.stopPropagation();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function stop_immediate_propagation(fn) {\n\treturn function (event) {\n\t\tevent.stopImmediatePropagation();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => void} */\nexport function self(fn) {\n\treturn function (event) {\n\t\t// @ts-ignore\n\t\tif (event.target === this) fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => void} */\nexport function trusted(fn) {\n\treturn function (event) {\n\t\t// @ts-ignore\n\t\tif (event.isTrusted) fn.call(this, event);\n\t};\n}\n\n/**\n * @param {Element} node\n * @param {string} attribute\n * @param {string} [value]\n * @returns {void}\n */\nexport function attr(node, attribute, value) {\n\tif (value == null) node.removeAttribute(attribute);\n\telse if (node.getAttribute(attribute) !== value) node.setAttribute(attribute, value);\n}\n/**\n * List of attributes that should always be set through the attr method,\n * because updating them through the property setter doesn't work reliably.\n * In the example of `width`/`height`, the problem is that the setter only\n * accepts numeric values, but the attribute can also be set to a string like `50%`.\n * If this list becomes too big, rethink this approach.\n */\nconst always_set_through_set_attribute = ['width', 'height'];\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {{ [x: string]: string }} attributes\n * @returns {void}\n */\nexport function set_attributes(node, attributes) {\n\t// @ts-ignore\n\tconst descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n\tfor (const key in attributes) {\n\t\tif (attributes[key] == null) {\n\t\t\tnode.removeAttribute(key);\n\t\t} else if (key === 'style') {\n\t\t\tnode.style.cssText = attributes[key];\n\t\t} else if (key === '__value') {\n\t\t\t/** @type {any} */ (node).value = node[key] = attributes[key];\n\t\t} else if (\n\t\t\tdescriptors[key] &&\n\t\t\tdescriptors[key].set &&\n\t\t\talways_set_through_set_attribute.indexOf(key) === -1\n\t\t) {\n\t\t\tnode[key] = attributes[key];\n\t\t} else {\n\t\t\tattr(node, key, attributes[key]);\n\t\t}\n\t}\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {{ [x: string]: string }} attributes\n * @returns {void}\n */\nexport function set_svg_attributes(node, attributes) {\n\tfor (const key in attributes) {\n\t\tattr(node, key, attributes[key]);\n\t}\n}\n\n/**\n * @param {Record<string, unknown>} data_map\n * @returns {void}\n */\nexport function set_custom_element_data_map(node, data_map) {\n\tObject.keys(data_map).forEach((key) => {\n\t\tset_custom_element_data(node, key, data_map[key]);\n\t});\n}\n\n/**\n * @returns {void} */\nexport function set_custom_element_data(node, prop, value) {\n\tconst lower = prop.toLowerCase(); // for backwards compatibility with existing behavior we do lowercase first\n\tif (lower in node) {\n\t\tnode[lower] = typeof node[lower] === 'boolean' && value === '' ? true : value;\n\t} else if (prop in node) {\n\t\tnode[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n\t} else {\n\t\tattr(node, prop, value);\n\t}\n}\n\n/**\n * @param {string} tag\n */\nexport function set_dynamic_element_data(tag) {\n\treturn /-/.test(tag) ? set_custom_element_data_map : set_attributes;\n}\n\n/**\n * @returns {void}\n */\nexport function xlink_attr(node, attribute, value) {\n\tnode.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\n\n/**\n * @param {HTMLElement} node\n * @returns {string}\n */\nexport function get_svelte_dataset(node) {\n\treturn node.dataset.svelteH;\n}\n\n/**\n * @returns {unknown[]} */\nexport function get_binding_group_value(group, __value, checked) {\n\tconst value = new Set();\n\tfor (let i = 0; i < group.length; i += 1) {\n\t\tif (group[i].checked) value.add(group[i].__value);\n\t}\n\tif (!checked) {\n\t\tvalue.delete(__value);\n\t}\n\treturn Array.from(value);\n}\n\n/**\n * @param {HTMLInputElement[]} group\n * @returns {{ p(...inputs: HTMLInputElement[]): void; r(): void; }}\n */\nexport function init_binding_group(group) {\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _inputs;\n\treturn {\n\t\t/* push */ p(...inputs) {\n\t\t\t_inputs = inputs;\n\t\t\t_inputs.forEach((input) => group.push(input));\n\t\t},\n\t\t/* remove */ r() {\n\t\t\t_inputs.forEach((input) => group.splice(group.indexOf(input), 1));\n\t\t}\n\t};\n}\n\n/**\n * @param {number[]} indexes\n * @returns {{ u(new_indexes: number[]): void; p(...inputs: HTMLInputElement[]): void; r: () => void; }}\n */\nexport function init_binding_group_dynamic(group, indexes) {\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _group = get_binding_group(group);\n\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _inputs;\n\n\tfunction get_binding_group(group) {\n\t\tfor (let i = 0; i < indexes.length; i++) {\n\t\t\tgroup = group[indexes[i]] = group[indexes[i]] || [];\n\t\t}\n\t\treturn group;\n\t}\n\n\t/**\n\t * @returns {void} */\n\tfunction push() {\n\t\t_inputs.forEach((input) => _group.push(input));\n\t}\n\n\t/**\n\t * @returns {void} */\n\tfunction remove() {\n\t\t_inputs.forEach((input) => _group.splice(_group.indexOf(input), 1));\n\t}\n\treturn {\n\t\t/* update */ u(new_indexes) {\n\t\t\tindexes = new_indexes;\n\t\t\tconst new_group = get_binding_group(group);\n\t\t\tif (new_group !== _group) {\n\t\t\t\tremove();\n\t\t\t\t_group = new_group;\n\t\t\t\tpush();\n\t\t\t}\n\t\t},\n\t\t/* push */ p(...inputs) {\n\t\t\t_inputs = inputs;\n\t\t\tpush();\n\t\t},\n\t\t/* remove */ r: remove\n\t};\n}\n\n/** @returns {number} */\nexport function to_number(value) {\n\treturn value === '' ? null : +value;\n}\n\n/** @returns {any[]} */\nexport function time_ranges_to_array(ranges) {\n\tconst array = [];\n\tfor (let i = 0; i < ranges.length; i += 1) {\n\t\tarray.push({ start: ranges.start(i), end: ranges.end(i) });\n\t}\n\treturn array;\n}\n\n/**\n * @param {Element} element\n * @returns {ChildNode[]}\n */\nexport function children(element) {\n\treturn Array.from(element.childNodes);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {void}\n */\nfunction init_claim_info(nodes) {\n\tif (nodes.claim_info === undefined) {\n\t\tnodes.claim_info = { last_index: 0, total_claimed: 0 };\n\t}\n}\n\n/**\n * @template {ChildNodeEx} R\n * @param {ChildNodeArray} nodes\n * @param {(node: ChildNodeEx) => node is R} predicate\n * @param {(node: ChildNodeEx) => ChildNodeEx | undefined} process_node\n * @param {() => R} create_node\n * @param {boolean} dont_update_last_index\n * @returns {R}\n */\nfunction claim_node(nodes, predicate, process_node, create_node, dont_update_last_index = false) {\n\t// Try to find nodes in an order such that we lengthen the longest increasing subsequence\n\tinit_claim_info(nodes);\n\tconst result_node = (() => {\n\t\t// We first try to find an element after the previous one\n\t\tfor (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n\t\t\tconst node = nodes[i];\n\t\t\tif (predicate(node)) {\n\t\t\t\tconst replacement = process_node(node);\n\t\t\t\tif (replacement === undefined) {\n\t\t\t\t\tnodes.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\tnodes[i] = replacement;\n\t\t\t\t}\n\t\t\t\tif (!dont_update_last_index) {\n\t\t\t\t\tnodes.claim_info.last_index = i;\n\t\t\t\t}\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\t// Otherwise, we try to find one before\n\t\t// We iterate in reverse so that we don't go too far back\n\t\tfor (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n\t\t\tconst node = nodes[i];\n\t\t\tif (predicate(node)) {\n\t\t\t\tconst replacement = process_node(node);\n\t\t\t\tif (replacement === undefined) {\n\t\t\t\t\tnodes.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\tnodes[i] = replacement;\n\t\t\t\t}\n\t\t\t\tif (!dont_update_last_index) {\n\t\t\t\t\tnodes.claim_info.last_index = i;\n\t\t\t\t} else if (replacement === undefined) {\n\t\t\t\t\t// Since we spliced before the last_index, we decrease it\n\t\t\t\t\tnodes.claim_info.last_index--;\n\t\t\t\t}\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\t// If we can't find any matching node, we create a new one\n\t\treturn create_node();\n\t})();\n\tresult_node.claim_order = nodes.claim_info.total_claimed;\n\tnodes.claim_info.total_claimed += 1;\n\treturn result_node;\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @param {(name: string) => Element | SVGElement} create_element\n * @returns {Element | SVGElement}\n */\nfunction claim_element_base(nodes, name, attributes, create_element) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Element | SVGElement} */\n\t\t(node) => node.nodeName === name,\n\t\t/** @param {Element} node */\n\t\t(node) => {\n\t\t\tconst remove = [];\n\t\t\tfor (let j = 0; j < node.attributes.length; j++) {\n\t\t\t\tconst attribute = node.attributes[j];\n\t\t\t\tif (!attributes[attribute.name]) {\n\t\t\t\t\tremove.push(attribute.name);\n\t\t\t\t}\n\t\t\t}\n\t\t\tremove.forEach((v) => node.removeAttribute(v));\n\t\t\treturn undefined;\n\t\t},\n\t\t() => create_element(name)\n\t);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @returns {Element | SVGElement}\n */\nexport function claim_element(nodes, name, attributes) {\n\treturn claim_element_base(nodes, name, attributes, element);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @returns {Element | SVGElement}\n */\nexport function claim_svg_element(nodes, name, attributes) {\n\treturn claim_element_base(nodes, name, attributes, svg_element);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {Text}\n */\nexport function claim_text(nodes, data) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Text} */\n\t\t(node) => node.nodeType === 3,\n\t\t/** @param {Text} node */\n\t\t(node) => {\n\t\t\tconst data_str = '' + data;\n\t\t\tif (node.data.startsWith(data_str)) {\n\t\t\t\tif (node.data.length !== data_str.length) {\n\t\t\t\t\treturn node.splitText(data_str.length);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnode.data = data_str;\n\t\t\t}\n\t\t},\n\t\t() => text(data),\n\t\ttrue // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n\t);\n}\n\n/**\n * @returns {Text} */\nexport function claim_space(nodes) {\n\treturn claim_text(nodes, ' ');\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {Comment}\n */\nexport function claim_comment(nodes, data) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Comment} */\n\t\t(node) => node.nodeType === 8,\n\t\t/** @param {Comment} node */\n\t\t(node) => {\n\t\t\tnode.data = '' + data;\n\t\t\treturn undefined;\n\t\t},\n\t\t() => comment(data),\n\t\ttrue\n\t);\n}\n\nfunction get_comment_idx(nodes, text, start) {\n\tfor (let i = start; i < nodes.length; i += 1) {\n\t\tconst node = nodes[i];\n\t\tif (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n}\n\n/**\n * @param {boolean} is_svg\n * @returns {HtmlTagHydration}\n */\nexport function claim_html_tag(nodes, is_svg) {\n\t// find html opening tag\n\tconst start_index = get_comment_idx(nodes, 'HTML_TAG_START', 0);\n\tconst end_index = get_comment_idx(nodes, 'HTML_TAG_END', start_index + 1);\n\tif (start_index === -1 || end_index === -1) {\n\t\treturn new HtmlTagHydration(is_svg);\n\t}\n\n\tinit_claim_info(nodes);\n\tconst html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n\tdetach(html_tag_nodes[0]);\n\tdetach(html_tag_nodes[html_tag_nodes.length - 1]);\n\tconst claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n\tif (claimed_nodes.length === 0) {\n\t\treturn new HtmlTagHydration(is_svg);\n\t}\n\tfor (const n of claimed_nodes) {\n\t\tn.claim_order = nodes.claim_info.total_claimed;\n\t\tnodes.claim_info.total_claimed += 1;\n\t}\n\treturn new HtmlTagHydration(is_svg, claimed_nodes);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @returns {void}\n */\nexport function set_data(text, data) {\n\tdata = '' + data;\n\tif (text.data === data) return;\n\ttext.data = /** @type {string} */ (data);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @returns {void}\n */\nexport function set_data_contenteditable(text, data) {\n\tdata = '' + data;\n\tif (text.wholeText === data) return;\n\ttext.data = /** @type {string} */ (data);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @param {string} attr_value\n * @returns {void}\n */\nexport function set_data_maybe_contenteditable(text, data, attr_value) {\n\tif (~contenteditable_truthy_values.indexOf(attr_value)) {\n\t\tset_data_contenteditable(text, data);\n\t} else {\n\t\tset_data(text, data);\n\t}\n}\n\n/**\n * @returns {void} */\nexport function set_input_value(input, value) {\n\tinput.value = value == null ? '' : value;\n}\n\n/**\n * @returns {void} */\nexport function set_input_type(input, type) {\n\ttry {\n\t\tinput.type = type;\n\t} catch (e) {\n\t\t// do nothing\n\t}\n}\n\n/**\n * @returns {void} */\nexport function set_style(node, key, value, important) {\n\tif (value == null) {\n\t\tnode.style.removeProperty(key);\n\t} else {\n\t\tnode.style.setProperty(key, value, important ? 'important' : '');\n\t}\n}\n\n/**\n * @returns {void} */\nexport function select_option(select, value, mounting) {\n\tfor (let i = 0; i < select.options.length; i += 1) {\n\t\tconst option = select.options[i];\n\t\tif (option.__value === value) {\n\t\t\toption.selected = true;\n\t\t\treturn;\n\t\t}\n\t}\n\tif (!mounting || value !== undefined) {\n\t\tselect.selectedIndex = -1; // no option should be selected\n\t}\n}\n\n/**\n * @returns {void} */\nexport function select_options(select, value) {\n\tfor (let i = 0; i < select.options.length; i += 1) {\n\t\tconst option = select.options[i];\n\t\toption.selected = ~value.indexOf(option.__value);\n\t}\n}\n\nexport function select_value(select) {\n\tconst selected_option = select.querySelector(':checked');\n\treturn selected_option && selected_option.__value;\n}\n\nexport function select_multiple_value(select) {\n\treturn [].map.call(select.querySelectorAll(':checked'), (option) => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\n\n/**\n * @type {boolean} */\nlet crossorigin;\n\n/**\n * @returns {boolean} */\nexport function is_crossorigin() {\n\tif (crossorigin === undefined) {\n\t\tcrossorigin = false;\n\t\ttry {\n\t\t\tif (typeof window !== 'undefined' && window.parent) {\n\t\t\t\tvoid window.parent.document;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tcrossorigin = true;\n\t\t}\n\t}\n\treturn crossorigin;\n}\n\n/**\n * @param {HTMLElement} node\n * @param {() => void} fn\n * @returns {() => void}\n */\nexport function add_iframe_resize_listener(node, fn) {\n\tconst computed_style = getComputedStyle(node);\n\tif (computed_style.position === 'static') {\n\t\tnode.style.position = 'relative';\n\t}\n\tconst iframe = element('iframe');\n\tiframe.setAttribute(\n\t\t'style',\n\t\t'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n\t\t\t'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;'\n\t);\n\tiframe.setAttribute('aria-hidden', 'true');\n\tiframe.tabIndex = -1;\n\tconst crossorigin = is_crossorigin();\n\n\t/**\n\t * @type {() => void}\n\t */\n\tlet unsubscribe;\n\tif (crossorigin) {\n\t\tiframe.src = \"data:text/html,<script>onresize=function(){parent.postMessage(0,'*')}</script>\";\n\t\tunsubscribe = listen(\n\t\t\twindow,\n\t\t\t'message',\n\t\t\t/** @param {MessageEvent} event */ (event) => {\n\t\t\t\tif (event.source === iframe.contentWindow) fn();\n\t\t\t}\n\t\t);\n\t} else {\n\t\tiframe.src = 'about:blank';\n\t\tiframe.onload = () => {\n\t\t\tunsubscribe = listen(iframe.contentWindow, 'resize', fn);\n\t\t\t// make sure an initial resize event is fired _after_ the iframe is loaded (which is asynchronous)\n\t\t\t// see https://github.com/sveltejs/svelte/issues/4233\n\t\t\tfn();\n\t\t};\n\t}\n\tappend(node, iframe);\n\treturn () => {\n\t\tif (crossorigin) {\n\t\t\tunsubscribe();\n\t\t} else if (unsubscribe && iframe.contentWindow) {\n\t\t\tunsubscribe();\n\t\t}\n\t\tdetach(iframe);\n\t};\n}\nexport const resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'content-box'\n});\nexport const resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'border-box'\n});\nexport const resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton(\n\t{ box: 'device-pixel-content-box' }\n);\nexport { ResizeObserverSingleton };\n\n/**\n * @returns {void} */\nexport function toggle_class(element, name, toggle) {\n\t// The `!!` is required because an `undefined` flag means flipping the current state.\n\telement.classList.toggle(name, !!toggle);\n}\n\n/**\n * @template T\n * @param {string} type\n * @param {T} [detail]\n * @param {{ bubbles?: boolean, cancelable?: boolean }} [options]\n * @returns {CustomEvent<T>}\n */\nexport function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n\treturn new CustomEvent(type, { detail, bubbles, cancelable });\n}\n\n/**\n * @param {string} selector\n * @param {HTMLElement} parent\n * @returns {ChildNodeArray}\n */\nexport function query_selector_all(selector, parent = document.body) {\n\treturn Array.from(parent.querySelectorAll(selector));\n}\n\n/**\n * @param {string} nodeId\n * @param {HTMLElement} head\n * @returns {any[]}\n */\nexport function head_selector(nodeId, head) {\n\tconst result = [];\n\tlet started = 0;\n\tfor (const node of head.childNodes) {\n\t\tif (node.nodeType === 8 /* comment node */) {\n\t\t\tconst comment = node.textContent.trim();\n\t\t\tif (comment === `HEAD_${nodeId}_END`) {\n\t\t\t\tstarted -= 1;\n\t\t\t\tresult.push(node);\n\t\t\t} else if (comment === `HEAD_${nodeId}_START`) {\n\t\t\t\tstarted += 1;\n\t\t\t\tresult.push(node);\n\t\t\t}\n\t\t} else if (started > 0) {\n\t\t\tresult.push(node);\n\t\t}\n\t}\n\treturn result;\n}\n/** */\nexport class HtmlTag {\n\t/**\n\t * @private\n\t * @default false\n\t */\n\tis_svg = false;\n\t/** parent for creating node */\n\te = undefined;\n\t/** html tag nodes */\n\tn = undefined;\n\t/** target */\n\tt = undefined;\n\t/** anchor */\n\ta = undefined;\n\tconstructor(is_svg = false) {\n\t\tthis.is_svg = is_svg;\n\t\tthis.e = this.n = null;\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tc(html) {\n\t\tthis.h(html);\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @param {HTMLElement | SVGElement} target\n\t * @param {HTMLElement | SVGElement} anchor\n\t * @returns {void}\n\t */\n\tm(html, target, anchor = null) {\n\t\tif (!this.e) {\n\t\t\tif (this.is_svg)\n\t\t\t\tthis.e = svg_element(/** @type {keyof SVGElementTagNameMap} */ (target.nodeName));\n\t\t\t/** #7364  target for <template> may be provided as #document-fragment(11) */ else\n\t\t\t\tthis.e = element(\n\t\t\t\t\t/** @type {keyof HTMLElementTagNameMap} */ (\n\t\t\t\t\t\ttarget.nodeType === 11 ? 'TEMPLATE' : target.nodeName\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\tthis.t =\n\t\t\t\ttarget.tagName !== 'TEMPLATE'\n\t\t\t\t\t? target\n\t\t\t\t\t: /** @type {HTMLTemplateElement} */ (target).content;\n\t\t\tthis.c(html);\n\t\t}\n\t\tthis.i(anchor);\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\th(html) {\n\t\tthis.e.innerHTML = html;\n\t\tthis.n = Array.from(\n\t\t\tthis.e.nodeName === 'TEMPLATE' ? this.e.content.childNodes : this.e.childNodes\n\t\t);\n\t}\n\n\t/**\n\t * @returns {void} */\n\ti(anchor) {\n\t\tfor (let i = 0; i < this.n.length; i += 1) {\n\t\t\tinsert(this.t, this.n[i], anchor);\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tp(html) {\n\t\tthis.d();\n\t\tthis.h(html);\n\t\tthis.i(this.a);\n\t}\n\n\t/**\n\t * @returns {void} */\n\td() {\n\t\tthis.n.forEach(detach);\n\t}\n}\n\nexport class HtmlTagHydration extends HtmlTag {\n\t/** @type {Element[]} hydration claimed nodes */\n\tl = undefined;\n\n\tconstructor(is_svg = false, claimed_nodes) {\n\t\tsuper(is_svg);\n\t\tthis.e = this.n = null;\n\t\tthis.l = claimed_nodes;\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tc(html) {\n\t\tif (this.l) {\n\t\t\tthis.n = this.l;\n\t\t} else {\n\t\t\tsuper.c(html);\n\t\t}\n\t}\n\n\t/**\n\t * @returns {void} */\n\ti(anchor) {\n\t\tfor (let i = 0; i < this.n.length; i += 1) {\n\t\t\tinsert_hydration(this.t, this.n[i], anchor);\n\t\t}\n\t}\n}\n\n/**\n * @param {NamedNodeMap} attributes\n * @returns {{}}\n */\nexport function attribute_to_object(attributes) {\n\tconst result = {};\n\tfor (const attribute of attributes) {\n\t\tresult[attribute.name] = attribute.value;\n\t}\n\treturn result;\n}\n\nconst escaped = {\n\t'\"': '&quot;',\n\t'&': '&amp;',\n\t'<': '&lt;'\n};\n\nconst regex_attribute_characters_to_escape = /[\"&<]/g;\n\n/**\n * Note that the attribute itself should be surrounded in double quotes\n * @param {any} attribute\n */\nfunction escape_attribute(attribute) {\n\treturn String(attribute).replace(regex_attribute_characters_to_escape, (match) => escaped[match]);\n}\n\n/**\n * @param {Record<string, string>} attributes\n */\nexport function stringify_spread(attributes) {\n\tlet str = ' ';\n\tfor (const key in attributes) {\n\t\tif (attributes[key] != null) {\n\t\t\tstr += `${key}=\"${escape_attribute(attributes[key])}\" `;\n\t\t}\n\t}\n\n\treturn str;\n}\n\n/**\n * @param {HTMLElement} element\n * @returns {{}}\n */\nexport function get_custom_elements_slots(element) {\n\tconst result = {};\n\telement.childNodes.forEach(\n\t\t/** @param {Element} node */ (node) => {\n\t\t\tresult[node.slot || 'default'] = true;\n\t\t}\n\t);\n\treturn result;\n}\n\nexport function construct_svelte_component(component, props) {\n\treturn new component(props);\n}\n\n/**\n * @typedef {Node & {\n * \tclaim_order?: number;\n * \thydrate_init?: true;\n * \tactual_end_child?: NodeEx;\n * \tchildNodes: NodeListOf<NodeEx>;\n * }} NodeEx\n */\n\n/** @typedef {ChildNode & NodeEx} ChildNodeEx */\n\n/** @typedef {NodeEx & { claim_order: number }} NodeEx2 */\n\n/**\n * @typedef {ChildNodeEx[] & {\n * \tclaim_info?: {\n * \t\tlast_index: number;\n * \t\ttotal_claimed: number;\n * \t};\n * }} ChildNodeArray\n */\n","import { custom_event } from './dom.js';\n\nexport let current_component;\n\n/** @returns {void} */\nexport function set_current_component(component) {\n\tcurrent_component = component;\n}\n\nexport function get_current_component() {\n\tif (!current_component) throw new Error('Function called outside component initialization');\n\treturn current_component;\n}\n\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`\n *\n * https://svelte.dev/docs/svelte#beforeupdate\n * @param {() => any} fn\n * @returns {void}\n */\nexport function beforeUpdate(fn) {\n\tget_current_component().$$.before_update.push(fn);\n}\n\n/**\n * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.\n * It must be called during the component's initialisation (but doesn't need to live *inside* the component;\n * it can be called from an external module).\n *\n * If a function is returned _synchronously_ from `onMount`, it will be called when the component is unmounted.\n *\n * `onMount` does not run inside a [server-side component](https://svelte.dev/docs#run-time-server-side-component-api).\n *\n * https://svelte.dev/docs/svelte#onmount\n * @template T\n * @param {() => import('./private.js').NotFunction<T> | Promise<import('./private.js').NotFunction<T>> | (() => any)} fn\n * @returns {void}\n */\nexport function onMount(fn) {\n\tget_current_component().$$.on_mount.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`\n *\n * https://svelte.dev/docs/svelte#afterupdate\n * @param {() => any} fn\n * @returns {void}\n */\nexport function afterUpdate(fn) {\n\tget_current_component().$$.after_update.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * https://svelte.dev/docs/svelte#ondestroy\n * @param {() => any} fn\n * @returns {void}\n */\nexport function onDestroy(fn) {\n\tget_current_component().$$.on_destroy.push(fn);\n}\n\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs#template-syntax-component-directives-on-eventname).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:\n * ```ts\n * const dispatch = createEventDispatcher<{\n *  loaded: never; // does not take a detail argument\n *  change: string; // takes a detail argument of type string, which is required\n *  optional: number | null; // takes an optional detail argument of type number\n * }>();\n * ```\n *\n * https://svelte.dev/docs/svelte#createeventdispatcher\n * @template {Record<string, any>} [EventMap=any]\n * @returns {import('./public.js').EventDispatcher<EventMap>}\n */\nexport function createEventDispatcher() {\n\tconst component = get_current_component();\n\treturn (type, detail, { cancelable = false } = {}) => {\n\t\tconst callbacks = component.$$.callbacks[type];\n\t\tif (callbacks) {\n\t\t\t// TODO are there situations where events could be dispatched\n\t\t\t// in a server (non-DOM) environment?\n\t\t\tconst event = custom_event(/** @type {string} */ (type), detail, { cancelable });\n\t\t\tcallbacks.slice().forEach((fn) => {\n\t\t\t\tfn.call(component, event);\n\t\t\t});\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\t\treturn true;\n\t};\n}\n\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#setcontext\n * @template T\n * @param {any} key\n * @param {T} context\n * @returns {T}\n */\nexport function setContext(key, context) {\n\tget_current_component().$$.context.set(key, context);\n\treturn context;\n}\n\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#getcontext\n * @template T\n * @param {any} key\n * @returns {T}\n */\nexport function getContext(key) {\n\treturn get_current_component().$$.context.get(key);\n}\n\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * https://svelte.dev/docs/svelte#getallcontexts\n * @template {Map<any, any>} [T=Map<any, any>]\n * @returns {T}\n */\nexport function getAllContexts() {\n\treturn get_current_component().$$.context;\n}\n\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#hascontext\n * @param {any} key\n * @returns {boolean}\n */\nexport function hasContext(key) {\n\treturn get_current_component().$$.context.has(key);\n}\n\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\n/**\n * @param component\n * @param event\n * @returns {void}\n */\nexport function bubble(component, event) {\n\tconst callbacks = component.$$.callbacks[event.type];\n\tif (callbacks) {\n\t\t// @ts-ignore\n\t\tcallbacks.slice().forEach((fn) => fn.call(this, event));\n\t}\n}\n","import { run_all } from './utils.js';\nimport { current_component, set_current_component } from './lifecycle.js';\n\nexport const dirty_components = [];\nexport const intros = { enabled: false };\nexport const binding_callbacks = [];\n\nlet render_callbacks = [];\n\nconst flush_callbacks = [];\n\nconst resolved_promise = /* @__PURE__ */ Promise.resolve();\n\nlet update_scheduled = false;\n\n/** @returns {void} */\nexport function schedule_update() {\n\tif (!update_scheduled) {\n\t\tupdate_scheduled = true;\n\t\tresolved_promise.then(flush);\n\t}\n}\n\n/** @returns {Promise<void>} */\nexport function tick() {\n\tschedule_update();\n\treturn resolved_promise;\n}\n\n/** @returns {void} */\nexport function add_render_callback(fn) {\n\trender_callbacks.push(fn);\n}\n\n/** @returns {void} */\nexport function add_flush_callback(fn) {\n\tflush_callbacks.push(fn);\n}\n\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n//    for afterUpdates called during the initial onMount, which are called in\n//    reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n//    dirty_components array and will cause a reentrant call to flush(). Because\n//    the flush index is kept outside the function, the reentrant call will pick\n//    up where the earlier call left off and go through all dirty components. The\n//    current_component value is saved and restored so that the reentrant call will\n//    not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n//    callback called a second time; the seen_callbacks set, outside the flush()\n//    function, guarantees this behavior.\nconst seen_callbacks = new Set();\n\nlet flushidx = 0; // Do *not* move this inside the flush() function\n\n/** @returns {void} */\nexport function flush() {\n\t// Do not reenter flush while dirty components are updated, as this can\n\t// result in an infinite loop. Instead, let the inner flush handle it.\n\t// Reentrancy is ok afterwards for bindings etc.\n\tif (flushidx !== 0) {\n\t\treturn;\n\t}\n\tconst saved_component = current_component;\n\tdo {\n\t\t// first, call beforeUpdate functions\n\t\t// and update components\n\t\ttry {\n\t\t\twhile (flushidx < dirty_components.length) {\n\t\t\t\tconst component = dirty_components[flushidx];\n\t\t\t\tflushidx++;\n\t\t\t\tset_current_component(component);\n\t\t\t\tupdate(component.$$);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// reset dirty state to not end up in a deadlocked state and then rethrow\n\t\t\tdirty_components.length = 0;\n\t\t\tflushidx = 0;\n\t\t\tthrow e;\n\t\t}\n\t\tset_current_component(null);\n\t\tdirty_components.length = 0;\n\t\tflushidx = 0;\n\t\twhile (binding_callbacks.length) binding_callbacks.pop()();\n\t\t// then, once components are updated, call\n\t\t// afterUpdate functions. This may cause\n\t\t// subsequent updates...\n\t\tfor (let i = 0; i < render_callbacks.length; i += 1) {\n\t\t\tconst callback = render_callbacks[i];\n\t\t\tif (!seen_callbacks.has(callback)) {\n\t\t\t\t// ...so guard against infinite loops\n\t\t\t\tseen_callbacks.add(callback);\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t\trender_callbacks.length = 0;\n\t} while (dirty_components.length);\n\twhile (flush_callbacks.length) {\n\t\tflush_callbacks.pop()();\n\t}\n\tupdate_scheduled = false;\n\tseen_callbacks.clear();\n\tset_current_component(saved_component);\n}\n\n/** @returns {void} */\nfunction update($$) {\n\tif ($$.fragment !== null) {\n\t\t$$.update();\n\t\trun_all($$.before_update);\n\t\tconst dirty = $$.dirty;\n\t\t$$.dirty = [-1];\n\t\t$$.fragment && $$.fragment.p($$.ctx, dirty);\n\t\t$$.after_update.forEach(add_render_callback);\n\t}\n}\n\n/**\n * Useful for example to execute remaining `afterUpdate` callbacks before executing `destroy`.\n * @param {Function[]} fns\n * @returns {void}\n */\nexport function flush_render_callbacks(fns) {\n\tconst filtered = [];\n\tconst targets = [];\n\trender_callbacks.forEach((c) => (fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c)));\n\ttargets.forEach((c) => c());\n\trender_callbacks = filtered;\n}\n","import { transition_in, transition_out } from './transitions.js';\nimport { run_all } from './utils.js';\n\n// general each functions:\n\nexport function ensure_array_like(array_like_or_iterator) {\n\treturn array_like_or_iterator?.length !== undefined\n\t\t? array_like_or_iterator\n\t\t: Array.from(array_like_or_iterator);\n}\n\n// keyed each functions:\n\n/** @returns {void} */\nexport function destroy_block(block, lookup) {\n\tblock.d(1);\n\tlookup.delete(block.key);\n}\n\n/** @returns {void} */\nexport function outro_and_destroy_block(block, lookup) {\n\ttransition_out(block, 1, 1, () => {\n\t\tlookup.delete(block.key);\n\t});\n}\n\n/** @returns {void} */\nexport function fix_and_destroy_block(block, lookup) {\n\tblock.f();\n\tdestroy_block(block, lookup);\n}\n\n/** @returns {void} */\nexport function fix_and_outro_and_destroy_block(block, lookup) {\n\tblock.f();\n\toutro_and_destroy_block(block, lookup);\n}\n\n/** @returns {any[]} */\nexport function update_keyed_each(\n\told_blocks,\n\tdirty,\n\tget_key,\n\tdynamic,\n\tctx,\n\tlist,\n\tlookup,\n\tnode,\n\tdestroy,\n\tcreate_each_block,\n\tnext,\n\tget_context\n) {\n\tlet o = old_blocks.length;\n\tlet n = list.length;\n\tlet i = o;\n\tconst old_indexes = {};\n\twhile (i--) old_indexes[old_blocks[i].key] = i;\n\tconst new_blocks = [];\n\tconst new_lookup = new Map();\n\tconst deltas = new Map();\n\tconst updates = [];\n\ti = n;\n\twhile (i--) {\n\t\tconst child_ctx = get_context(ctx, list, i);\n\t\tconst key = get_key(child_ctx);\n\t\tlet block = lookup.get(key);\n\t\tif (!block) {\n\t\t\tblock = create_each_block(key, child_ctx);\n\t\t\tblock.c();\n\t\t} else if (dynamic) {\n\t\t\t// defer updates until all the DOM shuffling is done\n\t\t\tupdates.push(() => block.p(child_ctx, dirty));\n\t\t}\n\t\tnew_lookup.set(key, (new_blocks[i] = block));\n\t\tif (key in old_indexes) deltas.set(key, Math.abs(i - old_indexes[key]));\n\t}\n\tconst will_move = new Set();\n\tconst did_move = new Set();\n\t/** @returns {void} */\n\tfunction insert(block) {\n\t\ttransition_in(block, 1);\n\t\tblock.m(node, next);\n\t\tlookup.set(block.key, block);\n\t\tnext = block.first;\n\t\tn--;\n\t}\n\twhile (o && n) {\n\t\tconst new_block = new_blocks[n - 1];\n\t\tconst old_block = old_blocks[o - 1];\n\t\tconst new_key = new_block.key;\n\t\tconst old_key = old_block.key;\n\t\tif (new_block === old_block) {\n\t\t\t// do nothing\n\t\t\tnext = new_block.first;\n\t\t\to--;\n\t\t\tn--;\n\t\t} else if (!new_lookup.has(old_key)) {\n\t\t\t// remove old block\n\t\t\tdestroy(old_block, lookup);\n\t\t\to--;\n\t\t} else if (!lookup.has(new_key) || will_move.has(new_key)) {\n\t\t\tinsert(new_block);\n\t\t} else if (did_move.has(old_key)) {\n\t\t\to--;\n\t\t} else if (deltas.get(new_key) > deltas.get(old_key)) {\n\t\t\tdid_move.add(new_key);\n\t\t\tinsert(new_block);\n\t\t} else {\n\t\t\twill_move.add(old_key);\n\t\t\to--;\n\t\t}\n\t}\n\twhile (o--) {\n\t\tconst old_block = old_blocks[o];\n\t\tif (!new_lookup.has(old_block.key)) destroy(old_block, lookup);\n\t}\n\twhile (n) insert(new_blocks[n - 1]);\n\trun_all(updates);\n\treturn new_blocks;\n}\n\n/** @returns {void} */\nexport function validate_each_keys(ctx, list, get_context, get_key) {\n\tconst keys = new Map();\n\tfor (let i = 0; i < list.length; i++) {\n\t\tconst key = get_key(get_context(ctx, list, i));\n\t\tif (keys.has(key)) {\n\t\t\tlet value = '';\n\t\t\ttry {\n\t\t\t\tvalue = `with value '${String(key)}' `;\n\t\t\t} catch (e) {\n\t\t\t\t// can't stringify\n\t\t\t}\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot have duplicate keys in a keyed each: Keys at index ${keys.get(\n\t\t\t\t\tkey\n\t\t\t\t)} and ${i} ${value}are duplicates`\n\t\t\t);\n\t\t}\n\t\tkeys.set(key, i);\n\t}\n}\n","const _boolean_attributes = /** @type {const} */ ([\n\t'allowfullscreen',\n\t'allowpaymentrequest',\n\t'async',\n\t'autofocus',\n\t'autoplay',\n\t'checked',\n\t'controls',\n\t'default',\n\t'defer',\n\t'disabled',\n\t'formnovalidate',\n\t'hidden',\n\t'inert',\n\t'ismap',\n\t'loop',\n\t'multiple',\n\t'muted',\n\t'nomodule',\n\t'novalidate',\n\t'open',\n\t'playsinline',\n\t'readonly',\n\t'required',\n\t'reversed',\n\t'selected'\n]);\n\n/**\n * List of HTML boolean attributes (e.g. `<input disabled>`).\n * Source: https://html.spec.whatwg.org/multipage/indices.html\n *\n * @type {Set<string>}\n */\nexport const boolean_attributes = new Set([..._boolean_attributes]);\n\n/** @typedef {typeof _boolean_attributes[number]} BooleanAttributes */\n","const ATTR_REGEX = /[&\"<]/g;\nconst CONTENT_REGEX = /[&<]/g;\n\n/**\n * Note: this method is performance sensitive and has been optimized\n * https://github.com/sveltejs/svelte/pull/5701\n * @param {unknown} value\n * @returns {string}\n */\nexport function escape(value, is_attr = false) {\n\tconst str = String(value);\n\tconst pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX;\n\tpattern.lastIndex = 0;\n\tlet escaped = '';\n\tlet last = 0;\n\twhile (pattern.test(str)) {\n\t\tconst i = pattern.lastIndex - 1;\n\t\tconst ch = str[i];\n\t\tescaped += str.substring(last, i) + (ch === '&' ? '&amp;' : ch === '\"' ? '&quot;' : '&lt;');\n\t\tlast = i + 1;\n\t}\n\treturn escaped + str.substring(last);\n}\n","/** regex of all html void element names */\nconst void_element_names =\n\t/^(?:area|base|br|col|command|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/;\n\n/** regex of all html element names. svg and math are omitted because they belong to the svg elements namespace */\nconst html_element_names =\n\t/^(?:a|abbr|address|area|article|aside|audio|b|base|bdi|bdo|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|data|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|h1|h2|h3|h4|h5|h6|head|header|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|main|map|mark|meta|meter|nav|noscript|object|ol|optgroup|option|output|p|param|picture|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strong|style|sub|summary|sup|table|tbody|td|template|textarea|tfoot|th|thead|time|title|tr|track|u|ul|var|video|wbr)$/;\n\n/** regex of all svg element names */\nconst svg =\n\t/^(?:altGlyph|altGlyphDef|altGlyphItem|animate|animateColor|animateMotion|animateTransform|circle|clipPath|color-profile|cursor|defs|desc|discard|ellipse|feBlend|feColorMatrix|feComponentTransfer|feComposite|feConvolveMatrix|feDiffuseLighting|feDisplacementMap|feDistantLight|feDropShadow|feFlood|feFuncA|feFuncB|feFuncG|feFuncR|feGaussianBlur|feImage|feMerge|feMergeNode|feMorphology|feOffset|fePointLight|feSpecularLighting|feSpotLight|feTile|feTurbulence|filter|font|font-face|font-face-format|font-face-name|font-face-src|font-face-uri|foreignObject|g|glyph|glyphRef|hatch|hatchpath|hkern|image|line|linearGradient|marker|mask|mesh|meshgradient|meshpatch|meshrow|metadata|missing-glyph|mpath|path|pattern|polygon|polyline|radialGradient|rect|set|solidcolor|stop|svg|switch|symbol|text|textPath|tref|tspan|unknown|use|view|vkern)$/;\n\n/**\n * @param {string} name\n * @returns {boolean}\n */\nexport function is_void(name) {\n\treturn void_element_names.test(name) || name.toLowerCase() === '!doctype';\n}\n\n/**\n * @param {string} name\n * @returns {boolean}\n */\nexport function is_html(name) {\n\treturn html_element_names.test(name);\n}\n\n/**\n * @param {string} name\n * @returns {boolean}\n */\nexport function is_svg(name) {\n\treturn svg.test(name);\n}\n","import { set_current_component, current_component } from './lifecycle.js';\nimport { run_all, blank_object } from './utils.js';\nimport { boolean_attributes } from '../../shared/boolean_attributes.js';\nimport { ensure_array_like } from './each.js';\nimport { escape } from '../../shared/utils/escape.js';\nexport { is_void } from '../../shared/utils/names.js';\nexport { escape };\n\nexport const invalid_attribute_name_character =\n\t/[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\n\n/** @returns {string} */\nexport function spread(args, attrs_to_add) {\n\tconst attributes = Object.assign({}, ...args);\n\tif (attrs_to_add) {\n\t\tconst classes_to_add = attrs_to_add.classes;\n\t\tconst styles_to_add = attrs_to_add.styles;\n\t\tif (classes_to_add) {\n\t\t\tif (attributes.class == null) {\n\t\t\t\tattributes.class = classes_to_add;\n\t\t\t} else {\n\t\t\t\tattributes.class += ' ' + classes_to_add;\n\t\t\t}\n\t\t}\n\t\tif (styles_to_add) {\n\t\t\tif (attributes.style == null) {\n\t\t\t\tattributes.style = style_object_to_string(styles_to_add);\n\t\t\t} else {\n\t\t\t\tattributes.style = style_object_to_string(\n\t\t\t\t\tmerge_ssr_styles(attributes.style, styles_to_add)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\tlet str = '';\n\tObject.keys(attributes).forEach((name) => {\n\t\tif (invalid_attribute_name_character.test(name)) return;\n\t\tconst value = attributes[name];\n\t\tif (value === true) str += ' ' + name;\n\t\telse if (boolean_attributes.has(name.toLowerCase())) {\n\t\t\tif (value) str += ' ' + name;\n\t\t} else if (value != null) {\n\t\t\tstr += ` ${name}=\"${value}\"`;\n\t\t}\n\t});\n\treturn str;\n}\n\n/** @returns {{}} */\nexport function merge_ssr_styles(style_attribute, style_directive) {\n\tconst style_object = {};\n\tfor (const individual_style of style_attribute.split(';')) {\n\t\tconst colon_index = individual_style.indexOf(':');\n\t\tconst name = individual_style.slice(0, colon_index).trim();\n\t\tconst value = individual_style.slice(colon_index + 1).trim();\n\t\tif (!name) continue;\n\t\tstyle_object[name] = value;\n\t}\n\tfor (const name in style_directive) {\n\t\tconst value = style_directive[name];\n\t\tif (value) {\n\t\t\tstyle_object[name] = value;\n\t\t} else {\n\t\t\tdelete style_object[name];\n\t\t}\n\t}\n\treturn style_object;\n}\n\nexport function escape_attribute_value(value) {\n\t// keep booleans, null, and undefined for the sake of `spread`\n\tconst should_escape = typeof value === 'string' || (value && typeof value === 'object');\n\treturn should_escape ? escape(value, true) : value;\n}\n\n/** @returns {{}} */\nexport function escape_object(obj) {\n\tconst result = {};\n\tfor (const key in obj) {\n\t\tresult[key] = escape_attribute_value(obj[key]);\n\t}\n\treturn result;\n}\n\n/** @returns {string} */\nexport function each(items, fn) {\n\titems = ensure_array_like(items);\n\tlet str = '';\n\tfor (let i = 0; i < items.length; i += 1) {\n\t\tstr += fn(items[i], i);\n\t}\n\treturn str;\n}\n\nexport const missing_component = {\n\t$$render: () => ''\n};\n\nexport function validate_component(component, name) {\n\tif (!component || !component.$$render) {\n\t\tif (name === 'svelte:component') name += ' this={...}';\n\t\tthrow new Error(\n\t\t\t`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules. Otherwise you may need to fix a <${name}>.`\n\t\t);\n\t}\n\treturn component;\n}\n\n/** @returns {string} */\nexport function debug(file, line, column, values) {\n\tconsole.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n\tconsole.log(values); // eslint-disable-line no-console\n\treturn '';\n}\n\nlet on_destroy;\n\n/** @returns {{ render: (props?: {}, { $$slots, context }?: { $$slots?: {}; context?: Map<any, any>; }) => { html: any; css: { code: string; map: any; }; head: string; }; $$render: (result: any, props: any, bindings: any, slots: any, context: any) => any; }} */\nexport function create_ssr_component(fn) {\n\tfunction $$render(result, props, bindings, slots, context) {\n\t\tconst parent_component = current_component;\n\t\tconst $$ = {\n\t\t\ton_destroy,\n\t\t\tcontext: new Map(context || (parent_component ? parent_component.$$.context : [])),\n\t\t\t// these will be immediately discarded\n\t\t\ton_mount: [],\n\t\t\tbefore_update: [],\n\t\t\tafter_update: [],\n\t\t\tcallbacks: blank_object()\n\t\t};\n\t\tset_current_component({ $$ });\n\t\tconst html = fn(result, props, bindings, slots);\n\t\tset_current_component(parent_component);\n\t\treturn html;\n\t}\n\treturn {\n\t\trender: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n\t\t\ton_destroy = [];\n\t\t\tconst result = { title: '', head: '', css: new Set() };\n\t\t\tconst html = $$render(result, props, {}, $$slots, context);\n\t\t\trun_all(on_destroy);\n\t\t\treturn {\n\t\t\t\thtml,\n\t\t\t\tcss: {\n\t\t\t\t\tcode: Array.from(result.css)\n\t\t\t\t\t\t.map((css) => css.code)\n\t\t\t\t\t\t.join('\\n'),\n\t\t\t\t\tmap: null // TODO\n\t\t\t\t},\n\t\t\t\thead: result.title + result.head\n\t\t\t};\n\t\t},\n\t\t$$render\n\t};\n}\n\n/** @returns {string} */\nexport function add_attribute(name, value, boolean) {\n\tif (value == null || (boolean && !value)) return '';\n\tconst assignment = boolean && value === true ? '' : `=\"${escape(value, true)}\"`;\n\treturn ` ${name}${assignment}`;\n}\n\n/** @returns {string} */\nexport function add_classes(classes) {\n\treturn classes ? ` class=\"${classes}\"` : '';\n}\n\n/** @returns {string} */\nfunction style_object_to_string(style_object) {\n\treturn Object.keys(style_object)\n\t\t.filter((key) => style_object[key] != null && style_object[key] !== '')\n\t\t.map((key) => `${key}: ${escape_attribute_value(style_object[key])};`)\n\t\t.join(' ');\n}\n\n/** @returns {string} */\nexport function add_styles(style_object) {\n\tconst styles = style_object_to_string(style_object);\n\treturn styles ? ` style=\"${styles}\"` : '';\n}\n","import {\n\trun_all,\n\tsubscribe,\n\tnoop,\n\tsafe_not_equal,\n\tis_function,\n\tget_store_value\n} from '../internal/index.js';\n\nconst subscriber_queue = [];\n\n/**\n * Creates a `Readable` store that allows reading by subscription.\n *\n * https://svelte.dev/docs/svelte-store#readable\n * @template T\n * @param {T} [value] initial value\n * @param {import('./public.js').StartStopNotifier<T>} [start]\n * @returns {import('./public.js').Readable<T>}\n */\nexport function readable(value, start) {\n\treturn {\n\t\tsubscribe: writable(value, start).subscribe\n\t};\n}\n\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n *\n * https://svelte.dev/docs/svelte-store#writable\n * @template T\n * @param {T} [value] initial value\n * @param {import('./public.js').StartStopNotifier<T>} [start]\n * @returns {import('./public.js').Writable<T>}\n */\nexport function writable(value, start = noop) {\n\t/** @type {import('./public.js').Unsubscriber} */\n\tlet stop;\n\t/** @type {Set<import('./private.js').SubscribeInvalidateTuple<T>>} */\n\tconst subscribers = new Set();\n\t/** @param {T} new_value\n\t * @returns {void}\n\t */\n\tfunction set(new_value) {\n\t\tif (safe_not_equal(value, new_value)) {\n\t\t\tvalue = new_value;\n\t\t\tif (stop) {\n\t\t\t\t// store is ready\n\t\t\t\tconst run_queue = !subscriber_queue.length;\n\t\t\t\tfor (const subscriber of subscribers) {\n\t\t\t\t\tsubscriber[1]();\n\t\t\t\t\tsubscriber_queue.push(subscriber, value);\n\t\t\t\t}\n\t\t\t\tif (run_queue) {\n\t\t\t\t\tfor (let i = 0; i < subscriber_queue.length; i += 2) {\n\t\t\t\t\t\tsubscriber_queue[i][0](subscriber_queue[i + 1]);\n\t\t\t\t\t}\n\t\t\t\t\tsubscriber_queue.length = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {import('./public.js').Updater<T>} fn\n\t * @returns {void}\n\t */\n\tfunction update(fn) {\n\t\tset(fn(value));\n\t}\n\n\t/**\n\t * @param {import('./public.js').Subscriber<T>} run\n\t * @param {import('./private.js').Invalidator<T>} [invalidate]\n\t * @returns {import('./public.js').Unsubscriber}\n\t */\n\tfunction subscribe(run, invalidate = noop) {\n\t\t/** @type {import('./private.js').SubscribeInvalidateTuple<T>} */\n\t\tconst subscriber = [run, invalidate];\n\t\tsubscribers.add(subscriber);\n\t\tif (subscribers.size === 1) {\n\t\t\tstop = start(set, update) || noop;\n\t\t}\n\t\trun(value);\n\t\treturn () => {\n\t\t\tsubscribers.delete(subscriber);\n\t\t\tif (subscribers.size === 0 && stop) {\n\t\t\t\tstop();\n\t\t\t\tstop = null;\n\t\t\t}\n\t\t};\n\t}\n\treturn { set, update, subscribe };\n}\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * https://svelte.dev/docs/svelte-store#derived\n * @template {import('./private.js').Stores} S\n * @template T\n * @overload\n * @param {S} stores - input stores\n * @param {(values: import('./private.js').StoresValues<S>, set: (value: T) => void, update: (fn: import('./public.js').Updater<T>) => void) => import('./public.js').Unsubscriber | void} fn - function callback that aggregates the values\n * @param {T} [initial_value] - initial value\n * @returns {import('./public.js').Readable<T>}\n */\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * https://svelte.dev/docs/svelte-store#derived\n * @template {import('./private.js').Stores} S\n * @template T\n * @overload\n * @param {S} stores - input stores\n * @param {(values: import('./private.js').StoresValues<S>) => T} fn - function callback that aggregates the values\n * @param {T} [initial_value] - initial value\n * @returns {import('./public.js').Readable<T>}\n */\n\n/**\n * @template {import('./private.js').Stores} S\n * @template T\n * @param {S} stores\n * @param {Function} fn\n * @param {T} [initial_value]\n * @returns {import('./public.js').Readable<T>}\n */\nexport function derived(stores, fn, initial_value) {\n\tconst single = !Array.isArray(stores);\n\t/** @type {Array<import('./public.js').Readable<any>>} */\n\tconst stores_array = single ? [stores] : stores;\n\tif (!stores_array.every(Boolean)) {\n\t\tthrow new Error('derived() expects stores as input, got a falsy value');\n\t}\n\tconst auto = fn.length < 2;\n\treturn readable(initial_value, (set, update) => {\n\t\tlet started = false;\n\t\tconst values = [];\n\t\tlet pending = 0;\n\t\tlet cleanup = noop;\n\t\tconst sync = () => {\n\t\t\tif (pending) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcleanup();\n\t\t\tconst result = fn(single ? values[0] : values, set, update);\n\t\t\tif (auto) {\n\t\t\t\tset(result);\n\t\t\t} else {\n\t\t\t\tcleanup = is_function(result) ? result : noop;\n\t\t\t}\n\t\t};\n\t\tconst unsubscribers = stores_array.map((store, i) =>\n\t\t\tsubscribe(\n\t\t\t\tstore,\n\t\t\t\t(value) => {\n\t\t\t\t\tvalues[i] = value;\n\t\t\t\t\tpending &= ~(1 << i);\n\t\t\t\t\tif (started) {\n\t\t\t\t\t\tsync();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tpending |= 1 << i;\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t\tstarted = true;\n\t\tsync();\n\t\treturn function stop() {\n\t\t\trun_all(unsubscribers);\n\t\t\tcleanup();\n\t\t\t// We need to set this to false because callbacks can still happen despite having unsubscribed:\n\t\t\t// Callbacks might already be placed in the queue which doesn't know it should no longer\n\t\t\t// invoke this derived store.\n\t\t\tstarted = false;\n\t\t};\n\t});\n}\n\n/**\n * Takes a store and returns a new one derived from the old one that is readable.\n *\n * https://svelte.dev/docs/svelte-store#readonly\n * @template T\n * @param {import('./public.js').Readable<T>} store  - store to make readonly\n * @returns {import('./public.js').Readable<T>}\n */\nexport function readonly(store) {\n\treturn {\n\t\tsubscribe: store.subscribe.bind(store)\n\t};\n}\n\nexport { get_store_value as get };\n","import type { Readable, Writable } from 'svelte/store';\nimport type { Action, Direction, DisappearAction, DivBase, DivExtension, DivExtensionContext, TemplateContext, TypefaceProvider, VariableTrigger, VideoPlayerProvider, VisibilityAction } from '../../typings/common';\nimport type { DivBaseData, Tooltip } from '../types/base';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { Variable } from '../expressions/variable';\nimport type { TintMode } from '../types/image';\nimport type { Customization } from '../../typings/common';\nimport type { CustomComponentDescription } from '../../typings/custom';\nimport type { ComponentContext } from '../types/componentContext';\n\nexport const ROOT_CTX = Symbol('root');\n\nexport type Running = 'stateChange';\n\nexport interface ParentMethods {\n    replaceWith: (id: string, items?: DivBase[]) => void;\n    isSingleMode: boolean;\n}\n\nexport interface FocusableMethods {\n    focus: () => void;\n}\n\nexport type ExecAnyActionsFunc = (actions: MaybeMissing<Action[]> | undefined, opts?: {\n    componentContext?: ComponentContext;\n    processUrls?: boolean;\n}) => Promise<void>;\n\nexport type NodeGetter = {\n    context: () => ComponentContext;\n    node: () => HTMLElement | null;\n};\n\nexport interface RootCtxValue {\n    logStat(type: string, action: MaybeMissing<Action | VisibilityAction | DisappearAction>): void;\n    hasTemplate(templateName: string): boolean;\n    genId(key: string): string;\n    genClass(key: string): string;\n    execCustomAction(action: (Action | VisibilityAction | DisappearAction) & { url: string }): void;\n    processVariableTriggers(\n        componentContext: ComponentContext | undefined,\n        variableTriggers: MaybeMissing<VariableTrigger>[] | undefined\n    ): (() => void) | undefined;\n    isRunning(type: Running): boolean;\n    setRunning(type: Running, val: boolean): void;\n    registerInstance<T>(id: string, block: T, duplicateErrorLevel?: 'error' | 'warn'): void;\n    unregisterInstance(id: string): void;\n    registerParentOf(id: string, methods: ParentMethods): void;\n    unregisterParentOf(id: string): void;\n    registerTooltip(node: HTMLElement, tooltip: MaybeMissing<Tooltip>): void;\n    unregisterTooltip(tooltip: MaybeMissing<Tooltip>): void;\n    onTooltipClose(internalId: number): void;\n    tooltipRoot: HTMLElement | undefined;\n    registerFocusable(id: string, methods: FocusableMethods): void;\n    unregisterFocusable(id: string): void;\n    addSvgFilter(color: string, mode: TintMode): string;\n    removeSvgFilter(color: string | undefined, mode: TintMode): void;\n    registerId(id: string, getter: NodeGetter): () => void;\n    getComponentId(id: string): string;\n    preparePrototypeVariables(name: string, data: Record<string, unknown>, index: number): Map<string, Variable>;\n    getCustomization<K extends keyof Customization>(prop: K): Customization[K] | undefined;\n    getBuiltinProtocols(): Set<string>;\n    getExtension(id: string, params: object | undefined): DivExtension | undefined;\n    getExtensionContext(componentContext: ComponentContext): DivExtensionContext;\n    registerTimeout(timeout: number): void;\n    isPointerFocus: Readable<boolean>;\n    typefaceProvider: TypefaceProvider;\n    isDesktop: Readable<boolean>;\n    direction: Readable<Direction>;\n    customComponents: Map<string, CustomComponentDescription> | undefined;\n    pagerChildrenClipEnabled: boolean;\n    videoPlayerProvider?: VideoPlayerProvider | undefined;\n\n    // Devtool\n    componentDevtool?({\n        type,\n        node,\n        json,\n        origJson,\n        templateContext,\n        componentContext\n    }: {\n        type: 'mount' | 'update' | 'destroy';\n        node: HTMLElement | null;\n        json: MaybeMissing<DivBaseData>;\n        origJson: MaybeMissing<DivBaseData> | undefined;\n        templateContext: TemplateContext;\n        componentContext: ComponentContext;\n    }): void;\n}\n","export interface WrappedError extends Error {\n    level: 'error' | 'warn';\n    additional?: Record<string, unknown>;\n}\n\nexport type LogError = (error: WrappedError) => void;\n\nexport function wrapError(error: Error, params: {\n    level?: 'error' | 'warn';\n    additional?: Record<string, unknown>;\n} = {}): WrappedError {\n    const wrapped = error as WrappedError;\n\n    wrapped.level = params.level || 'error';\n\n    if (params.additional) {\n        wrapped.additional = params.additional;\n    }\n\n    return wrapped;\n}\n","/**\n * Merges rules from object into css string\n * @param styles\n * @returns\n */\nexport function makeStyle(styles?: Record<string, string | number | undefined>): string | undefined {\n    if (!styles) {\n        return undefined;\n    }\n\n    let res = '';\n    for (const key in styles) {\n        if (styles.hasOwnProperty(key)) {\n            if (!styles[key] && styles[key] !== 0) {\n                continue;\n            }\n            if (res) {\n                res += ';';\n            }\n            res += key + ':' + String(styles[key]);\n        }\n    }\n    return res || undefined;\n}\n","/**\n * Converts px to em with rounding\n * @param value\n * @returns\n */\nexport function pxToEm(value: number): string {\n    if (typeof value !== 'number' && typeof value !== 'string' || !value) {\n        return '0';\n    }\n\n    const casted = Number(value);\n\n    if (Number.isNaN(casted)) {\n        return '0';\n    }\n\n    return (Math.ceil(casted * 1000) / 10000) + 'em';\n}\n\nexport function pxToEmWithUnits(value: number): string {\n    let res = pxToEm(value);\n\n    if (res === '0') {\n        res += 'em';\n    }\n\n    return res;\n}\n","export function padLeft(val: string, count: number): string {\n    while (val.length < count) {\n        val = '0' + val;\n    }\n    return val;\n}\n","import { padLeft } from './padLeft';\n\n/**\n * Converts color from app format (ARGB) to css format (RGBA)\n * @param color Color with format #RGB, #ARGB, #RRGGBB, #AARRGGBB\n * @param alpha Color additional opacity\n * @param defaultColor Default color value, used if input color is incorrect\n * @returns Color with opacity if it has correct format, or defaultColor elsewhere\n */\nexport function correctColor(color: string | undefined, alpha = 1, defaultColor = 'transparent'): string {\n    color = (typeof color === 'string' && color || '').toLowerCase();\n\n    if (color.charAt(0) !== '#') {\n        return defaultColor;\n    }\n\n    const parsedColor = parseColor(color);\n    if (parsedColor) {\n        parsedColor.a *= alpha;\n        return stringifyColorToCss(parsedColor);\n    }\n\n    return defaultColor;\n}\n\nexport function correctColorWithAlpha(color: string | undefined, alpha: number, defaultColor = 'transparent'): string {\n    color = (typeof color === 'string' && color || '').toLowerCase();\n\n    if (color.charAt(0) !== '#') {\n        return defaultColor;\n    }\n\n    const parsedColor = parseColor(color);\n    if (parsedColor) {\n        parsedColor.a = alpha;\n        return stringifyColorToCss(parsedColor);\n    }\n\n    return defaultColor;\n}\n\nexport interface ParsedColor {\n    a: number;\n    r: number;\n    g: number;\n    b: number;\n}\n\nexport function stringifyColorToCss(color: ParsedColor): string {\n    if (color.a === 255) {\n        return `#${[color.r, color.g, color.b].map(it => {\n            return padLeft(Math.round(it).toString(16), 2);\n        }).join('')}`;\n    }\n\n    return `rgba(${color.r},${color.g},${color.b},${(color.a / 255).toFixed(2)})`;\n}\n\nexport function parseColor(color: string): ParsedColor | null {\n    const colorMatch = (\n        // #AARRGGBB\n        color.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i) ||\n        // #ARGB\n        color.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])$/i) ||\n        // #RRGGBB\n        color.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i) ||\n        // #RGB\n        color.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i)\n    );\n\n    if (colorMatch) {\n        // with alpha part in color\n        if (colorMatch.length === 5) {\n            const [_, a, r, g, b] = colorMatch;\n            const redPart = r.length === 2 ? r : r + r;\n            const greenPart = g.length === 2 ? g : g + g;\n            const bluePart = b.length === 2 ? b : b + b;\n            const alphaPart = a.length === 2 ? a : a + a;\n\n            return {\n                a: parseInt(alphaPart, 16),\n                r: parseInt(redPart, 16),\n                g: parseInt(greenPart, 16),\n                b: parseInt(bluePart, 16)\n            };\n        }\n\n        const [_, r, g, b] = colorMatch;\n        const redPart = r.length === 2 ? r : r + r;\n        const greenPart = g.length === 2 ? g : g + g;\n        const bluePart = b.length === 2 ? b : b + b;\n\n        return {\n            a: 255,\n            r: parseInt(redPart, 16),\n            g: parseInt(greenPart, 16),\n            b: parseInt(bluePart, 16)\n        };\n    }\n\n    return null;\n}\n","/**\n * Escapes html\n * @param str\n * @returns\n */\nexport function htmlFilter(str: string): string {\n    let str2 = String(str);\n\n    if (str2.indexOf('&') > -1) {\n        str2 = str2.replace(/&/g, '&amp;');\n    }\n    if (str2.indexOf('<') > -1) {\n        str2 = str2.replace(/</g, '&lt;');\n    }\n    if (str2.indexOf('>') > -1) {\n        str2 = str2.replace(/>/g, '&gt;');\n    }\n    if (str2.indexOf('\"') > -1) {\n        str2 = str2.replace(/\"/g, '&quot;');\n    }\n\n    return str2;\n}\n","export const Truthy = Boolean as unknown as <T>(x: T | null | 0 | '' | false | undefined) => x is T;\n","import type { AlignmentHorizontal, AlignmentVertical } from '../types/alignment';\nimport type {\n    Background,\n    GradientBackground,\n    ImageBackground,\n    SolidBackground,\n    RadialBackground,\n    RadialGradientCenter,\n    GradientColorPoint\n} from '../types/background';\nimport type { ImageScale } from '../types/imageScale';\nimport type { MaybeMissing } from '../expressions/json';\nimport { correctColor } from './correctColor';\nimport { htmlFilter } from './htmlFilter';\nimport { Truthy } from './truthy';\nimport { pxToEmWithUnits } from './pxToEm';\n\nexport function getBackground(bgs: MaybeMissing<Background>[]): {\n    color?: string;\n    image?: string;\n    size?: string;\n    position?: string;\n} {\n    if (bgs.length === 1 && bgs[0].type === 'solid') {\n        return solidUnique({\n            bg: bgs[0]\n        });\n    }\n\n    const res = bgs\n        .map(bg => {\n            if (bg.type === 'solid') {\n                return solid({\n                    bg\n                });\n            } else if (bg.type === 'gradient') {\n                return gradient({\n                    bg\n                });\n            } else if (bg.type === 'image') {\n                return image({\n                    bg\n                });\n            } else if (bg.type === 'radial_gradient') {\n                return radial({\n                    bg\n                });\n            }\n        })\n        .filter(Truthy)\n        .reverse()\n        .reduce(function(acc, item) {\n            acc.image.push(item.image);\n            acc.size.push(item.size || 'auto');\n            acc.position.push(item.pos || '50% 50%');\n\n            return acc;\n        }, {\n            image: [] as string[],\n            size: [] as string[],\n            position: [] as string[]\n        });\n\n    return {\n        image: res.image.join(','),\n        size: res.size.join(','),\n        position: res.position.join(',')\n    };\n}\n\nfunction solid(opts: {\n    bg: MaybeMissing<SolidBackground>;\n}): {\n    size: string | undefined;\n    pos: string | undefined;\n    image: string;\n} {\n    const color = correctColor(opts.bg.color || 'transparent');\n\n    return {\n        size: undefined,\n        pos: undefined,\n        image: `linear-gradient(to bottom,${color},${color})`\n    };\n}\n\nfunction solidUnique(opts: {\n    bg: MaybeMissing<SolidBackground>;\n}): {\n    color: string;\n    size: string;\n    position: string;\n} {\n    const color = correctColor(opts.bg.color || 'transparent');\n\n    return {\n        color,\n        size: 'auto',\n        position: '50% 50%'\n    };\n}\n\nfunction colorMapToList(colorMap: MaybeMissing<GradientColorPoint[]>): string | undefined {\n    if (!colorMap.every(it => it.color && typeof it.position === 'number' && it.position >= 0 && it.position <= 1)) {\n        return;\n    }\n\n    const colors = colorMap as {\n        color: string;\n        position: number;\n    }[];\n\n    const sortedColors = colors.sort((a, b) => {\n        if (Math.abs(a.position - b.position) < 1e-6) {\n            return 0;\n        }\n        return a.position - b.position;\n    });\n\n    return sortedColors\n        .map(color => `${correctColor(color.color)} ${(color.position * 100).toFixed(2)}%`)\n        .join(',');\n}\n\nfunction gradient(opts: {\n    bg: MaybeMissing<GradientBackground>;\n}): {\n    size: string | undefined;\n    pos: string | undefined;\n    image: string;\n} | undefined {\n    if (!Array.isArray(opts.bg?.colors) && !Array.isArray(opts.bg?.color_map)) {\n        return;\n    }\n\n    const colors = opts.bg.colors?.filter(Truthy);\n    if (!colors?.length && !opts.bg?.color_map) {\n        return;\n    }\n\n    let image: string;\n    if (opts.bg.color_map) {\n        const list = colorMapToList(opts.bg.color_map);\n        if (!list) {\n            return;\n        }\n\n        image = 'linear-gradient(' +\n            (90 - Number(opts.bg.angle || 0) + 'deg') +\n            ',' +\n            list +\n            ')';\n    } else {\n        if (!colors) {\n            return;\n        }\n\n        image = 'linear-gradient(' +\n            (90 - Number(opts.bg.angle || 0) + 'deg') +\n            ',' +\n            colors\n                .map(color => correctColor(color))\n                .join(',') +\n            ')';\n    }\n\n    return {\n        size: undefined,\n        pos: undefined,\n        image\n    };\n}\n\nconst RELATIVE_SIZE_MAP = {\n    nearest_corner: 'closest-corner',\n    farthest_corner: 'farthest-corner',\n    nearest_side: 'closest-side',\n    farthest_side: 'farthest-side'\n};\n\nfunction radialCenterToCss(center: MaybeMissing<RadialGradientCenter> | undefined): string {\n    if (center && typeof center === 'object' && 'type' in center && center.value !== undefined) {\n        if (center.type === 'fixed') {\n            return pxToEmWithUnits(center.value);\n        } else if (center.type === 'relative') {\n            return `${Number(center.value) * 100}%`;\n        }\n    }\n\n    return '50%';\n}\n\nfunction radial(opts: {\n    bg: MaybeMissing<RadialBackground>;\n}): {\n    size: string | undefined;\n    pos: string | undefined;\n    image: string;\n} | undefined {\n    if (!Array.isArray(opts.bg?.colors) && !Array.isArray(opts.bg?.color_map)) {\n        return;\n    }\n\n    const colors = opts.bg.colors?.filter(Truthy);\n    if (!colors?.length && !opts.bg?.color_map) {\n        return;\n    }\n\n    let list;\n    if (opts.bg.color_map) {\n        list = colorMapToList(opts.bg.color_map);\n    } else if (colors) {\n        list = colors\n            .map(color => correctColor(color))\n            .join(',');\n    }\n    if (!list) {\n        return;\n    }\n\n    const sizeVal = opts.bg.radius;\n    let size;\n    if (sizeVal && typeof sizeVal === 'object' && 'type' in sizeVal && sizeVal.value !== undefined) {\n        if (sizeVal.type === 'fixed') {\n            size = pxToEmWithUnits(sizeVal.value);\n        } else if (sizeVal.type === 'relative') {\n            size = RELATIVE_SIZE_MAP[sizeVal.value];\n        }\n    }\n\n    const centerX = radialCenterToCss(opts.bg.center_x);\n    const centerY = radialCenterToCss(opts.bg.center_y);\n\n    return {\n        size: undefined,\n        pos: undefined,\n        image:\n            'radial-gradient(' +\n            `circle ${size || 'farthest-corner'} at ${centerX} ${centerY}` +\n            ',' +\n            list +\n            ')'\n    };\n}\n\nfunction image(opts: {\n    bg: MaybeMissing<ImageBackground>;\n}): {\n    size: string | undefined;\n    pos: string | undefined;\n    image: string;\n} | undefined {\n    const image = opts.bg?.image_url;\n\n    if (!image) {\n        return;\n    }\n\n    return {\n        size: imageSize(opts.bg.scale),\n        pos: imagePos(opts.bg),\n        image: 'url(\"' + htmlFilter(image) + '\")'\n    };\n}\n\nexport function imageSize(scale?: ImageScale): string {\n    if (scale === 'fit') {\n        return 'contain';\n    } else if (scale === 'stretch') {\n        return 'fill';\n    } else if (scale === 'no_scale') {\n        return 'none';\n    }\n\n    // 'fill' and default\n    return 'cover';\n}\n\nexport function imagePos(obj: {\n    content_alignment_horizontal?: AlignmentHorizontal;\n    content_alignment_vertical?: AlignmentVertical;\n}): string {\n    let hpos: string;\n    let vpos: string;\n\n    if (obj.content_alignment_horizontal === 'left') {\n        hpos = '0%';\n    } else if (obj.content_alignment_horizontal === 'right') {\n        hpos = '100%';\n    } else {\n        hpos = '50%';\n    }\n\n    if (obj.content_alignment_vertical === 'top') {\n        vpos = '0%';\n    } else if (obj.content_alignment_vertical === 'bottom') {\n        vpos = '100%';\n    } else {\n        vpos = '50%';\n    }\n\n    return hpos + ' ' + vpos;\n}\n","export function correctNonNegativeNumber(val: number | undefined, defaultVal: number): number {\n    const num = Number(val);\n    if (Number.isNaN(num) || num < 0) {\n        return defaultVal;\n    }\n    return num;\n}\n","import { derived, type Readable } from 'svelte/store';\nimport type { BooleanInt, DisappearAction, VisibilityAction } from '../../typings/common';\nimport type { RootCtxValue } from '../context/root';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { ComponentContext } from '../types/componentContext';\nimport { correctNonNegativeNumber } from '../utils/correctNonNegativeNumber';\n\ninterface CalcedAction {\n    index: number | undefined;\n    visibility_percentage: number | undefined;\n    visibility_duration: number | undefined;\n    log_limit: number | undefined;\n    is_enabled: BooleanInt | undefined;\n}\n\ninterface IndexedCalcedAction extends CalcedAction {\n    index: number;\n}\n\ninterface VisibilityStatus {\n    type: 'visibility' | 'disappear';\n    index: number;\n    action: MaybeMissing<VisibilityAction | DisappearAction>;\n    visible: boolean;\n    count: number;\n    finished: boolean;\n    timer?: ReturnType<typeof setTimeout>;\n}\n\nfunction checkPercentage(isVisibility: boolean, val: number | undefined, defaultVal: number): number {\n    if (typeof val === 'number') {\n        if (\n            isVisibility && val > 0 && val <= 100 ||\n            !isVisibility && val >= 0 && val < 100\n        ) {\n            return val;\n        }\n    }\n    return defaultVal;\n}\n\nfunction filterActions(it: CalcedAction): it is IndexedCalcedAction {\n    return it.is_enabled !== 0 && it.is_enabled !== false && it.index !== undefined;\n}\n\nexport function visibilityAction(node: HTMLElement, {\n    visibilityActions,\n    disappearActions,\n    rootCtx,\n    componentContext\n}: {\n    visibilityActions?: MaybeMissing<VisibilityAction>[];\n    disappearActions?: MaybeMissing<DisappearAction>[];\n    rootCtx: RootCtxValue;\n    componentContext: ComponentContext;\n}) {\n    const visibilityStatus: VisibilityStatus[] = [];\n\n    if (visibilityActions) {\n        visibilityActions.forEach(it => {\n            visibilityStatus.push({\n                type: 'visibility',\n                index: visibilityStatus.length,\n                action: it,\n                visible: false,\n                count: 0,\n                finished: false\n            });\n        });\n    }\n\n    if (disappearActions) {\n        disappearActions.forEach(it => {\n            visibilityStatus.push({\n                type: 'disappear',\n                index: visibilityStatus.length,\n                action: it,\n                // false, so disappear only works after the element becomes visible\n                visible: false,\n                count: 0,\n                finished: false\n            });\n        });\n    }\n\n    const calcedList: Readable<CalcedAction>[] = visibilityStatus.map((it, index) => {\n        const isVisibility = it.type === 'visibility';\n\n        return componentContext.getDerivedFromVars({\n            index,\n            visibility_percentage: it.action.visibility_percentage,\n            visibility_duration: isVisibility ?\n                (it.action as VisibilityAction).visibility_duration :\n                (it.action as DisappearAction).disappear_duration,\n            log_limit: it.action.log_limit,\n            is_enabled: it.action.is_enabled,\n        }, undefined, true) as Readable<CalcedAction>;\n    });\n\n    let observer: IntersectionObserver | undefined;\n    const cleanup = () => {\n        if (observer) {\n            observer.disconnect();\n        }\n\n        visibilityStatus.forEach(status => {\n            if (status.timer) {\n                clearTimeout(status.timer);\n            }\n        });\n    };\n\n    const totalStore = derived(calcedList, values => values);\n    let filtered: IndexedCalcedAction[];\n\n    const callAction = (status: VisibilityStatus) => {\n        const isVisibility = status.type === 'visibility';\n        const calcedAction = componentContext.getJsonWithVars(status.action);\n\n        componentContext.execAnyActions([calcedAction], {\n            logType: isVisibility ? 'visible' : 'disappear',\n            node,\n            processUrls: false\n        });\n    };\n\n    const unsubscribe = totalStore.subscribe(values => {\n        filtered = values.filter(filterActions);\n\n        const map: Record<number, IndexedCalcedAction> = {};\n        filtered.forEach(it => {\n            map[it.index] = it;\n        });\n\n        cleanup();\n\n        const thresholds = [...new Set(filtered.map(it => {\n            const isVisibility = visibilityStatus[it.index].type === 'visibility';\n\n            return checkPercentage(\n                isVisibility,\n                it.visibility_percentage,\n                isVisibility ? 50 : 0\n            ) / 100;\n        }))];\n\n        if (!thresholds.length) {\n            return;\n        }\n\n        const observerCallback = (entries: IntersectionObserverEntry[]): void => {\n            entries.forEach(entry => {\n                filtered.forEach(calcedParams => {\n                    const status = visibilityStatus[calcedParams.index];\n                    const isVisibility = status.type === 'visibility';\n                    const percentage = checkPercentage(\n                        isVisibility,\n                        calcedParams.visibility_percentage,\n                        isVisibility ? 50 : 0\n                    );\n\n                    let nowVisible;\n                    if (percentage === 0) {\n                        nowVisible = entry.intersectionRatio >= 1e-12;\n                    } else {\n                        nowVisible = entry.intersectionRatio >= (percentage / 100);\n                    }\n\n                    const shouldProc = isVisibility ?\n                        !status.visible && nowVisible :\n                        status.visible && !nowVisible;\n                    const shouldClear = isVisibility ?\n                        !nowVisible :\n                        nowVisible;\n\n                    if (shouldProc) {\n                        if (!status.finished) {\n                            status.timer = setTimeout(() => {\n                                ++status.count;\n\n                                const limit = calcedParams.log_limit === 0 ? Infinity : (calcedParams.log_limit || 1);\n                                if (status.count >= limit) {\n                                    status.finished = true;\n                                }\n\n                                callAction(status);\n                            }, correctNonNegativeNumber(calcedParams.visibility_duration, 800));\n                        }\n                    } else if (shouldClear) {\n                        if (status.timer) {\n                            clearTimeout(status.timer);\n                        }\n                    }\n                    status.visible = nowVisible;\n                });\n            });\n        };\n\n        observer = new IntersectionObserver(observerCallback, {\n            threshold: thresholds\n        });\n\n        observer.observe(node);\n    });\n\n    return {\n        destroy() {\n            filtered?.forEach(calcedAction => {\n                const status = visibilityStatus[calcedAction.index];\n\n                if (!status || status.type !== 'disappear' || !status.visible || status.finished) {\n                    return;\n                }\n\n                rootCtx.registerTimeout(window.setTimeout(() => {\n                    callAction(status);\n                }, calcedAction.visibility_duration));\n            });\n\n            cleanup();\n\n            unsubscribe();\n        }\n    };\n}\n","import type { Mods } from '../types/general';\n\nfunction push(list: string[], val: string | undefined): void {\n    if (val) {\n        list.push(val);\n    }\n}\n\nexport function genClassName(\n    component: string,\n    css: Record<string, string>,\n    mods: Mods\n): string {\n    const res: string[] = [];\n\n    push(res, css[component]);\n\n    for (const key in mods) {\n        if (mods.hasOwnProperty(key)) {\n            const val = mods[key];\n            if (val) {\n                const cssKey = `${component}_${key}` + (typeof val === 'string' ? `_${val}` : '');\n\n                push(res, css[cssKey]);\n            }\n        }\n    }\n\n    return res.join(' ');\n}\n","import type { MaybeMissing } from '../expressions/json';\nimport type { AppearanceTransition, DivBaseData } from '../types/base';\nimport type { TransitionChange } from '../types/base';\nimport type { ComponentContext } from '../types/componentContext';\n\nexport const STATE_CTX = Symbol('state');\n\nexport interface StateInterface {\n    getChild(id: string): StateInterface | undefined;\n    setState(stateId: string): Promise<void>;\n}\n\nexport interface StateCtxValue {\n    registerChildWithTransitionIn(\n        json: DivBaseData,\n        componentContext: ComponentContext,\n        transitions: MaybeMissing<AppearanceTransition>,\n        node: HTMLElement\n    ): Promise<void>;\n\n    registerChildWithTransitionOut(\n        json: DivBaseData,\n        componentContext: ComponentContext,\n        transitions: MaybeMissing<AppearanceTransition>,\n        node: HTMLElement\n    ): Promise<void>;\n\n    registerChildWithTransitionChange(\n        json: DivBaseData,\n        componentContext: ComponentContext,\n        transitions: MaybeMissing<TransitionChange> | undefined,\n        node: HTMLElement\n    ): Promise<void>;\n\n    hasTransitionChange(id?: string): boolean;\n\n    runVisibilityTransition(\n        json: DivBaseData,\n        componentContext: ComponentContext,\n        transitions: MaybeMissing<AppearanceTransition>,\n        node: HTMLElement,\n        direction: 'in' | 'out',\n        bbox?: DOMRect | undefined\n    ): Promise<void>;\n\n    registerChild(id: string): void;\n    unregisterChild(id: string): void;\n}\n","import type { Direction } from '../../typings/common';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { EdgeInsets } from '../types/edgeInserts';\nimport { pxToEm } from './pxToEm';\n\nexport function edgeInsertsToCss(\n    edgeInsets: MaybeMissing<EdgeInsets>,\n    direction: Direction\n): string {\n    const top = edgeInsets.top || 0;\n    const right = ((direction === 'ltr' ? edgeInsets.end : edgeInsets.start) ?? edgeInsets.right) || 0;\n    const bottom = edgeInsets.bottom || 0;\n    const left = ((direction === 'ltr' ? edgeInsets.start : edgeInsets.end) ?? edgeInsets.left) || 0;\n\n    if (top === 0 && right === 0 && bottom === 0 && left === 0) {\n        return '';\n    }\n\n    return pxToEm(top) +\n        ' ' +\n        pxToEm(right) +\n        ' ' +\n        pxToEm(bottom) +\n        ' ' +\n        pxToEm(left);\n}\n","export function isNumber(val: number | undefined): val is number {\n    if (typeof val !== 'number' && typeof val !== 'string') {\n        return false;\n    }\n\n    const num = Number(val);\n\n    return !Number.isNaN(num);\n}\n","import { isNumber } from './isNumber';\n\nexport function isNonNegativeNumber(val: number | undefined): val is number {\n    return isNumber(val) && val >= 0;\n}\n","import type { Direction } from '../../typings/common';\nimport type { EdgeInsets } from '../types/edgeInserts';\nimport { edgeInsertsToCss } from './edgeInsertsToCss';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctEdgeInserts(\n    edgeInsets: EdgeInsets | undefined,\n    direction: Direction,\n    defaultVal: string\n): string {\n    if (!edgeInsets) {\n        return defaultVal;\n    }\n\n    const list = [\n        edgeInsets.top,\n        (direction === 'ltr' ? edgeInsets.end : edgeInsets.start) ?? edgeInsets.right,\n        edgeInsets.bottom,\n        (direction === 'ltr' ? edgeInsets.start : edgeInsets.end) ?? edgeInsets.left\n    ];\n\n    for (let i = 0; i < list.length; ++i) {\n        if (list[i] && !isNonNegativeNumber(list[i])) {\n            return defaultVal;\n        }\n    }\n\n    return edgeInsertsToCss(edgeInsets, direction);\n}\n","import { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctAlpha(val: number | undefined, defaultVal: number): number {\n    if (!isNonNegativeNumber(val) || val === undefined || val > 1) {\n        return defaultVal;\n    }\n    return Number(val);\n}\n","const hasOwnProperty = Object.prototype.hasOwnProperty;\n\nexport function isDeepEqual<A, B>(a: A, b: B): boolean {\n    if (Object.is(a, b)) {\n        return true;\n    }\n\n    if (\n        typeof a !== 'object' ||\n        a === null ||\n        typeof b !== 'object' ||\n        b === null\n    ) {\n        return Object.is(a, b);\n    }\n\n    const keysA = Object.keys(a);\n    const keysB = Object.keys(b);\n\n    if (keysA.length !== keysB.length) {\n        return false;\n    }\n\n    for (let i = 0; i < keysA.length; i++) {\n        const key = keysA[i];\n\n        if (!hasOwnProperty.call(b, key) || !isDeepEqual(a[key as keyof A], b[key as keyof B])) {\n            return false;\n        }\n    }\n\n    return true;\n}\n","import { isDeepEqual } from './isDeepEqual';\n\nexport function assignIfDifferent<A, B>(newVal: A, defaultVal: B): A | B {\n    if (isDeepEqual(newVal, defaultVal)) {\n        return defaultVal;\n    }\n    return newVal;\n}\n","import type { Visibility } from '../types/base';\n\nexport function correctVisibility(visibility: string | undefined, defaultVal: Visibility): Visibility {\n    if (\n        visibility === 'visible' ||\n        visibility === 'invisible' ||\n        visibility === 'gone'\n    ) {\n        return visibility;\n    }\n\n    return defaultVal;\n}\n","import type { Interpolation } from '../../typings/common';\n\nexport function correctCSSInterpolator(\n    interpolator: string | undefined,\n    defaultVal: Interpolation\n): Interpolation {\n    if (\n        interpolator === 'linear' ||\n        interpolator === 'ease' ||\n        interpolator === 'ease_in_out' ||\n        interpolator === 'ease_in' ||\n        interpolator === 'ease_out'\n    ) {\n        return interpolator;\n    }\n\n    return defaultVal;\n}\n","export function correctNumber(val: number | undefined, defaultVal: number): number {\n    const num = Number(val);\n    if (Number.isNaN(num)) {\n        return defaultVal;\n    }\n    return num;\n}\n","import type { MaybeMissing } from '../expressions/json';\nimport type { Animation, AnyAnimation } from '../types/animation';\n\nexport function flattenAnimation(animation: MaybeMissing<Animation>): MaybeMissing<AnyAnimation>[] {\n    const res: MaybeMissing<AnyAnimation>[] = [];\n\n    if (animation.name === 'set') {\n        (animation.items || []).forEach(item => {\n            res.push(...flattenAnimation(item));\n        });\n    } else {\n        res.push(animation as MaybeMissing<AnyAnimation>);\n    }\n\n    return res;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctEdgeInsertsObject<T extends EdgeInsets | null>(\n    edgeInsets: EdgeInsets | undefined,\n    defaultVal: T\n): T {\n    if (!edgeInsets || typeof edgeInsets !== 'object') {\n        return defaultVal;\n    }\n\n    const list = [\n        'top',\n        'right',\n        'bottom',\n        'left'\n    ] as const;\n\n    for (let i = 0; i < list.length; ++i) {\n        if (edgeInsets[list[i]] && !isNonNegativeNumber(edgeInsets[list[i]])) {\n            return defaultVal;\n        }\n    }\n\n    return edgeInsets as T;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\n\nexport function sumEdgeInsets(a: EdgeInsets | null, b: EdgeInsets | null): EdgeInsets {\n    if (!a && !b) {\n        return {};\n    }\n\n    if (!b) {\n        return a as EdgeInsets;\n    }\n\n    if (!a) {\n        return b;\n    }\n\n    const res: EdgeInsets = {};\n\n    ([\n        'top',\n        'right',\n        'bottom',\n        'left',\n        'start',\n        'end'\n    ] as const).forEach(side => {\n        const aVal = a[side];\n        if (aVal) {\n            res[side] = aVal;\n        }\n        const bVal = b[side];\n        if (bVal) {\n            res[side] = (res[side] || 0) + bVal;\n        }\n    });\n\n    return res;\n}\n","import type { CornersRadius } from '../types/border';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctBorderRadiusObject(\n    cornersRadius: CornersRadius,\n    defaultVal: CornersRadius\n): CornersRadius {\n    const list = [\n        cornersRadius['top-left'],\n        cornersRadius['top-right'],\n        cornersRadius['bottom-right'],\n        cornersRadius['bottom-left']\n    ];\n\n    for (let i = 0; i < list.length; ++i) {\n        if (list[i] && !isNonNegativeNumber(list[i])) {\n            return defaultVal;\n        }\n    }\n\n    return cornersRadius;\n}\n","import type { CornersRadius } from '../types/border';\nimport { pxToEm } from './pxToEm';\n\nexport function borderRadius(cornersRadius: CornersRadius, defaultRadius = 0, fontSize = 10): string {\n    return [\n        cornersRadius['top-left'],\n        cornersRadius['top-right'],\n        cornersRadius['bottom-right'],\n        cornersRadius['bottom-left']\n    ]\n        .map(it => pxToEm((it || defaultRadius) / fontSize * 10))\n        .join(' ');\n}\n","import type { MaybeMissing } from '../expressions/json';\nimport type { Shadow } from '../types/border';\nimport { correctColor } from './correctColor';\nimport { pxToEm } from './pxToEm';\n\n/**\n * Converts to box-shadow\n * @param shadow\n * @returns css style\n */\nexport function shadowToCssBoxShadow(shadow: MaybeMissing<Shadow>): string {\n    return pxToEm(shadow.offset?.x?.value || 0) + ' ' +\n        pxToEm(shadow.offset?.y?.value || 0) + ' ' +\n        pxToEm(shadow.blur ?? 2) + ' ' +\n        correctColor(shadow.color || '#000000', shadow.alpha ?? 0.19);\n}\n\n/**\n * Converts to filter drop-shadow\n * @param shadow\n * @param fontSize\n * @returns css style\n */\nexport function shadowToCssFilter(shadow: MaybeMissing<Shadow>, fontSize: number): string {\n    return 'drop-shadow(' +\n        correctColor(shadow.color || '#000000', shadow.alpha ?? 0.19) + ' ' +\n        pxToEm((shadow.offset?.x?.value || 0) * 10 / fontSize) + ' ' +\n        pxToEm((shadow.offset?.y?.value || 0) * 10 / fontSize) + ' ' +\n        pxToEm((shadow.blur ?? 2) * 10 / fontSize) + ')';\n}\n","import type { Action, DisappearAction, VisibilityAction } from '../../typings/common';\nimport type { MaybeMissing } from '../expressions/json';\n\nexport function filterEnabledActions(action: MaybeMissing<Action | VisibilityAction | DisappearAction>): boolean {\n    return action.is_enabled !== 0 && action.is_enabled !== false;\n}\n","let media: MediaQueryList | undefined;\n\nexport function isPrefersReducedMotion(): boolean {\n    if (typeof matchMedia === 'undefined') {\n        return false;\n    }\n\n    if (!media) {\n        media = window.matchMedia('(prefers-reduced-motion)');\n    }\n\n    return media.matches;\n}\n","import { tick } from 'svelte';\nimport type { ComponentContext } from '../types/componentContext';\nimport type { WrappedError } from '../../typings/common';\n\nconst MAX_ITERATIONS = 8;\n\nexport const layoutProvider = (\n    currentNode: HTMLElement,\n    componentContext: ComponentContext,\n    widthVariable: string | undefined,\n    heightVariable: string | undefined\n): ResizeObserver | undefined => {\n    let observer : ResizeObserver | undefined;\n\n    if ((widthVariable || heightVariable) && typeof ResizeObserver !== 'undefined') {\n        observer = new ResizeObserver(async() => {\n            let counter = 0;\n            const sizeHistory: Record<string, Set<number>> = {};\n\n            const setVariable = (variableName: string | undefined, value: number): boolean => {\n                if (variableName) {\n                    const instance = componentContext.getVariable(variableName, 'integer');\n                    if (instance) {\n                        value = Math.round(value);\n\n                        if (!sizeHistory[variableName]) {\n                            sizeHistory[variableName] = new Set();\n                        }\n                        if (!sizeHistory[variableName].has(value)) {\n                            instance.setValue(value);\n                            sizeHistory[variableName].add(value);\n                            return true;\n                        }\n                    } else {\n                        const err: WrappedError = new Error('Missing variable') as WrappedError;\n                        err.level = 'error';\n                        err.additional = {\n                            variableName\n                        };\n                        componentContext.logError(err);\n                    }\n                }\n\n                return false;\n            };\n\n            const recalcProps = () => {\n                if (!currentNode) {\n                    return false;\n                }\n\n                const bbox = currentNode.getBoundingClientRect();\n                const widthRes = setVariable(widthVariable, bbox.width);\n                const heightRes = setVariable(heightVariable, bbox.height);\n\n                return widthRes || heightRes;\n            };\n\n            while (recalcProps()) {\n                if (++counter > MAX_ITERATIONS) {\n                    const err: WrappedError = new Error('Recursive layout in size_provider') as WrappedError;\n                    err.level = 'warn';\n                    err.additional = {\n                        widthVariableName: widthVariable,\n                        heightVariableName: heightVariable\n                    };\n                    componentContext.logError(err);\n                    break;\n                }\n                await tick();\n            }\n        });\n        observer.observe(currentNode);\n    }\n\n    return observer;\n};\n","import type { Readable } from 'svelte/store';\n\nexport const ENABLED_CTX = Symbol('enabled');\n\nexport interface EnabledCtxValue {\n    isEnabled: Readable<boolean>;\n}\n","export function correctBooleanInt(val: number | boolean | undefined, defaultVal: boolean): boolean {\n    if (val === 1 || val === 0 || val === false || val === true) {\n        return Boolean(val);\n    }\n    return defaultVal;\n}\n","import type { MaybeMissing } from '../expressions/json';\nimport type { Accessibility } from '../types/base';\n\nexport function composeAccessibilityDescription(accessibility: MaybeMissing<Accessibility>): string {\n    return [\n        accessibility.state_description,\n        accessibility.description,\n        accessibility.hint\n    ].filter(Boolean).join(', ');\n}\n","// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function doNothing(): void {}\n","export const ACTION_CTX = Symbol('action');\n\nexport interface ActionCtxValue {\n    hasAction(): boolean;\n}\n","export function getUrlSchema(url: string): string {\n    if (url.startsWith('tel:')) {\n        return 'tel';\n    }\n\n    const match = /^([^/]+):\\/\\//.exec(url);\n\n    return match && match[1] || '';\n}\n\nexport function isBuiltinSchema(schema: string, builtinSchemas: Set<string>): boolean {\n    return builtinSchemas.has(schema);\n}\n","<script lang=\"ts\" context=\"module\">\n    const MIN_SWIPE_PX = 8;\n    const MIN_LONG_TAP_DURATION = 400;\n    const MAX_DOUBLE_TAP_DURATION = 400;\n\n    const SUPPORTED_ACCESSIBILITY_TYPES = new Set([\n        'button',\n        'image',\n        'checkbox',\n        'radio',\n        'header'\n    ]);\n</script>\n\n<script lang=\"ts\">\n    import { getContext, onDestroy, onMount, setContext } from 'svelte';\n\n    import rootCss from '../Root.module.css';\n    import css from './Actionable.module.css';\n\n    import type { Action } from '../../../typings/common';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { Accessibility } from '../../types/base';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { doNothing } from '../../utils/doNothing';\n    import { ACTION_CTX, type ActionCtxValue } from '../../context/action';\n    import { wrapError } from '../../utils/wrapError';\n    import { getUrlSchema, isBuiltinSchema } from '../../utils/url';\n    import type { Coords } from '../../utils/getTouchCoords';\n\n    export let componentContext: ComponentContext;\n    export let id = '';\n    export let actions: MaybeMissing<Action[]> | undefined = undefined;\n    export let doubleTapActions: MaybeMissing<Action[]> | undefined = undefined;\n    export let longTapActions: MaybeMissing<Action[]> | undefined = undefined;\n    export let pressStartActions: MaybeMissing<Action[]> | undefined = undefined;\n    export let pressEndActions: MaybeMissing<Action[]> | undefined = undefined;\n    export let hoverStartActions: MaybeMissing<Action[]> | undefined = undefined;\n    export let hoverEndActions: MaybeMissing<Action[]> | undefined = undefined;\n    export let cls = '';\n    export let style: string | null = null;\n    export let attrs: Record<string, string | undefined> | undefined = undefined;\n    export let use: ((element: HTMLElement, opts?: any) => void) = doNothing;\n    export let customAction: ((event: Event) => boolean) | null = null;\n    export let isNativeActionAnimation = true;\n    export let hasInnerFocusable = false;\n    export let customAccessibility: MaybeMissing<Accessibility> | undefined = undefined;\n    export let captureFocusOnAction = true;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n    const actionCtx = getContext<ActionCtxValue>(ACTION_CTX);\n\n    setContext<ActionCtxValue>(ACTION_CTX, {\n        hasAction(): boolean {\n            return Boolean(actionCtx.hasAction() || actions?.length || customAccessibility?.mode === 'exclude');\n        }\n    });\n\n    let node: HTMLElement;\n    let href = '';\n    let target: string | undefined = undefined;\n    let startTs = -1;\n    let clickTs = -1;\n    let startCoords: Coords | null = null;\n    let isChanged = false;\n    let hasJSAction = false;\n    let hasAnyActions = false;\n    let longtapTimer: number;\n    let clickTimer: number;\n    let role: string | undefined;\n    let isChecked: boolean | undefined;\n    let ariaHidden = false;\n\n    $: {\n        ariaHidden = customAccessibility?.mode === 'exclude';\n    }\n\n    $: {\n        if (Array.isArray(actions) && actions?.length) {\n            for (let i = 0; i < actions.length; ++i) {\n                const url = actions[i].url;\n\n                if (url) {\n                    href = url;\n                    target = actions[i].target || undefined;\n                    break;\n                }\n            }\n        }\n\n        hasJSAction = Boolean(customAction);\n        if ((href || Array.isArray(actions) && actions?.length) && (actionCtx.hasAction() || ariaHidden)) {\n            href = '';\n            componentContext.logError(wrapError(new Error('Actionable element is forbidden inside other actionable element or inside accessibility mode=exlucde'), {\n                level: 'warn',\n                additional: {\n                    actions\n                }\n            }));\n        } else if (href && !isBuiltinSchema(getUrlSchema(href), rootCtx.getBuiltinProtocols())) {\n            href = '';\n            hasJSAction = true;\n        } else if (!href && Array.isArray(actions) && actions?.length) {\n            hasJSAction = true;\n            if (!actions.some(action => action.url || action.typed || action.menu_items)) {\n                componentContext.logError(wrapError(new Error('The component has a list of actions, but does not have a real action'), {\n                    level: 'warn',\n                    additional: {\n                        actions\n                    }\n                }));\n            }\n        }\n    }\n\n    $: {\n        if (customAccessibility?.type && SUPPORTED_ACCESSIBILITY_TYPES.has(customAccessibility.type)) {\n            if (customAccessibility.type === 'header') {\n                role = 'heading';\n            } else {\n                role = customAccessibility.type;\n            }\n        } else if (href) {\n            role = undefined;\n        } else if (hasJSAction) {\n            role = 'button';\n        }\n\n        if ((role === 'checkbox' || role === 'radio') && typeof customAccessibility?.is_checked === 'boolean') {\n            isChecked = customAccessibility.is_checked;\n        } else {\n            isChecked = undefined;\n        }\n    }\n\n    $: if (node) {\n        if (href || hasJSAction || doubleTapActions?.length) {\n            node.addEventListener('click', onClick);\n        } else {\n            node.removeEventListener('click', onClick);\n        }\n\n        if (\n            doubleTapActions?.length ||\n            longTapActions?.length ||\n            pressStartActions?.length ||\n            pressEndActions?.length\n        ) {\n            node.addEventListener('pointerdown', onPointerDown, {\n                passive: true\n            });\n            window.addEventListener('pointermove', onPointerMove, {\n                passive: true\n            });\n            window.addEventListener('pointerup', onPointerUp, {\n                passive: true\n            });\n            window.addEventListener('pointercancel', onPointerUp, {\n                passive: true\n            });\n        } else {\n            node.removeEventListener('pointerdown', onPointerDown);\n            window.removeEventListener('pointerup', onPointerUp);\n            window.removeEventListener('pointermove', onPointerMove);\n            window.removeEventListener('pointercancel', onPointerUp);\n        }\n        if (hoverStartActions?.length) {\n            node.addEventListener('pointerenter', onPointerEnter);\n        } else {\n            node.removeEventListener('pointerenter', onPointerEnter);\n        }\n        if (hoverEndActions?.length) {\n            node.addEventListener('pointerleave', onPointerLeave);\n        } else {\n            node.removeEventListener('pointerleave', onPointerLeave);\n        }\n\n        if (captureFocusOnAction === false) {\n            node.addEventListener('mousedown', onMousedown);\n        } else {\n            node.removeEventListener('mousedown', onMousedown);\n        }\n\n        hasAnyActions = Boolean(\n            href ||\n            hasJSAction ||\n            doubleTapActions?.length ||\n            longTapActions?.length ||\n            pressStartActions?.length ||\n            pressEndActions?.length ||\n            hoverStartActions?.length ||\n            hoverEndActions?.length\n        );\n    }\n\n    function hasCustomAction(): boolean {\n        return actions?.some(action => {\n            if (action?.typed) {\n                return true;\n            }\n\n            const url = action?.url;\n            if (!url) {\n                return false;\n            }\n\n            const schema = getUrlSchema(url);\n\n            return schema && !isBuiltinSchema(schema, rootCtx.getBuiltinProtocols());\n        }) || false;\n    }\n\n    async function processClick(event: MouseEvent | undefined, processUrls: boolean): Promise<void> {\n        if (actions) {\n            if (event && hasCustomAction()) {\n                event.preventDefault();\n            }\n            componentContext.execAnyActions(actions, {\n                node,\n                processUrls\n            });\n        }\n    }\n\n    async function onClick(event: MouseEvent): Promise<void> {\n        if (actionCtx.hasAction()) {\n            return;\n        }\n\n        if (event.button !== undefined && event.button !== 0) {\n            return;\n        }\n\n        const now = Date.now();\n\n        if (startTs > 0 && now > startTs + MIN_LONG_TAP_DURATION) {\n            // Long tap action\n            event.preventDefault();\n            return;\n        }\n\n        if (doubleTapActions?.length && clickTs > 0 && now - clickTs < MAX_DOUBLE_TAP_DURATION) {\n            event.preventDefault();\n            componentContext.execAnyActions(doubleTapActions, { processUrls: true, node });\n            clickTs = -1;\n            return;\n        }\n\n        clickTs = now;\n\n        if (doubleTapActions?.length && startTs > 0 && now < startTs + MAX_DOUBLE_TAP_DURATION) {\n            // Disable clicks and wait for double clicks\n            event.preventDefault();\n\n            clearTimeout(clickTimer);\n            clickTimer = window.setTimeout(() => {\n                processClick(undefined, true);\n            }, MAX_DOUBLE_TAP_DURATION);\n            return;\n        }\n\n        const cancelled = customAction?.(event) === false;\n\n        if (cancelled) {\n            event.preventDefault();\n        } else {\n            processClick(event, false);\n        }\n    }\n\n    function onPointerDown(event: PointerEvent): void {\n        if (actionCtx.hasAction()) {\n            return;\n        }\n\n        startCoords = {\n            x: event.clientX,\n            y: event.clientY\n        };\n        isChanged = false;\n        startTs = Date.now();\n        if (longtapTimer) {\n            clearTimeout(longtapTimer);\n        }\n\n        clearTimeout(clickTimer);\n\n        componentContext.execAnyActions(pressStartActions, { node });\n    }\n\n    function onPointerMove(event: PointerEvent): void {\n        if (!startCoords) {\n            return;\n        }\n\n        if (\n            Math.abs(startCoords.x - event.clientX) > MIN_SWIPE_PX ||\n            Math.abs(startCoords.y - event.clientY) > MIN_SWIPE_PX\n        ) {\n            isChanged = true;\n        }\n    }\n\n    function onPointerUp(event: PointerEvent): void {\n        if (actionCtx.hasAction() || !startCoords || startTs < 0) {\n            return;\n        }\n\n        if (!isChanged && (Date.now() - startTs) >= MIN_LONG_TAP_DURATION) {\n            event.stopImmediatePropagation();\n            componentContext.execAnyActions(longTapActions, { processUrls: true, node });\n        }\n\n        if (longtapTimer) {\n            clearTimeout(longtapTimer);\n        }\n        longtapTimer = window.setTimeout(() => {\n            startCoords = null;\n            startTs = -1;\n        }, 100);\n\n        componentContext.execAnyActions(pressEndActions, { node });\n    }\n\n    function onPointerEnter(): void {\n        if (actionCtx.hasAction()) {\n            return;\n        }\n\n        componentContext.execAnyActions(hoverStartActions, { node });\n    }\n\n    function onPointerLeave(): void {\n        if (actionCtx.hasAction()) {\n            return;\n        }\n\n        componentContext.execAnyActions(hoverEndActions, { node });\n    }\n\n    function onMousedown(event: MouseEvent): void {\n        // prevent focus blur\n        event.preventDefault();\n    }\n\n    function onKeydown(event: KeyboardEvent): void {\n        // todo check event.target is not inside current element\n\n        const target = event.target;\n        if (target instanceof HTMLElement) {\n            if (target.tagName === 'INPUT' || target.contentEditable === 'true') {\n                return;\n            }\n        }\n\n        if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) {\n            return;\n        }\n\n        if (event.key === 'Enter' && Array.isArray(actions) && actions.length) {\n            componentContext.execAnyActions(actions);\n            event.preventDefault();\n        }\n    }\n\n    onMount(() => {\n        if (id && !hasInnerFocusable) {\n            rootCtx.registerFocusable(id, {\n                focus() {\n                    if (node && (href || hasJSAction)) {\n                        node.focus();\n                    }\n                }\n            });\n        }\n    });\n\n    onDestroy(() => {\n        if (typeof window !== 'undefined') {\n            window.removeEventListener('pointermove', onPointerMove);\n            window.removeEventListener('pointerup', onPointerUp);\n            window.removeEventListener('pointercancel', onPointerUp);\n        }\n\n        if (id && !hasInnerFocusable) {\n            rootCtx.unregisterFocusable(id);\n        }\n        if (longtapTimer) {\n            clearTimeout(longtapTimer);\n        }\n        if (clickTimer) {\n            clearTimeout(clickTimer);\n        }\n    });\n</script>\n\n{#if href}\n    <a\n        bind:this={node}\n        use:use\n        {href}\n        {target}\n        {style}\n        {role}\n        aria-checked={isChecked}\n        class=\"{cls} {rootCss['root__any-actions']} {isNativeActionAnimation ? rootCss.root__clickable : rootCss['root__clickable-no-transition']} {longTapActions?.length ? rootCss['root_disabled-context-menu'] : ''}\"\n        on:click\n        on:keydown={onKeydown}\n        on:focus\n        on:blur\n        {...attrs}\n    >\n        <slot />\n    </a>\n{:else if hasJSAction}\n    <button\n        bind:this={node}\n        use:use\n        class=\"{cls} {css.actionable__button} {rootCss['root__any-actions']}{` ${isNativeActionAnimation ? rootCss.root__clickable : rootCss['root__clickable-no-transition']} ${rootCss.root__unselectable}` } {longTapActions?.length ? rootCss['root_disabled-context-menu'] : ''}\"\n        {style}\n        {role}\n        aria-checked={isChecked}\n        type=\"button\"\n        on:click\n        on:keydown={onKeydown}\n        on:focus\n        on:blur\n        {...attrs}\n    >\n        <slot />\n    </button>\n{:else}\n    <span\n        bind:this={node}\n        use:use\n        class=\"{cls} {longTapActions?.length ? rootCss['root_disabled-context-menu'] : ''} {hasAnyActions ? rootCss['root__any-actions'] : ''}\"\n        {style}\n        {role}\n        aria-checked={isChecked}\n        aria-hidden={ariaHidden || undefined}\n        on:click\n        on:keydown={onKeydown}\n        on:focus\n        on:blur\n        {...attrs}\n    >\n        <slot />\n    </span>\n{/if}\n","import { isNumber } from './isNumber';\n\nexport function isPositiveNumber(val: number | undefined): val is number {\n    return isNumber(val) && val > 0;\n}\n","import type { Filter } from '../types/filter';\nimport type { MaybeMissing } from '../expressions/json';\nimport { type LogError, wrapError } from './wrapError';\nimport { isPositiveNumber } from './isPositiveNumber';\nimport { pxToEmWithUnits } from './pxToEm';\n\nexport function getCssFilter(\n    filters: MaybeMissing<Filter>[],\n    logError: LogError\n): string {\n    return filters.map(filter => {\n        if (!filter) {\n            logError(wrapError(new Error('Incorrect filter'), {\n                level: 'warn'\n            }));\n            return;\n        }\n        if (filter.type === 'blur') {\n            if (isPositiveNumber(filter.radius)) {\n                return `blur(${pxToEmWithUnits(filter.radius / 2)})`;\n            }\n        } else if (filter.type === 'rtl_mirror') {\n            // processed in component\n            return;\n        } else {\n            logError(wrapError(new Error('Unknown filter'), {\n                level: 'warn',\n                additional: {\n                    filter: filter.type\n                }\n            }));\n        }\n    }).filter(Boolean).join(' ');\n}\n","<script lang=\"ts\">\n    import css from './OuterBackground.module.css';\n\n    import type { Style } from '../../types/general';\n    import type { Background } from '../../types/background';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { Direction } from '../../../typings/common';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { getBackground } from '../../utils/background';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { getCssFilter } from '../../utils/filters';\n\n    export let direction: Direction;\n    export let componentContext: ComponentContext;\n    export let background: MaybeMissing<Background[]> = [];\n    export let radius = '';\n\n    $: styles = background.map(bg => {\n        const stl: Style = {};\n        const obj: {\n            image_url?: string;\n            style: Style;\n        } = {\n            style: stl\n        };\n\n        if (bg.type === 'nine_patch_image' && bg.insets) {\n            stl['border-image'] = `url(\"${bg.image_url}\") ${bg.insets.top || 0} ${bg.insets.right || 0} ${bg.insets.bottom || 0} ${bg.insets.left || 0} fill`;\n            stl['border-image-width'] = 'auto';\n        } else {\n            const res = getBackground([bg]);\n\n            if (bg.type === 'solid') {\n                stl['background-color'] = res.color;\n            }\n            if (bg.type === 'gradient') {\n                stl['background-image'] = res.image;\n            }\n            if (bg.type === 'image') {\n                stl.opacity = Number(bg.alpha);\n                obj.image_url = bg.image_url;\n                stl['object-fit'] = res.size;\n                stl['object-position'] = res.position;\n\n                if (Array.isArray(bg.filters) && bg.filters.length) {\n                    stl.filter = getCssFilter(bg.filters, componentContext.logError);\n\n                    if (direction === 'rtl' && bg.filters.some(it => it.type === 'rtl_mirror')) {\n                        stl.transform = 'scale(-1,1)';\n                    }\n                }\n            }\n        }\n\n        return obj;\n    });\n\n    function onImgError(event: Event): void {\n        if (event.target && 'classList' in event.target) {\n            (event.target as HTMLElement).classList.add(css['outer-background__item_hidden']);\n        }\n    }\n</script>\n\n<span\n    class={css['outer-background'] + (radius ? ' ' + css['outer-background_clip'] : '')}\n    style:border-radius={radius}\n>\n    {#each styles as item}\n        {#if item.image_url}\n            <img\n                src={item.image_url}\n                alt=\"\"\n                aria-hidden=\"true\"\n                loading=\"lazy\"\n                decoding=\"async\"\n                class={css['outer-background__item']}\n                style={makeStyle(item.style)}\n                on:error={onImgError}\n            >{:else}<span class={css['outer-background__item']} style={makeStyle(item.style)}></span>\n        {/if}\n    {/each}\n</span>\n","<script lang=\"ts\" context=\"module\">\n    const HORIZONTAL_ALIGN_TO_GENERAL_LTR = {\n        left: 'start',\n        center: 'center',\n        right: 'end',\n        start: 'start',\n        end: 'end'\n    };\n\n    const HORIZONTAL_ALIGN_TO_GENERAL_RTL = {\n        left: 'end',\n        center: 'center',\n        right: 'start',\n        start: 'start',\n        end: 'end'\n    };\n\n    const VERTICAL_ALIGN_TO_GENERAL = {\n        top: 'start',\n        center: 'center',\n        bottom: 'end',\n        baseline: 'baseline'\n    };\n\n    const stateChangeErrorMessage = (prop: string) =>\n        `The component id with the \"${prop}\" property for state change is missing. Either specify the id, or specify the \"transition_trigger\" property without \"state_change\" value.`;\n</script>\n\n<script lang=\"ts\">\n    import { afterUpdate, getContext, onDestroy, tick } from 'svelte';\n    import { get } from 'svelte/store';\n\n    import css from './Outer.module.css';\n\n    import type { DivBaseData, Extension } from '../../types/base';\n    import type { Mods, Style } from '../../types/general';\n    import type { DivActionableData } from '../../types/actionable';\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivExtension } from '../../../typings/common';\n    import type { Visibility } from '../../types/base';\n    import type { Action, DivBase } from '../../../typings/common';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { EdgeInsets } from '../../types/edgeInserts';\n    import type { CornersRadius } from '../../types/border';\n    import type { FixedSize, MatchParentSize, WrapContentSize } from '../../types/sizes';\n    import type { Background } from '../../types/background';\n    import type { Animation, AnyAnimation } from '../../types/animation';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n    import { getBackground } from '../../utils/background';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { visibilityAction } from '../../use/visibilityAction';\n    import { genClassName } from '../../utils/genClassName';\n    import { devtool, type DevtoolResult } from '../../use/devtool';\n    import { STATE_CTX, type StateCtxValue } from '../../context/state';\n    import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n    import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n    import { correctAlpha } from '../../utils/correctAlpha';\n    import { assignIfDifferent } from '../../utils/assignIfDifferent';\n    import { correctColor } from '../../utils/correctColor';\n    import { correctVisibility } from '../../utils/correctVisibility';\n    import { wrapError } from '../../utils/wrapError';\n    import { correctCSSInterpolator } from '../../utils/correctCSSInterpolator';\n    import { correctNumber } from '../../utils/correctNumber';\n    import { flattenAnimation } from '../../utils/flattenAnimation';\n    import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n    import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n    import { sumEdgeInsets } from '../../utils/sumEdgeInsets';\n    import { correctBorderRadiusObject } from '../../utils/correctBorderRadiusObject';\n    import { borderRadius } from '../../utils/borderRadius';\n    import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n    import { Truthy } from '../../utils/truthy';\n    import { shadowToCssBoxShadow } from '../../utils/shadow';\n    import { isDeepEqual } from '../../utils/isDeepEqual';\n    import { filterEnabledActions } from '../../utils/filterEnabledActions';\n    import { isPrefersReducedMotion } from '../../utils/isPrefersReducedMotion';\n    import { layoutProvider } from '../../use/layoutProvider';\n    import { ENABLED_CTX, type EnabledCtxValue } from '../../context/enabled';\n    import { correctBooleanInt } from '../../utils/correctBooleanInt';\n    import { composeAccessibilityDescription } from '../../utils/composeAccessibilityDescription';\n    import Actionable from './Actionable.svelte';\n    import OuterBackground from './OuterBackground.svelte';\n\n    export let componentContext: ComponentContext<DivBaseData & DivActionableData>;\n    export let cls = '';\n    export let style: Style | undefined = undefined;\n    export let layoutParams: LayoutParams = {};\n    export let customDescription = false;\n    export let customPaddings = false;\n    export let customActions = '';\n    export let additionalPaddings: EdgeInsets | null = null;\n    export let heightByAspect = false;\n    export let parentOf: {\n        json: MaybeMissing<DivBaseData> | undefined;\n        id: string | undefined;\n    }[] | undefined = undefined;\n    export let parentOfSimpleMode: boolean | undefined = undefined;\n    export let replaceItems: ((items: (MaybeMissing<DivBaseData> | undefined)[]) => void) | undefined = undefined;\n    export let hasInnerFocusable = false;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n    const stateCtx = getContext<StateCtxValue>(STATE_CTX);\n    const { isEnabled } = getContext<EnabledCtxValue>(ENABLED_CTX);\n    const direction = rootCtx.direction;\n\n    let currentNode: HTMLElement;\n    let attrs: Record<string, string> | undefined;\n    let extensions: DivExtension[] | null = null;\n\n    let prevChilds: string[] = [];\n\n    let borderStyle: Style = {};\n    let borderElemStyle: Style = {};\n    let hasBorder = false;\n    let strokeWidth = 1;\n    let strokeColor = 'transparent';\n    let cornerRadius = 0;\n    let cornersRadius: CornersRadius = {\n        'top-left': 0,\n        'top-right': 0,\n        'bottom-right': 0,\n        'bottom-left': 0\n    };\n    let backgroundRadius = '';\n\n    let selfPadding: EdgeInsets | null = null;\n    let margin = '';\n\n    let widthMods: Mods = {};\n    let width: string | undefined;\n    let widthMin: string | undefined;\n    let widthMax: string | undefined;\n    let widthNum = 0;\n    let widthFlexGrow = 0;\n    let widthFlexShrink = 0;\n    let widthFill = false;\n    let hasWidthError = false;\n\n    let heightMods: Mods = {};\n    let height: string | undefined;\n    let heightMin: string | undefined;\n    let heightMax: string | undefined;\n    let heightNum = 0;\n    let heightFlexGrow = 0;\n    let heightFlexShrink = 0;\n    let heightFill = false;\n    let hasHeightError = false;\n\n    let alpha = 1;\n    let opacity: number | undefined;\n\n    let background: MaybeMissing<Background[]> | undefined;\n    let backgroundStyle: Style;\n    let hasSeparateBg: boolean;\n\n    let jsonTransitionTriggers = [];\n    let hasStateChangeTrigger = false;\n    let hasVisibilityChangeTrigger = false;\n\n    let stateChangingInProgress: boolean | undefined;\n    let visibilityChangingInProgress: boolean | undefined;\n    let transitionChangeInProgress: boolean | undefined;\n\n    let actions: MaybeMissing<Action>[] = [];\n    let doubleTapActions: MaybeMissing<Action>[] = [];\n    let longTapActions: MaybeMissing<Action>[] = [];\n    let focusActions: MaybeMissing<Action>[] = [];\n    let blurActions: MaybeMissing<Action>[] = [];\n    let pressStartActions: MaybeMissing<Action>[] = [];\n    let pressEndActions: MaybeMissing<Action>[] = [];\n    let hoverStartActions: MaybeMissing<Action>[] = [];\n    let hoverEndActions: MaybeMissing<Action>[] = [];\n\n    let actionAnimationList: MaybeMissing<AnyAnimation>[] = [];\n    let actionAnimationTransition = '';\n    let animationOpacityStart: number | undefined = undefined;\n    let animationOpacityEnd: number | undefined = undefined;\n    let animationScaleStart: number | undefined = undefined;\n    let animationScaleEnd: number | undefined = undefined;\n\n    let isVisibilityInited = false;\n    let visibility: Visibility = 'visible';\n\n    let pivotXNum = 0;\n    let pivotYNum = 0;\n    let transformOrigin: string | undefined;\n    let transform: string | undefined;\n\n    let layoutProviderResizeObserver: ResizeObserver | undefined;\n\n    let hasCustomFocus = false;\n    let captureFocusOnAction = true;\n\n    let prevExtensionsVal: MaybeMissing<Extension>[] | undefined = undefined;\n    let prevTriggersUnsubscribe: (() => void) | undefined = undefined;\n\n    let registred: {\n        destroy(): void;\n    } | undefined;\n    let dev: DevtoolResult | null = null;\n    let idUnregister: (() => void) | undefined;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        selfPadding = null;\n        margin = '';\n        alpha = 1;\n        isVisibilityInited = false;\n        visibility = 'visible';\n        pivotXNum = 0;\n        pivotYNum = 0;\n        transformOrigin = undefined;\n        transform = undefined;\n        captureFocusOnAction = true;\n\n        jsonTransitionTriggers = componentContext.fakeElement ?\n            [] :\n            (componentContext.json.transition_triggers || ['state_change', 'visibility_change']);\n        hasStateChangeTrigger = Boolean(jsonTransitionTriggers.indexOf('state_change') !== -1);\n        hasVisibilityChangeTrigger = Boolean(jsonTransitionTriggers.indexOf('visibility_change') !== -1);\n\n        if (currentNode) {\n            useAction(currentNode);\n        }\n\n        prevTriggersUnsubscribe?.();\n        if ($isEnabled) {\n            prevTriggersUnsubscribe = rootCtx.processVariableTriggers(\n                componentContext,\n                componentContext.json.variable_triggers\n            );\n        }\n    }\n\n    // If origJson is same, than the component itself is the same\n    // componentContext could be changed\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: if ($isEnabled) {\n        prevTriggersUnsubscribe?.();\n        prevTriggersUnsubscribe = rootCtx.processVariableTriggers(\n            componentContext,\n            componentContext.json.variable_triggers\n        );\n    } else {\n        prevTriggersUnsubscribe?.();\n    }\n\n    $: jsonFocus = componentContext.getDerivedFromVars(componentContext.json.focus);\n    $: jsonBorder = componentContext.getDerivedFromVars(componentContext.json.border);\n    $: jsonPaddings = componentContext.getDerivedFromVars(componentContext.json.paddings);\n    $: jsonMargins = componentContext.getDerivedFromVars(componentContext.json.margins);\n    $: jsonWidth = componentContext.getDerivedFromVars(componentContext.json.width);\n    $: jsonAlignmentHorizontal = componentContext.getDerivedFromVars(componentContext.json.alignment_horizontal);\n    $: jsonHeight = componentContext.getDerivedFromVars(componentContext.json.height);\n    $: jsonAlignmentVertical = componentContext.getDerivedFromVars(componentContext.json.alignment_vertical);\n    $: jsonAlpha = componentContext.getDerivedFromVars(componentContext.json.alpha);\n    $: jsonAccessibility = componentContext.getDerivedFromVars(componentContext.json.accessibility);\n    $: jsonBackground = componentContext.getDerivedFromVars(componentContext.json.background);\n    $: jsonAction = componentContext.getDerivedFromVars(\n        componentContext.json.action, undefined, true\n    );\n    $: jsonActions = componentContext.getDerivedFromVars(\n        componentContext.json.actions, undefined, true\n    );\n    $: jsonDoubleTapActions = componentContext.getDerivedFromVars(\n        componentContext.json.doubletap_actions, undefined, true\n    );\n    $: jsonLongTapActions = componentContext.getDerivedFromVars(\n        componentContext.json.longtap_actions, undefined, true\n    );\n    $: jsonPressStartActions = componentContext.getDerivedFromVars(\n        componentContext.json.press_start_actions, undefined, true\n    );\n    $: jsonPressEndActions = componentContext.getDerivedFromVars(\n        componentContext.json.press_end_actions, undefined, true\n    );\n    $: jsonHoverStartActions = componentContext.getDerivedFromVars(\n        componentContext.json.hover_start_actions, undefined, true\n    );\n    $: jsonHoverEndActions = componentContext.getDerivedFromVars(\n        componentContext.json.hover_end_actions, undefined, true\n    );\n    $: jsonActionAnimation = componentContext.getDerivedFromVars(componentContext.json.action_animation);\n    $: jsonVisibility = componentContext.getDerivedFromVars(componentContext.json.visibility);\n    $: jsonTransform = componentContext.getDerivedFromVars(componentContext.json.transform);\n    $: jsonCaptureFocusOnAction = componentContext.getDerivedFromVars(componentContext.json.capture_focus_on_action);\n\n    $: {\n        prevChilds.forEach(id => {\n            rootCtx.unregisterParentOf(id);\n        });\n        prevChilds = [];\n        if (parentOf) {\n            parentOf.forEach(item => {\n                if (item?.id) {\n                    prevChilds.push(item.id);\n                    rootCtx.registerParentOf(item.id, {\n                        replaceWith,\n                        isSingleMode: Boolean(parentOfSimpleMode)\n                    });\n                }\n            });\n        }\n    }\n\n    function replaceWith(id: string, items?: DivBase[]): void {\n        if (!Array.isArray(parentOf) || !replaceItems) {\n            return;\n        }\n\n        if (parentOfSimpleMode) {\n            const newItemsLen = Array.isArray(items) ? items.length : 0;\n            if (newItemsLen !== 1) {\n                return;\n            }\n        }\n\n        const index = parentOf.findIndex(item => item?.id === id);\n        const newItems = parentOf.slice();\n        newItems.splice(index, 1, ...(items || [] as DivBase[]).map(it => ({\n            json: it,\n            id: it?.id as string | undefined\n        })));\n\n        parentOf = newItems;\n\n        replaceItems(newItems.map(it => it?.json));\n    }\n\n    $: {\n        const border = hasCustomFocus && $jsonFocus?.border ? $jsonFocus.border : $jsonBorder;\n        let newBorderStyle: Style = {};\n        let newBorderElemStyle: Style = {};\n        let newHasBorder = false;\n        let newBackgroundRadius = '';\n\n        if (border) {\n            if (correctBooleanInt(border.has_shadow, false)) {\n                const shadow = border.shadow;\n                if (shadow) {\n                    newBorderStyle['box-shadow'] = shadowToCssBoxShadow(shadow);\n                } else {\n                    newBorderStyle['box-shadow'] = '0 1px 2px 0 rgba(0,0,0,.18), 0 0 0 1px rgba(0,0,0,.07)';\n                }\n            }\n            if (border.stroke) {\n                newHasBorder = true;\n                strokeWidth = correctNonNegativeNumber(border.stroke.width, strokeWidth);\n                strokeColor = correctColor(border.stroke.color, 1, strokeColor);\n                const strokeStyle = border.stroke.style?.type === 'dashed' ? 'dashed' : 'solid';\n                newBorderElemStyle['--divkit-border'] = `${pxToEm(strokeWidth + 1)} ${strokeStyle} ${strokeColor}`;\n            }\n            if (border.corners_radius && typeof border.corners_radius === 'object') {\n                cornersRadius = correctBorderRadiusObject(border.corners_radius, cornersRadius);\n                newBorderStyle['border-radius'] = borderRadius(cornersRadius);\n                const biasedRadius: CornersRadius = {};\n                ([\n                    'top-left',\n                    'top-right',\n                    'bottom-right',\n                    'bottom-left'\n                ] as const).forEach(corner => {\n                    biasedRadius[corner] = (cornersRadius[corner] || 0) + 1;\n                });\n                newBorderElemStyle['--divkit-border-radius'] = borderRadius(biasedRadius);\n            } else if (border.corner_radius) {\n                cornerRadius = correctNonNegativeNumber(border.corner_radius, cornerRadius);\n                cornersRadius = {\n                    'top-left': cornerRadius,\n                    'top-right': cornerRadius,\n                    'bottom-right': cornerRadius,\n                    'bottom-left': cornerRadius\n                };\n                newBorderStyle['border-radius'] = pxToEm(cornerRadius);\n                newBorderElemStyle['--divkit-border-radius'] = pxToEm(cornerRadius + 1);\n            }\n\n            // Clip browser rendering artifacts by border-radius + border-width/2\n            if (newHasBorder && strokeWidth && (border.corners_radius || border.corner_radius)) {\n                let radius: CornersRadius = { ...cornersRadius };\n\n                ([\n                    'top-left',\n                    'top-right',\n                    'bottom-right',\n                    'bottom-left'\n                ] as const).forEach(corner => {\n                    radius[corner] = (radius[corner] || 0) + strokeWidth / 2;\n                });\n\n                newBackgroundRadius = borderRadius(radius);\n            }\n        }\n        borderStyle = assignIfDifferent(newBorderStyle, borderStyle);\n        borderElemStyle = assignIfDifferent(newBorderElemStyle, borderElemStyle);\n        hasBorder = newHasBorder;\n        backgroundRadius = newBackgroundRadius;\n    }\n\n    $: {\n        selfPadding = correctEdgeInsertsObject(\n            ($jsonPaddings && !customPaddings) ?\n                $jsonPaddings :\n                undefined,\n            selfPadding\n        );\n    }\n\n    $: padding = edgeInsertsToCss(sumEdgeInsets(selfPadding, additionalPaddings), $direction);\n\n    $: {\n        margin = correctEdgeInserts($jsonMargins, $direction, margin);\n    }\n    $: {\n        let widthType: 'parent' | 'content' | undefined = undefined;\n        let newWidth: string | undefined = undefined;\n        let newWidthMin: string | undefined = undefined;\n        let newWidthMax: string | undefined = undefined;\n        let newWidthMods: Mods = {};\n        let newFlexGrow = 0;\n        let newFlexShrink = 0;\n        let newWidthFill = false;\n        let newWidthError = false;\n\n        const type = componentContext.json.width?.type;\n\n        if (type === 'fixed') {\n            widthNum = correctNonNegativeNumber(($jsonWidth as FixedSize)?.value, widthNum);\n            newWidth = pxToEm(widthNum);\n        } else if (\n            type === 'wrap_content' ||\n            (type === 'match_parent' || !type) && layoutParams.parentHorizontalWrapContent\n        ) {\n            widthType = 'content';\n            if (\n                type === 'wrap_content' && ($jsonWidth as WrapContentSize)?.constrained ||\n                (type === 'match_parent' || !type) && layoutParams.parentHorizontalWrapContent\n            ) {\n                newWidthMods['width-constrained'] = true;\n                if (layoutParams.parentContainerOrientation === 'horizontal') {\n                    newFlexShrink = 1;\n                }\n            }\n\n            if (type === 'wrap_content') {\n                const width = $jsonWidth as WrapContentSize;\n                if (width.min_size && isNonNegativeNumber(width.min_size.value)) {\n                    newWidthMin = pxToEm(width.min_size.value);\n                }\n                if (width.max_size && isNonNegativeNumber(width.max_size.value)) {\n                    newWidthMax = pxToEm(width.max_size.value);\n                }\n            }\n\n            if (type === 'match_parent' || !type) {\n                componentContext.logError(wrapError(new Error('Incorrect child size. Container with wrap_content size contains child with match_parent size along the main axis'), {\n                    level: 'warn'\n                }));\n            }\n        } else {\n            widthType = 'parent';\n            if (layoutParams.parentContainerOrientation === 'vertical' && layoutParams.parentContainerWrap) {\n                newWidthError = true;\n                componentContext.logError(wrapError(new Error('Cannot place a match_parent items on the cross-axis of wrap'), {\n                    level: 'error'\n                }));\n            }\n            if (layoutParams.parentLayoutOrientation === 'vertical' || layoutParams.stretchWidth) {\n                const leftMargin = ($direction === 'ltr' ? $jsonMargins?.start : $jsonMargins?.end) ??\n                    $jsonMargins?.left ??\n                    0;\n                const rightMargin = ($direction === 'ltr' ? $jsonMargins?.end : $jsonMargins?.start) ??\n                    $jsonMargins?.right ??\n                    0;\n                const totalWidth = `calc(100% - ${pxToEmWithUnits(leftMargin + rightMargin)})`;\n\n                if (layoutParams.stretchWidth) {\n                    // force preferred width to 0\n                    newWidth = '0';\n                    newWidthMin = totalWidth;\n                } else {\n                    newWidth = totalWidth;\n                }\n            } else if (layoutParams.parentContainerOrientation === 'horizontal') {\n                newFlexGrow = $jsonWidth && 'weight' in $jsonWidth && $jsonWidth.weight || 1;\n                if (layoutParams.parentContainerWrap) {\n                    newWidthFill = true;\n                }\n            }\n        }\n\n        if (widthType === 'parent') {\n            newWidthMods['halign-self'] = 'stretch';\n        } else {\n            const align = $jsonAlignmentHorizontal;\n            if (align === 'left' || align === 'center' || align === 'right' || align === 'start' || align === 'end') {\n                newWidthMods['halign-self'] = (\n                    $direction === 'ltr' ?\n                        HORIZONTAL_ALIGN_TO_GENERAL_LTR :\n                        HORIZONTAL_ALIGN_TO_GENERAL_RTL\n                )[align];\n            } else {\n                newWidthMods['halign-self'] = layoutParams.parentHAlign || 'start';\n            }\n        }\n\n        if (widthType) {\n            newWidthMods.width = widthType;\n        }\n\n        width = newWidth;\n        widthMin = newWidthMin;\n        widthMax = newWidthMax;\n        widthFlexGrow = newFlexGrow;\n        widthFlexShrink = newFlexShrink;\n        widthMods = assignIfDifferent(newWidthMods, widthMods);\n        widthFill = newWidthFill;\n        hasWidthError = newWidthError;\n    }\n\n    $: {\n        let heightType: 'parent' | 'content' | undefined = undefined;\n        let newHeight: string | undefined = undefined;\n        let newHeightMin: string | undefined = undefined;\n        let newHeightMax: string | undefined = undefined;\n        let newHeightMods: Mods = {};\n        let newFlexGrow = 0;\n        let newFlexShrink = 0;\n        let newHeightFill = false;\n        let newHeightError = false;\n\n        const type = componentContext.json.height?.type;\n\n        if (heightByAspect) {\n            // auto height\n            // no special css needed, so no special heightType\n        } else if (type === 'fixed') {\n            heightNum = correctNonNegativeNumber(($jsonHeight as FixedSize)?.value, heightNum);\n            newHeight = pxToEm(heightNum);\n        } else if (type === 'match_parent' && !layoutParams.parentVerticalWrapContent) {\n            heightType = 'parent';\n            if (layoutParams.parentContainerOrientation === 'horizontal' && layoutParams.parentContainerWrap) {\n                newHeightError = true;\n                componentContext.logError(wrapError(new Error('Cannot place a match_parent items on the cross-axis of wrap'), {\n                    level: 'error'\n                }));\n            }\n            if (layoutParams.parentLayoutOrientation === 'horizontal' || layoutParams.stretchHeight) {\n                const topMargin = $jsonMargins?.top ?? 0;\n                const bottomMargin = $jsonMargins?.bottom ?? 0;\n                const totalHeight = `calc(100% - ${pxToEmWithUnits(topMargin + bottomMargin)})`;\n\n                if (layoutParams.stretchHeight) {\n                    // force preferred height to 0\n                    newHeight = '0';\n                    newHeightMin = totalHeight;\n                } else {\n                    newHeight = totalHeight;\n                }\n            } else if (layoutParams.parentContainerOrientation === 'vertical') {\n                newFlexGrow = ($jsonHeight as MatchParentSize)?.weight || 1;\n                if (layoutParams.parentContainerWrap) {\n                    newHeightFill = true;\n                }\n            }\n        } else {\n            heightType = 'content';\n            if (\n                type === 'wrap_content' && ($jsonHeight as WrapContentSize)?.constrained ||\n                type === 'match_parent' && layoutParams.parentVerticalWrapContent\n            ) {\n                newHeightMods['height-constrained'] = true;\n                if (layoutParams.parentContainerOrientation === 'vertical') {\n                    newFlexShrink = 1;\n                }\n            }\n\n            if (type === 'wrap_content') {\n                const height = $jsonHeight as WrapContentSize;\n                if (height?.min_size && isNonNegativeNumber(height.min_size.value)) {\n                    newHeightMin = pxToEm(height.min_size.value);\n                }\n                if (height?.max_size && isNonNegativeNumber(height.max_size.value)) {\n                    newHeightMax = pxToEm(height.max_size.value);\n                }\n            }\n\n            if (type === 'match_parent') {\n                componentContext.logError(wrapError(new Error('Incorrect child size. Container with wrap_content size contains child with match_parent size along the main axis'), {\n                    level: 'warn'\n                }));\n            }\n        }\n\n        if (heightType === 'parent') {\n            newHeightMods['valign-self'] = 'stretch';\n        } else {\n            const align = $jsonAlignmentVertical;\n            if (\n                align === 'top' ||\n                align === 'center' ||\n                align === 'bottom' ||\n                align === 'baseline' && layoutParams.parentContainerOrientation === 'horizontal'\n            ) {\n                newHeightMods['valign-self'] = VERTICAL_ALIGN_TO_GENERAL[align];\n            } else {\n                newHeightMods['valign-self'] = layoutParams.parentVAlign || 'start';\n            }\n        }\n\n        if (heightType) {\n            newHeightMods.height = heightType;\n        }\n\n        height = newHeight;\n        heightMin = newHeightMin;\n        heightMax = newHeightMax;\n        heightFlexGrow = newFlexGrow;\n        heightFlexShrink = newFlexShrink;\n        heightMods = assignIfDifferent(newHeightMods, heightMods);\n        heightFill = newHeightFill;\n        hasHeightError = newHeightError;\n    }\n\n    $: parentOverlapMod = layoutParams.overlapParent ? true : undefined;\n\n    $: gridArea = layoutParams.gridArea ?\n        `${layoutParams.gridArea.y + 1}/${layoutParams.gridArea.x + 1}/span ${layoutParams.gridArea.rowSpan}/span ${layoutParams.gridArea.colSpan}` :\n        undefined;\n\n    $: {\n        alpha = correctAlpha($jsonAlpha, alpha);\n        opacity = alpha === 1 ? undefined : alpha;\n    }\n\n    $: {\n        attrs = undefined;\n        if ($jsonAccessibility && !customDescription) {\n            const descr = composeAccessibilityDescription($jsonAccessibility);\n            if (descr) {\n                attrs = {};\n                attrs['aria-label'] = descr;\n            }\n        }\n    }\n\n    $: {\n        background = hasCustomFocus && $jsonFocus?.background ? $jsonFocus.background : $jsonBackground;\n        backgroundStyle = {};\n        hasSeparateBg = false;\n        if (Array.isArray(background)) {\n            hasSeparateBg =\n                background.some(it => it.type === 'image' || it.type === 'nine_patch_image') ||\n                Boolean(backgroundRadius);\n\n            if (!hasSeparateBg) {\n                const res = getBackground(background);\n                backgroundStyle['background-color'] = res.color;\n                backgroundStyle['background-image'] = res.image;\n                backgroundStyle['background-size'] = res.size;\n                backgroundStyle['background-position'] = res.position;\n                backgroundStyle['background-repeat'] = 'no-repeat';\n            }\n        }\n    }\n\n    $: {\n        stateChangingInProgress = undefined;\n        if (hasStateChangeTrigger && componentContext.id && componentContext.json.transition_in && rootCtx.isRunning('stateChange')) {\n            stateChangingInProgress = true;\n        }\n    }\n    $: {\n        transitionChangeInProgress = undefined;\n        if (\n            hasStateChangeTrigger &&\n            componentContext.id &&\n            rootCtx.isRunning('stateChange') && stateCtx.hasTransitionChange(componentContext.id)\n        ) {\n            transitionChangeInProgress = true;\n        }\n    }\n\n    $: {\n        let newActions = $jsonActions || $jsonAction && [$jsonAction] || [];\n        let newDoubleTapActions = $jsonDoubleTapActions || [];\n        let newLongTapActions = $jsonLongTapActions || [];\n        let newFocusActions = $jsonFocus?.on_focus || [];\n        let newBlurActions = $jsonFocus?.on_blur || [];\n        let newPressStartActions = $jsonPressStartActions || [];\n        let newPressEndActions = $jsonPressEndActions || [];\n        let newHoverStartActions = $jsonHoverStartActions || [];\n        let newHoverEndActions = $jsonHoverEndActions || [];\n\n        if (componentContext.fakeElement) {\n            newActions = [];\n            newDoubleTapActions = [];\n            newLongTapActions = [];\n            newFocusActions = [];\n            newBlurActions = [];\n        } else {\n            if (!Array.isArray(newActions)) {\n                newActions = [];\n                componentContext.logError(wrapError(new Error('Actions should be array')));\n            }\n            if (!Array.isArray(newDoubleTapActions)) {\n                newDoubleTapActions = [];\n                componentContext.logError(wrapError(new Error('DoubleTapActions should be array')));\n            }\n            if (!Array.isArray(newLongTapActions)) {\n                newLongTapActions = [];\n                componentContext.logError(wrapError(new Error('LongTapActions should be array')));\n            }\n            if (!Array.isArray(newFocusActions)) {\n                newFocusActions = [];\n                componentContext.logError(wrapError(new Error('FocusActions should be array')));\n            }\n            if (!Array.isArray(newBlurActions)) {\n                newBlurActions = [];\n                componentContext.logError(wrapError(new Error('BlurActions should be array')));\n            }\n            if (!Array.isArray(newPressStartActions)) {\n                newPressStartActions = [];\n                componentContext.logError(wrapError(new Error('PressStartActions should be array')));\n            }\n            if (!Array.isArray(newPressEndActions)) {\n                newPressEndActions = [];\n                componentContext.logError(wrapError(new Error('PressEndActions should be array')));\n            }\n            if (!Array.isArray(newHoverStartActions)) {\n                newHoverStartActions = [];\n                componentContext.logError(wrapError(new Error('HoverStartActions should be array')));\n            }\n            if (!Array.isArray(newHoverEndActions)) {\n                newHoverEndActions = [];\n                componentContext.logError(wrapError(new Error('HoverEndActions should be array')));\n            }\n        }\n\n        if ((\n            newActions.length ||\n            newDoubleTapActions.length ||\n            newLongTapActions.length ||\n            pressStartActions.length ||\n            pressEndActions.length ||\n            hoverStartActions.length ||\n            hoverEndActions.length\n        ) && customActions) {\n            newActions = [];\n            newDoubleTapActions = [];\n            newLongTapActions = [];\n            pressStartActions = [];\n            pressEndActions = [];\n            hoverStartActions = [];\n            hoverEndActions = [];\n            componentContext.logError(wrapError(new Error(`Cannot use action on component \"${customActions}\"`)));\n        }\n\n        // todo check parent actions with customActions\n        actions = newActions.filter(filterEnabledActions);\n        doubleTapActions = newDoubleTapActions.filter(filterEnabledActions);\n        longTapActions = newLongTapActions.filter(filterEnabledActions);\n        focusActions = newFocusActions.filter(filterEnabledActions);\n        blurActions = newBlurActions.filter(filterEnabledActions);\n        pressStartActions = newPressStartActions.filter(filterEnabledActions);\n        pressEndActions = newPressEndActions.filter(filterEnabledActions);\n        hoverStartActions = newHoverStartActions.filter(filterEnabledActions);\n        hoverEndActions = newHoverEndActions.filter(filterEnabledActions);\n    }\n\n    $: {\n        if ($jsonActionAnimation) {\n            actionAnimationList = flattenAnimation($jsonActionAnimation as Animation);\n            actionAnimationTransition = actionAnimationList.map(parseActionAnimation).filter(Boolean).join(', ');\n        }\n    }\n\n    $: if (typeof $jsonCaptureFocusOnAction === 'boolean') {\n        captureFocusOnAction = $jsonCaptureFocusOnAction;\n    }\n\n    function hasNativeAnimation(list: MaybeMissing<AnyAnimation>[]) {\n        return list.some(it => it.name === 'native');\n    }\n\n    function parseActionAnimation(animation: MaybeMissing<AnyAnimation>): string {\n        const startValue = correctNumber(animation.start_value, 1);\n        const endValue = correctNumber(animation.end_value, 1);\n        const delay = correctNonNegativeNumber(animation.start_delay, 0);\n        const duration = isPrefersReducedMotion() ? 0 : correctNonNegativeNumber(animation.duration, 300);\n        const interpolator = correctCSSInterpolator(animation.interpolator, 'ease_in_out').replace(/_/g, '-');\n\n        switch (animation.name) {\n            case 'fade':\n                animationOpacityStart = startValue;\n                animationOpacityEnd = endValue;\n                return `opacity ${duration}ms ${interpolator} ${delay}ms`;\n            case 'scale':\n                animationScaleStart = startValue;\n                animationScaleEnd = endValue;\n                return `transform ${duration}ms ${interpolator} ${delay}ms`;\n            case 'native':\n            case 'no_animation':\n                return '';\n            default:\n                componentContext.logError(wrapError(new Error('Unknown action_animation name'), {\n                    additional: {\n                        animation: animation.name\n                    }\n                }));\n                return '';\n        }\n    }\n\n    $: {\n        const prevVisibility = visibility;\n        const nextVisibility = correctVisibility($jsonVisibility, visibility);\n\n        if (prevVisibility !== nextVisibility) {\n            if (isVisibilityInited && (visibility === 'visible' || nextVisibility === 'visible')) {\n                onVisibilityChange(nextVisibility);\n            } else {\n                visibility = nextVisibility;\n            }\n        }\n\n        if (!isVisibilityInited) {\n            isVisibilityInited = true;\n        }\n    }\n\n    async function onVisibilityChange(nextVisibility: Visibility) {\n        visibility = nextVisibility;\n\n        const direction = nextVisibility === 'visible' ? 'in' : 'out';\n        const transition = direction === 'in' ? componentContext.json.transition_in : componentContext.json.transition_out;\n\n        if (\n            hasVisibilityChangeTrigger &&\n            transition\n        ) {\n            let bbox: DOMRect | undefined;\n            if (nextVisibility === 'gone') {\n                bbox = currentNode.getBoundingClientRect();\n            }\n\n            await tick();\n\n            if (direction === 'in') {\n                visibilityChangingInProgress = true;\n            }\n            stateCtx.runVisibilityTransition(\n                {\n                    ...componentContext.json,\n                    visibility: 'visible'\n                } as DivBaseData,\n                componentContext,\n                transition,\n                currentNode,\n                direction,\n                bbox\n            ).then(() => {\n                if (direction === 'in') {\n                    visibilityChangingInProgress = false;\n                }\n            }).catch(e => {\n                if (direction === 'in') {\n                    visibilityChangingInProgress = false;\n                }\n                throw e;\n            });\n        }\n    }\n\n    function unmountExtensions(): void {\n        if (extensions && currentNode) {\n            const ctx = rootCtx.getExtensionContext(componentContext);\n            extensions.forEach(it => {\n                it.unmountView?.(currentNode, ctx);\n            });\n            extensions = null;\n        }\n    }\n\n    $: if (componentContext.json && currentNode && !isDeepEqual(componentContext.json.extensions, prevExtensionsVal)) {\n        let exts = prevExtensionsVal = componentContext.json.extensions;\n\n        tick().then(() => {\n            if (exts !== prevExtensionsVal || !currentNode) {\n                return;\n            }\n\n            unmountExtensions();\n\n            if (Array.isArray(componentContext.json.extensions)) {\n                const ctx = rootCtx.getExtensionContext(componentContext);\n                extensions = componentContext.json.extensions.map(it => {\n                    const id = it.id;\n                    if (!id) {\n                        return;\n                    }\n\n                    const instance = rootCtx.getExtension(id, it.params);\n\n                    if (instance) {\n                        instance.mountView?.(currentNode, ctx);\n                    }\n\n                    return instance;\n                }).filter(Truthy);\n            }\n        });\n    }\n\n    function afterInstanceUpdate(): void {\n        if (extensions?.length) {\n            const ctx = rootCtx.getExtensionContext(componentContext);\n            extensions.forEach(instance => {\n                instance.updateView?.(currentNode, ctx);\n            });\n        }\n        if (dev) {\n            dev.update(componentContext);\n        }\n    }\n\n    $: mods = {\n        ...widthMods,\n        ...heightMods,\n        'parent-overlap': parentOverlapMod,\n        'scroll-snap': layoutParams.scrollSnap,\n        'hide-on-transition-in': stateChangingInProgress ||\n            visibilityChangingInProgress ||\n            transitionChangeInProgress,\n        visibility,\n        'has-action-animation': Boolean(actionAnimationTransition),\n        'parent-flex': layoutParams.parentContainerOrientation || undefined,\n        'parent-grid': Boolean(layoutParams.gridArea) || undefined,\n        'has-custom-focus': Boolean(hasCustomFocus && componentContext.json.focus)\n    };\n\n    $: {\n        if ($jsonTransform && $jsonTransform.rotation !== undefined) {\n            const pivotX = $jsonTransform.pivot_x || {\n                type: 'pivot-percentage',\n                value: 50\n            };\n            pivotXNum = correctNumber(pivotX.value, pivotXNum);\n            const pivotXCSSValue = pivotX.type === 'pivot-fixed' ? pxToEm(pivotXNum) : `${pivotXNum}%`;\n            const pivotY = $jsonTransform.pivot_y || {\n                type: 'pivot-percentage',\n                value: 50\n            };\n            pivotYNum = correctNumber(pivotY.value, pivotYNum);\n            const pivotYCSSValue = pivotY.type === 'pivot-fixed' ? pxToEm(pivotYNum) : `${pivotYNum}%`;\n            transformOrigin = `${pivotXCSSValue} ${pivotYCSSValue}`;\n            transform = `rotate(${$jsonTransform.rotation}deg)`;\n        }\n    }\n\n    // eslint-disable-next-line no-nested-ternary\n    $: flexBasis = (widthFill || heightFill) ?\n        '100%' :\n        ((widthFlexGrow || heightFlexGrow) ? 0 : undefined);\n\n    $: stl = {\n        ...style,\n        ...backgroundStyle,\n        ...borderStyle,\n        width,\n        'min-width': widthMin,\n        'max-width': widthMax,\n        height,\n        'min-height': heightMin,\n        // input max-height\n        'max-height': heightMax || style?.['max-height'],\n        'grid-area': gridArea,\n        padding,\n        margin,\n        opacity,\n        transition: actionAnimationTransition,\n        'transform-origin': transformOrigin,\n        transform,\n        'flex-grow': widthFlexGrow || heightFlexGrow || undefined,\n        'flex-shrink': (widthFlexShrink || heightFlexShrink) ? 1 : undefined,\n        'flex-basis': flexBasis,\n        '--divkit-animation-opacity-start': animationOpacityStart,\n        '--divkit-animation-opacity-end': animationOpacityEnd,\n        '--divkit-animation-scale-start': animationScaleStart,\n        '--divkit-animation-scale-end': animationScaleEnd\n    };\n\n    function useAction(node: HTMLElement) {\n        registred?.destroy();\n\n        currentNode = node;\n        if (hasStateChangeTrigger && componentContext.json.transition_in) {\n            if (componentContext.id) {\n                stateCtx.registerChildWithTransitionIn(\n                    componentContext.json as DivBaseData,\n                    componentContext,\n                    componentContext.json.transition_in,\n                    node\n                ).then(() => {\n                    stateChangingInProgress = false;\n                }).catch(e => {\n                    stateChangingInProgress = false;\n                    throw e;\n                });\n            } else {\n                componentContext.logError(wrapError(new Error(stateChangeErrorMessage('transition_in')), {\n                    level: 'warn'\n                }));\n            }\n        }\n        if (hasStateChangeTrigger && componentContext.json.transition_out) {\n            if (componentContext.id) {\n                stateCtx.registerChildWithTransitionOut(\n                    componentContext.json as DivBaseData,\n                    componentContext,\n                    componentContext.json.transition_out,\n                    node\n                );\n            } else {\n                componentContext.logError(wrapError(new Error(stateChangeErrorMessage('transition_out')), {\n                    level: 'warn'\n                }));\n            }\n        }\n        if (!componentContext.fakeElement) {\n            if (componentContext.json.transition_change && !componentContext.id) {\n                componentContext.logError(wrapError(new Error(stateChangeErrorMessage('transition_change')), {\n                    level: 'warn'\n                }));\n            }\n            stateCtx.registerChildWithTransitionChange(\n                componentContext.json as DivBaseData,\n                componentContext,\n                componentContext.json.transition_change,\n                node\n            ).then(() => {\n                transitionChangeInProgress = false;\n            }).catch(e => {\n                transitionChangeInProgress = false;\n                throw e;\n            });\n        }\n\n        const visibilityActions = componentContext.fakeElement ?\n            [] :\n            (\n                componentContext.json.visibility_actions ||\n                componentContext.json.visibility_action && [componentContext.json.visibility_action]\n            );\n\n        const disappearActions = componentContext.fakeElement ? [] : componentContext.json.disappear_actions;\n\n        let visAction: {\n            destroy(): void;\n        } | undefined;\n        if (\n            Array.isArray(visibilityActions) && visibilityActions.length ||\n            Array.isArray(disappearActions) && disappearActions.length\n        ) {\n            visAction = visibilityAction(node, {\n                visibilityActions,\n                disappearActions,\n                rootCtx,\n                componentContext\n            });\n        }\n\n        const id = componentContext.id;\n        if (id) {\n            idUnregister?.();\n            idUnregister = rootCtx.registerId(id, {\n                context: () => componentContext,\n                node: () => currentNode\n            });\n            stateCtx.registerChild(id);\n        }\n\n        componentContext.json.tooltips?.forEach(tooltip => {\n            rootCtx.registerTooltip(node, tooltip);\n        });\n\n        if (layoutProviderResizeObserver) {\n            layoutProviderResizeObserver.disconnect();\n            layoutProviderResizeObserver = undefined;\n        }\n        layoutProviderResizeObserver = layoutProvider(\n            currentNode,\n            componentContext,\n            componentContext.json.layout_provider?.width_variable_name,\n            componentContext.json.layout_provider?.height_variable_name\n        );\n\n        if (devtool && !componentContext.fakeElement) {\n            dev = devtool(node, rootCtx, componentContext);\n        }\n\n        registred = {\n            destroy() {\n                if (idUnregister) {\n                    idUnregister();\n                    idUnregister = undefined;\n                }\n                if (id) {\n                    stateCtx.unregisterChild(id);\n                }\n                if (visAction) {\n                    visAction.destroy();\n                }\n                if (dev) {\n                    dev.destroy();\n                }\n            }\n        };\n\n        return registred;\n    }\n\n    function focusHandler() {\n        if (!componentContext.json.focus) {\n            return;\n        }\n\n        if (!get(rootCtx.isPointerFocus)) {\n            hasCustomFocus = true;\n        }\n\n        componentContext.execAnyActions(focusActions);\n    }\n\n    function blurHandler() {\n        if (!componentContext.json.focus) {\n            return;\n        }\n\n        hasCustomFocus = false;\n        componentContext.execAnyActions(blurActions);\n    }\n\n    afterUpdate(afterInstanceUpdate);\n\n    onDestroy(() => {\n        prevChilds.forEach(id => {\n            rootCtx.unregisterParentOf(id);\n        });\n        prevChilds = [];\n\n        if (layoutProviderResizeObserver) {\n            layoutProviderResizeObserver.disconnect();\n            layoutProviderResizeObserver = undefined;\n        }\n\n        componentContext.json.tooltips?.forEach(tooltip => {\n            rootCtx.unregisterTooltip(tooltip);\n        });\n\n        prevTriggersUnsubscribe?.();\n\n        unmountExtensions();\n    });\n</script>\n\n{#if !hasWidthError && !hasHeightError}\n    <Actionable\n        {componentContext}\n        id={componentContext.json.id}\n        use={useAction}\n        cls=\"{cls} {genClassName('outer', css, mods)}\"\n        style={makeStyle(stl)}\n        {actions}\n        {doubleTapActions}\n        {longTapActions}\n        {pressStartActions}\n        {pressEndActions}\n        {hoverStartActions}\n        {hoverEndActions}\n        {attrs}\n        {hasInnerFocusable}\n        isNativeActionAnimation={!actionAnimationList.length || hasNativeAnimation(actionAnimationList)}\n        customAccessibility={$jsonAccessibility}\n        {captureFocusOnAction}\n        on:focus={focusHandler}\n        on:blur={blurHandler}\n    >\n        <!-- eslint-disable-next-line max-len -->\n        {#if hasSeparateBg}<OuterBackground {componentContext} direction={$direction} background={background} radius={backgroundRadius} />{/if}<slot {focusHandler} {blurHandler} {hasCustomFocus} />{#if hasBorder}<span class={css.outer__border} style={makeStyle(borderElemStyle)}></span>{/if}\n    </Actionable>\n{/if}\n","export function correctPositiveNumber(val: number | undefined, defaultVal: number): number {\n    const num = Number(val);\n    if (Number.isNaN(num) || num <= 0) {\n        return defaultVal;\n    }\n    return num;\n}\n","import type { FontWeight } from '../types/text';\n\nexport function fontWeightToCss(fontWeight?: FontWeight | undefined): number | undefined {\n    if (\n        fontWeight === 'light' ||\n        fontWeight === 'medium' ||\n        fontWeight === 'bold' ||\n        fontWeight === 'regular'\n    ) {\n        if (fontWeight === 'medium') {\n            return 500;\n        } else if (fontWeight === 'bold') {\n            return 700;\n        } else if (fontWeight === 'light') {\n            return 300;\n        }\n\n        return 400;\n    }\n}\n","import type { FontWeight } from '../types/text';\nimport { fontWeightToCss } from './fontWeightToCss';\n\nexport function correctFontWeight(\n    fontWeight: FontWeight | undefined,\n    fontWeightValue: number | undefined,\n    defaultVal: number | undefined\n): number | undefined {\n    if (typeof fontWeightValue === 'number' && fontWeightValue > 0) {\n        return fontWeightValue;\n    }\n    return fontWeightToCss(fontWeight) || defaultVal;\n}\n","import type { MaybeMissing } from '../expressions/json';\nimport type { EdgeInsets } from '../types/edgeInserts';\n\nexport function edgeInsertsMultiply(\n    edgeInsets: MaybeMissing<EdgeInsets>,\n    multiply: number\n): MaybeMissing<EdgeInsets> {\n    if (!edgeInsets) {\n        return {};\n    }\n\n    const res: EdgeInsets = {};\n\n    for (const key of ['left', 'top', 'right', 'bottom', 'start', 'end'] as const) {\n        const val = edgeInsets[key];\n        if (val) {\n            res[key] = val * multiply;\n        }\n    }\n\n    return res;\n}\n","<script lang=\"ts\">\n    import { getContext } from 'svelte';\n    import css from './TextRange.module.css';\n\n    import type { CloudBackground, DivTextData, TextRange } from '../../types/text';\n    import type { Action } from '../../../typings/common';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { ComponentContext } from '../../types/componentContext';\n    import Actionable from '../utilities/Actionable.svelte';\n    import { pxToEm } from '../../utils/pxToEm';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { genClassName } from '../../utils/genClassName';\n    import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n    import { isPositiveNumber } from '../../utils/isPositiveNumber';\n    import { correctFontWeight } from '../../utils/correctFontWeight';\n    import { correctColor, correctColorWithAlpha, parseColor } from '../../utils/correctColor';\n    import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n    import { getBackground } from '../../utils/background';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { shadowToCssFilter } from '../../utils/shadow';\n    import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n    import { edgeInsertsMultiply } from '../../utils/edgeInsetsMultiply';\n\n    export let componentContext: ComponentContext<DivTextData>;\n    export let text: string;\n    export let rootFontSize: number;\n    export let textStyles: MaybeMissing<Partial<TextRange>> = {};\n    export let singleline = false;\n    export let actions: MaybeMissing<Action[]> | undefined = undefined;\n    export let cloudBg = false;\n    export let cloudBgId = '';\n    export let customLineHeight: number | null = null;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n    const direction = rootCtx.direction;\n\n    const cloudFilterId = cloudBg && cloudBgId || rootCtx.genId('text-range') || '';\n\n    let decoration = 'none';\n    let fontSize = 12;\n    let lineHeight = 1.25;\n    let letterSpacing = '';\n    let fontWeight: number | undefined = undefined;\n    let fontFamily = '';\n    let color = '';\n    let colorOverride: string | undefined;\n    let border: {\n        color: string;\n        width: number;\n        corner_radius?: number;\n    } | null = null;\n    let verticalAlign: number | undefined = undefined;\n    let background: string | undefined;\n    let maskAnimated = false;\n    let maskColor: string | undefined;\n    let maskSize: string | undefined;\n    let maskDensity: string | undefined;\n\n    $: if (componentContext.json) {\n        decoration = 'none';\n        fontSize = 12;\n        lineHeight = 1.25;\n        letterSpacing = '';\n        fontWeight = undefined;\n        fontFamily = '';\n        color = '';\n        colorOverride = undefined;\n        border = null;\n        verticalAlign = undefined;\n        background = undefined;\n        maskAnimated = false;\n        maskColor = undefined;\n        maskSize = undefined;\n        maskDensity = undefined;\n    }\n\n    $: {\n        let newDecoration = 'none';\n\n        if (textStyles.underline || textStyles.strike) {\n            if (textStyles.underline === 'single' && textStyles.strike === 'single') {\n                newDecoration = 'both';\n            } else if (textStyles.underline === 'single') {\n                newDecoration = 'underline';\n            } else if (textStyles.strike === 'single') {\n                newDecoration = 'strike';\n            }\n        }\n\n        decoration = newDecoration;\n    }\n\n    $: {\n        fontSize = correctPositiveNumber(textStyles.font_size, fontSize);\n    }\n\n    $: {\n        if (isPositiveNumber(textStyles.line_height)) {\n            lineHeight = Number(textStyles.line_height) / fontSize;\n        }\n    }\n\n    $: {\n        if (isNonNegativeNumber(textStyles.letter_spacing)) {\n            letterSpacing = pxToEm(textStyles.letter_spacing);\n        }\n    }\n\n    $: {\n        fontWeight = correctFontWeight(textStyles.font_weight, textStyles.font_weight_value, fontWeight);\n        if (typeof textStyles.font_family === 'string' && textStyles.font_family) {\n            fontFamily = rootCtx.typefaceProvider(textStyles.font_family, {\n                fontWeight: fontWeight || 400\n            });\n        } else {\n            fontFamily = '';\n        }\n    }\n\n    $: {\n        color = correctColor(textStyles.text_color, 1, color);\n    }\n\n    $: topOffset = textStyles.top_offset ? pxToEm(textStyles.top_offset) : '';\n\n    $: hasCloudBg = textStyles.background?.type === 'cloud';\n\n    $: cloudPadding = textStyles.background?.type === 'cloud' ? textStyles.background.paddings : undefined;\n\n    $: {\n        const mask = textStyles.mask;\n        const hasMask = Boolean(\n            mask &&\n            (mask.type === 'solid' || mask.type === 'particles') &&\n            mask.is_enabled !== false && mask.color\n        );\n\n        if (cloudBg || hasMask) {\n            colorOverride = 'transparent';\n        } else {\n            colorOverride = undefined;\n        }\n\n        maskAnimated = false;\n        maskColor = undefined;\n        maskSize = undefined;\n        maskDensity = undefined;\n        if (cloudBg) {\n            if (hasCloudBg) {\n                background = correctColorWithAlpha((textStyles.background as CloudBackground).color, 255, 'transparent');\n            } else {\n                background = undefined;\n            }\n        } else if (mask && hasMask) {\n            if (mask.type === 'solid') {\n                background = correctColor(mask.color);\n            } else if (mask.type === 'particles') {\n                const size = correctPositiveNumber(mask.particle_size?.value, 1);\n                const sizeEm = pxToEm(size * 10 / fontSize);\n                const density = correctPositiveNumber(mask.density, .8);\n                const color = correctColor(mask.color);\n\n                background = undefined;\n                maskColor = color;\n                maskSize = sizeEm;\n                maskDensity = String(density);\n                maskAnimated = mask.is_animated === true;\n            }\n        } else if (textStyles.background?.type === 'solid') {\n            background = getBackground([textStyles.background]).color;\n        } else {\n            background = undefined;\n        }\n    }\n\n    $: if (\n        textStyles.border?.stroke &&\n        textStyles.border.stroke.color &&\n        correctColor(textStyles.border.stroke.color) !== 'transparent' &&\n        isPositiveNumber(textStyles.border.stroke.width) &&\n        textStyles.background?.type !== 'cloud'\n    ) {\n        border = {\n            color: textStyles.border.stroke.color,\n            width: textStyles.border.stroke.width,\n            corner_radius: textStyles.border.corner_radius\n        };\n    } else {\n        border = null;\n    }\n\n    // eslint-disable-next-line no-nested-ternary\n    $: borderRadius = cloudBg ?\n        (hasCloudBg ? (textStyles.background as CloudBackground).corner_radius || 0 : 0) :\n        (border ? correctPositiveNumber(border.corner_radius, 0) : 0);\n\n    $: shadow = textStyles.text_shadow ? shadowToCssFilter(textStyles.text_shadow, fontSize) : undefined;\n\n    $: {\n        if (typeof textStyles.baseline_offset === 'number') {\n            verticalAlign = textStyles.baseline_offset;\n        }\n    }\n\n    $: customVerticalAlign = typeof textStyles.baseline_offset === 'number' ? undefined : textStyles.alignment_vertical;\n\n    $: mods = {\n        singleline,\n        decoration,\n        align: customVerticalAlign,\n        cloud: hasCloudBg,\n        'relative-vertical-align': Boolean(customLineHeight && verticalAlign),\n        'has-particles-mask': Boolean(maskColor),\n        'mask-animated': maskAnimated\n    };\n\n    $: style = {\n        'font-size': pxToEm((fontSize * 10) / rootFontSize),\n        'line-height': customVerticalAlign ? 'normal' : lineHeight,\n        'letter-spacing': letterSpacing,\n        'font-weight': fontWeight,\n        'font-family': fontFamily,\n        'vertical-align': (customLineHeight || verticalAlign === undefined) ? undefined : pxToEm(verticalAlign * 10 / fontSize),\n        top: (customLineHeight && verticalAlign !== undefined) ? pxToEm(-verticalAlign * 10 / fontSize) : undefined,\n        margin: cloudPadding ?\n            edgeInsertsToCss(edgeInsertsMultiply(cloudPadding, -10 / fontSize), $direction) :\n            undefined,\n        padding: cloudPadding ?\n            edgeInsertsToCss(edgeInsertsMultiply(cloudPadding, 10 / fontSize), $direction) :\n            undefined,\n        filter: cloudBg && hasCloudBg && !cloudBgId ? `url(#${cloudFilterId})` : shadow,\n        color: colorOverride || color,\n        background,\n        opacity: cloudBg && hasCloudBg && !cloudBgId ?\n            (parseColor((textStyles.background as CloudBackground).color)?.a ?? 255) / 255 :\n            undefined,\n        /**\n         * box-shadow instead of border because:\n         * 1) Doesn't take space as border does\n         * 2) There should not be a border-radius on line breaks, but there should be a border\n         */\n        'box-shadow': border ? `inset 0 0 0 ${pxToEm(border.width * 10 / fontSize)} ${border.color}` : undefined,\n        'border-radius': borderRadius ? pxToEm(borderRadius * 10 / fontSize) : undefined,\n        'font-feature-settings': textStyles.font_feature_settings || undefined,\n        '--divkit-text-mask-color': maskColor,\n        '--divkit-text-mask-size': maskSize,\n        '--divkit-text-mask-density': maskDensity,\n    };\n</script>\n\n{#if cloudBg && hasCloudBg}<svg class={css['text-range__cloud-svg']}><defs><filter id={cloudFilterId}><feGaussianBlur in=\"SourceGraphic\" result=\"blurred\" stdDeviation=\"3\"></feGaussianBlur><feColorMatrix in=\"blurred\" result=\"withMatrix\" type=\"matrix\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 {2 * borderRadius} -{borderRadius}\"></feColorMatrix><feBlend in=\"SourceGraphic\" in2=\"withMatrix\"></feBlend></filter></defs>\n</svg>{/if}{#if topOffset}<span class={css['text-range__top-offset']} style:margin-top={topOffset}></span>{/if}<Actionable\n    {componentContext}\n    cls={genClassName('text-range', css, mods)}\n    {actions}\n    style={makeStyle(style)}\n><!-- zero-width space as default -->{#if maskColor}<div class={css['text-range__mask-animation']}></div><div class={css['text-range__mask-animation']}></div><div class={css['text-range__mask-animation']}></div><div class={css['text-range__mask-animation']}></div><div class={css['text-range__mask-animation']}></div><div class={css['text-range__mask-animation']}></div>{/if}{text || '​'}</Actionable>\n","import type { Direction } from '../../typings/common';\nimport type { AlignmentHorizontal } from '../types/alignment';\n\nexport function correctAlignmentHorizontal(\n    orientation: string | undefined,\n    direction: Direction,\n    defaultVal: AlignmentHorizontal\n): AlignmentHorizontal {\n    if (\n        orientation === 'left' ||\n        orientation === 'center' ||\n        orientation === 'right' ||\n        orientation === 'start' ||\n        orientation === 'end'\n    ) {\n        if (orientation === 'left') {\n            return direction === 'ltr' ? 'start' : 'end';\n        } else if (orientation === 'right') {\n            return direction === 'ltr' ? 'end' : 'start';\n        }\n        return orientation;\n    }\n\n    return defaultVal;\n}\n","export type AlignmentVerticalMapped = 'start' | 'end' | 'center' | 'baseline';\n\nexport function correctAlignmentVertical(\n    orientation: string | undefined,\n    defaultVal: AlignmentVerticalMapped\n): AlignmentVerticalMapped {\n    if (\n        orientation === 'top' ||\n        orientation === 'center' ||\n        orientation === 'bottom' ||\n        orientation === 'baseline'\n    ) {\n        if (orientation === 'top') {\n            return 'start';\n        } else if (orientation === 'bottom') {\n            return 'end';\n        }\n        return orientation;\n    }\n\n    return defaultVal;\n}\n","import type { VariableValue } from '../expressions/variable';\n\nexport function propToString(val: VariableValue | undefined): string {\n    const valToString = String(val ?? '');\n\n    return valToString;\n}\n","import type { TintMode } from '../types/image';\n\nexport function correctTintMode(tintMode: TintMode | undefined, defaultVal: TintMode): TintMode {\n    if (\n        tintMode === 'source_in' ||\n        tintMode === 'source_atop' ||\n        tintMode === 'darken' ||\n        tintMode === 'lighten' ||\n        tintMode === 'multiply' ||\n        tintMode === 'screen'\n    ) {\n        return tintMode;\n    }\n\n    return defaultVal;\n}\n","type SimpleFunction = (...args: any[]) => any;\ntype DebouncedFunction<F extends SimpleFunction> = (...args: Parameters<F>) => void;\n\nexport function debounce<F extends SimpleFunction>(fn: F, timeout: number): DebouncedFunction<F> {\n    let timer: ReturnType<typeof setTimeout> | null;\n\n    return function(this: ThisParameterType<F>, ...args: Parameters<F>) {\n        if (timer !== null) {\n            clearTimeout(timer);\n        }\n\n        timer = setTimeout(() => {\n            fn.apply(this, args);\n            timer = null;\n        }, timeout);\n    };\n}\n","<script lang=\"ts\">\n    import { getContext, onDestroy } from 'svelte';\n\n    import css from './Text.module.css';\n    import rootCss from '../Root.module.css';\n\n    import type { CloudBackground, DivTextData, TextImage, TextRange, TextStyles, TextVerticalAlignment } from '../../types/text';\n    import type { Style } from '../../types/general';\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { AlignmentHorizontal } from '../../types/alignment';\n    import type { Action } from '../../../typings/common';\n    import type { TintMode } from '../../types/image';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import Outer from '../utilities/Outer.svelte';\n    import TextRangeView from './TextRange.svelte';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { pxToEm } from '../../utils/pxToEm';\n    import { genClassName } from '../../utils/genClassName';\n    import { getBackground } from '../../utils/background';\n    import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n    import { isPositiveNumber } from '../../utils/isPositiveNumber';\n    import { correctAlignmentHorizontal } from '../../utils/correctAlignmentHorizontal';\n    import { type AlignmentVerticalMapped, correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n    import { correctColor, parseColor } from '../../utils/correctColor';\n    import { correctBooleanInt } from '../../utils/correctBooleanInt';\n    import { propToString } from '../../utils/propToString';\n    import { correctTintMode } from '../../utils/correctTintMode';\n    import { filterEnabledActions } from '../../utils/filterEnabledActions';\n    import { autoEllipsize } from '../../use/autoEllipsize';\n    import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n    import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n    import { edgeInsertsMultiply } from '../../utils/edgeInsetsMultiply';\n    import { wrapError } from '../../utils/wrapError';\n\n    export let componentContext: ComponentContext<DivTextData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const direction = rootCtx.direction;\n\n    let text = '';\n    let fontSize = 12;\n    let lineHeight = 1.25;\n    let customLineHeight: number | null = null;\n    let maxHeight = '';\n    let maxLines: number | undefined;\n    let lineClamp: string | number = '';\n    let multiline = false;\n    let halign: AlignmentHorizontal = 'start';\n    let valign: AlignmentVerticalMapped = 'start';\n    let rootTextColor = '';\n    let focusTextColor = '';\n    let gradient = '';\n    let selectable = false;\n\n    interface RenderItemText {\n        text: string;\n        textStyles: TextRange;\n        actions?: MaybeMissing<Action[]>;\n    }\n\n    interface RenderItemImage {\n        image: {\n            url: string;\n            width: string;\n            height: string;\n            wrapperStyle: Style;\n            svgFilterId: string;\n            preloadRequired: boolean;\n            verticalAlign: TextVerticalAlignment | undefined;\n            description: string;\n            a11yAttrs?: Record<string, unknown>;\n        };\n    }\n\n    let renderList: (RenderItemText | RenderItemImage)[] = [];\n    let hasCloudBg = false;\n    let wholeTextCloudBgId = '';\n    let wholeTextCloudBgOpacity: number | undefined;\n    let usedTintColors: [string, TintMode][] = [];\n    let rootTextStyles: typeof $jsonRootTextStyles = {};\n\n    $: if (componentContext.json) {\n        fontSize = 12;\n        lineHeight = 1.25;\n        customLineHeight = null;\n        maxHeight = '';\n        maxLines = undefined;\n        lineClamp = '';\n        multiline = false;\n        halign = 'start';\n        valign = 'start';\n        rootTextColor = '';\n        gradient = '';\n        selectable = false;\n    }\n\n    $: jsonText = componentContext.getDerivedFromVars(componentContext.json.text);\n    $: jsonRanges = componentContext.getDerivedFromVars(componentContext.json.ranges);\n    $: jsonImages = componentContext.getDerivedFromVars(componentContext.json.images);\n    $: jsonRootTextStyles = componentContext.getDerivedFromVars({\n        font_size: componentContext.json.font_size,\n        letter_spacing: componentContext.json.letter_spacing,\n        font_weight: componentContext.json.font_weight,\n        font_weight_value: componentContext.json.font_weight_value,\n        font_family: componentContext.json.font_family,\n        text_color: componentContext.json.text_color,\n        underline: componentContext.json.underline,\n        strike: componentContext.json.strike,\n        line_height: componentContext.json.line_height,\n        text_shadow: componentContext.json.text_shadow,\n        font_feature_settings: componentContext.json.font_feature_settings\n    });\n    $: jsonTextSize = componentContext.getDerivedFromVars(componentContext.json.font_size);\n    $: jsonLineHeight = componentContext.getDerivedFromVars(componentContext.json.line_height);\n    $: jsonMaxLines = componentContext.getDerivedFromVars(componentContext.json.max_lines);\n    $: jsonHAlign = componentContext.getDerivedFromVars(componentContext.json.text_alignment_horizontal);\n    $: jsonVAlign = componentContext.getDerivedFromVars(componentContext.json.text_alignment_vertical);\n    $: jsonTextColor = componentContext.getDerivedFromVars(componentContext.json.text_color);\n    $: jsonFocusTextColor = componentContext.getDerivedFromVars(componentContext.json.focused_text_color);\n    $: jsonTruncate = componentContext.getDerivedFromVars(componentContext.json.truncate);\n    $: jsonTextGradient = componentContext.getDerivedFromVars(componentContext.json.text_gradient);\n    $: jsonSelectable = componentContext.getDerivedFromVars(componentContext.json.selectable);\n    $: jsonAutoEllipsize = componentContext.getDerivedFromVars(componentContext.json.auto_ellipsize);\n    $: jsonPaddings = componentContext.getDerivedFromVars(componentContext.json.paddings);\n\n    $: {\n        if (typeof componentContext.json.text === 'string') {\n            text = propToString($jsonText);\n        } else {\n            text = '';\n            componentContext.logError(wrapError(new Error('Incorrect text value type')));\n        }\n    }\n\n    $: {\n        rootTextStyles = gradient ? {\n            ...$jsonRootTextStyles,\n            text_color: ''\n        } : $jsonRootTextStyles;\n    }\n\n    $: {\n        fontSize = correctPositiveNumber($jsonTextSize, fontSize);\n    }\n\n    $: {\n        const newLineHeight = $jsonLineHeight;\n        if (isPositiveNumber(newLineHeight)) {\n            lineHeight = Number(newLineHeight) / fontSize;\n            customLineHeight = lineHeight;\n        } else {\n            customLineHeight = null;\n        }\n    }\n\n    $: singleline = $jsonMaxLines === 1;\n    $: {\n        let newMaxHeight = '';\n        let newMaxLines: number | undefined;\n        let newLineClamp: string | number = '';\n        let newMultiline = false;\n\n        if ($jsonMaxLines && $jsonMaxLines > 1) {\n            const lines = Number($jsonMaxLines);\n\n            newMaxHeight = lines * lineHeight + 'em';\n            newMaxLines = lines;\n            newLineClamp = lines;\n            newMultiline = true;\n        } else if ($jsonAutoEllipsize && $jsonMaxLines !== 1) {\n            newMultiline = true;\n        }\n\n        maxHeight = newMaxHeight;\n        maxLines = newMaxLines;\n        lineClamp = newLineClamp;\n        multiline = newMultiline;\n    }\n\n    $: {\n        halign = correctAlignmentHorizontal($jsonHAlign, $direction, halign);\n    }\n\n    $: {\n        valign = correctAlignmentVertical($jsonVAlign, valign);\n    }\n\n    $: isAllTextSameColor =\n        !$jsonRanges ||\n        (\n            text && $jsonRanges.length === 1 && $jsonRanges[0] &&\n            (\n                !$jsonRanges[0].start || $jsonRanges[0].start === 0\n            ) &&\n            (\n                !$jsonRanges[0].end ||\n                typeof $jsonRanges[0].end === 'number' && $jsonRanges[0].end >= text.length\n            )\n        );\n\n\n    $: isOnlyOneColorDefined = Boolean(!gradient && $jsonTextColor) !==\n        Boolean($jsonRanges && $jsonRanges[0] && $jsonRanges[0].text_color);\n\n    $: {\n        let newRootTextColor = '';\n\n        if ($jsonMaxLines && isAllTextSameColor && isOnlyOneColorDefined) {\n            // Recolor the ellipsis only if the entire text have the same color\n            newRootTextColor = correctColor(\n                ($jsonTextColor || ($jsonRanges && $jsonRanges[0] && $jsonRanges[0].text_color)) as string,\n                1,\n                rootTextColor\n            );\n        }\n\n        rootTextColor = newRootTextColor;\n    }\n\n    $: {\n        focusTextColor = correctColor($jsonFocusTextColor, 1, focusTextColor);\n    }\n\n    $: truncate = $jsonTruncate === 'none' ? 'none' : '';\n\n    $: {\n        let newGradient = '';\n\n        if ($jsonTextGradient) {\n            const bg = getBackground([$jsonTextGradient]);\n            if (bg.image) {\n                newGradient = bg.image;\n            }\n        }\n\n        gradient = newGradient;\n    }\n\n    $: {\n        selectable = correctBooleanInt($jsonSelectable, selectable);\n    }\n\n    function updateRenderList(\n        text: string,\n        textRanges: MaybeMissing<TextRange[]> | undefined,\n        textImages: MaybeMissing<TextImage[]> | undefined,\n        rootTextStyles: typeof $jsonRootTextStyles\n    ) {\n        let newRenderList: typeof renderList = [];\n\n        usedTintColors.forEach(([color, mode]) => {\n            rootCtx.removeSvgFilter(color, mode);\n        });\n        usedTintColors = [];\n\n        if (!(\n            Array.isArray(textRanges) && textRanges.length ||\n            Array.isArray(textImages) && textImages.length && text\n        )) {\n            renderList = [];\n            return;\n        }\n\n        const content = text;\n        let ranges = textRanges || [\n            {\n                start: 0,\n                end: content.length\n            }\n        ];\n        let images = textImages || [];\n        let prevIndex = 0;\n        let activeRanges: MaybeMissing<TextRange>[] = [];\n        let list: ({\n            index: number;\n            range: MaybeMissing<TextRange> & {\n                start: number;\n                end: number;\n            };\n            type: 'rangeStart' | 'rangeEnd';\n            isStart?: boolean;\n        } | {\n            index: number;\n            type: 'image';\n            arrayIndex: number;\n            image: MaybeMissing<TextImage> & {\n                start: number;\n                url: string;\n            };\n        })[] = [];\n\n        ranges.forEach(range => {\n            const rangeStart = range.start || 0;\n            const rangeEnd = range.end || text.length;\n            const rangeWithExplicitProps = {\n                top_offset: 0,\n                ...range,\n                start: rangeStart,\n                end: rangeEnd\n            };\n            list.push({\n                index: rangeStart,\n                range: rangeWithExplicitProps as typeof range & {\n                    start: number;\n                    end: number;\n                },\n                type: 'rangeStart',\n                isStart: true\n            });\n            list.push({\n                index: rangeEnd,\n                range: rangeWithExplicitProps as typeof range & {\n                    start: number;\n                    end: number;\n                },\n                type: 'rangeEnd'\n            });\n        });\n        images.forEach((image, index) => {\n            if (image.start !== undefined && image.url && image.start <= content.length) {\n                list.push({\n                    index: image.indexing_direction === 'reversed' ? text.length - image.start : image.start,\n                    image: image as typeof image & {\n                        start: number;\n                        url: string;\n                    },\n                    type: 'image',\n                    arrayIndex: index\n                });\n            }\n        });\n        list.sort((a, b) => {\n            if (a.index === b.index) {\n                if (a.type !== b.type) {\n                    if (a.type === 'image') {\n                        return -1;\n                    } else if (b.type === 'image') {\n                        return 1;\n                    }\n\n                    return a.type < b.type ? -1 : 1;\n                } else if (a.type === 'image' && b.type === 'image') {\n                    return b.arrayIndex - a.arrayIndex;\n                } else if (a.type === 'rangeStart' && b.type === 'rangeStart') {\n                    return a.range.end - b.range.end;\n                } else if (a.type === 'rangeStart') {\n                    return 1;\n                } else if (b.type === 'rangeStart') {\n                    return -1;\n                }\n                if (a.type !== 'image' && b.type !== 'image') {\n                    return a.range.start - b.range.start;\n                }\n                return 0;\n            }\n\n            return a.index - b.index;\n        });\n        list.forEach(item => {\n            let range = item.type === 'image' ? null : item.range;\n            let index = item.index;\n\n            if (index > prevIndex) {\n                let textStyles = Object.assign({ ...rootTextStyles }, ...activeRanges as any[]) as TextRange;\n                if (activeRanges.length && activeRanges[activeRanges.length - 1].start !== prevIndex) {\n                    textStyles.top_offset = 0;\n                }\n                newRenderList.push({\n                    text: content.substring(prevIndex, index),\n                    textStyles,\n                    actions: item.type === 'rangeEnd' && item.range?.actions?.filter(filterEnabledActions) || undefined\n                });\n            }\n\n            if (item.type === 'rangeStart' && range) {\n                activeRanges.push(range);\n            } else if (item.type === 'rangeEnd') {\n                activeRanges = activeRanges.filter(range => range !== item.range);\n            } else if (item.type === 'image') {\n                let textStyles2 = Object.assign({ ...rootTextStyles }, ...activeRanges as any[]) as TextStyles;\n                let imageWidth = pxToEm(\n                    (((item.image.width && item.image.width.value) || 20) * 10) / (textStyles2.font_size || 12)\n                );\n                let imageHeight = pxToEm(\n                    (((item.image.height && item.image.height.value) || 20) * 10) / (textStyles2.font_size || 12)\n                );\n                const wrapperStyle: Style = {\n                    'font-size': pxToEm(((Number(textStyles2.font_size) || 12) * 10) / fontSize)\n                };\n\n                let svgFilterId = '';\n                const tintColor = item.image.tint_color;\n                const tintMode = correctTintMode(item.image.tint_mode, 'source_in');\n                if (tintColor) {\n                    const color = correctColor(item.image.tint_color);\n                    svgFilterId = rootCtx.addSvgFilter(color, tintMode);\n                    usedTintColors.push([color, tintMode]);\n                }\n\n                const a11yAttrs: Record<string, unknown> = {};\n                const type = item.image.accessibility?.type;\n                const description = item.image.accessibility?.description || '';\n                if ((type === 'button' || type === 'image') && description) {\n                    a11yAttrs.role = type;\n                } else if (!description || type === 'none') {\n                    a11yAttrs['aria-hidden'] = 'true';\n                }\n\n                newRenderList.push({\n                    image: {\n                        url: item.image.url,\n                        width: imageWidth,\n                        height: imageHeight,\n                        wrapperStyle,\n                        svgFilterId,\n                        preloadRequired: Boolean(item.image.preload_required),\n                        verticalAlign: item.image.alignment_vertical,\n                        description,\n                        a11yAttrs\n                    }\n                });\n            }\n\n            prevIndex = index;\n        });\n\n        if (prevIndex < content.length) {\n            newRenderList.push({\n                text: content.substring(prevIndex),\n                textStyles: { ...rootTextStyles } as TextStyles\n            });\n        }\n\n        renderList = newRenderList;\n        hasCloudBg = newRenderList.some(it => 'text' in it && it.textStyles.background?.type === 'cloud');\n        // In Firefox, svg filters do not work with inline elements. If possible, we transfer them to the parent block.\n        wholeTextCloudBgId = (hasCloudBg && newRenderList.length === 1) ? rootCtx.genId('text-whole-bg') : '';\n        wholeTextCloudBgOpacity = wholeTextCloudBgId ?\n            (\n                parseColor(\n                    ((newRenderList[0] as RenderItemText).textStyles.background as CloudBackground).color\n                )?.a ?? 255\n            ) / 255 :\n            undefined;\n    }\n\n    $: updateRenderList(text, $jsonRanges, $jsonImages, rootTextStyles);\n\n    $: mods = {\n        singleline,\n        multiline,\n        halign,\n        valign,\n        truncate,\n        'has-focus-color': Boolean(focusTextColor)\n    };\n\n    $: innerMods = {\n        gradient: Boolean(gradient),\n        'has-cloud-bg': hasCloudBg\n    };\n\n    $: style = {\n        'font-size': pxToEm(fontSize),\n        'line-height': lineHeight,\n        'max-height': maxHeight,\n        '-webkit-line-clamp': lineClamp,\n        color: rootTextColor,\n        'background-image': gradient,\n        '--divkit-text-focus-color': focusTextColor\n    };\n\n    $: cloudPadding = edgeInsertsToCss(\n        edgeInsertsMultiply(correctEdgeInsertsObject($jsonPaddings, {}) || {}, 10 / fontSize),\n        $direction\n    );\n\n    function onImgError(event: Event): void {\n        if (event.target && 'classList' in event.target) {\n            (event.target as HTMLElement).classList.add(css.text__image_hidden);\n        }\n    }\n\n    onDestroy(() => {\n        usedTintColors.forEach(([color, mode]) => {\n            rootCtx.removeSvgFilter(color, mode);\n        });\n    });\n</script>\n\n<Outer\n    cls=\"{genClassName('text', css, mods)} {selectable ? rootCss.root__selectable : rootCss.root__unselectable}\"\n    {componentContext}\n    {layoutParams}\n>\n    {#if hasCloudBg}\n        <span\n            class={genClassName('text__inner', css, {\n                ...innerMods,\n                'cloud-bg': true\n            })}\n            style={makeStyle({\n                ...style,\n                padding: cloudPadding,\n                filter: wholeTextCloudBgId ? `url(#${wholeTextCloudBgId})` : undefined,\n                opacity: wholeTextCloudBgOpacity\n            })}\n        >\n            {#each renderList as item}\n                {#if 'text' in item}\n                    {#if item.text}\n                        <TextRangeView\n                            {componentContext}\n                            text={item.text}\n                            rootFontSize={fontSize}\n                            textStyles={item.textStyles}\n                            {singleline}\n                            cloudBg\n                            cloudBgId={wholeTextCloudBgId}\n                        />\n                    {/if}\n                {:else if item.image}\n                    <span style={makeStyle(item.image.wrapperStyle)}><span class={genClassName('text__image-wrapper', css, {\n                        align: item.image.verticalAlign,\n                        crop: customLineHeight !== null\n                    })} style={makeStyle({\n                        width: item.image.width,\n                        height: (customLineHeight && item.image.verticalAlign !== 'baseline') ? customLineHeight + 'em' : undefined\n                    })}></span></span>\n                {/if}\n            {/each}\n        </span>\n    {/if}\n    <span\n        class={genClassName('text__inner', css, innerMods)}\n        style={makeStyle(style)}\n        use:autoEllipsize={{\n            enabled: $jsonAutoEllipsize,\n            lineClamp: typeof lineClamp === 'number' ? lineClamp : undefined,\n            maxLines\n        }}\n    >\n        {#if renderList.length}\n            {#each renderList as item}\n                {#if 'text' in item}\n                    {#if item.text}\n                        <TextRangeView\n                            {componentContext}\n                            text={item.text}\n                            rootFontSize={fontSize}\n                            textStyles={item.textStyles}\n                            {singleline}\n                            actions={item.actions}\n                            {customLineHeight}\n                        />\n                    {/if}\n                {:else if item.image}\n                    <span style={makeStyle(item.image.wrapperStyle)}><span class={genClassName('text__image-wrapper', css, {\n                        align: item.image.verticalAlign,\n                        crop: customLineHeight !== null\n                    })} style={makeStyle({\n                        width: item.image.width,\n                        height: (customLineHeight && item.image.verticalAlign !== 'baseline') ? customLineHeight + 'em' : undefined\n                    })}><img\n                        class={css.text__image}\n                        src={item.image.url}\n                        loading={item.image.preloadRequired ? 'eager' : 'lazy'}\n                        decoding=\"async\"\n                        alt={item.image.description}\n                        {...item.image.a11yAttrs}\n                        style={makeStyle({\n                            height: item.image.height,\n                            filter: item.image.svgFilterId ? `url(#${item.image.svgFilterId})` : undefined\n                        })}\n                        on:error={onImgError}\n                    ></span></span>\n                {/if}\n            {/each}\n        {:else}\n            <TextRangeView\n                {componentContext}\n                {text}\n                rootFontSize={fontSize}\n                textStyles={rootTextStyles}\n                {singleline}\n                {customLineHeight}\n            />\n        {/if}\n    </span>\n</Outer>\n","import type { BooleanInt } from '../../typings/common';\nimport type { DrawableStyle } from './correctDrawableStyles';\nimport type { EdgeInsets } from '../types/edgeInserts';\nimport type { ContainerOrientation } from '../types/container';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { Size } from '../types/sizes';\nimport { pxToEm } from './pxToEm';\n\nexport interface SeparatorStyle {\n    show_at_start?: BooleanInt;\n    show_at_end?: BooleanInt;\n    show_between?: BooleanInt;\n    style: DrawableStyle;\n    margins: PreparedMargins;\n}\n\nexport interface PreparedMargins {\n    top: number;\n    right: number;\n    bottom: number;\n    left: number;\n}\n\nexport function prepareMargins(margins?: EdgeInsets): PreparedMargins {\n    return {\n        top: Number(margins?.top) || 0,\n        right: Number(margins?.right) || 0,\n        bottom: Number(margins?.bottom) || 0,\n        left: Number(margins?.left) || 0\n    };\n}\n\nfunction setAdditionalPadding(\n    insets: EdgeInsets,\n    separator: SeparatorStyle | null,\n    crossAxis: boolean\n): void {\n    const hMargin = (separator?.margins.left || 0) + (separator?.margins.right || 0);\n    const vMargin = (separator?.margins.top || 0) + (separator?.margins.bottom || 0);\n\n    if (separator?.show_at_start) {\n        if (crossAxis) {\n            insets.top = separator.style.height + vMargin;\n        } else {\n            insets.left = separator.style.width + hMargin;\n        }\n    }\n\n    if (separator?.show_at_end) {\n        if (crossAxis) {\n            insets.bottom = separator.style.height + vMargin;\n        } else {\n            insets.right = separator.style.width + hMargin;\n        }\n    }\n}\n\nexport function calcAdditionalPaddings(\n    orientation: ContainerOrientation,\n    separator: SeparatorStyle | null,\n    lineSeparator: SeparatorStyle | null\n) {\n    const res: EdgeInsets = {};\n\n    setAdditionalPadding(res, separator, orientation === 'vertical');\n    setAdditionalPadding(res, lineSeparator, orientation === 'horizontal');\n\n    return res;\n}\n\nexport function calcItemsGap(\n    orientation: ContainerOrientation,\n    separator: SeparatorStyle | null,\n    lineSeparator: SeparatorStyle | null\n): string {\n    let vals: number[];\n    const separatorHMargins = (separator?.margins.left || 0) + (separator?.margins.right || 0);\n    const separatorVMargins = (separator?.margins.top || 0) + (separator?.margins.bottom || 0);\n    const lineSeparatorHMargins = (lineSeparator?.margins.left || 0) + (lineSeparator?.margins.right || 0);\n    const lineSeparatorVMargins = (lineSeparator?.margins.top || 0) + (lineSeparator?.margins.bottom || 0);\n\n    if (orientation === 'horizontal') {\n        vals = [\n            lineSeparator?.show_between ? (lineSeparator.style.height + lineSeparatorVMargins) : 0,\n            separator?.show_between ? (separator.style.width + separatorHMargins) : 0\n        ];\n    } else {\n        vals = [\n            separator?.show_between ? (separator.style.height + separatorVMargins) : 0,\n            lineSeparator?.show_between ? (lineSeparator.style.width + lineSeparatorHMargins) : 0\n        ];\n    }\n\n    return vals.map(pxToEm).join(' ');\n}\n\nexport interface ContainerChildInfo {\n    width?: MaybeMissing<Size>;\n    height?: MaybeMissing<Size>;\n}\n\nexport function isWidthMatchParent(item: ContainerChildInfo) {\n    const type = item.width?.type;\n\n    return type !== 'wrap_content' && type !== 'fixed';\n}\n\nexport function isHeightMatchParent(item: ContainerChildInfo) {\n    const type = item.height?.type;\n\n    return type === 'match_parent';\n}\n","import type { ContainerOrientation } from '../types/container';\n\nexport function correctContainerOrientation(\n    orientation: string | undefined,\n    defaultVal: ContainerOrientation\n): ContainerOrientation {\n    if (\n        orientation === 'vertical' ||\n        orientation === 'horizontal' ||\n        orientation === 'overlap'\n    ) {\n        return orientation;\n    }\n\n    return defaultVal;\n}\n","import type { Drawable } from '../types/drawable';\nimport type { Style } from '../types/general';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { Circle, RoundedRectangle } from '../types/shape';\nimport type { Stroke } from '../types/border';\nimport { correctColor } from './correctColor';\nimport { pxToEm } from './pxToEm';\nimport { correctNonNegativeNumber } from './correctNonNegativeNumber';\n\nexport interface DrawableStyle extends Style {\n    width: number;\n    height: number;\n    borderRadius: number;\n    background: string;\n    boxShadow?: string;\n}\n\ninterface DrawableSize {\n    width: number;\n    height: number;\n    radius: number;\n}\n\nfunction calcRoundedRectangleSize(shape: MaybeMissing<RoundedRectangle>): DrawableSize {\n    return {\n        width: correctNonNegativeNumber(shape.item_width?.value, 10),\n        height: correctNonNegativeNumber(shape.item_height?.value, 10),\n        radius: correctNonNegativeNumber(shape.corner_radius?.value, 5)\n    };\n}\n\nfunction calcCircleSize(shape: MaybeMissing<Circle>): DrawableSize {\n    const size = correctNonNegativeNumber(shape.radius?.value, 10) * 2;\n\n    return {\n        width: size,\n        height: size,\n        radius: size\n    };\n}\n\nfunction calcDrawableStyle(\n    size: DrawableSize,\n    shape: MaybeMissing<RoundedRectangle | Circle>,\n    old?: {\n        stroke?: MaybeMissing<Stroke>;\n        color?: string;\n    }\n): DrawableStyle {\n    const stl: Partial<DrawableStyle> = {};\n\n    const stroke = shape.stroke || old?.stroke;\n    const borderColor = stroke?.color ? correctColor(stroke.color) : '';\n    const borderWidth = stroke?.width ? Number(stroke.width ?? 1) : '';\n\n    stl.width = size.width;\n    stl.height = size.height;\n    stl.borderRadius = size.radius;\n\n    const bgColor = shape.background_color || old?.color;\n    stl.background = correctColor(bgColor);\n\n    if (borderColor && borderWidth) {\n        stl.boxShadow = `inset 0 0 0 ${pxToEm(borderWidth)} ${borderColor}`;\n    }\n\n    return stl as DrawableStyle;\n}\n\nexport function correctDrawableStyle<D = DrawableStyle>(\n    drawable: MaybeMissing<Drawable> | undefined,\n    availShapes: string[],\n    defaultValue: D\n): D {\n    if (\n        !drawable || !drawable.shape ||\n        !drawable.shape.type || !availShapes.includes(drawable.shape.type) ||\n        drawable.type !== 'shape_drawable'\n    ) {\n        return defaultValue;\n    }\n    let size: DrawableSize;\n    if (drawable.shape.type === 'rounded_rectangle') {\n        size = calcRoundedRectangleSize(drawable.shape);\n    } else if (drawable.shape.type === 'circle') {\n        size = calcCircleSize(drawable.shape);\n    } else {\n        return defaultValue;\n    }\n\n    return calcDrawableStyle(size, drawable.shape, {\n        color: drawable.color,\n        stroke: drawable.stroke\n    }) as unknown as D;\n}\n","let res: boolean;\n\n/**\n * Based on the Chris Smith work in Modernizr\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/css/flexgap.js\n * MIT License\n */\nexport function hasGapSupport(): boolean {\n    if (typeof document === 'undefined') {\n        res = true;\n    }\n\n    if (res !== undefined) {\n        return res;\n    }\n\n    const flex = document.createElement('div');\n    flex.style.position = 'absolute';\n    flex.style.display = 'flex';\n    flex.style.flexDirection = 'column';\n    flex.style.gap = '1px';\n\n    flex.appendChild(document.createElement('div'));\n    flex.appendChild(document.createElement('div'));\n\n    document.body.appendChild(flex);\n    res = flex.scrollHeight === 1;\n    document.body.removeChild(flex);\n\n    return res;\n}\n","export type ContentAlignmentVerticalMapped =\n    'start' | 'center' | 'end' |\n    'space-between' | 'space-around' | 'space-evenly' |\n    'baseline';\n\nexport function correctContentAlignmentVertical(\n    orientation: string | undefined,\n    defaultVal: ContentAlignmentVerticalMapped\n): ContentAlignmentVerticalMapped {\n    if (\n        orientation === 'top' ||\n        orientation === 'center' ||\n        orientation === 'bottom' ||\n        orientation === 'baseline' ||\n        orientation === 'space-between' ||\n        orientation === 'space-around' ||\n        orientation === 'space-evenly'\n    ) {\n        if (orientation === 'top') {\n            return 'start';\n        } else if (orientation === 'bottom') {\n            return 'end';\n        }\n        return orientation;\n    }\n\n    return defaultVal;\n}\n","import type { Direction } from '../../typings/common';\n\nexport type ContentAlignmentHorizontalMapped =\n    /* 'left' |  */'center' | /* 'right' | */\n    'start' | 'end' |\n    'space-between' | 'space-around' | 'space-evenly';\n\nexport function correctContentAlignmentHorizontal(\n    orientation: string | undefined,\n    direction: Direction,\n    defaultVal: ContentAlignmentHorizontalMapped\n): ContentAlignmentHorizontalMapped {\n    if (\n        orientation === 'left' ||\n        orientation === 'center' ||\n        orientation === 'right' ||\n        orientation === 'space-between' ||\n        orientation === 'space-around' ||\n        orientation === 'space-evenly' ||\n        orientation === 'start' ||\n        orientation === 'end'\n    ) {\n        if (orientation === 'left') {\n            return direction === 'ltr' ? 'start' : 'end';\n        } else if (orientation === 'right') {\n            return direction === 'ltr' ? 'end' : 'start';\n        }\n        return orientation;\n    }\n\n    return defaultVal;\n}\n","import type { Readable } from 'svelte/store';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction voidUnsubscribe() {\n}\n\nexport function constStore<T>(val: T): Readable<T> {\n    return {\n        subscribe(cb) {\n            cb(val);\n            return voidUnsubscribe;\n        }\n    };\n}\n\nexport const constUndefStore = constStore(undefined);\n","import type { RootCtxValue } from '../context/root';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { Variable } from '../expressions/variable';\nimport type { DivBaseData } from '../types/base';\nimport type { ComponentContext } from '../types/componentContext';\nimport type { CollectionItemBuilder } from '../types/itemBuilder';\n\nexport function getItemsFromItemBuilder(\n    data: MaybeMissing<object[]>,\n    rootCtx: RootCtxValue,\n    componentContext: ComponentContext,\n    builder: MaybeMissing<CollectionItemBuilder>\n) {\n    const items: {\n        div: MaybeMissing<DivBaseData>;\n        id?: string | undefined;\n        vars?: Map<string, Variable> | undefined;\n    }[] = [];\n    const prototypes = builder.prototypes;\n\n    if (prototypes) {\n        data.forEach((it, index) => {\n            if (it === null || typeof it !== 'object') {\n                return;\n            }\n            const additionalVars = rootCtx.preparePrototypeVariables(builder.data_element_name || 'it', it as Record<string, unknown>, index);\n\n            let div: MaybeMissing<DivBaseData> | undefined;\n            let id: string | undefined;\n            for (let i = 0; i < prototypes.length; ++i) {\n                const prototype = prototypes[i];\n                if (!prototype.div) {\n                    continue;\n                }\n                if (prototype.selector === undefined) {\n                    div = prototype.div;\n                    id = componentContext.getJsonWithVars(prototype.id, additionalVars);\n                    break;\n                }\n\n                const selectorVal = componentContext.getJsonWithVars(prototype.selector, additionalVars);\n                if (selectorVal) {\n                    div = prototype.div;\n                    id = componentContext.getJsonWithVars(prototype.id, additionalVars);\n                    break;\n                }\n            }\n\n            if (div) {\n                items.push({\n                    div,\n                    id,\n                    vars: additionalVars\n                });\n            }\n        });\n    }\n\n    return items;\n}\n","export function simpleThrottle<F extends(...args: any[]) => any>(fn: F, timeout: number): F {\n    let runTs = 0;\n    let prevRes: unknown;\n    let awaits = false;\n\n    return function(this: any) {\n        const now = Date.now();\n\n        if (!runTs || Math.abs(now - runTs) > timeout) {\n            runTs = now;\n\n            // eslint-disable-next-line prefer-rest-params\n            return (prevRes = fn.apply(this, arguments as unknown as any[]));\n        }\n\n        if (!awaits) {\n            awaits = true;\n            setTimeout(() => {\n                awaits = false;\n                // eslint-disable-next-line prefer-rest-params\n                prevRes = fn.apply(this, arguments as unknown as any[]);\n            }, timeout);\n        }\n\n        return prevRes;\n    } as unknown as F;\n}\n","export interface Box {\n    top: number;\n    right: number;\n    bottom: number;\n    left: number;\n}\n\nexport function getMarginBox(elem: HTMLElement): Box {\n    const bbox = elem.getBoundingClientRect();\n    const computed = getComputedStyle(elem);\n\n    return {\n        top: bbox.top - parseFloat(computed.marginTop),\n        right: bbox.right + parseFloat(computed.marginRight),\n        bottom: bbox.bottom + parseFloat(computed.marginBottom),\n        left: bbox.left - parseFloat(computed.marginLeft)\n    };\n}\n","<script lang=\"ts\" context=\"module\">\n    const THROTTLE_TIMEOUT = 10;\n</script>\n\n<script lang=\"ts\">\n    import { onDestroy, onMount } from 'svelte';\n\n    import css from './ContainerSeparator.module.css';\n    import outerCss from '../utilities/Outer.module.css';\n\n    import type { ContainerOrientation } from '../../types/container';\n    import type { SeparatorStyle } from '../../utils/container';\n    import type { DrawableStyle } from '../../utils/correctDrawableStyles';\n    import type { Direction } from '../../../typings/common';\n    import type { ContentAlignmentHorizontalMapped } from '../../utils/correctContentAlignmentHorizontal';\n    import type { ContentAlignmentVerticalMapped } from '../../utils/correctContentAlignmentVertical';\n    import { simpleThrottle } from '../../utils/simpleThrottle';\n    import { type Box, getMarginBox } from '../../utils/getMarginBox';\n\n    export let orientation: ContainerOrientation;\n    export let separator: SeparatorStyle | null;\n    export let lineSeparator: SeparatorStyle | null;\n    export let contentHAlign: ContentAlignmentHorizontalMapped;\n    export let contentVAlign: ContentAlignmentVerticalMapped;\n    export let direction: Direction;\n\n    const throttledUpdated = simpleThrottle(updateSeparators, THROTTLE_TIMEOUT);\n\n    interface SeparatorItem {\n        left: number;\n        top: number;\n        width: number;\n        height: number;\n        style: DrawableStyle;\n    }\n    let separators: SeparatorItem[] = [];\n    let node: HTMLElement;\n    $: parentElement = node?.parentElement || null;\n    let mounted = false;\n    let mutationObserver: MutationObserver | null = null;\n    let resizeObserver: ResizeObserver | null = null;\n\n    $: if (mounted && parentElement || mutationObserver || resizeObserver) {\n        if (mutationObserver) {\n            mutationObserver.disconnect();\n            mutationObserver = null;\n        }\n        if (resizeObserver) {\n            resizeObserver.disconnect();\n            resizeObserver = null;\n        }\n        if (mounted && parentElement) {\n            if (typeof MutationObserver !== 'undefined') {\n                mutationObserver = new MutationObserver(mutationObserverCallback);\n                mutationObserver.observe(parentElement, {\n                    childList: true,\n                    attributes: true,\n                    characterData: true,\n                    subtree: true\n                });\n            }\n            if (typeof ResizeObserver !== 'undefined') {\n                resizeObserver = new ResizeObserver(throttledUpdated);\n                resizeObserver.observe(parentElement);\n            }\n        }\n    }\n\n    $: if (mounted && parentElement) {\n        throttledUpdated();\n    }\n\n    function mutationObserverCallback(records: MutationRecord[]): void {\n        if (records.some(record => {\n            const classList = (record.target as HTMLElement)?.classList;\n\n            return !classList?.contains(css['container-separator__shape']) &&\n                !classList?.contains(css['container-separator']);\n        })) {\n            throttledUpdated();\n        }\n    }\n\n    // eslint-disable-next-line max-params\n    function appendSeparator(\n        separators: SeparatorItem[],\n        separatorStyle: SeparatorStyle,\n        box0: Box,\n        box1: Box,\n        containingBox: Box,\n        crossAxis: boolean\n    ) {\n        const leftMargin = separatorStyle.margins.left;\n        const rightMargin = separatorStyle.margins.right;\n        const topMargin = separatorStyle.margins.top;\n        const bottomMargin = separatorStyle.margins.bottom;\n\n        if (crossAxis) {\n            separators.push({\n                top: box0.bottom + topMargin,\n                left: containingBox.left + leftMargin,\n                width: Math.max(0, containingBox.right - containingBox.left - leftMargin - rightMargin),\n                height: box1.top - box0.bottom - topMargin - bottomMargin,\n                style: separatorStyle.style\n            });\n        } else {\n            separators.push({\n                top: containingBox.top + topMargin,\n                left: box0.right + leftMargin,\n                width: box1.left - box0.right - leftMargin - rightMargin,\n                height: Math.max(0, containingBox.bottom - containingBox.top - topMargin - bottomMargin),\n                style: separatorStyle.style\n            });\n        }\n    }\n\n    // eslint-disable-next-line max-params\n    function appendSeparators(\n        separators: SeparatorItem[],\n        separator: SeparatorStyle,\n        boxes: Box[],\n        crossAxis: boolean,\n        align: ContentAlignmentHorizontalMapped | ContentAlignmentVerticalMapped,\n        contentBox: {\n            top: number;\n            right: number;\n            bottom: number;\n            left: number;\n        }\n    ): void {\n        const containingBox = {\n            top: Math.min(...boxes.map(it => it.top)),\n            right: Math.max(...boxes.map(it => it.right)),\n            bottom: Math.max(...boxes.map(it => it.bottom)),\n            left: Math.min(...boxes.map(it => it.left))\n        };\n\n        if (separator?.show_at_start) {\n            let right: number;\n            let bottom: number;\n            if (align === 'space-around' || align === 'space-evenly') {\n                right = contentBox.left - separator.style.width;\n                bottom = contentBox.top - separator.style.height;\n            } else {\n                right = boxes[0].left - separator.style.width - separator.margins.left - separator.margins.right;\n                bottom = boxes[0].top - separator.style.height - separator.margins.top - separator.margins.bottom;\n            }\n            appendSeparator(\n                separators,\n                separator,\n                // only right and bottom is used\n                {\n                    top: 0,\n                    right,\n                    bottom,\n                    left: 0\n                },\n                boxes[0],\n                containingBox,\n                crossAxis\n            );\n        }\n        if (separator?.show_between) {\n            for (let i = 0; i < boxes.length - 1; ++i) {\n                appendSeparator(\n                    separators,\n                    separator,\n                    boxes[i],\n                    boxes[i + 1],\n                    containingBox,\n                    crossAxis\n                );\n            }\n        }\n        if (separator?.show_at_end) {\n            const lastBox = boxes[boxes.length - 1];\n            let top: number;\n            let left: number;\n            if (align === 'space-around' || align === 'space-evenly') {\n                top = contentBox.bottom + separator.style.height;\n                left = contentBox.right + separator.style.width;\n            } else {\n                top = lastBox.bottom + separator.style.height + separator.margins.top + separator.margins.bottom;\n                left = lastBox.right + separator.style.width + separator.margins.left + separator.margins.right;\n            }\n\n            appendSeparator(\n                separators,\n                separator,\n                lastBox,\n                // only top and left is used\n                {\n                    top,\n                    right: 0,\n                    bottom: 0,\n                    left\n                },\n                containingBox,\n                crossAxis\n            );\n        }\n    }\n\n    function updateSeparators(): void {\n        if (!parentElement) {\n            return;\n        }\n\n        const parentBbox = parentElement.getBoundingClientRect();\n        const computedStyle = window.getComputedStyle(parentElement);\n        const contentBox = {\n            top: parentBbox.top + parseFloat(computedStyle.paddingTop),\n            right: parentBbox.right - parseFloat(computedStyle.paddingRight),\n            bottom: parentBbox.bottom - parseFloat(computedStyle.paddingBottom),\n            left: parentBbox.left + parseFloat(computedStyle.paddingLeft)\n        };\n\n        separators = [];\n\n        let children = [...parentElement.children]\n            .filter(it => it !== node &&\n                it instanceof HTMLElement &&\n                !it.classList.contains(outerCss.outer__border) &&\n                getComputedStyle(it).display !== 'none'\n            ) as HTMLElement[];\n        let rows: HTMLElement[][] = [];\n\n        while (children.length) {\n            const row: HTMLElement[] = [];\n            const firstChild = children.shift() as HTMLElement;\n            row.push(firstChild);\n\n            let bbox = firstChild.getBoundingClientRect();\n            let left = bbox.left;\n            let right = bbox.right;\n            let bottom = bbox.bottom;\n\n            while (children.length) {\n                let first = children[0];\n                let bbox = first.getBoundingClientRect();\n\n                if (orientation === 'vertical') {\n                    if (bbox.top < bottom) {\n                        break;\n                    }\n                } else if (direction === 'ltr' ? (bbox.left < right) : (bbox.right > left)) {\n                    break;\n                }\n\n                right = Math.max(right, bbox.right);\n                left = Math.min(left, bbox.left);\n                bottom = Math.max(bottom, bbox.bottom);\n                row.push(first);\n                children.shift();\n            }\n\n            rows.push(row);\n        }\n\n        const rowBoxes: Box[] = [];\n        rows.forEach(row => {\n            const boxes = row.map(it => getMarginBox(it));\n\n            if (direction === 'rtl' && orientation === 'horizontal') {\n                boxes.reverse();\n            }\n\n            if (separator) {\n                appendSeparators(\n                    separators,\n                    separator as SeparatorStyle,\n                    boxes,\n                    orientation === 'vertical',\n                    orientation === 'vertical' ? contentVAlign : contentHAlign,\n                    contentBox\n                );\n            }\n\n            const rowBox = {\n                top: Math.min(...boxes.map(it => it.top)),\n                right: Math.max(...boxes.map(it => it.right)),\n                bottom: Math.max(...boxes.map(it => it.bottom)),\n                left: Math.min(...boxes.map(it => it.left))\n            };\n            rowBoxes.push(rowBox);\n        });\n\n        if (direction === 'rtl' && orientation === 'vertical') {\n            rowBoxes.reverse();\n        }\n        if (lineSeparator) {\n            appendSeparators(\n                separators,\n                lineSeparator,\n                rowBoxes,\n                orientation === 'horizontal',\n                orientation === 'vertical' ? contentHAlign : contentVAlign,\n                contentBox\n            );\n        }\n\n        separators.forEach(separator => {\n            separator.top -= parentBbox.top;\n            separator.left -= parentBbox.left;\n        });\n    }\n\n    onMount(() => {\n        mounted = true;\n    });\n\n    onDestroy(() => {\n        mounted = false;\n    });\n</script>\n\n<svelte:window on:resize={throttledUpdated} />\n\n<div bind:this={node} class={css['container-separator']}>\n    {#each separators as item}\n        <div\n            class={css['container-separator__item']}\n            style:left=\"{item.left}px\"\n            style:top=\"{item.top}px\"\n            style:width=\"{item.width}px\"\n            style:height=\"{item.height}px\"\n        >\n            <div\n                class={css['container-separator__shape']}\n                style:width=\"{item.style.width}px\"\n                style:height=\"{item.style.height}px\"\n                style:border-radius=\"{item.style.borderRadius}px\"\n                style:background=\"{item.style.background}\"\n                style:box-shadow=\"{item.style.boxShadow}\"\n            ></div>\n        </div>\n    {/each}\n</div>\n","<script lang=\"ts\" context=\"module\">\n    const HALIGN_MAP = {\n        start: 'start',\n        center: 'center',\n        end: 'end',\n        // 'space-*' values doesn't supported for cross-axis in wrap-container\n        'space-between': 'start',\n        'space-around': 'start',\n        'space-evenly': 'start'\n    } as const;\n\n    const VALIGN_MAP = {\n        start: 'start',\n        center: 'center',\n        end: 'end',\n        baseline: 'baseline',\n        // 'space-*' doesn't supported for cross-axis in wrap-container\n        'space-between': 'start',\n        'space-around': 'start',\n        'space-evenly': 'start'\n    } as const;\n\n    const AVAIL_SEPARATOR_SHAPES = [\n        'rounded_rectangle',\n        'circle'\n    ];\n</script>\n\n<script lang=\"ts\">\n    import { getContext, onDestroy } from 'svelte';\n    import { type Readable, derived } from 'svelte/store';\n\n    import css from './Container.module.css';\n\n    import type { ContainerOrientation, DivContainerData } from '../../types/container';\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivBaseData } from '../../types/base';\n    import type { ContainerChildInfo, SeparatorStyle } from '../../utils/container';\n    import type { Variable } from '../../expressions/variable';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { MaybeMissing } from '../../expressions/json';\n    import { prepareMargins } from '../../utils/container';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { genClassName } from '../../utils/genClassName';\n    import { correctContainerOrientation } from '../../utils/correctContainerOrientation';\n    import { correctDrawableStyle, type DrawableStyle } from '../../utils/correctDrawableStyles';\n    import { calcAdditionalPaddings, calcItemsGap, isHeightMatchParent, isWidthMatchParent } from '../../utils/container';\n    import { hasGapSupport } from '../../utils/hasGapSupport';\n    import { isPositiveNumber } from '../../utils/isPositiveNumber';\n    import { type ContentAlignmentVerticalMapped, correctContentAlignmentVertical } from '../../utils/correctContentAlignmentVertical';\n    import { type ContentAlignmentHorizontalMapped, correctContentAlignmentHorizontal } from '../../utils/correctContentAlignmentHorizontal';\n    import { Truthy } from '../../utils/truthy';\n    import { assignIfDifferent } from '../../utils/assignIfDifferent';\n    import { constStore } from '../../utils/constStore';\n    import { getItemsFromItemBuilder } from '../../utils/itemBuilder';\n    import ContainerSeparators from './ContainerSeparators.svelte';\n    import Unknown from '../utilities/Unknown.svelte';\n    import Outer from '../utilities/Outer.svelte';\n\n    export let componentContext: ComponentContext<DivContainerData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const direction = rootCtx.direction;\n\n    let childStore: Readable<ContainerChildInfo[]>;\n    let orientation: ContainerOrientation = 'vertical';\n    let contentVAlign: ContentAlignmentVerticalMapped = 'start';\n    let contentHAlign: ContentAlignmentHorizontalMapped = 'start';\n    let separator: SeparatorStyle | null = null;\n    let lineSeparator: SeparatorStyle | null = null;\n    let aspect: number | undefined = undefined;\n    let childLayoutParams: LayoutParams = {};\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        orientation = 'vertical';\n        contentVAlign = 'start';\n        contentHAlign = 'start';\n        aspect = undefined;\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: jsonItems = componentContext.json.items;\n    // eslint-disable-next-line no-nested-ternary\n    $: jsonItemBuilderData = typeof componentContext.json.item_builder?.data === 'string' ? componentContext.getDerivedFromVars(\n        componentContext.json.item_builder?.data, undefined, true\n    ) : (componentContext.json.item_builder?.data ? constStore(componentContext.json.item_builder.data) : undefined);\n\n    $: jsonOrientation = componentContext.getDerivedFromVars(componentContext.json.orientation);\n    $: jsonLayoutMode = componentContext.getDerivedFromVars(componentContext.json.layout_mode);\n    $: jsonContentVAlign = componentContext.getDerivedFromVars(componentContext.json.content_alignment_vertical);\n    $: jsonContentHAlign = componentContext.getDerivedFromVars(componentContext.json.content_alignment_horizontal);\n    $: jsonSeparator = componentContext.getDerivedFromVars(componentContext.json.separator);\n    $: jsonLineSeparator = componentContext.getDerivedFromVars(componentContext.json.line_separator);\n    $: jsonAspect = componentContext.getDerivedFromVars(componentContext.json.aspect);\n    $: jsonWidth = componentContext.getDerivedFromVars(componentContext.json.width);\n    $: jsonHeight = componentContext.getDerivedFromVars(componentContext.json.height);\n    $: jsonClipToBounds = componentContext.getDerivedFromVars(componentContext.json.clip_to_bounds);\n\n    function replaceItems(items: (MaybeMissing<DivBaseData> | undefined)[]): void {\n        componentContext = prevContext = {\n            ...componentContext,\n            json: {\n                ...componentContext.json,\n                items: items.filter(Truthy)\n            }\n        };\n    }\n\n    let items: ComponentContext[] = [];\n    let prevContext: ComponentContext<DivContainerData> | undefined;\n\n    $: {\n        let newItems: {\n            div: MaybeMissing<DivBaseData>;\n            id?: string | undefined;\n            vars?: Map<string, Variable> | undefined;\n        }[] = [];\n        if (\n            componentContext.json.item_builder &&\n            Array.isArray($jsonItemBuilderData) &&\n            Array.isArray(componentContext.json.item_builder.prototypes)\n        ) {\n            const builder = componentContext.json.item_builder;\n            newItems = getItemsFromItemBuilder($jsonItemBuilderData, rootCtx, componentContext, builder);\n        } else {\n            newItems = (Array.isArray(jsonItems) && jsonItems || []).map(it => {\n                return {\n                    div: it\n                };\n            });\n        }\n\n        const unusedContexts = new Set(items);\n        const jsonToContextMap = new Map<unknown, ComponentContext>();\n\n        if (prevContext === componentContext) {\n            items.forEach(context => {\n                jsonToContextMap.set(context.json, context);\n            });\n        }\n\n        items = newItems.map((item, index) => {\n            const found = jsonToContextMap.get(item.div);\n            if (found) {\n                unusedContexts.delete(found);\n                return found;\n            }\n\n            return componentContext.produceChildContext(item.div, {\n                path: index,\n                variables: item.vars,\n                id: item.id\n            });\n        });\n\n        for (const ctx of unusedContexts) {\n            ctx.destroy();\n        }\n        prevContext = componentContext;\n    }\n\n    $: {\n        let children: Readable<ContainerChildInfo>[] = [];\n\n        items.forEach(item => {\n            children.push(\n                componentContext.getDerivedFromVars({\n                    width: item.json.width,\n                    height: item.json.height\n                })\n            );\n        });\n\n        // Create a new array every time so it is not equal to the previous one\n        childStore = derived(children, val => [...val]);\n    }\n\n    $: {\n        orientation = correctContainerOrientation($jsonOrientation, orientation);\n    }\n\n    $: wrap = $jsonLayoutMode === 'wrap';\n\n    $: supportWidthWrapContent = orientation !== 'horizontal' && !wrap;\n    $: supportHeightWrapContent = orientation !== 'vertical' && !wrap;\n\n    $: stretchWidth = orientation === 'overlap' && !$childStore.every(isWidthMatchParent);\n    $: stretchHeight = orientation === 'overlap' && !$childStore.every(isHeightMatchParent);\n\n    $: {\n        contentVAlign = correctContentAlignmentVertical($jsonContentVAlign, contentVAlign);\n    }\n\n    $: {\n        contentHAlign = correctContentAlignmentHorizontal($jsonContentHAlign, $direction, contentHAlign);\n    }\n\n    $: {\n        if ($jsonSeparator?.style && orientation !== 'overlap' && hasGapSupport()) {\n            const style = correctDrawableStyle<DrawableStyle | null>(\n                $jsonSeparator.style,\n                AVAIL_SEPARATOR_SHAPES,\n                separator?.style || null\n            );\n\n            if (style) {\n                separator = {\n                    show_at_start: Boolean($jsonSeparator.show_at_start ?? false),\n                    show_at_end: Boolean($jsonSeparator.show_at_end ?? false),\n                    show_between: Boolean($jsonSeparator.show_between ?? true),\n                    style,\n                    margins: prepareMargins($jsonSeparator.margins)\n                };\n            } else {\n                separator = null;\n            }\n        } else {\n            separator = null;\n        }\n    }\n\n    $: {\n        if ($jsonLineSeparator?.style && orientation !== 'overlap' && hasGapSupport()) {\n            const style = correctDrawableStyle<DrawableStyle | null>(\n                $jsonLineSeparator.style,\n                AVAIL_SEPARATOR_SHAPES,\n                lineSeparator?.style || null\n            );\n\n            if (style) {\n                lineSeparator = {\n                    show_at_start: Boolean($jsonLineSeparator.show_at_start ?? false),\n                    show_at_end: Boolean($jsonLineSeparator.show_at_end ?? false),\n                    show_between: Boolean($jsonLineSeparator.show_between ?? true),\n                    style,\n                    margins: prepareMargins($jsonLineSeparator.margins)\n                };\n            } else {\n                lineSeparator = null;\n            }\n        } else {\n            lineSeparator = null;\n        }\n    }\n\n    $: additionalPaddings = (separator || lineSeparator) ?\n        calcAdditionalPaddings(orientation, separator, lineSeparator) :\n        null;\n\n    $: {\n        const newRatio = $jsonAspect?.ratio;\n        if (newRatio && isPositiveNumber(newRatio)) {\n            aspect = newRatio;\n        } else {\n            aspect = undefined;\n        }\n    }\n\n\n    $: {\n        let newChildLayoutParams: LayoutParams = {};\n\n        if (orientation === 'overlap') {\n            newChildLayoutParams.overlapParent = true;\n        }\n        if (orientation !== 'horizontal') {\n            newChildLayoutParams.parentHAlign = wrap ? 'start' : HALIGN_MAP[contentHAlign];\n        }\n        if (orientation !== 'vertical') {\n            newChildLayoutParams.parentVAlign = wrap ? 'start' : VALIGN_MAP[contentVAlign];\n        }\n        const isWidthWrapContent = (\n            $jsonWidth?.type === 'wrap_content' ||\n            $jsonWidth?.type === 'match_parent' && layoutParams?.parentHorizontalWrapContent\n        );\n        const isHeightWrapContent = (\n            !$jsonHeight ||\n            $jsonHeight.type === 'wrap_content' ||\n            $jsonHeight.type === 'match_parent' && layoutParams?.parentVerticalWrapContent\n        );\n        if (!supportWidthWrapContent && isWidthWrapContent) {\n            newChildLayoutParams.parentHorizontalWrapContent = true;\n        }\n        if (!aspect && !supportHeightWrapContent && isHeightWrapContent) {\n            newChildLayoutParams.parentVerticalWrapContent = true;\n        }\n        newChildLayoutParams.stretchWidth = stretchWidth;\n        newChildLayoutParams.stretchHeight = stretchHeight;\n        if (orientation === 'horizontal') {\n            newChildLayoutParams.parentContainerOrientation = 'horizontal';\n        }\n        if (orientation === 'vertical') {\n            newChildLayoutParams.parentContainerOrientation = 'vertical';\n        }\n        if (wrap) {\n            newChildLayoutParams.parentContainerWrap = true;\n        }\n\n        childLayoutParams = assignIfDifferent(newChildLayoutParams, childLayoutParams);\n    }\n\n    $: mods = {\n        orientation,\n        valign: contentVAlign,\n        halign: contentHAlign,\n        wrap,\n        overflow: ($jsonClipToBounds === false || $jsonClipToBounds === 0) ? 'visible' : undefined\n    };\n\n    $: style = {\n        gap: (separator || lineSeparator) ?\n            calcItemsGap(orientation, separator, lineSeparator) :\n            undefined,\n        'aspect-ratio': aspect\n    };\n\n    onDestroy(() => {\n        items.forEach(context => {\n            context.destroy();\n        });\n    });\n</script>\n\n<Outer\n    cls={genClassName('container', css, mods)}\n    {componentContext}\n    {layoutParams}\n    {style}\n    {additionalPaddings}\n    heightByAspect={Boolean(aspect)}\n    parentOf={items}\n    {replaceItems}\n>\n    {#each items as item}\n        <Unknown\n            componentContext={item}\n            layoutParams={childLayoutParams}\n        />\n    {/each}\n\n    {#if separator || lineSeparator}\n        <ContainerSeparators\n            direction={$direction}\n            {separator}\n            {lineSeparator}\n            {orientation}\n            {contentHAlign}\n            {contentVAlign}\n        />\n    {/if}\n</Outer>\n","import type { Orientation } from '../types/orientation';\n\nexport function correctGeneralOrientation(\n    orientation: string | undefined,\n    defaultVal: Orientation\n): Orientation {\n    if (\n        orientation === 'vertical' ||\n        orientation === 'horizontal'\n    ) {\n        return orientation;\n    }\n\n    return defaultVal;\n}\n","<script lang=\"ts\">\n    import css from './Separator.module.css';\n\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivSeparatorData } from '../../types/separator';\n    import type { Orientation } from '../../types/orientation';\n    import type { ComponentContext } from '../../types/componentContext';\n    import Outer from '../utilities/Outer.svelte';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { pxToEm } from '../../utils/pxToEm';\n    import { genClassName } from '../../utils/genClassName';\n    import { correctGeneralOrientation } from '../../utils/correctGeneralOrientation';\n    import { correctColor } from '../../utils/correctColor';\n\n    export let componentContext: ComponentContext<DivSeparatorData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    let orientation: Orientation = 'horizontal';\n    // let background = correctColor('#14000000');\n    let background = 'rgba(0,0,0,0.08)';\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        orientation = 'horizontal';\n        background = 'rgba(0,0,0,0.08)';\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: jsonDelimiterStyle = componentContext.getDerivedFromVars(componentContext.json.delimiter_style);\n\n    $: {\n        orientation = correctGeneralOrientation($jsonDelimiterStyle?.orientation, orientation);\n    }\n\n    // Avoid transparent separator creation\n    $: hasContent = !(\n        $jsonDelimiterStyle?.color &&\n        (\n            $jsonDelimiterStyle.color === 'transparent' ||\n            (\n                $jsonDelimiterStyle.color.length === 9 &&\n                $jsonDelimiterStyle.color.indexOf('#00') === 0\n            )\n        )\n    );\n\n    $: {\n        background = correctColor($jsonDelimiterStyle?.color, 1, background);\n    }\n\n    $: width = orientation === 'horizontal' ? '100%' : pxToEm(1);\n    $: height = orientation === 'horizontal' ? pxToEm(1) : '100%';\n\n    $: style = {\n        background,\n        width,\n        height\n    };\n\n    $: mods = {\n        orientation\n    };\n</script>\n\n<Outer\n    cls={genClassName('separator', css, mods)}\n    {componentContext}\n    {layoutParams}\n>\n    {#if hasContent}\n        <span class={css.separator__inner} style={makeStyle(style)}></span>\n    {/if}\n</Outer>\n","import type { Direction } from '../../typings/common';\nimport type { AlignmentHorizontal, AlignmentVertical } from '../types/alignment';\nimport { imagePos } from './background';\n\nexport function correctImagePosition(obj: {\n    content_alignment_horizontal?: AlignmentHorizontal;\n    content_alignment_vertical?: AlignmentVertical;\n}, direction: Direction, defaultVal: string): string {\n    let halign = obj.content_alignment_horizontal;\n    const valign = obj.content_alignment_vertical;\n\n    if (halign === 'start') {\n        halign = direction === 'ltr' ? 'left' : 'right';\n    } else if (halign === 'end') {\n        halign = direction === 'ltr' ? 'right' : 'left';\n    }\n\n    if (\n        halign && halign !== 'left' && halign !== 'center' && halign !== 'right' ||\n        valign && valign !== 'top' && valign !== 'center' && valign !== 'bottom'\n    ) {\n        return defaultVal;\n    }\n\n    return imagePos({\n        content_alignment_horizontal: halign,\n        content_alignment_vertical: valign\n    });\n}\n","import { htmlFilter } from './htmlFilter';\n\nexport function prepareBase64(data: string): string {\n    if (data.startsWith('data:')) {\n        return htmlFilter(data);\n    }\n    return `data:image/jpg;base64,${htmlFilter(data)}`;\n}\n","<script lang=\"ts\" context=\"module\">\n    const FALLBACK_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n    const EMPTY_IMAGE = 'empty://';\n    // const DEFAULT_PLACEHOLDER_COLOR = correctColor('#14000000');\n    const DEFAULT_PLACEHOLDER_COLOR = 'rgba(0,0,0,0.08)';\n\n    const STATE_LOADING = 0;\n    const STATE_LOADED = 1;\n    const STATE_ERROR = 2;\n</script>\n\n<script lang=\"ts\">\n    import { getContext, onDestroy } from 'svelte';\n\n    import css from './Image.module.css';\n\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivImageData, TintMode } from '../../types/image';\n    import type { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { genClassName } from '../../utils/genClassName';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { wrapError } from '../../utils/wrapError';\n    import { imageSize } from '../../utils/background';\n    import { correctImagePosition } from '../../utils/correctImagePosition';\n    import { isPositiveNumber } from '../../utils/isPositiveNumber';\n    import { correctColor } from '../../utils/correctColor';\n    import { correctCSSInterpolator } from '../../utils/correctCSSInterpolator';\n    import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n    import { correctTintMode } from '../../utils/correctTintMode';\n    import { getCssFilter } from '../../utils/filters';\n    import { prepareBase64 } from '../../utils/prepareBase64';\n    import { correctBooleanInt } from '../../utils/correctBooleanInt';\n    import Outer from '../utilities/Outer.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivImageData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const direction = rootCtx.direction;\n\n    let img: HTMLImageElement;\n    let state = STATE_LOADING;\n    let isEmpty = false;\n    let placeholderColor = DEFAULT_PLACEHOLDER_COLOR;\n\n    let hasError = false;\n    let imageUrl: string | undefined;\n    let backgroundImage = '';\n    // Exactly \"none\", \"scale-down\" would not match android\n    let scale = 'none';\n    let position = '50% 50%';\n    let aspectPaddingBottom = '0';\n    let tintColor: string | undefined = undefined;\n    let tintMode: TintMode = 'source_in';\n    let svgFilterId = '';\n    let animationInterpolator = '';\n    let animationFadeStart = 0;\n    let animationDelay = 0;\n    let animationDuration = 0;\n    let filter = '';\n    let filterClipPath = '';\n    let isRTLMirror = false;\n    let highPriorityPreview = false;\n    let highPrority = false;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        scale = 'none';\n        position = '50% 50%';\n        tintMode = 'source_in';\n        highPriorityPreview = false;\n        highPrority = false;\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: jsonImageUrl = componentContext.getDerivedFromVars(componentContext.json.image_url);\n    $: jsonGifUrl = componentContext.getDerivedFromVars(componentContext.json.gif_url);\n    $: jsonWidth = componentContext.getDerivedFromVars(componentContext.json.width);\n    $: jsonHeight = componentContext.getDerivedFromVars(componentContext.json.height);\n    $: jsonPreview = componentContext.getDerivedFromVars(componentContext.json.preview);\n    $: jsonPlaceholderColor = componentContext.getDerivedFromVars(componentContext.json.placeholder_color);\n    $: jsonScale = componentContext.getDerivedFromVars(componentContext.json.scale);\n    $: jsonPosition = componentContext.getDerivedFromVars({\n        content_alignment_horizontal: componentContext.json.content_alignment_horizontal,\n        content_alignment_vertical: componentContext.json.content_alignment_vertical\n    });\n    $: jsonA11y = componentContext.getDerivedFromVars(componentContext.json.accessibility);\n    $: jsonAspect = componentContext.getDerivedFromVars(componentContext.json.aspect);\n    $: jsonTintColor = componentContext.getDerivedFromVars(componentContext.json.tint_color);\n    $: jsonTintMode = componentContext.getDerivedFromVars(componentContext.json.tint_mode);\n    $: jsonAppearanceAnimation = componentContext.getDerivedFromVars(componentContext.json.appearance_animation);\n    $: jsonFilters = componentContext.getDerivedFromVars(componentContext.json.filters);\n    $: jsonPreloadRequired = componentContext.getDerivedFromVars(componentContext.json.preload_required);\n    $: jsonHighPriorityPreviewShow =\n        componentContext.getDerivedFromVars(componentContext.json.high_priority_preview_show);\n\n    $: {\n        let img = componentContext.json.type === 'gif' ? $jsonGifUrl : $jsonImageUrl;\n        isEmpty = img === EMPTY_IMAGE;\n        if (isEmpty) {\n            img = FALLBACK_IMAGE;\n        }\n        imageUrl = img;\n    }\n\n    function updateImageUrl(_url: string | undefined): void {\n        state = STATE_LOADING;\n    }\n    $: updateImageUrl(imageUrl);\n\n    $: {\n        highPriorityPreview = correctBooleanInt($jsonHighPriorityPreviewShow, highPriorityPreview);\n    }\n\n    $: {\n        if (!imageUrl) {\n            hasError = true;\n            componentContext.logError(wrapError(new Error(`Missing \"${componentContext.json.type === 'gif' ? 'gif_url' : 'image_url'}\" for \"${componentContext.json.type}\"`)));\n        } else {\n            hasError = false;\n        }\n    }\n\n    $: isWidthContent = $jsonWidth?.type === 'wrap_content';\n\n    $: isHeightContent = $jsonHeight?.type === 'wrap_content';\n\n    $: {\n        const preview = $jsonPreview;\n\n        if ((state === STATE_LOADING || state === STATE_ERROR || isEmpty) && preview) {\n            backgroundImage = `url(\"${prepareBase64(preview)}\")`;\n            highPrority = highPriorityPreview;\n        } else {\n            backgroundImage = '';\n            highPrority = false;\n        }\n    }\n\n    $: if (state === STATE_LOADING || state === STATE_ERROR || isEmpty) {\n        placeholderColor = correctColor($jsonPlaceholderColor, 1, placeholderColor);\n    } else {\n        placeholderColor = '';\n    }\n\n    $: {\n        scale = imageSize($jsonScale) || scale;\n    }\n\n    function updatePosition(pos: {\n        content_alignment_horizontal?: AlignmentHorizontal;\n        content_alignment_vertical?: AlignmentVertical;\n    }): void {\n        position = correctImagePosition(pos, $direction, position);\n    }\n    $: updatePosition($jsonPosition);\n\n    $: alt = $jsonA11y?.description || '';\n\n    $: {\n        const newRatio = $jsonAspect?.ratio;\n        if (newRatio && isPositiveNumber(newRatio)) {\n            aspectPaddingBottom = (100 / Number(newRatio)).toFixed(2);\n        } else {\n            aspectPaddingBottom = '0';\n        }\n    }\n\n    $: {\n        const val = $jsonTintColor;\n        const newTintColor = val ? correctColor(val) : undefined;\n        const newTintMode = correctTintMode($jsonTintMode, tintMode);\n        if (newTintColor !== tintColor || newTintMode !== tintMode) {\n            rootCtx.removeSvgFilter(tintColor, tintMode);\n            svgFilterId = newTintColor ? rootCtx.addSvgFilter(newTintColor, newTintMode) : '';\n            tintColor = newTintColor;\n            tintMode = newTintMode;\n        }\n    }\n\n    $: if ($jsonAppearanceAnimation && $jsonAppearanceAnimation.type === 'fade') {\n        const animation = $jsonAppearanceAnimation;\n\n        animationInterpolator = correctCSSInterpolator(animation.interpolator, 'ease_in_out').replace(/_/g, '-');\n        animationDuration = correctNonNegativeNumber(animation.duration, 300);\n        animationDelay = correctNonNegativeNumber(animation.start_delay, 0);\n        animationFadeStart = correctNonNegativeNumber(animation.alpha, 0);\n    }\n\n    $: {\n        let newFilter = '';\n        let newClipPath = '';\n        if (Array.isArray($jsonFilters) && $jsonFilters.length) {\n            newFilter = getCssFilter($jsonFilters, componentContext.logError);\n        }\n        if (newFilter) {\n            newClipPath = 'polygon(0% 0%, 0% 100%, 100% 100%, 100% 0%)';\n        }\n        filter = newFilter;\n        filterClipPath = newClipPath;\n        isRTLMirror = $direction === 'rtl' && Array.isArray($jsonFilters) && $jsonFilters.some(it => it.type === 'rtl_mirror');\n    }\n\n    $: mods = {\n        aspect: aspectPaddingBottom !== '0',\n        'is-width-content': isWidthContent,\n        'is-height-content': isHeightContent,\n        loaded: state === STATE_LOADED,\n        'before-appearance': Boolean(animationInterpolator) && state === STATE_LOADING,\n        'is-rtl-mirror': isRTLMirror\n    };\n\n    $: style = {\n        // Image preview shows, if loading of original image is failed\n        'background-image': backgroundImage,\n        'background-color': backgroundImage ? undefined : placeholderColor,\n        'background-size': scale,\n        'clip-path': filterClipPath || undefined,\n        'object-fit': scale,\n        'object-position': position,\n        filter: [\n            state === STATE_LOADED && svgFilterId ? `url(#${svgFilterId})` : '',\n            filter\n        ].filter(Boolean).join(' '),\n        '--divkit-appearance-interpolator': animationInterpolator || undefined,\n        '--divkit-appearance-fade-start': animationInterpolator ? animationFadeStart : undefined,\n        '--divkit-appearance-delay': animationInterpolator ? `${animationDelay}ms` : undefined,\n        '--divkit-appearance-duration': animationInterpolator ? `${animationDuration}ms` : undefined\n    };\n\n    function onLoad(): void {\n        if (state === STATE_LOADING) {\n            state = STATE_LOADED;\n        }\n    }\n\n    function onError(): void {\n        if (state === STATE_LOADING) {\n            state = STATE_ERROR;\n        }\n    }\n\n    onDestroy(() => {\n        rootCtx.removeSvgFilter(tintColor, tintMode);\n    });\n</script>\n\n{#if !hasError}\n    <Outer\n        cls={genClassName('image', css, mods)}\n        {componentContext}\n        {layoutParams}\n        customDescription={true}\n    >\n        <!-- Safari does not redraw images when changing the svg filter, a complete reconstruction of the DOM is required -->\n        {#key svgFilterId}\n            {#if mods.aspect}\n                <span class={css['image__aspect-wrapper']} style:padding-bottom=\"{aspectPaddingBottom}%\">\n                    <img\n                        bind:this={img}\n                        class={css.image__image}\n                        src={state === STATE_ERROR ? FALLBACK_IMAGE : imageUrl}\n                        loading={($jsonPreloadRequired || highPrority) ? 'eager' : 'lazy'}\n                        decoding={highPrority ? 'sync' : 'async'}\n                        style={makeStyle(style)}\n                        {alt}\n                        aria-hidden={alt ? null : 'true'}\n                        on:load={onLoad}\n                        on:error={onError}\n                    >\n                </span>\n            {:else}\n                <img\n                    bind:this={img}\n                    class={css.image__image}\n                    src={state === STATE_ERROR ? FALLBACK_IMAGE : imageUrl}\n                    loading={($jsonPreloadRequired || highPrority) ? 'eager' : 'lazy'}\n                    decoding={highPrority ? 'sync' : 'async'}\n                    style={makeStyle(style)}\n                    {alt}\n                    aria-hidden={alt ? null : 'true'}\n                    on:load={onLoad}\n                    on:error={onError}\n                >\n            {/if}\n        {/key}\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","import { pxToEm } from './pxToEm';\n\n/**\n * Filter weights, that would result in < 1fr\n * @param weight\n */\nfunction isSpannedWeight(weight: number): boolean {\n    return weight > 0 && weight < 1;\n}\n\nfunction formatWeight(weight: number): string {\n    return String(Math.ceil(weight * 1000) / 1000);\n}\n\nexport function gridCalcTemplates(weights: number[], minSizes: number[], length: number): string {\n    // If result weight is lesser than 1, multiply all weights so all of them would exceed 1\n    if (weights.some(isSpannedWeight)) {\n        const multiply = Math.max(...weights.filter(isSpannedWeight).map(weight => 1 / weight));\n        weights = weights.map(weight => weight * multiply);\n    }\n\n    const allTracksHasWeight = weights.every(Boolean);\n    let minSize = 0;\n    let totalWeight = 0;\n    const template: string[] = [];\n\n    if (allTracksHasWeight) {\n        totalWeight = weights.reduce((acc, item) => {\n            return acc + item;\n        }, 0);\n\n        for (let i = 0; i < length; ++i) {\n            if (!minSizes[i]) {\n                continue;\n            }\n\n            const minTrackSize = (minSizes[i] / weights[i]) * totalWeight;\n\n            if (minTrackSize > minSize) {\n                minSize = minTrackSize;\n            }\n        }\n    }\n\n    for (let i = 0; i < length; ++i) {\n        if (minSize) {\n            template[i] =\n                `minmax(${pxToEm((minSize * weights[i]) / totalWeight)},${formatWeight(weights[i])}fr)`;\n        } else if (weights[i]) {\n            template[i] = `${formatWeight(weights[i])}fr`;\n        } else {\n            template[i] = 'auto';\n        }\n    }\n\n    return template.join(' ');\n}\n","<script lang=\"ts\">\n    import { getContext, onDestroy } from 'svelte';\n    import { derived, type Readable } from 'svelte/store';\n\n    import css from './Grid.module.css';\n\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivGridData } from '../../types/grid';\n    import type { DivBaseData } from '../../types/base';\n    import type { Size } from '../../types/sizes';\n    import type { AlignmentHorizontal } from '../../types/alignment';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { genClassName } from '../../utils/genClassName';\n    import { gridCalcTemplates } from '../../utils/gridCalcTemplates';\n    import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n    import { type AlignmentVerticalMapped, correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n    import { correctAlignmentHorizontal } from '../../utils/correctAlignmentHorizontal';\n    import { Truthy } from '../../utils/truthy';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { wrapError } from '../../utils/wrapError';\n    import Outer from '../utilities/Outer.svelte';\n    import Unknown from '../utilities/Unknown.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivGridData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const direction = rootCtx.direction;\n\n    let hasError = false;\n    let columnCount = 0;\n    let childStore: Readable<ChildInfo[]>;\n    let resultItems: {\n        componentContext: ComponentContext;\n        layoutParams: LayoutParams;\n    }[];\n    let columnsWeight: number[] = [];\n    let rowsWeight: number[] = [];\n    let columnsMinWidth: number[] = [];\n    let rowsMinHeight: number[] = [];\n    let rowCount = 0;\n    let contentVAlign: AlignmentVerticalMapped = 'start';\n    let contentHAlign: AlignmentHorizontal = 'start';\n    let items: ComponentContext[] = [];\n    let prevContext: ComponentContext<DivGridData> | undefined;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        hasError = false;\n        columnCount = 0;\n        contentVAlign = 'start';\n        contentHAlign = 'start';\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: jsonItems = Array.isArray(componentContext.json.items) && componentContext.json.items || [];\n\n    $: jsonColumnCount = componentContext.getDerivedFromVars(componentContext.json.column_count);\n    $: jsonContentVAlign = componentContext.getDerivedFromVars(componentContext.json.content_alignment_vertical);\n    $: jsonContentHAlign = componentContext.getDerivedFromVars(componentContext.json.content_alignment_horizontal);\n\n    $: {\n        columnCount = correctPositiveNumber($jsonColumnCount, columnCount);\n\n        if (columnCount < 1) {\n            hasError = true;\n            componentContext.logError(wrapError(new Error('Incorrect column_count for grid')));\n        } else {\n            hasError = false;\n        }\n    }\n\n    $: {\n        const unusedContexts = new Set(items);\n        const jsonToContextMap = new Map<unknown, ComponentContext>();\n\n        if (prevContext === componentContext) {\n            items.forEach(context => {\n                jsonToContextMap.set(context.json, context);\n            });\n        }\n\n        items = jsonItems.map((item, index) => {\n            const found = jsonToContextMap.get(item);\n            if (found) {\n                unusedContexts.delete(found);\n                return found;\n            }\n\n            return componentContext.produceChildContext(item, {\n                path: index\n            });\n        });\n\n        for (const ctx of unusedContexts) {\n            ctx.destroy();\n        }\n        prevContext = componentContext;\n    }\n\n    function replaceItems(items: (MaybeMissing<DivBaseData> | undefined)[]): void {\n        componentContext = prevContext = {\n            ...componentContext,\n            json: {\n                ...componentContext.json,\n                items: items.filter(Truthy)\n            }\n        };\n    }\n\n    interface ChildInfo {\n        rowSpan?: number;\n        columnSpan?: number;\n        width?: MaybeMissing<Size>;\n        height?: MaybeMissing<Size>;\n    }\n    $: {\n        let children: Readable<ChildInfo>[] = [];\n\n        items.forEach(item => {\n            children.push(\n                componentContext.getDerivedFromVars({\n                    rowSpan: item.json.row_span,\n                    columnSpan: item.json.column_span,\n                    width: item.json.width,\n                    height: item.json.height\n                })\n            );\n        });\n\n        // Create a new array every time so that it is not equal to the previous one\n        childStore = derived(children, val => [...val]);\n    }\n\n    $: {\n        const used: Record<string, boolean> = {};\n        let x = 0;\n        let y = 0;\n        columnsWeight = [];\n        rowsWeight = [];\n        columnsMinWidth = [];\n        rowsMinHeight = [];\n\n        resultItems = items.map((item, index) => {\n            const childInfo = $childStore[index];\n            const colSpan = Math.min(columnCount, Number(childInfo.columnSpan) || 1);\n            const rowSpan = Number(childInfo.rowSpan) || 1;\n\n            const widthWeight =\n                childInfo.width?.type === 'match_parent' ?\n                    Number(childInfo.width.weight || 1) / colSpan :\n                    0;\n            const heightWeight =\n                childInfo.height?.type === 'match_parent' ?\n                    Number(childInfo.height.weight || 1) / rowSpan :\n                    0;\n            const widthMin =\n                colSpan === 1 && childInfo.width?.type === 'fixed' && childInfo.width.value ?\n                    Number(childInfo.width.value) / colSpan :\n                    0;\n            const heightMin =\n                rowSpan === 1 && childInfo.height?.type === 'fixed' && childInfo.height.value ?\n                    Number(childInfo.height.value) / rowSpan :\n                    0;\n\n            // eslint-disable-next-line no-constant-condition\n            while (true) {\n                let isFree = true;\n                OUTER: for (let i = x; i < x + colSpan; ++i) {\n                    for (let j = y; j < y + rowSpan; ++j) {\n                        if (used[i + '_' + j]) {\n                            isFree = false;\n                            break OUTER;\n                        }\n                    }\n                }\n\n                if (isFree) {\n                    break;\n                }\n\n                ++x;\n\n                if (x > columnCount - colSpan) {\n                    x = 0;\n                    ++y;\n                }\n            }\n\n            const gridArea = {\n                x,\n                y,\n                colSpan,\n                rowSpan\n            };\n\n            for (let i = x; i < x + colSpan; ++i) {\n                for (let j = y; j < y + rowSpan; ++j) {\n                    used[i + '_' + j] = true;\n\n                    if (!columnsWeight[i] || columnsWeight[i] < widthWeight) {\n                        columnsWeight[i] = widthWeight;\n                    }\n\n                    if (!rowsWeight[j] || rowsWeight[j] < heightWeight) {\n                        rowsWeight[j] = heightWeight;\n                    }\n\n                    if (!columnsMinWidth[i] || columnsMinWidth[i] < widthMin) {\n                        columnsMinWidth[i] = widthMin;\n                    }\n\n                    if (!rowsMinHeight[j] || rowsMinHeight[j] < heightMin) {\n                        rowsMinHeight[j] = heightMin;\n                    }\n                }\n            }\n\n            return {\n                componentContext: item,\n                layoutParams: {\n                    gridArea\n                }\n            };\n        });\n\n        rowCount = y + 1;\n    }\n\n    $: {\n        contentVAlign = correctAlignmentVertical($jsonContentVAlign, contentVAlign);\n    }\n\n    $: {\n        contentHAlign = correctAlignmentHorizontal($jsonContentHAlign, $direction, contentHAlign);\n    }\n\n    $: mods = {\n        valign: contentVAlign,\n        halign: contentHAlign\n    };\n\n    $: style = {\n        'grid-template-columns': gridCalcTemplates(columnsWeight, columnsMinWidth, columnCount),\n        'grid-template-rows': gridCalcTemplates(rowsWeight, rowsMinHeight, rowCount)\n    };\n\n    onDestroy(() => {\n        items.forEach(context => {\n            context.destroy();\n        });\n    });\n</script>\n\n{#if !hasError}\n    <Outer\n        cls={genClassName('grid', css, mods)}\n        {componentContext}\n        {style}\n        {layoutParams}\n        parentOf={items}\n        {replaceItems}\n    >\n        {#each resultItems as item}\n            <Unknown\n                componentContext={item.componentContext}\n                layoutParams={item.layoutParams}\n            />\n        {/each}\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","import type { Align } from '../types/layoutParams';\n\nexport function correctAlignment(\n    orientation: string | undefined,\n    defaultVal: Align\n): Align {\n    if (\n        orientation === 'start' ||\n        orientation === 'center' ||\n        orientation === 'end'\n    ) {\n        return orientation;\n    }\n\n    return defaultVal;\n}\n","export function joinTemplateSizes(sizes: string[]): string {\n    const result: string[] = [];\n    let temp = sizes[0];\n    let counter = 1;\n\n    for (let i = 1; i <= sizes.length; i++) {\n        if (sizes[i] !== temp) {\n            result.push(counter > 1 ? `repeat(${counter}, ${temp})` : temp);\n            temp = sizes[i];\n            counter = 1;\n        } else {\n            counter++;\n        }\n    }\n\n    return result.join(' ');\n}\n","export function nonNegativeModulo(value: number, mod: number): number {\n    let res = value % mod;\n    if (res < 0) {\n        res += mod;\n    }\n    return res;\n}\n","<script lang=\"ts\">\n    import { getContext, onDestroy, onMount } from 'svelte';\n    import { derived, type Readable } from 'svelte/store';\n\n    import css from './Gallery.module.css';\n    import rootCss from '../Root.module.css';\n    import arrowsCss from '../utilities/Arrows.module.css';\n\n    import type { Align, LayoutParams } from '../../types/layoutParams';\n    import type { DivGalleryData } from '../../types/gallery';\n    import type { DivBaseData } from '../../types/base';\n    import type { SwitchElements } from '../../types/switch-elements';\n    import type { Orientation } from '../../types/orientation';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { Size } from '../../types/sizes';\n    import type { Style } from '../../types/general';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { Variable } from '../../expressions/variable';\n    import type { Overflow } from '../../../typings/common';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { genClassName } from '../../utils/genClassName';\n    import { pxToEm } from '../../utils/pxToEm';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { correctGeneralOrientation } from '../../utils/correctGeneralOrientation';\n    import { correctAlignment } from '../../utils/correctAlignment';\n    import { assignIfDifferent } from '../../utils/assignIfDifferent';\n    import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n    import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n    import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n    import { joinTemplateSizes } from '../../utils/joinTemplateSizes';\n    import { debounce } from '../../utils/debounce';\n    import { Truthy } from '../../utils/truthy';\n    import { nonNegativeModulo } from '../../utils/nonNegativeModulo';\n    import { constStore } from '../../utils/constStore';\n    import { getItemsFromItemBuilder } from '../../utils/itemBuilder';\n    import Outer from '../utilities/Outer.svelte';\n    import Unknown from '../utilities/Unknown.svelte';\n\n    export let componentContext: ComponentContext<DivGalleryData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    interface ChildInfo {\n        size?: MaybeMissing<Size>;\n        visibility?: string;\n    }\n\n    interface Item {\n        index: number;\n        hasGapBefore: boolean;\n        componentContext: ComponentContext;\n    }\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const direction = rootCtx.direction;\n\n    let scroller: HTMLElement;\n    let galleryItemsWrappers: HTMLElement[] = [];\n    let hasScrollLeft = false;\n    let hasScrollRight = false;\n\n    let resizeObserver: ResizeObserver | null = null;\n    let itemsGridElem: HTMLElement;\n    let mounted = false;\n\n    const leftClass = rootCtx.getCustomization('galleryLeftClass');\n    const rightClass = rootCtx.getCustomization('galleryRightClass');\n\n    let prevId: string | undefined;\n    let columns = 1;\n    let orientation: Orientation = 'horizontal';\n    let align: Align = 'start';\n    let gridGap: string | undefined;\n    let itemSpacing = 8;\n    let crossGridGap: string | undefined;\n    let crossSpacing;\n    let padding = '';\n    let lastPaddingSize: {\n        width: string;\n        height: string;\n        'margin-left'?: string;\n        'margin-right'?: string;\n        'margin-bottom'?: string;\n    } | undefined;\n    let templateSizes: string[] = [];\n    let childStore: Readable<ChildInfo[]>;\n    let scrollerStyle: Style = {};\n    let scrollSnap = false;\n    let childLayoutParams: LayoutParams = {};\n    let defaultItem = 0;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        columns = 1;\n        orientation = 'horizontal';\n        align = 'start';\n        itemSpacing = 8;\n        padding = '';\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: jsonItems = Array.isArray(componentContext.json.items) && componentContext.json.items || [];\n    // eslint-disable-next-line no-nested-ternary\n    $: jsonItemBuilderData = typeof componentContext.json.item_builder?.data === 'string' ? componentContext.getDerivedFromVars(\n        componentContext.json.item_builder?.data, undefined, true\n    ) : (componentContext.json.item_builder?.data ? constStore(componentContext.json.item_builder.data) : undefined);\n\n    $: jsonColumnCount = componentContext.getDerivedFromVars(componentContext.json.column_count);\n    $: jsonOrientation = componentContext.getDerivedFromVars(componentContext.json.orientation);\n    $: jsonCrossContentAlignment = componentContext.getDerivedFromVars(componentContext.json.cross_content_alignment);\n    $: jsonItemSpacing = componentContext.getDerivedFromVars(componentContext.json.item_spacing);\n    $: jsonCrossSpacing = componentContext.getDerivedFromVars(componentContext.json.cross_spacing);\n    $: jsonPaddings = componentContext.getDerivedFromVars(componentContext.json.paddings);\n    $: jsonScrollMode = componentContext.getDerivedFromVars(componentContext.json.scroll_mode);\n    $: jsonRestrictParentScroll = componentContext.getDerivedFromVars(componentContext.json.restrict_parent_scroll);\n    $: jsonScrollbar = componentContext.getDerivedFromVars(componentContext.json.scrollbar);\n    $: jsonDefaultItem = componentContext.getDerivedFromVars(componentContext.json.default_item);\n\n    function replaceItems(items: (MaybeMissing<DivBaseData> | undefined)[]): void {\n        componentContext = prevContext = {\n            ...componentContext,\n            json: {\n                ...componentContext.json,\n                items: items.filter(Truthy)\n            }\n        };\n    }\n\n    const isDesktop = rootCtx.isDesktop;\n    let items: ComponentContext[] = [];\n    let prevContext: ComponentContext<DivGalleryData> | undefined;\n\n    $: {\n        let newItems: {\n            div: MaybeMissing<DivBaseData>;\n            id?: string | undefined;\n            vars?: Map<string, Variable> | undefined;\n        }[] = [];\n        if (\n            componentContext.json.item_builder &&\n            Array.isArray($jsonItemBuilderData) &&\n            Array.isArray(componentContext.json.item_builder.prototypes)\n        ) {\n            const builder = componentContext.json.item_builder;\n            newItems = getItemsFromItemBuilder($jsonItemBuilderData, rootCtx, componentContext, builder);\n        } else {\n            newItems = (Array.isArray(jsonItems) && jsonItems || []).map(it => {\n                return {\n                    div: it\n                };\n            });\n        }\n\n        const unusedContexts = new Set(items);\n        const jsonToContextMap = new Map<unknown, ComponentContext>();\n\n        if (prevContext === componentContext) {\n            items.forEach(context => {\n                jsonToContextMap.set(context.json, context);\n            });\n        }\n\n        items = newItems.map((item, index) => {\n            const found = jsonToContextMap.get(item.div);\n            if (found) {\n                unusedContexts.delete(found);\n                return found;\n            }\n\n            return componentContext.produceChildContext(item.div, {\n                path: index,\n                variables: item.vars,\n                id: item.id\n            });\n        });\n\n        for (const ctx of unusedContexts) {\n            ctx.destroy();\n        }\n        prevContext = componentContext;\n    }\n\n    $: shouldCheckArrows = $isDesktop && mounted;\n    $: if (shouldCheckArrows) {\n        if (typeof ResizeObserver !== 'undefined') {\n            // Gallery can contain a dynamic content (e.g. loading images with auto-size)\n            resizeObserver = new ResizeObserver(() => {\n                updateArrowsVisibilityDebounced();\n            });\n            resizeObserver.observe(itemsGridElem);\n        }\n    } else if (resizeObserver) {\n        resizeObserver.disconnect();\n        resizeObserver = null;\n    }\n\n    $: {\n        columns = correctPositiveNumber($jsonColumnCount, columns);\n    }\n\n    function rebuildItemsGrid(items: ComponentContext[], info: ChildInfo[], columns: number): Item[][] {\n        let column = 0;\n        let res: Item[][] = [];\n        let wasFirstVisibleItem = [];\n\n        for (let i = 0; i < items.length; ++i) {\n            if (!res[column]) {\n                res[column] = [];\n            }\n            res[column].push({\n                index: i,\n                hasGapBefore: wasFirstVisibleItem[column] && info[i].visibility !== 'gone',\n                componentContext: items[i]\n            });\n            if (!wasFirstVisibleItem[column] && info[i].visibility !== 'gone') {\n                wasFirstVisibleItem[column] = true;\n            }\n            if (++column >= columns) {\n                column = 0;\n            }\n        }\n\n        return res;\n    }\n\n    $: {\n        orientation = correctGeneralOrientation($jsonOrientation, orientation);\n    }\n\n    $: {\n        align = correctAlignment($jsonCrossContentAlignment, align);\n    }\n\n    $: {\n        itemSpacing = correctNonNegativeNumber($jsonItemSpacing, itemSpacing);\n        gridGap = pxToEm(itemSpacing);\n    }\n\n    $: {\n        crossSpacing = correctNonNegativeNumber($jsonCrossSpacing, itemSpacing);\n        crossGridGap = pxToEm(crossSpacing);\n    }\n\n    $: {\n        padding = correctEdgeInserts($jsonPaddings, $direction, padding);\n        const size = orientation === 'horizontal' ?\n            ($jsonPaddings?.end ?? $jsonPaddings?.[($direction === 'ltr' ? 'right' : 'left')] ?? 0) :\n            ($jsonPaddings?.bottom ?? 0);\n        const calcedSize = pxToEm(size);\n        lastPaddingSize = {\n            width: orientation === 'horizontal' ? calcedSize : '1px',\n            height: orientation === 'horizontal' ? '1px' : calcedSize,\n            'margin-right': orientation === 'horizontal' && $direction === 'ltr' ? '-' + calcedSize : undefined,\n            'margin-left': orientation === 'horizontal' && $direction === 'rtl' ? '-' + calcedSize : undefined,\n            'margin-bottom': orientation === 'vertical' ? '-' + calcedSize : undefined,\n        };\n    }\n\n    $: gridTemplate = orientation === 'horizontal' ? 'grid-template-columns' : 'grid-template-rows';\n    $: {\n        let children: Readable<ChildInfo>[] = [];\n\n        items.forEach(item => {\n            const itemSize = orientation === 'horizontal' ? 'width' : 'height';\n            children.push(componentContext.getDerivedFromVars({\n                size: item.json[itemSize],\n                visibility: item.json.visibility\n            }));\n        });\n\n        // Create a new array every time so it is not equal to the previous one\n        childStore = derived(children, val => [...val]);\n    }\n\n    $: itemsGrid = rebuildItemsGrid(items, $childStore, columns);\n\n    $: {\n        templateSizes = [];\n        if (columns > 1) {\n            // TODO: think about match_parent in this task DIVKIT-307\n            templateSizes.push('auto');\n        } else {\n            $childStore.forEach((childInfo, index) => {\n                if (childInfo.visibility === 'gone') {\n                    return;\n                }\n\n                if ((!childInfo.size && orientation === 'horizontal') || childInfo.size?.type === 'match_parent') {\n                    templateSizes.push('100%');\n                } else {\n                    templateSizes.push('max-content');\n                }\n\n                if (index + 1 < $childStore.length) {\n                    templateSizes.push('auto');\n                }\n            });\n            templateSizes.push('auto');\n        }\n    }\n\n    $: {\n        const newScrollerStyle: Style = {};\n        let newChildLayoutParams: LayoutParams = {};\n        scrollSnap = false;\n\n        if (orientation === 'horizontal') {\n            newChildLayoutParams.parentVAlign = align;\n        } else {\n            newChildLayoutParams.parentHAlign = align;\n        }\n\n        if ($jsonScrollMode === 'paging') {\n            scrollSnap = true;\n            newChildLayoutParams.scrollSnap = 'start';\n            const scrollPadding = orientation === 'horizontal' ? 'scroll-padding-left' : 'scroll-padding-top';\n            newScrollerStyle[scrollPadding] = pxToEm(itemSpacing / 2);\n        }\n\n        // todo multiple columns\n        if (columns === 1) {\n            newChildLayoutParams.parentLayoutOrientation = orientation;\n        }\n\n        scrollerStyle = assignIfDifferent(newScrollerStyle, scrollerStyle);\n        childLayoutParams = assignIfDifferent(newChildLayoutParams, childLayoutParams);\n    }\n\n    $: gridStyle = {\n        padding,\n        'grid-gap': crossGridGap\n    };\n\n    $: columnStyle = {\n        [gridTemplate]: joinTemplateSizes(templateSizes)\n    };\n\n    $: mods = {\n        orientation,\n        'scroll-snap': scrollSnap,\n        scrollbar: $jsonScrollbar === 'auto' ? 'auto' : 'none'\n    };\n\n    $: {\n        defaultItem = correctNonNegativeNumber($jsonDefaultItem, defaultItem);\n    }\n\n    function updateArrowsVisibility(): void {\n        if (!scroller) {\n            return;\n        }\n\n        let scrollLeft = scroller.scrollLeft;\n        if ($direction === 'rtl') {\n            scrollLeft *= -1;\n        }\n        const scrollWidth = scroller.scrollWidth;\n        const containerWidth = scroller.offsetWidth;\n\n        if ($direction === 'ltr') {\n            hasScrollLeft = scrollLeft > 2;\n            hasScrollRight = scrollLeft + containerWidth < scrollWidth - 2;\n        } else {\n            hasScrollRight = scrollLeft > 2;\n            hasScrollLeft = scrollLeft + containerWidth < scrollWidth - 2;\n        }\n    }\n\n    const updateArrowsVisibilityDebounced = debounce(updateArrowsVisibility, 50);\n\n    $: if (componentContext.json) {\n        updateArrowsVisibilityDebounced();\n    }\n\n    function scroll(type: 'left' | 'right'): void {\n        scroller.scroll({\n            left: scroller.scrollLeft + (scroller.offsetWidth * .75) * (type === 'right' ? 1 : -1),\n            behavior: 'smooth'\n        });\n    }\n\n    function getItems(): HTMLElement[] {\n        let res: HTMLElement[] = [];\n        let maxLen = galleryItemsWrappers[0].children.length;\n\n        for (let j = 0; j < maxLen; j += 2) {\n            for (let i = 0; i < columns; ++i) {\n                const elem = galleryItemsWrappers[i].children[j] as HTMLElement;\n                if (elem) {\n                    res.push(elem);\n                }\n            }\n        }\n\n        return res;\n    }\n\n    function scrollTo(offset: number, animated = true): void {\n        const isHorizontal = orientation === 'horizontal';\n        const scrollDirection: keyof ScrollToOptions = isHorizontal ? 'left' : 'top';\n\n        scroller.scroll({\n            [scrollDirection]: offset,\n            behavior: animated ? 'smooth' : 'instant'\n        });\n    }\n\n    function scrollToGalleryItem(galleryElements: HTMLElement[], index: number, {\n        animated = true,\n        extraOffset = 0,\n        overflow = 'clamp'\n    }: {\n        animated?: boolean;\n        extraOffset?: number;\n        overflow?: Overflow;\n    } = {}): void {\n        const isHorizontal = orientation === 'horizontal';\n        const elementOffset: keyof HTMLElement = isHorizontal ? 'offsetLeft' : 'offsetTop';\n\n        // 0.01 forces Chromium to use scroll-snap (exact correct scroll position will not trigger it)\n        // Chromium will save scroll-snapped value and will not save exact one\n        // Saved scroll position is used on resnapping (e.g. content change)\n\n        if (index > galleryElements.length - 1) {\n            index = overflow === 'ring' ? nonNegativeModulo(index, galleryElements.length) : galleryElements.length - 1;\n        } else if (index < 0) {\n            index = overflow === 'ring' ? nonNegativeModulo(index, galleryElements.length) : 0;\n        }\n\n        const elem = galleryElements[index];\n\n        if (elem) {\n            let offset;\n            if ($direction === 'ltr' || !isHorizontal) {\n                offset = elem[elementOffset] + .01 - itemSpacing / 2;\n            } else {\n                const scrollWrapperSize = scroller.offsetWidth;\n                offset = (elem[elementOffset] + elem.offsetWidth + .01 - itemSpacing / 2) - scrollWrapperSize;\n            }\n\n            if (extraOffset) {\n                offset += extraOffset;\n\n                const maxOffset = isHorizontal ?\n                    scroller.scrollWidth - scroller.offsetWidth :\n                    scroller.scrollHeight - scroller.offsetHeight;\n                if (offset > maxOffset) {\n                    if (overflow === 'clamp') {\n                        offset = maxOffset;\n                    } else if (overflow === 'ring') {\n                        offset = nonNegativeModulo(offset, maxOffset);\n                    }\n                }\n                if (offset < 0) {\n                    if (overflow === 'clamp') {\n                        offset = 0;\n                    } else if (overflow === 'ring') {\n                        offset = nonNegativeModulo(offset, maxOffset);\n                    }\n                }\n            }\n\n            scrollTo(offset, animated);\n        }\n    }\n\n    function scrollOffset(offset: number, {\n        overflow = 'clamp',\n        animated = true\n    }: {\n        overflow?: Overflow;\n        animated?: boolean;\n    } = {}): void {\n        const isHorizontal = orientation === 'horizontal';\n        const directionMultiplier = ($direction === 'ltr' || !isHorizontal) ? 1 : -1;\n        const currentOffset = isHorizontal ?\n            scroller.scrollLeft :\n            scroller.scrollTop;\n        const maxOffset = isHorizontal ?\n            scroller.scrollWidth - scroller.offsetWidth :\n            scroller.scrollHeight - scroller.offsetHeight;\n        let newOffset = currentOffset * directionMultiplier + offset;\n        if (newOffset > maxOffset) {\n            if (overflow === 'clamp') {\n                newOffset = maxOffset;\n            } else if (overflow === 'ring') {\n                newOffset = nonNegativeModulo(newOffset, maxOffset);\n            }\n        } else if (newOffset < 0) {\n            if (overflow === 'clamp') {\n                newOffset = 0;\n            } else if (overflow === 'ring') {\n                newOffset = nonNegativeModulo(newOffset, maxOffset);\n            }\n        }\n        scrollTo(newOffset * directionMultiplier, animated);\n    }\n\n    function checkIsIntersecting(scroller: DOMRect, item: DOMRect): boolean {\n        if (orientation === 'horizontal') {\n            return item.right > scroller.left && scroller.right > item.left;\n        }\n\n        return item.bottom > scroller.top && scroller.bottom > item.top;\n    }\n\n    function checkIsFullyIntersecting(scroller: DOMRect, item: DOMRect): boolean {\n        if (orientation === 'horizontal') {\n            return item.left >= scroller.left && item.right <= scroller.right;\n        }\n\n        return item.top >= scroller.top && item.bottom <= scroller.bottom;\n    }\n\n    function calculateCurrentElementIndex(action: 'prev' | 'next'): number {\n        const galleryElements = getItems();\n        const scrollerRect = scroller.getBoundingClientRect();\n\n        // Try to find the most left fully visible element\n        const firstFullyVisibleElement = galleryElements.findIndex(el =>\n            checkIsFullyIntersecting(scrollerRect, el.getBoundingClientRect())\n        );\n\n        if (firstFullyVisibleElement !== -1) {\n            return firstFullyVisibleElement;\n        }\n\n        // If there is no fully visible elements, it means that:\n        // - only one element is partly visible and its width bigger than gallery width\n        // - two elements are partly visible\n        const visibleElementsMap = galleryElements.map(el =>\n            checkIsIntersecting(scrollerRect, el.getBoundingClientRect())\n        );\n        const firstVisibleElement = visibleElementsMap.findIndex(Boolean);\n\n        if (firstVisibleElement !== -1) {\n            // If two elements are partly visible, we should scroll to current element on \"set_item_previous\" action\n            const isPreviousEqualCurrent = action === 'prev' && visibleElementsMap.filter(Boolean).length === 2;\n            return isPreviousEqualCurrent ? firstVisibleElement + 1 : firstVisibleElement;\n        }\n\n        return action === 'prev' ? 1 : galleryElements.length - 2;\n    }\n\n    $: if (componentContext.json) {\n        if (prevId) {\n            rootCtx.unregisterInstance(prevId);\n            prevId = undefined;\n        }\n\n        if (componentContext.id && !componentContext.fakeElement) {\n            prevId = componentContext.id;\n            rootCtx.registerInstance<SwitchElements>(prevId, {\n                setCurrentItem(item: number, animated: boolean) {\n                    const galleryElements = getItems();\n                    if (item < 0 || item > galleryElements.length - 1) {\n                        throw new Error('Item is out of range in \"set-current-item\" action');\n                    }\n\n                    scrollToGalleryItem(galleryElements, item, { animated });\n                },\n                setPreviousItem(step: number, overflow: Overflow, animated: boolean) {\n                    const currentElementIndex = calculateCurrentElementIndex('prev');\n                    const galleryElements = getItems();\n                    let previousItem = currentElementIndex - step;\n\n                    scrollToGalleryItem(galleryElements, previousItem, { animated, overflow });\n                },\n                setNextItem(step: number, overflow: Overflow, animated: boolean) {\n                    const isHorizontal = orientation === 'horizontal';\n                    const directionMultiplier = ($direction === 'ltr' || !isHorizontal) ? 1 : -1;\n                    // Go to scroller start, if we reached right/bottom edge of scroller\n                    const isEdgeScroll = isHorizontal ? (\n                        scroller.scrollLeft * directionMultiplier + scroller.offsetWidth === scroller.scrollWidth\n                    ) : (\n                        scroller.scrollTop + scroller.offsetHeight === scroller.scrollHeight\n                    );\n                    const galleryElements = getItems();\n                    if (isEdgeScroll && overflow === 'ring') {\n                        scrollToGalleryItem(galleryElements, 0, { animated });\n                        return;\n                    }\n\n                    const currentElementIndex = calculateCurrentElementIndex('next');\n                    let nextItem = currentElementIndex + step;\n\n                    scrollToGalleryItem(galleryElements, nextItem, { animated, overflow });\n                },\n                scrollToStart(animated: boolean) {\n                    scrollTo(0, animated);\n                },\n                scrollToEnd(animated: boolean) {\n                    scrollTo(($direction === 'ltr' || orientation !== 'horizontal') ? 1e6 : -1e6, animated);\n                },\n                scrollToPosition(step, animated: boolean) {\n                    scrollTo(($direction === 'ltr' || orientation !== 'horizontal') ? step : -step, animated);\n                },\n                scrollCombined({\n                    step,\n                    offset,\n                    overflow,\n                    animated\n                }) {\n                    if (step) {\n                        const currentElementIndex = calculateCurrentElementIndex(step > 0 ? 'next' : 'prev');\n                        const nextItem = currentElementIndex + step;\n                        scrollToGalleryItem(getItems(), nextItem, { animated, extraOffset: offset, overflow });\n                    } else if (offset) {\n                        scrollOffset(offset, {\n                            overflow,\n                            animated\n                        });\n                    }\n                }\n            });\n        }\n    }\n\n    onMount(() => {\n        mounted = true;\n\n        updateArrowsVisibility();\n\n        if (defaultItem) {\n            const galleryElements = getItems();\n            scrollToGalleryItem(galleryElements, defaultItem, { animated: false });\n        }\n    });\n\n    onDestroy(() => {\n        mounted = false;\n\n        items.forEach(context => {\n            context.destroy();\n        });\n\n        if (prevId && !componentContext.fakeElement) {\n            rootCtx.unregisterInstance(prevId);\n            prevId = undefined;\n        }\n    });\n</script>\n\n<svelte:window on:resize={shouldCheckArrows ? updateArrowsVisibilityDebounced : null} />\n\n<Outer\n    cls={genClassName('gallery', css, mods)}\n    {componentContext}\n    {layoutParams}\n    customPaddings={true}\n    customActions={'gallery'}\n    parentOf={items}\n    {replaceItems}\n>\n    <div\n        class=\"{css.gallery__scroller} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n        bind:this={scroller}\n        on:scroll={shouldCheckArrows ? updateArrowsVisibility : null}\n        style={makeStyle(scrollerStyle)}\n    >\n        <div\n            bind:this={itemsGridElem}\n            class={css['gallery__items-grid']}\n            style={makeStyle(gridStyle)}\n        >\n            {#each itemsGrid as itemsRow, rowIndex}\n                <div\n                    class={css.gallery__items}\n                    style={makeStyle(columnStyle)}\n                    bind:this={galleryItemsWrappers[rowIndex]}\n                >\n                    {#each itemsRow as item}\n                        {#if item.hasGapBefore}\n                            <div\n                                class={css.gallery__gap}\n                                style:width={orientation === 'horizontal' ? gridGap : undefined}\n                                style:height={orientation !== 'horizontal' ? gridGap : undefined}\n                            ></div>\n                        {/if}\n\n                        <Unknown\n                            componentContext={item.componentContext}\n                            layoutParams={childLayoutParams}\n                        />\n                    {/each}\n\n                    <div style={makeStyle(lastPaddingSize)}></div>\n                </div>\n            {/each}\n        </div>\n    </div>\n    {#if orientation === 'horizontal'}\n        {#if hasScrollLeft && shouldCheckArrows}\n            <!-- svelte-ignore a11y-click-events-have-key-events -->\n            <!-- svelte-ignore a11y-no-static-element-interactions -->\n            <div class=\"{leftClass || `${css.gallery__arrow} ${arrowsCss.arrow} ${arrowsCss.arrow_left}`}\" on:click={() => scroll('left')}>\n                {#if !leftClass}\n                    <svg class={arrowsCss.arrow__icon} xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n                        <path class={css['gallery__arrow-icon-path']} d=\"m10 16 8.3 8 1.03-1-4-6-.7-1 .7-1 4-6-1.03-1z\"/>\n                    </svg>\n                {/if}\n            </div>\n        {/if}\n        {#if hasScrollRight && shouldCheckArrows}\n            <!-- svelte-ignore a11y-click-events-have-key-events -->\n            <!-- svelte-ignore a11y-no-static-element-interactions -->\n            <div class=\"{rightClass || `${css.gallery__arrow} ${arrowsCss.arrow} ${arrowsCss.arrow_right}`}\" on:click={() => scroll('right')}>\n                {#if !rightClass}\n                    <svg class={arrowsCss.arrow__icon} xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n                        <path class={css['gallery__arrow-icon-path']} d=\"M22 16l-8.3 8-1.03-1 4-6 .7-1-.7-1-4-6 1.03-1 8.3 8z\"/>\n                    </svg>\n                {/if}\n            </div>\n        {/if}\n    {/if}\n</Outer>\n","import type { MaybeMissing } from '../expressions/json';\nimport type { TabDelimiterStyle } from '../types/tabs';\nimport { isPositiveNumber } from './isPositiveNumber';\n\nexport interface TabsDelimiter {\n    url: string;\n    width?: number;\n    height?: number;\n}\n\nexport function correctTabDelimiterStyle(\n    style: MaybeMissing<TabDelimiterStyle> | undefined,\n    defaultValue: TabsDelimiter | undefined\n): TabsDelimiter | undefined {\n    if (!style || !style.image_url || typeof style.image_url !== 'string') {\n        return defaultValue;\n    }\n\n    const res: TabsDelimiter = {\n        url: style.image_url\n    };\n\n    if (style.width?.type === 'fixed' && isPositiveNumber(style.width.value)) {\n        res.width = style.width.value;\n    }\n    if (style.height?.type === 'fixed' && isPositiveNumber(style.height.value)) {\n        res.height = style.height.value;\n    }\n\n    return res;\n}\n","import type { CornersRadius } from '../types/border';\nimport { borderRadius } from './borderRadius';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctBorderRadius(\n    cornersRadius: CornersRadius,\n    defaultRadius: number,\n    fontSize: number,\n    defaultVal: string\n): string {\n    const list = [\n        cornersRadius['top-left'],\n        cornersRadius['top-right'],\n        cornersRadius['bottom-right'],\n        cornersRadius['bottom-left']\n    ];\n\n    for (let i = 0; i < list.length; ++i) {\n        if (list[i] && !isNonNegativeNumber(list[i])) {\n            return defaultVal;\n        }\n    }\n\n    return borderRadius(cornersRadius, defaultRadius, fontSize);\n}\n","<script lang=\"ts\">\n    import { setContext } from 'svelte';\n    import { writable } from 'svelte/store';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { LayoutParams } from '../../types/layoutParams';\n    import { ENABLED_CTX, type EnabledCtxValue } from '../../context/enabled';\n    import Unknown from './Unknown.svelte';\n\n    export let componentContext: ComponentContext;\n    export let layoutParams: LayoutParams | undefined = undefined;\n    export let enabled: boolean;\n\n    const enabledStore = writable(enabled);\n\n    setContext<EnabledCtxValue>(ENABLED_CTX, {\n        isEnabled: enabledStore\n    });\n\n    $: {\n        enabledStore.set(enabled);\n    }\n</script>\n\n<Unknown\n    {componentContext}\n    {layoutParams}\n/>\n","<script lang=\"ts\">\n    import { getContext, onDestroy, onMount, tick } from 'svelte';\n    import { writable } from 'svelte/store';\n\n    import css from './Tabs.module.css';\n    import rootCss from '../Root.module.css';\n\n    import type { Mods } from '../../types/general';\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivTabsData, TabsTitleAnimationType } from '../../types/tabs';\n    import type { Action, Overflow } from '../../../typings/common';\n    import type { EdgeInsets } from '../../types/edgeInserts';\n    import type { SwitchElements } from '../../types/switch-elements';\n    import type { TabItem } from '../../types/tabs';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { DivBaseData } from '../../types/base';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { correctTabDelimiterStyle, type TabsDelimiter } from '../../utils/correctTabDelimiterStyle';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { wrapError } from '../../utils/wrapError';\n    import { genClassName } from '../../utils/genClassName';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { ARROW_LEFT, ARROW_RIGHT, END, HOME } from '../../utils/keyboard/codes';\n    import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n    import { isPositiveNumber } from '../../utils/isPositiveNumber';\n    import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n    import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n    import { correctBorderRadius } from '../../utils/correctBorderRadius';\n    import { correctColor } from '../../utils/correctColor';\n    import { correctFontWeight } from '../../utils/correctFontWeight';\n    import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n    import { assignIfDifferent } from '../../utils/assignIfDifferent';\n    import { type Coords, getTouchCoords } from '../../utils/getTouchCoords';\n    import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n    import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n    import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n    import { filterEnabledActions } from '../../utils/filterEnabledActions';\n    import { nonNegativeModulo } from '../../utils/nonNegativeModulo';\n    import { Truthy } from '../../utils/truthy';\n    import Outer from '../utilities/Outer.svelte';\n    import Actionable from '../utilities/Actionable.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n    import EnabledContext from '../utilities/EnabledContext.svelte';\n\n    export let componentContext: ComponentContext<DivTabsData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    interface ChildInfo {\n        index: number;\n        title: MaybeMissing<string> | undefined;\n        title_click_action?: MaybeMissing<Action> | undefined;\n    }\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const direction = rootCtx.direction;\n\n    const instId = rootCtx.genId('tabs');\n\n    let prevId: string | undefined;\n    let hasError = false;\n    let childStore = writable<ChildInfo[]>([]);\n    let childLayoutParams: LayoutParams = {};\n\n    let tabsElem: HTMLElement;\n    let panelsWrapper: HTMLElement;\n    let swiperElem: HTMLElement;\n    let mods: Mods = {};\n\n    let tabFontSize = 12;\n    let tabPaddings = '';\n    let tabLineHeight = '';\n    let tabLetterSpacing = '';\n    let tabBorderRadius = '';\n    let tabActiveFontWeight: number | undefined = undefined;\n    let tabActiveFontFamily = '';\n    let tabInactiveFontWeight: number | undefined = undefined;\n    let tabInactiveFontFamily = '';\n    let tabActiveTextColor = '';\n    let tabInactiveTextColor = '';\n    let tabActiveBackground = '';\n    let tabInactiveBackground = '';\n    let tabItemSpacing = 0;\n    let separatorBackground = '';\n    let separatorMargins = '';\n    let titlePadding: EdgeInsets | null = null;\n    let isSwipeInitialized = false;\n    let isAnimated = false;\n    let previousSelected: number | undefined;\n    let showedPanels: (ComponentContext | undefined)[] = [];\n    let visiblePanels: boolean[] = [];\n    let hidePanelsTimeout: number | null = null;\n    let startCoords: Coords | null = null;\n    let moveCoords: Coords | null = null;\n    let swipeStartTime: number;\n    let isSwipeStarted = false;\n    let isSwipeCanceled = false;\n    let startTransform: number;\n    let currentTransform: number;\n    let delimitierStyle: TabsDelimiter | undefined;\n    let animationType: TabsTitleAnimationType = 'slide';\n    let animationDuration: number | undefined;\n    let selectedTabStyles: Record<string, string> | undefined;\n    let prevContext: ComponentContext<DivTabsData> | undefined;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        tabFontSize = 12;\n        tabPaddings = '';\n        tabBorderRadius = '';\n        tabActiveFontWeight = undefined;\n        tabActiveFontFamily = '';\n        tabInactiveFontWeight = undefined;\n        tabInactiveFontFamily = '';\n        tabActiveTextColor = '';\n        tabInactiveTextColor = '';\n        tabActiveBackground = '';\n        tabInactiveBackground = '';\n        tabItemSpacing = 0;\n        separatorBackground = '';\n        separatorMargins = '';\n        titlePadding = null;\n        delimitierStyle = undefined;\n        animationType = 'slide';\n        animationDuration = 300;\n        selectedTabStyles = undefined;\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: items = Array.isArray(componentContext.json.items) && componentContext.json.items || [];\n    $: parentOfItems = items.map(it => {\n        return {\n            json: it.div,\n            id: it.div?.id\n        };\n    });\n\n    $: jsonWidth = componentContext.getDerivedFromVars(componentContext.json.width);\n    $: jsonHeight = componentContext.getDerivedFromVars(componentContext.json.height);\n    $: jsonSelectedTab = componentContext.getJsonWithVars(componentContext.json.selected_tab);\n    $: jsonTabStyle = componentContext.getDerivedFromVars(componentContext.json.tab_title_style);\n    $: jsonSeparator = componentContext.getDerivedFromVars(componentContext.json.has_separator);\n    $: jsonSeparatorColor = componentContext.getDerivedFromVars(componentContext.json.separator_color);\n    $: jsonSeparatorPaddings = componentContext.getDerivedFromVars(componentContext.json.separator_paddings);\n    $: jsonSwipeEnabled = componentContext.getDerivedFromVars(\n        componentContext.json.switch_tabs_by_content_swipe_enabled\n    );\n    $: jsonRestrictParentScroll = componentContext.getDerivedFromVars(componentContext.json.restrict_parent_scroll);\n    $: jsonTitlePaddings = componentContext.getDerivedFromVars(componentContext.json.title_paddings);\n    $: jsonDelimiterStyle = componentContext.getDerivedFromVars(componentContext.json.tab_title_delimiter);\n\n    $: selected = jsonSelectedTab && Number(jsonSelectedTab) || 0;\n\n    $: if (Array.isArray(items) && items.length) {\n        let children: ChildInfo[] = [];\n\n        items.forEach((item, index) => {\n            const part = componentContext.getJsonWithVars({\n                index,\n                title: item.title,\n                title_click_action: item.title_click_action,\n            });\n            if (part.title && typeof part.title === 'string') {\n                children.push(part as ChildInfo);\n            } else {\n                componentContext.logError(wrapError(new Error('Incorrect title for the tab'), {\n                    additional: {\n                        index\n                    }\n                }));\n            }\n        });\n\n        childStore.set(children);\n    } else {\n        childStore.set([]);\n    }\n\n    function replaceItems(items: (MaybeMissing<DivBaseData> | undefined)[]): void {\n        if (!componentContext.json.items) {\n            return;\n        }\n\n        componentContext = prevContext = {\n            ...componentContext,\n            json: {\n                ...componentContext.json,\n                items: componentContext.json.items.map((it, index) => {\n                    return {\n                        ...it,\n                        div: items[index] as DivBaseData\n                    };\n                })\n            }\n        };\n    }\n\n    $: {\n        if (!$childStore?.length) {\n            hasError = true;\n            componentContext.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"tabs\"')));\n        } else {\n            hasError = false;\n        }\n    }\n\n    $: {\n        let newLayoutParams: LayoutParams = {\n            parentContainerOrientation: 'horizontal'\n        };\n\n        if ($jsonWidth?.type === 'wrap_content') {\n            newLayoutParams.parentHorizontalWrapContent = true;\n        }\n        if (!$jsonHeight || $jsonHeight.type === 'wrap_content') {\n            newLayoutParams.parentVerticalWrapContent = true;\n        }\n\n        childLayoutParams = assignIfDifferent(newLayoutParams, childLayoutParams);\n    }\n\n    $: if (!hasError && (selected < 0 || selected >= items.length)) {\n        componentContext.logError(wrapError(new Error('Incorrect \"selected_tab\" prop for div \"tabs\"'), {\n            additional: {\n                selected: componentContext.json.selected_tab,\n                length: items.length\n            }\n        }));\n        selected = selected < 0 ? 0 : items.length - 1;\n    }\n\n    $: if (!hasError && !$childStore.some(it => selected === it.index)) {\n        componentContext.logError(wrapError(new Error('Incorrect \"selected_tab\" prop for div \"tabs\"'), {\n            additional: {\n                selected: componentContext.json.selected_tab\n            }\n        }));\n        selected = $childStore[0]?.index || 0;\n    }\n\n    $: tabStyle = $jsonTabStyle || {};\n\n    $: {\n        tabFontSize = correctPositiveNumber(tabStyle.font_size, tabFontSize);\n    }\n\n    $: {\n        if (tabStyle.font_size || tabStyle.paddings) {\n            const paddings: EdgeInsets = tabStyle.paddings || {\n                top: 6,\n                right: 8,\n                bottom: 6,\n                left: 8\n            };\n\n            const adjustedPaddings: EdgeInsets = {\n                top: (Number(paddings.top) || 0) / tabFontSize * 10,\n                right: (Number($direction === 'ltr' ? paddings.end : paddings.start) || Number(paddings.right) || 0) / tabFontSize * 10,\n                bottom: (Number(paddings.bottom) || 0) / tabFontSize * 10,\n                left: (Number($direction === 'ltr' ? paddings.start : paddings.end) || Number(paddings.left) || 0) / tabFontSize * 10\n            };\n\n            tabPaddings = correctEdgeInserts(adjustedPaddings, $direction, tabPaddings);\n        }\n    }\n\n    $: {\n        const lineHeight = tabStyle.line_height;\n        if (lineHeight !== undefined && isPositiveNumber(lineHeight)) {\n            tabLineHeight = pxToEm(lineHeight / tabFontSize * 10);\n        }\n    }\n\n    $: {\n        const letterSpacing = tabStyle.letter_spacing;\n        if (letterSpacing !== undefined && isNonNegativeNumber(letterSpacing)) {\n            tabLetterSpacing = pxToEm(letterSpacing / tabFontSize * 10);\n        }\n    }\n\n    $: {\n        if (tabStyle.corner_radius || tabStyle.corners_radius || tabStyle.font_size) {\n            const defaultRadius = tabStyle.corner_radius ?? 1000;\n\n            if (tabStyle.corners_radius) {\n                tabBorderRadius = correctBorderRadius(\n                    tabStyle.corners_radius,\n                    defaultRadius,\n                    tabFontSize,\n                    tabBorderRadius\n                );\n            } else if (isNonNegativeNumber(defaultRadius)) {\n                tabBorderRadius = pxToEm(defaultRadius / tabFontSize * 10);\n            }\n        }\n    }\n\n    $: {\n        tabActiveFontWeight = correctFontWeight(\n            tabStyle.active_font_weight || tabStyle.font_weight,\n            undefined,\n            tabActiveFontWeight\n        );\n        if (tabStyle.font_family && typeof tabStyle.font_family === 'string') {\n            tabActiveFontFamily = rootCtx.typefaceProvider(tabStyle.font_family, {\n                fontWeight: tabActiveFontWeight || 400\n            });\n        } else {\n            tabActiveFontFamily = '';\n        }\n    }\n\n    $: {\n        tabInactiveFontWeight = correctFontWeight(\n            tabStyle.inactive_font_weight || tabStyle.font_weight,\n            undefined,\n            tabInactiveFontWeight\n        );\n        if (tabStyle.font_family && typeof tabStyle.font_family === 'string') {\n            tabInactiveFontFamily = rootCtx.typefaceProvider(tabStyle.font_family, {\n                fontWeight: tabInactiveFontWeight || 400\n            });\n        } else {\n            tabInactiveFontFamily = '';\n        }\n    }\n\n    $: {\n        tabActiveTextColor = correctColor(tabStyle.active_text_color, 1, tabActiveTextColor);\n    }\n\n    $: {\n        tabInactiveTextColor = correctColor(tabStyle.inactive_text_color, 1, tabInactiveTextColor);\n    }\n\n    $: {\n        tabActiveBackground = correctColor(tabStyle.active_background_color, 1, tabActiveBackground);\n    }\n\n    $: {\n        tabInactiveBackground = correctColor(tabStyle.inactive_background_color, 1, tabInactiveBackground);\n    }\n\n    $: {\n        tabItemSpacing = correctNonNegativeNumber(tabStyle.item_spacing, tabItemSpacing);\n    }\n\n    $: {\n        if ($jsonSeparator) {\n            if ($jsonSeparatorColor) {\n                separatorBackground = correctColor($jsonSeparatorColor, 1, separatorBackground);\n            }\n            if ($jsonSeparatorPaddings) {\n                separatorMargins = correctEdgeInserts($jsonSeparatorPaddings, $direction, separatorMargins);\n            }\n        }\n    }\n    $: separatorStyle = {\n        background: separatorBackground,\n        margin: separatorMargins\n    };\n\n    $: isSwipeEnabled = typeof $jsonSwipeEnabled === 'undefined' ?\n        true :\n        Boolean($jsonSwipeEnabled);\n\n    $: {\n        titlePadding = correctEdgeInsertsObject($jsonTitlePaddings ? $jsonTitlePaddings : undefined, titlePadding);\n    }\n\n    $: {\n        delimitierStyle = correctTabDelimiterStyle($jsonDelimiterStyle, delimitierStyle);\n    }\n\n    $: if ($jsonTabStyle?.animation_type === 'fade' || $jsonTabStyle?.animation_type === 'none') {\n        animationType = $jsonTabStyle.animation_type;\n    }\n\n    $: if (isNonNegativeNumber($jsonTabStyle?.animation_duration)) {\n        animationDuration = $jsonTabStyle.animation_duration;\n    }\n\n    function updateItems(items: MaybeMissing<TabItem>[]): void {\n        if (hasError) {\n            return;\n        }\n\n        const unusedContexts = new Set(showedPanels.filter(Truthy));\n        const jsonToContextMap = new Map<unknown, ComponentContext>();\n\n        if (prevContext === componentContext) {\n            showedPanels.forEach(context => {\n                if (context) {\n                    jsonToContextMap.set(context.json, context);\n                }\n            });\n        }\n\n        showedPanels = items.map((item, i) => {\n            if ((i === selected || showedPanels[i]) && item?.div) {\n                const found = jsonToContextMap.get(item.div);\n                if (found) {\n                    unusedContexts.delete(found);\n                    return found;\n                }\n\n                return componentContext.produceChildContext(item.div, {\n                    path: i\n                });\n            }\n        });\n        visiblePanels = items.map((_, i) => i === selected);\n\n        for (const ctx of unusedContexts) {\n            ctx.destroy();\n        }\n        prevContext = componentContext;\n    }\n    $: updateItems(items);\n\n    async function setSelected(val: number, focus: boolean, animated: boolean): Promise<void> {\n        previousSelected = selected;\n        selected = val;\n        initTabsSwipe();\n        changeTab(animated);\n\n        updateSlideAnimation();\n\n        if (focus) {\n            await tick();\n\n            const selectedTab = tabsElem.querySelector(`.${css.tabs__item_selected}`) as HTMLElement | null;\n            if (selectedTab) {\n                selectedTab.focus();\n            }\n        }\n    }\n\n    function moveSelected(shift: number, focus = false): void {\n        const len = $childStore?.length;\n        if (!len) {\n            return;\n        }\n        const indices = $childStore.map(it => it.index);\n        const selectedIndex = indices.indexOf(selected);\n\n        let newSelectedIndex = selectedIndex + shift;\n\n        if (newSelectedIndex >= len) {\n            newSelectedIndex = 0;\n        } else if (newSelectedIndex < 0) {\n            newSelectedIndex = len - 1;\n        }\n        const newSelected = indices[newSelectedIndex];\n\n        setSelected(newSelected, focus, true);\n    }\n\n    function selectItem(_event: Event, index: number): boolean {\n        if (selected !== index) {\n            setSelected(index, false, true);\n\n            return false;\n        }\n\n        return true;\n    }\n\n    function changeTab(animated = true): void {\n        isAnimated = animated;\n        updateTransform(-selected * 100);\n        updateShowedPanels();\n        updateWrapperHeight();\n        hideNonVisiblePanels();\n        currentTransform = -selected * panelsWrapper.clientWidth;\n    }\n\n    async function updateTransform(transform: number): Promise<void> {\n        await tick();\n        swiperElem.style.transform = `translate3d(${transform}%,0,0)`;\n    }\n\n    function updateShowedPanels(around = false): void {\n        const start = around ?\n            Math.max(0, selected - 1) :\n            Math.min(selected, previousSelected ?? selected);\n        const end = around ?\n            Math.min(items.length - 1, selected + 1) :\n            Math.max(selected, previousSelected ?? selected);\n\n        showedPanels.forEach(componentContext => {\n            componentContext?.destroy();\n        });\n\n        showedPanels = showedPanels.map((context, index) => {\n            if (context) {\n                return context;\n            }\n            const div = items[index]?.div;\n            if (index >= start && index <= end && div) {\n                return componentContext.produceChildContext(div, {\n                    path: index\n                });\n            }\n            return undefined;\n        });\n        visiblePanels = visiblePanels.map((_, index) => index >= start && index <= end);\n    }\n\n    async function updateWrapperHeight(): Promise<void> {\n        if ($jsonHeight?.type === 'match_parent') {\n            return;\n        }\n\n        await tick();\n        const activePanel = document.getElementById(`${instId}-panel-${selected}`);\n\n        if (activePanel) {\n            panelsWrapper.style.height = pxToEm(activePanel.offsetHeight);\n        }\n    }\n\n    function hideNonVisiblePanels(): void {\n        if (hidePanelsTimeout) {\n            clearTimeout(hidePanelsTimeout);\n        }\n        hidePanelsTimeout = window.setTimeout(() => {\n            visiblePanels = items.map((_, i) => i === selected);\n        }, 400);\n    }\n\n    function onTabKeydown(event: KeyboardEvent): void {\n        if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n            return;\n        }\n        if (!items) {\n            return;\n        }\n\n        if (event.which === ARROW_LEFT) {\n            moveSelected(-1, true);\n        } else if (event.which === ARROW_RIGHT) {\n            moveSelected(1, true);\n        } else if (event.which === HOME) {\n            setSelected(0, true, true);\n        } else if (event.which === END) {\n            setSelected(items.length - 1, true, true);\n        } else {\n            return;\n        }\n\n        event.preventDefault();\n    }\n\n    // todo desktop arrows\n\n    function initTabsSwipe(): void {\n        if (isSwipeInitialized) {\n            return;\n        }\n\n        isSwipeInitialized = true;\n        panelsWrapper.style.height = pxToEm(panelsWrapper.clientHeight);\n        swiperElem.style.transform = `translate3d(${-(previousSelected ?? selected) * 100}%,0,0)`;\n    }\n\n    function onTouchStart(event: TouchEvent): void {\n        const target = event.target as HTMLElement | null;\n        const restrictClosest = target?.closest?.(`.${rootCss['root_restrict-scroll']}`);\n\n        if (\n            items.length < 2 ||\n            event.touches.length > 1 ||\n            (restrictClosest && restrictClosest !== panelsWrapper)\n        ) {\n            return;\n        }\n\n        isSwipeStarted = false;\n        isSwipeCanceled = false;\n        startCoords = getTouchCoords(event);\n        moveCoords = null;\n        swipeStartTime = Date.now();\n        startTransform = currentTransform || -selected * panelsWrapper.clientWidth;\n        isAnimated = false;\n\n        if (hidePanelsTimeout) {\n            clearTimeout(hidePanelsTimeout);\n        }\n    }\n\n    function onTouchMove(event: TouchEvent): void {\n        const coords = getTouchCoords(event);\n        if (\n            !startCoords ||\n            moveCoords && moveCoords.x === coords.x && moveCoords.y === coords.y\n        ) {\n            return;\n        }\n\n        moveCoords = coords;\n        const panelsWrapperWidth = panelsWrapper.clientWidth;\n        if (isSwipeStarted) {\n            currentTransform = coords.x - startCoords.x + startTransform;\n\n            // Slowing down scroll on edges\n            const scrollWidth = panelsWrapperWidth * items.length;\n            if (currentTransform > 0) {\n                currentTransform = currentTransform * panelsWrapperWidth / (currentTransform + panelsWrapperWidth * 3);\n            } else if (-currentTransform + panelsWrapperWidth > scrollWidth) {\n                let space = -currentTransform + panelsWrapperWidth - scrollWidth;\n                space = space * panelsWrapperWidth / (space + panelsWrapperWidth * 3);\n                currentTransform = panelsWrapperWidth - scrollWidth - space;\n            }\n\n            updateTransform(currentTransform * 100 / panelsWrapperWidth);\n        } else if (Math.abs(coords.y - startCoords.y) > 10) {\n            // Swipe is not started, so we cancel it because of vertical scroll\n            isSwipeCanceled = true;\n        } else if (!isSwipeCanceled && Math.abs(coords.x - startCoords.x) > 8) {\n            initTabsSwipe();\n            isSwipeStarted = true;\n            startCoords = coords;\n            updateTransform(-selected * 100);\n            updateShowedPanels(true);\n        }\n\n        if (isSwipeStarted && event.cancelable) {\n            event.preventDefault();\n        }\n    }\n\n    function onTouchEnd(): void {\n        isSwipeCanceled = false;\n        startCoords = null;\n        let newSelected = selected;\n        if (!isSwipeStarted) {\n            return;\n        }\n        isSwipeStarted = false;\n\n        // 512px limit for big screens\n        const panelsWrapperWidth = Math.min(512, panelsWrapper.clientWidth);\n        const swipeDist = Math.abs(startTransform - currentTransform);\n        const swipeCoefficient = Math.min(1, (Date.now() - swipeStartTime) / 750);\n        if (swipeDist > (panelsWrapperWidth / 4) * swipeCoefficient) {\n            newSelected += (startTransform > currentTransform) ? 1 : -1;\n        }\n\n        if (newSelected >= items.length) {\n            newSelected = items.length - 1;\n        } else if (newSelected < 0) {\n            newSelected = 0;\n        }\n\n        if (newSelected === selected) {\n            isAnimated = true;\n            // Scroll back to current tab\n            currentTransform = -newSelected * panelsWrapperWidth;\n            updateTransform(-newSelected * 100);\n            hideNonVisiblePanels();\n        } else {\n            setSelected(newSelected, false, true);\n        }\n    }\n\n    function clampIndex(index: number, overflow: Overflow): number {\n        if (index > items.length - 1) {\n            return overflow === 'ring' ? nonNegativeModulo(index, items.length) : items.length - 1;\n        }\n        if (index < 0) {\n            return overflow === 'ring' ? nonNegativeModulo(index, items.length) : 0;\n        }\n\n        return index;\n    }\n\n    function updateSlideAnimation(): void {\n        if (animationType !== 'slide') {\n            return;\n        }\n\n        tick().then(() => {\n            const elem = tabsElem?.querySelector<HTMLElement>('.' + css.tabs__item_selected);\n            if (!elem) {\n                return;\n            }\n\n            const listBBox = tabsElem.getBoundingClientRect();\n            const elemBBox = elem.getBoundingClientRect();\n\n            selectedTabStyles = {\n                top: `${elemBBox.top - listBBox.top}px`,\n                left: `${elemBBox.left - listBBox.left + tabsElem.scrollLeft}px`,\n                width: `${elemBBox.width}px`,\n                height: `${elemBBox.height}px`\n            };\n        });\n    }\n\n    $: if (componentContext.json) {\n        if (prevId) {\n            rootCtx.unregisterInstance(prevId);\n            prevId = undefined;\n        }\n\n        if (componentContext.id && !hasError && !componentContext.fakeElement) {\n            prevId = componentContext.id;\n            rootCtx.registerInstance<SwitchElements>(prevId, {\n                setCurrentItem(item: number, animated: boolean) {\n                    if (item < 0 || item > items.length - 1) {\n                        throw new Error('Item is out of range in \"set-current-item\" action');\n                    }\n\n                    setSelected(item, false, animated);\n                },\n                setPreviousItem(step: number, overflow: Overflow, animated: boolean) {\n                    let previousItem = clampIndex(selected - step, overflow);\n\n                    setSelected(previousItem, false, animated);\n                },\n                setNextItem(step: number, overflow: Overflow, animated: boolean) {\n                    let nextItem = clampIndex(selected + step, overflow);\n\n                    setSelected(nextItem, false, animated);\n                },\n                scrollToStart(animated: boolean) {\n                    setSelected(0, false, animated);\n                },\n                scrollToEnd(animated: boolean) {\n                    setSelected(items.length - 1, false, animated);\n                },\n                scrollCombined({\n                    step,\n                    overflow,\n                    animated\n                }) {\n                    if (step) {\n                        setSelected(clampIndex(selected + step, overflow || 'clamp'), false, animated || true);\n                    }\n                },\n            });\n        }\n    }\n\n    $: mods = {\n        'height-parent': $jsonHeight?.type === 'match_parent' ? 'yes' : '',\n        animation: animationType\n    };\n\n    onMount(() => {\n        updateSlideAnimation();\n    });\n\n    onDestroy(() => {\n        showedPanels.forEach(componentContext => {\n            componentContext?.destroy();\n        });\n\n        if (prevId) {\n            rootCtx.unregisterInstance(prevId);\n            prevId = undefined;\n        }\n    });\n</script>\n\n<svelte:window\n    on:resize={animationType === 'slide' ? updateSlideAnimation : undefined}\n></svelte:window>\n\n{#if !hasError}\n    <Outer\n        cls={genClassName('tabs', css, mods)}\n        {componentContext}\n        {layoutParams}\n        customActions={'tabs'}\n        parentOf={parentOfItems}\n        parentOfSimpleMode={true}\n        {replaceItems}\n    >\n        <!-- svelte-ignore a11y-interactive-supports-focus -->\n        <div\n            bind:this={tabsElem}\n            class=\"{css.tabs__list} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n            role=\"tablist\"\n            style:--divkit-tabs-title-padding={titlePadding ? edgeInsertsToCss(titlePadding, $direction) : ''}\n            style:--divkit-tabs-font-size={pxToEm(tabFontSize)}\n            style:--divkit-tabs-paddings={tabPaddings}\n            style:--divkit-tabs-line-height={tabLineHeight}\n            style:--divkit-tabs-letter-spacing={tabLetterSpacing}\n            style:--divkit-tabs-active-font-weight={tabActiveFontWeight || ''}\n            style:--divkit-tabs-inactive-font-weight={tabInactiveFontWeight || ''}\n            style:--divkit-tabs-active-font-family={tabActiveFontFamily || ''}\n            style:--divkit-tabs-inactive-font-family={tabInactiveFontFamily || ''}\n            style:--divkit-tabs-active-text-color={tabActiveTextColor}\n            style:--divkit-tabs-inactive-text-color={tabInactiveTextColor}\n            style:--divkit-tabs-active-background-color={tabActiveBackground}\n            style:--divkit-tabs-inactive-background-color={tabInactiveBackground}\n            style:--divkit-tabs-border-radius={tabBorderRadius}\n            style:--divkit-tabs-items-spacing={tabItemSpacing ? pxToEmWithUnits(tabItemSpacing * 10 / tabFontSize) : ''}\n            style:--divkit-tabs-animation-duration={animationDuration !== undefined ? `${animationDuration}ms` : ''}\n            on:keydown={onTabKeydown}\n        >\n            <div class={css['tabs__items-bg']} aria-hidden=\"true\">\n                {#each $childStore as item}\n                    {@const index = item.index}\n                    {@const isSelected = index === selected}\n\n                    {#if delimitierStyle && index > 0}\n                        <span\n                            class={css.tabs__delimitier}\n                            style:width={delimitierStyle.width ? pxToEm(delimitierStyle.width) : undefined}\n                            style:height={delimitierStyle.height ? pxToEm(delimitierStyle.height) : undefined}\n                        ></span>\n                    {/if}\n\n                    <span\n                        class={genClassName('tabs__item', css, {\n                            selected: isSelected,\n                            actionable: Boolean(item.title_click_action)\n                        })}\n                    >{item.title}</span>\n                {/each}\n            </div>\n            {#if animationType === 'slide' && selectedTabStyles}\n                <div\n                    class={css['tabs__tabs-highlighter']}\n                    style={makeStyle(selectedTabStyles)}\n                ></div>\n            {/if}\n            <div class={css['tabs__items-text']}>\n                {#each $childStore as item}\n                    {@const index = item.index}\n                    {@const isSelected = index === selected}\n\n                    {#if delimitierStyle && index > 0}\n                        <img\n                            class={css.tabs__delimitier}\n                            alt=\"\"\n                            loading=\"lazy\"\n                            decoding=\"async\"\n                            src={delimitierStyle.url}\n                            style:width={delimitierStyle.width ? pxToEm(delimitierStyle.width) : undefined}\n                            style:height={delimitierStyle.height ? pxToEm(delimitierStyle.height) : undefined}\n                        />\n                    {/if}\n\n                    <Actionable\n                        {componentContext}\n                        cls={genClassName('tabs__item', css, {\n                            selected: isSelected,\n                            actionable: Boolean(item.title_click_action)\n                        })}\n                        actions={\n                            item.title_click_action && !componentContext.fakeElement ?\n                                [item.title_click_action].filter(filterEnabledActions) :\n                                []\n                        }\n                        attrs={{\n                            id: `${instId}-tab-${index}`,\n                            'aria-controls': `${instId}-panel-${index}`,\n                            role: 'tab',\n                            // eslint-disable-next-line no-nested-ternary\n                            tabindex: isSelected && !componentContext.fakeElement ? (item.title_click_action ? undefined : '0') : '-1',\n                            'aria-selected': isSelected ? 'true' : 'false'\n                        }}\n                        customAction={componentContext.fakeElement ? null : (event => selectItem(event, index))}\n                    >{item.title}</Actionable>\n                {/each}\n            </div>\n        </div>\n        {#if $jsonSeparator}\n            <div\n                class={css.tabs__separator}\n                style={makeStyle(separatorStyle)}\n            ></div>\n        {/if}\n        <div\n            class=\"{css.tabs__panels} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n            bind:this={panelsWrapper}\n            on:touchstart={isSwipeEnabled ? onTouchStart : undefined}\n            on:touchmove={isSwipeEnabled ? onTouchMove : undefined}\n            on:touchend={isSwipeEnabled ? onTouchEnd : undefined}\n            on:touchcancel={isSwipeEnabled ? onTouchEnd : undefined}\n        >\n            <div\n                class={genClassName('tabs__swiper', css, {\n                    inited: isSwipeInitialized,\n                    animated: isAnimated\n                })}\n                bind:this={swiperElem}\n            >\n                {#each $childStore as item}\n                    {@const index = item.index}\n                    {@const childComponentContext = showedPanels[index]}\n\n                    <div\n                        class={genClassName('tabs__panel', css, {\n                            visible: visiblePanels[index]\n                        })}\n                        role=\"tabpanel\"\n                        id=\"{instId}-panel-{index}\"\n                        aria-labelledby=\"{instId}-tab-{index}\"\n                        style=\"left: {index * 100}%\"\n                    >\n                        {#if childComponentContext}\n                            <EnabledContext\n                                componentContext={childComponentContext}\n                                layoutParams={childLayoutParams}\n                                enabled={index === selected}\n                            />\n                        {/if}\n                    </div>\n                {/each}\n            </div>\n        </div>\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","/*\nAdapted from https://github.com/mattdesl\nDistributed under MIT License https://github.com/mattdesl/eases/blob/master/LICENSE.md\n*/\nexport { identity as linear } from '../internal/index.js';\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function backInOut(t) {\n\tconst s = 1.70158 * 1.525;\n\tif ((t *= 2) < 1) return 0.5 * (t * t * ((s + 1) * t - s));\n\treturn 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function backIn(t) {\n\tconst s = 1.70158;\n\treturn t * t * ((s + 1) * t - s);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function backOut(t) {\n\tconst s = 1.70158;\n\treturn --t * t * ((s + 1) * t + s) + 1;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function bounceOut(t) {\n\tconst a = 4.0 / 11.0;\n\tconst b = 8.0 / 11.0;\n\tconst c = 9.0 / 10.0;\n\tconst ca = 4356.0 / 361.0;\n\tconst cb = 35442.0 / 1805.0;\n\tconst cc = 16061.0 / 1805.0;\n\tconst t2 = t * t;\n\treturn t < a\n\t\t? 7.5625 * t2\n\t\t: t < b\n\t\t? 9.075 * t2 - 9.9 * t + 3.4\n\t\t: t < c\n\t\t? ca * t2 - cb * t + cc\n\t\t: 10.8 * t * t - 20.52 * t + 10.72;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function bounceInOut(t) {\n\treturn t < 0.5 ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0)) : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function bounceIn(t) {\n\treturn 1.0 - bounceOut(1.0 - t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function circInOut(t) {\n\tif ((t *= 2) < 1) return -0.5 * (Math.sqrt(1 - t * t) - 1);\n\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function circIn(t) {\n\treturn 1.0 - Math.sqrt(1.0 - t * t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function circOut(t) {\n\treturn Math.sqrt(1 - --t * t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function cubicInOut(t) {\n\treturn t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function cubicIn(t) {\n\treturn t * t * t;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function cubicOut(t) {\n\tconst f = t - 1.0;\n\treturn f * f * f + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function elasticInOut(t) {\n\treturn t < 0.5\n\t\t? 0.5 * Math.sin(((+13.0 * Math.PI) / 2) * 2.0 * t) * Math.pow(2.0, 10.0 * (2.0 * t - 1.0))\n\t\t: 0.5 *\n\t\t\t\tMath.sin(((-13.0 * Math.PI) / 2) * (2.0 * t - 1.0 + 1.0)) *\n\t\t\t\tMath.pow(2.0, -10.0 * (2.0 * t - 1.0)) +\n\t\t\t\t1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function elasticIn(t) {\n\treturn Math.sin((13.0 * t * Math.PI) / 2) * Math.pow(2.0, 10.0 * (t - 1.0));\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function elasticOut(t) {\n\treturn Math.sin((-13.0 * (t + 1.0) * Math.PI) / 2) * Math.pow(2.0, -10.0 * t) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function expoInOut(t) {\n\treturn t === 0.0 || t === 1.0\n\t\t? t\n\t\t: t < 0.5\n\t\t? +0.5 * Math.pow(2.0, 20.0 * t - 10.0)\n\t\t: -0.5 * Math.pow(2.0, 10.0 - t * 20.0) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function expoIn(t) {\n\treturn t === 0.0 ? t : Math.pow(2.0, 10.0 * (t - 1.0));\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function expoOut(t) {\n\treturn t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quadInOut(t) {\n\tt /= 0.5;\n\tif (t < 1) return 0.5 * t * t;\n\tt--;\n\treturn -0.5 * (t * (t - 2) - 1);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quadIn(t) {\n\treturn t * t;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quadOut(t) {\n\treturn -t * (t - 2.0);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quartInOut(t) {\n\treturn t < 0.5 ? +8.0 * Math.pow(t, 4.0) : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quartIn(t) {\n\treturn Math.pow(t, 4.0);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quartOut(t) {\n\treturn Math.pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quintInOut(t) {\n\tif ((t *= 2) < 1) return 0.5 * t * t * t * t * t;\n\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quintIn(t) {\n\treturn t * t * t * t * t;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quintOut(t) {\n\treturn --t * t * t * t * t + 1;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function sineInOut(t) {\n\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function sineIn(t) {\n\tconst v = Math.cos(t * Math.PI * 0.5);\n\tif (Math.abs(v) < 1e-14) return 1;\n\telse return 1 - v;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function sineOut(t) {\n\treturn Math.sin((t * Math.PI) / 2);\n}\n","export function interpolateEasing(table: number[]) {\n    return (t: number) => {\n        if (t <= 0) {\n            return 0;\n        } else if (t >= 1) {\n            return 1;\n        }\n\n        const x = t * table.length;\n        const i = Math.floor(x);\n        const p0 = table[i];\n        const p1 = table[i + 1];\n        const t2 = x - i;\n\n        return p0 * t2 + p1 * (1 - t2);\n    };\n}\n","import { interpolateEasing } from './interpolateEasing';\n\nconst table = [\n    0.0021, 0.0045, 0.0071, 0.0100, 0.0131, 0.0165, 0.0202,\n    0.0242, 0.0284, 0.0330, 0.0378, 0.0429, 0.0483, 0.0540,\n    0.0601, 0.0664, 0.0731, 0.0800, 0.0872, 0.0948, 0.1026,\n    0.1108, 0.1192, 0.1279, 0.1369, 0.1461, 0.1556, 0.1653,\n    0.1753, 0.1855, 0.1958, 0.2064, 0.2171, 0.2279, 0.2389,\n    0.2500, 0.2612, 0.2725, 0.2839, 0.2952, 0.3067, 0.3181,\n    0.3295, 0.3410, 0.3524, 0.3637, 0.3750, 0.3863, 0.3974,\n    0.4085, 0.4195, 0.4304, 0.4412, 0.4519, 0.4624, 0.4729,\n    0.4832, 0.4934, 0.5034, 0.5133, 0.5231, 0.5327, 0.5422,\n    0.5516, 0.5608, 0.5699, 0.5788, 0.5876, 0.5963, 0.6048,\n    0.6132, 0.6214, 0.6295, 0.6375, 0.6453, 0.6530, 0.6606,\n    0.6680, 0.6754, 0.6825, 0.6896, 0.6965, 0.7034, 0.7101,\n    0.7166, 0.7231, 0.7295, 0.7357, 0.7418, 0.7479, 0.7538,\n    0.7596, 0.7653, 0.7709, 0.7764, 0.7818, 0.7871, 0.7923,\n    0.7974, 0.8024, 0.8073, 0.8122, 0.8169, 0.8216, 0.8261,\n    0.8306, 0.8350, 0.8394, 0.8436, 0.8478, 0.8518, 0.8558,\n    0.8598, 0.8636, 0.8674, 0.8711, 0.8747, 0.8783, 0.8818,\n    0.8852, 0.8886, 0.8919, 0.8951, 0.8983, 0.9014, 0.9044,\n    0.9074, 0.9103, 0.9131, 0.9159, 0.9187, 0.9213, 0.9240,\n    0.9265, 0.9290, 0.9315, 0.9339, 0.9362, 0.9385, 0.9408,\n    0.9430, 0.9451, 0.9472, 0.9492, 0.9512, 0.9532, 0.9551,\n    0.9569, 0.9587, 0.9605, 0.9622, 0.9638, 0.9655, 0.9670,\n    0.9686, 0.9701, 0.9715, 0.9729, 0.9743, 0.9756, 0.9769,\n    0.9782, 0.9794, 0.9805, 0.9817, 0.9828, 0.9838, 0.9848,\n    0.9858, 0.9868, 0.9877, 0.9886, 0.9894, 0.9902, 0.9910,\n    0.9917, 0.9924, 0.9931, 0.9937, 0.9943, 0.9949, 0.9954,\n    0.9959, 0.9964, 0.9969, 0.9973, 0.9977, 0.9980, 0.9983,\n    0.9986, 0.9989, 0.9991, 0.9993, 0.9995, 0.9997, 0.9998,\n    0.9999, 0.9999, 1.0000, 1.0000\n];\n\nexport const ease = interpolateEasing(table);\n","import { interpolateEasing } from './interpolateEasing';\n\nconst table = [\n    0.0005, 0.0020, 0.0045, 0.0078, 0.0119, 0.0168,\n    0.0224, 0.0286, 0.0355, 0.0429, 0.0508, 0.0592, 0.0681,\n    0.0774, 0.0870, 0.0969, 0.1072, 0.1177, 0.1285, 0.1395,\n    0.1507, 0.1621, 0.1736, 0.1853, 0.1970, 0.2089, 0.2208,\n    0.2328, 0.2448, 0.2569, 0.2689, 0.2810, 0.2930, 0.3050,\n    0.3170, 0.3289, 0.3408, 0.3526, 0.3644, 0.3760, 0.3876,\n    0.3991, 0.4105, 0.4218, 0.4330, 0.4440, 0.4550, 0.4658,\n    0.4765, 0.4871, 0.4975, 0.5078, 0.5180, 0.5280, 0.5379,\n    0.5477, 0.5573, 0.5668, 0.5761, 0.5853, 0.5944, 0.6033,\n    0.6120, 0.6206, 0.6291, 0.6374, 0.6456, 0.6537, 0.6616,\n    0.6693, 0.6770, 0.6845, 0.6918, 0.6990, 0.7061, 0.7130,\n    0.7199, 0.7265, 0.7331, 0.7395, 0.7458, 0.7520, 0.7580,\n    0.7640, 0.7698, 0.7755, 0.7810, 0.7865, 0.7918, 0.7971,\n    0.8022, 0.8072, 0.8121, 0.8169, 0.8216, 0.8262, 0.8307,\n    0.8351, 0.8394, 0.8436, 0.8477, 0.8517, 0.8557, 0.8595,\n    0.8633, 0.8669, 0.8705, 0.8740, 0.8775, 0.8808, 0.8841,\n    0.8873, 0.8904, 0.8934, 0.8964, 0.8993, 0.9022, 0.9049,\n    0.9076, 0.9103, 0.9129, 0.9154, 0.9178, 0.9202, 0.9226,\n    0.9249, 0.9271, 0.9293, 0.9314, 0.9335, 0.9355, 0.9375,\n    0.9394, 0.9413, 0.9431, 0.9449, 0.9466, 0.9483, 0.9500,\n    0.9516, 0.9532, 0.9547, 0.9562, 0.9576, 0.9591, 0.9605,\n    0.9618, 0.9631, 0.9644, 0.9657, 0.9669, 0.9681, 0.9692,\n    0.9703, 0.9714, 0.9725, 0.9736, 0.9746, 0.9756, 0.9765,\n    0.9775, 0.9784, 0.9793, 0.9802, 0.9810, 0.9818, 0.9826,\n    0.9834, 0.9842, 0.9849, 0.9856, 0.9863, 0.9870, 0.9877,\n    0.9883, 0.9890, 0.9896, 0.9902, 0.9908, 0.9913, 0.9919,\n    0.9924, 0.9930, 0.9935, 0.9940, 0.9944, 0.9949, 0.9954,\n    0.9958, 0.9963, 0.9967, 0.9971, 0.9975, 0.9979, 0.9983,\n    0.9986, 0.9990, 0.9993, 0.9997, 1.0000\n];\n\nexport const spring = interpolateEasing(table);\n","import { linear, cubicIn, cubicOut, cubicInOut } from 'svelte/easing';\nimport { ease } from './easings/ease';\nimport { spring } from './easings/spring';\nimport type { Interpolation } from '../../typings/common';\n\nexport const EASING: Record<Interpolation, (t: number) => number> = {\n    linear,\n    ease,\n    ease_in: cubicIn,\n    ease_out: cubicOut,\n    ease_in_out: cubicInOut,\n    spring\n};\n\nexport function getEasing(name: Interpolation): (t: number) => number {\n    return EASING[name];\n}\n","export function lerp(a: number, b: number, t: number): number {\n    return a * (1 - t) + b * t;\n}\n","<script lang=\"ts\">\n    import { setContext, getContext, tick, onDestroy } from 'svelte';\n\n    import css from './State.module.css';\n\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivStateData, State } from '../../types/state';\n    import type { AnyTransition, AppearanceTransition, DivBaseData, TransitionChange } from '../../types/base';\n    import type { ChangeBoundsTransition } from '../../types/base';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { MaybeMissing } from '../../expressions/json';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { wrapError } from '../../utils/wrapError';\n    import { STATE_CTX, type StateCtxValue } from '../../context/state';\n    import { calcMaxDuration, inOutTransition } from '../../utils/inOutTransition';\n    import { changeBoundsTransition } from '../../utils/changeBoundsTransition';\n    import { flattenTransition } from '../../utils/flattenTransition';\n    import { genClassName } from '../../utils/genClassName';\n    import Outer from '../utilities/Outer.svelte';\n    import Unknown from '../utilities/Unknown.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivStateData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    let hasError = false;\n\n    let animationRoot: HTMLElement | undefined;\n    let transitionChangeBoxes: Map<string, ChildTransitionChangeData> = new Map();\n    let childrenIds = new Set<string>();\n\n    let animationList: (AnimationItemWithMaxDuration | ChangeBoundsItem)[] = [];\n    let childrenWithTransitionIn: ChildWithTransition[] = [];\n    let childrenWithTransitionOut: ChildWithTransition[] = [];\n    let childrenWithTransitionChange: ChildWithTransitionChange[] = [];\n\n    let stateUnregister: (() => void) | undefined;\n    $: stateId = componentContext.json.div_id || componentContext.id;\n    let selectedId: string | undefined;\n    let selectedComponentContext: ComponentContext | undefined;\n\n    $: jsonDefaultStateId = componentContext.getJsonWithVars(componentContext.json.default_state_id);\n    $: jsonClipToBounds = componentContext.getDerivedFromVars(componentContext.json.clip_to_bounds);\n\n    $: stateVariableName = componentContext.json.state_id_variable;\n    $: stateVariable = stateVariableName ?\n        componentContext.getVariable(stateVariableName, 'string') :\n        null;\n    let inited = false;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        inited = false;\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: if (stateId) {\n        hasError = false;\n    } else {\n        hasError = true;\n        componentContext.logError(wrapError(new Error('Missing \"id\" prop for div \"state\"')));\n    }\n\n    $: if (componentContext.json) {\n        childrenIds = new Set<string>();\n    }\n\n    $: items = Array.isArray(componentContext.json.states) && componentContext.json.states || [];\n    $: parentOfItems = items.map(it => {\n        return {\n            json: it.div,\n            id: it.div?.id\n        };\n    });\n\n    $: {\n        if (!items?.length) {\n            hasError = true;\n            componentContext.logError(wrapError(new Error('Empty \"states\" prop for div \"state\"')));\n        } else {\n            hasError = false;\n        }\n    }\n\n    function selectState(selectedState: MaybeMissing<State> | null): void {\n        if (selectedComponentContext) {\n            selectedComponentContext.destroy();\n        }\n        selectedComponentContext = selectedState?.div ? componentContext.produceChildContext(selectedState.div, {\n            path: selectedState.state_id || '<unknown>'\n        }) : undefined;\n    }\n\n    function replaceItems(newItems: (MaybeMissing<DivBaseData> | undefined)[]): void {\n        const states = componentContext.json.states;\n\n        if (!states) {\n            return;\n        }\n\n        const changed = new Set<string>();\n\n        items = states.map((it, index) => {\n            if (items[index].div !== newItems[index] && it.state_id) {\n                changed.add(it.state_id);\n            }\n\n            return {\n                ...it,\n                div: newItems[index]\n            };\n        });\n\n        componentContext.json = {\n            ...componentContext.json,\n            states: items\n        };\n        if (selectedId && changed.has(selectedId)) {\n            selectState(items.find(it => it.state_id === selectedId) || null);\n        }\n    }\n\n    interface AnimationItem {\n        id: string;\n        json: DivBaseData;\n        componentContextCopy: ComponentContext;\n        elementBbox: DOMRect;\n        rootBbox: DOMRect;\n        transitions: AnyTransition[];\n        alpha?: number;\n        width: number;\n        height: number;\n        offsetTop: number;\n        offsetLeft: number;\n        direction: 'in' | 'out';\n        resolvePromise?: (val?: void) => void;\n        node: HTMLElement;\n    }\n    interface AnimationItemWithMaxDuration extends AnimationItem {\n        maxDuration: number;\n    }\n    interface ChangeBoundsItem {\n        id: string;\n        json: DivBaseData;\n        componentContextCopy: ComponentContext;\n        rootBbox: DOMRect;\n        beforeBbox: DOMRect;\n        afterBbox: DOMRect;\n        transition: ChangeBoundsTransition;\n        resolvePromise?: (val?: void) => void;\n        node: HTMLElement;\n    }\n\n    interface ChildWithTransition {\n        json: DivBaseData;\n        parentComponentContext: ComponentContext;\n        transitions: AppearanceTransition;\n        node: HTMLElement;\n        bbox?: DOMRect;\n        resolvePromise?: (val?: void) => void;\n    }\n    interface ChildWithTransitionChange {\n        id: string;\n        json: DivBaseData;\n        parentComponentContext: ComponentContext;\n        transitions: TransitionChange | undefined;\n        node: HTMLElement;\n        resolvePromise?: (val?: void) => void;\n    }\n\n    interface ChildTransitionChangeData {\n        transitions: TransitionChange;\n        rect: DOMRect;\n    }\n\n    function haveFadeTransition(list: AnyTransition[]): boolean {\n        return list.some(it => it.type === 'fade');\n    }\n\n    function getItemAnimation(rootBbox: DOMRect, child: ChildWithTransition, direction: 'in' | 'out'): AnimationItem {\n        let { json, parentComponentContext, transitions, node } = child;\n        json = componentContext.getJsonWithVars(json) as DivBaseData;\n        transitions = componentContext.getJsonWithVars(transitions) as AppearanceTransition;\n\n        const transitionsList: AnyTransition[] = flattenTransition(transitions);\n        const startBbox = child.bbox || node.getBoundingClientRect();\n        const jsonCopy = {\n            ...json,\n            margins: undefined,\n            alpha: haveFadeTransition(transitionsList) ? undefined : json.alpha\n        };\n\n        return {\n            id: parentComponentContext.id || '',\n            json: jsonCopy,\n            componentContextCopy: parentComponentContext.produceChildContext(jsonCopy, {\n                fake: true\n            }),\n            elementBbox: startBbox,\n            rootBbox,\n            transitions: transitionsList,\n            alpha: json.alpha,\n            width: startBbox.width,\n            height: startBbox.height,\n            offsetTop: startBbox.top - rootBbox.top,\n            offsetLeft: startBbox.left - rootBbox.left,\n            direction,\n            resolvePromise: child.resolvePromise,\n            node: child.node\n        };\n    }\n\n    function getTransitionChange(transitionOrSet: TransitionChange): ChangeBoundsTransition | null {\n        if (transitionOrSet.type === 'change_bounds') {\n            return transitionOrSet;\n        } else if (transitionOrSet.type === 'set') {\n            return getTransitionChange(transitionOrSet.items[0]);\n        }\n        return null;\n    }\n\n    async function setState(stateId: string): Promise<ComponentContext | undefined> {\n        if (selectedId === stateId) {\n            return componentContext;\n        }\n\n        rootCtx.setRunning('stateChange', true);\n\n        const wasIds = new Set(childrenIds);\n\n        animationList.forEach(it => {\n            if (it.resolvePromise) {\n                it.resolvePromise();\n            }\n        });\n        animationList = [];\n        let transitionsOutToRun: AnimationItem[] = [];\n        if (animationRoot) {\n            const rootBbox = animationRoot.getBoundingClientRect();\n            transitionsOutToRun = childrenWithTransitionOut\n                .map(it => getItemAnimation(rootBbox, it, 'out'));\n        }\n        childrenWithTransitionChange.forEach(child => {\n            if (child.transitions) {\n                transitionChangeBoxes.set(child.id, {\n                    transitions: child.transitions,\n                    rect: child.node.getBoundingClientRect()\n                });\n            }\n        });\n        childrenWithTransitionIn = [];\n        childrenWithTransitionOut = [];\n        childrenWithTransitionChange = [];\n\n        const newState = items.find(it => it.state_id === stateId) || null;\n        if (newState) {\n            selectedId = stateId;\n            stateVariable?.setValue(selectedId);\n            selectState(newState);\n        } else {\n            componentContext.logError(wrapError(new Error('Cannot find state with id'), {\n                additional: {\n                    stateId\n                }\n            }));\n        }\n\n        await tick();\n\n        if (!animationRoot) {\n            return;\n        }\n        const rootBbox = animationRoot.getBoundingClientRect();\n\n        let transitionsInToRun: AnimationItem[] =\n            childrenWithTransitionIn.filter(it => {\n                if (it.parentComponentContext.id && !wasIds.has(it.parentComponentContext.id)) {\n                    return true;\n                }\n                it.resolvePromise?.();\n                return false;\n            })\n                .map(it => getItemAnimation(rootBbox, it, 'in'));\n\n        transitionsOutToRun = transitionsOutToRun.filter(it => {\n            if (it.id && !childrenIds.has(it.id)) {\n                return true;\n            }\n            it.resolvePromise?.();\n            return false;\n        });\n\n        const inOutList: AnimationItem[] = transitionsOutToRun.concat(transitionsInToRun);\n        const maxDuration = inOutList.reduce((acc: number, item: AnimationItem) => {\n            return Math.max(\n                acc,\n                calcMaxDuration(item.transitions)\n            );\n        }, 0);\n\n        const changeList: ChangeBoundsItem[] = childrenWithTransitionChange\n            .filter(child => transitionChangeBoxes.has(child.id))\n            .map(child => {\n                const jsonCopy: DivBaseData = {\n                    ...child.json,\n                    margins: undefined,\n                    width: { type: 'match_parent' },\n                    height: { type: 'match_parent' },\n                };\n\n                const saved = transitionChangeBoxes.get(child.id) as ChildTransitionChangeData;\n\n                const res: ChangeBoundsItem = {\n                    id: child.parentComponentContext.id || '',\n                    json: jsonCopy,\n                    componentContextCopy: child.parentComponentContext.produceChildContext(jsonCopy, {\n                        fake: true\n                    }),\n                    rootBbox,\n                    beforeBbox: saved.rect,\n                    afterBbox: child.node.getBoundingClientRect(),\n                    node: child.node,\n                    transition: componentContext.getJsonWithVars(\n                        getTransitionChange(saved.transitions)\n                    ) as ChangeBoundsTransition,\n                    resolvePromise: child.resolvePromise\n                };\n\n                return res;\n            });\n\n        animationList = [\n            ...inOutList.map(it => {\n                return {\n                    ...it,\n                    maxDuration\n                };\n            }),\n            ...changeList\n        ];\n\n        transitionChangeBoxes.clear();\n\n        rootCtx.setRunning('stateChange', false);\n\n        return componentContext;\n    }\n\n    $: if (componentContext.json) {\n        if (stateUnregister) {\n            stateUnregister();\n            stateUnregister = undefined;\n        }\n\n        if (stateId && !componentContext?.fakeElement) {\n            stateUnregister = componentContext.registerState(stateId, setState);\n        }\n    }\n\n    setContext<StateCtxValue>(STATE_CTX, {\n        // eslint-disable-next-line max-params\n        runVisibilityTransition(\n            json: DivBaseData,\n            parentComponentContext: ComponentContext,\n            transitions: AppearanceTransition,\n            node: HTMLElement,\n            direction: 'in' | 'out',\n            bbox: DOMRect | undefined\n        ) {\n            if (!animationRoot) {\n                return Promise.resolve();\n            }\n\n            const rootBbox = animationRoot.getBoundingClientRect();\n            const item: AnimationItem = getItemAnimation(\n                rootBbox,\n                {\n                    json,\n                    parentComponentContext,\n                    transitions,\n                    node,\n                    bbox\n                },\n                direction\n            );\n\n            const maxDuration = calcMaxDuration(item.transitions);\n            const itemWithMaxDuration: AnimationItemWithMaxDuration = {\n                ...item,\n                maxDuration\n            };\n            animationList = [\n                ...animationList.filter(it => it.node !== item.node),\n                itemWithMaxDuration\n            ];\n\n            return new Promise<void>(resolve => {\n                itemWithMaxDuration.resolvePromise = resolve;\n            });\n        },\n        registerChildWithTransitionIn(\n            json: DivBaseData,\n            parentComponentContext: ComponentContext,\n            transitions: AppearanceTransition,\n            node: HTMLElement\n        ) {\n            const item: ChildWithTransition = {\n                json,\n                parentComponentContext,\n                transitions,\n                node\n            };\n            childrenWithTransitionIn.push(item);\n\n            return new Promise<void>(resolve => {\n                item.resolvePromise = resolve;\n            });\n        },\n        registerChildWithTransitionOut(\n            json: DivBaseData,\n            parentComponentContext: ComponentContext,\n            transitions: AppearanceTransition,\n            node: HTMLElement\n        ) {\n            const item: ChildWithTransition = {\n                json,\n                parentComponentContext,\n                transitions,\n                node\n            };\n            childrenWithTransitionOut.push(item);\n\n            return new Promise<void>(resolve => {\n                item.resolvePromise = resolve;\n            });\n        },\n        registerChildWithTransitionChange(\n            json: DivBaseData,\n            parentComponentContext: ComponentContext,\n            transitions: TransitionChange | undefined,\n            node: HTMLElement\n        ) {\n            const id = parentComponentContext.id;\n\n            if (!id) {\n                return Promise.resolve();\n            }\n\n            const item: ChildWithTransitionChange = {\n                id,\n                json,\n                parentComponentContext,\n                transitions,\n                node\n            };\n            childrenWithTransitionChange.push(item);\n\n            return new Promise<void>(resolve => {\n                item.resolvePromise = resolve;\n            });\n        },\n        hasTransitionChange(id?: string) {\n            if (!id) {\n                return false;\n            }\n\n            return transitionChangeBoxes.has(id);\n        },\n        registerChild(id: string): void {\n            childrenIds.add(id);\n        },\n        unregisterChild(id: string): void {\n            childrenIds.delete(id);\n        }\n    });\n\n    function initDefaultState(items: MaybeMissing<State>[]): void {\n        if (inited) {\n            return;\n        }\n        inited = true;\n\n        if (items.length) {\n            const defaultVal = stateVariable?.getValue() || jsonDefaultStateId;\n            if (defaultVal) {\n                selectedId = defaultVal;\n                const selectedState = items.find(it => it.state_id === selectedId) || null;\n                selectState(selectedState);\n                if (!selectedState) {\n                    componentContext.logError(wrapError(new Error('Cannot find state for default_state_id'), {\n                        additional: {\n                            selectedId\n                        }\n                    }));\n                }\n            } else {\n                const selectedState = items[0];\n                selectedId = selectedState.state_id;\n                selectState(selectedState);\n            }\n\n            if (stateVariable) {\n                stateVariable.setValue(selectedId);\n                stateVariable.subscribe(val => {\n                    setState(val);\n                });\n            }\n        }\n    }\n    $: !inited && initDefaultState(items);\n\n    function onOutro(item: AnimationItem | ChangeBoundsItem): void {\n        animationList = animationList.filter(it => it !== item);\n\n        if (item.resolvePromise) {\n            item.resolvePromise();\n        }\n    }\n\n    $: mods = {\n        overflow: ($jsonClipToBounds === false || $jsonClipToBounds === 0) ? 'visible' : undefined\n    };\n\n    onDestroy(() => {\n        if (selectedComponentContext) {\n            selectedComponentContext.destroy();\n        }\n\n        if (stateUnregister) {\n            stateUnregister();\n            stateUnregister = undefined;\n        }\n    });\n</script>\n\n{#if !hasError}\n    <Outer\n        cls={genClassName('state', css, mods)}\n        {componentContext}\n        {layoutParams}\n        parentOf={parentOfItems}\n        parentOfSimpleMode={true}\n        {replaceItems}\n    >\n        {#if selectedComponentContext}\n            {#key selectedId}\n                <Unknown\n                    componentContext={selectedComponentContext}\n                />\n            {/key}\n        {/if}\n\n        <div class={css.state__animations} bind:this={animationRoot} aria-hidden=\"true\">\n            {#each animationList as item (item)}\n                {#if 'direction' in item}\n                    <div\n                        class={css['state__animation-child']}\n                        style:left=\"{item.offsetLeft}px\"\n                        style:top=\"{item.offsetTop}px\"\n                        style:width=\"{item.width}px\"\n                        style:height=\"{item.height}px\"\n                        in:inOutTransition|global={item}\n                        on:introend={() => onOutro(item)}\n                    >\n                        <div class={css['state__animation-child-inner']}>\n                            <Unknown\n                                componentContext={item.componentContextCopy}\n                            />\n                        </div>\n                    </div>\n                {:else}\n                    <div\n                        class={css['state__animation-child']}\n                        in:changeBoundsTransition|global={item}\n                        on:introend={() => onOutro(item)}\n                    >\n                        <div class={css['state__animation-child-inner']}>\n                            <Unknown\n                                componentContext={item.componentContextCopy}\n                            />\n                        </div>\n                    </div>\n                {/if}\n            {/each}\n        </div>\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","<script lang=\"ts\" context=\"module\">\n    import type { Mods } from '../../types/general';\n    import { correctBooleanInt } from '../../utils/correctBooleanInt';\n\n    interface ChildInfo {\n        width?: MaybeMissing<Size>;\n        height?: MaybeMissing<Size>;\n    }\n\n    const SIZE_MAP: Record<Size['type'], string> = {\n        wrap_content: 'content',\n        fixed: 'fixed',\n        match_parent: 'parent'\n    };\n\n    function getItemMods(orientation: Orientation, childInfo: ChildInfo): Mods {\n        if (orientation === 'horizontal') {\n            const heightType = childInfo.height?.type || '';\n\n            return {\n                height: heightType in SIZE_MAP ? SIZE_MAP[heightType as Size['type']] : 'content',\n                'height-constrained': childInfo.height?.type === 'wrap_content' ? correctBooleanInt(childInfo.height.constrained, false) : false\n            };\n        }\n\n        const widthType = childInfo.width?.type || '';\n\n        return {\n            width: widthType in SIZE_MAP ? SIZE_MAP[widthType as Size['type']] : 'parent',\n            'width-constrained': childInfo.width?.type === 'wrap_content' ? correctBooleanInt(childInfo.width.constrained, false) : false\n        };\n    }\n</script>\n\n<script lang=\"ts\">\n    import { getContext, onDestroy, onMount } from 'svelte';\n    import { derived, type Readable } from 'svelte/store';\n\n    import css from './Pager.module.css';\n    import rootCss from '../Root.module.css';\n    import arrowsCss from '../utilities/Arrows.module.css';\n\n    import type { DivBaseData } from '../../types/base';\n    import type { DivPagerData } from '../../types/pager';\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { Orientation } from '../../types/orientation';\n    import type { SwitchElements } from '../../types/switch-elements';\n    import type { ComponentContext, PagerRegisterData } from '../../types/componentContext';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { Size } from '../../types/sizes';\n    import type { Variable } from '../../expressions/variable';\n    import type { Overflow } from '../../../typings/common';\n    import type { EdgeInsets } from '../../types/edgeInserts';\n\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { wrapError } from '../../utils/wrapError';\n    import { genClassName } from '../../utils/genClassName';\n    import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { correctGeneralOrientation } from '../../utils/correctGeneralOrientation';\n    import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n    import { debounce } from '../../utils/debounce';\n    import { Truthy } from '../../utils/truthy';\n    import { nonNegativeModulo } from '../../utils/nonNegativeModulo';\n    import { getItemsFromItemBuilder } from '../../utils/itemBuilder';\n    import { constStore } from '../../utils/constStore';\n    import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n    import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n    import Outer from '../utilities/Outer.svelte';\n    import Unknown from '../utilities/Unknown.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivPagerData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const direction = rootCtx.direction;\n\n    const instId = rootCtx.genId('pager');\n\n    const leftClass = rootCtx.getCustomization('pagerLeftClass');\n    const rightClass = rootCtx.getCustomization('pagerRightClass');\n\n    const isDesktop = rootCtx.isDesktop;\n\n    const onScrollDebounced = debounce(onScroll, 50);\n\n    let prevId: string | undefined;\n\n    let pagerItemsWrapper: HTMLElement;\n    let mounted = false;\n\n    let childStore: Readable<ChildInfo[]>;\n\n    let currentItem = 0;\n    let prevSelectedItem = 0;\n\n    let hasLayoutModeError = false;\n\n    let orientation: Orientation = 'horizontal';\n    let itemSpacing = '0em';\n    let paddingObj: EdgeInsets = {};\n    let padding = '';\n    let sizeVal = '';\n\n    let childLayoutParams: LayoutParams = {};\n    let crossAxisAlignment: 'start' | 'center' | 'end' = 'start';\n    let scrollAxisAlignment: 'start' | 'center' | 'end' = 'center';\n\n    let scrollPaddings: EdgeInsets = {};\n\n    let items: ComponentContext[] = [];\n    let prevContext: ComponentContext<DivPagerData> | undefined;\n\n    let registerData: PagerRegisterData | undefined;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        paddingObj = {};\n        childLayoutParams = {};\n        crossAxisAlignment = 'start';\n        scrollAxisAlignment = 'center';\n        scrollPaddings = {};\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    // eslint-disable-next-line no-nested-ternary\n    $: jsonItemBuilderData = typeof componentContext.json.item_builder?.data === 'string' ? componentContext.getDerivedFromVars(\n        componentContext.json.item_builder?.data, undefined, true\n    ) : (componentContext.json.item_builder?.data ? constStore(componentContext.json.item_builder.data) : undefined);\n\n    $: jsonLayoutMode = componentContext.getDerivedFromVars(componentContext.json.layout_mode);\n    $: jsonOrientation = componentContext.getDerivedFromVars(componentContext.json.orientation);\n    $: jsonItemSpacing = componentContext.getDerivedFromVars(componentContext.json.item_spacing);\n    $: jsonPaddings = componentContext.getDerivedFromVars(componentContext.json.paddings);\n    $: jsonRestrictParentScroll = componentContext.getDerivedFromVars(componentContext.json.restrict_parent_scroll);\n    $: jsonCrossAxisAlignment = componentContext.getDerivedFromVars(componentContext.json.cross_axis_alignment);\n    $: jsonScrollAxisAlignment = componentContext.getDerivedFromVars(componentContext.json.scroll_axis_alignment);\n\n    function replaceItems(items: (MaybeMissing<DivBaseData> | undefined)[]): void {\n        componentContext = prevContext = {\n            ...componentContext,\n            json: {\n                ...componentContext.json,\n                items: items.filter(Truthy)\n            }\n        };\n    }\n\n    $: {\n        let newItems: {\n            div: MaybeMissing<DivBaseData>;\n            id?: string | undefined;\n            vars?: Map<string, Variable> | undefined;\n        }[] = [];\n        if (\n            componentContext.json.item_builder &&\n            Array.isArray($jsonItemBuilderData) &&\n            Array.isArray(componentContext.json.item_builder.prototypes)\n        ) {\n            const builder = componentContext.json.item_builder;\n            newItems = getItemsFromItemBuilder($jsonItemBuilderData, rootCtx, componentContext, builder);\n        } else {\n            newItems = (Array.isArray(componentContext.json.items) && componentContext.json.items || []).map(it => {\n                return {\n                    div: it\n                };\n            });\n        }\n\n        const unusedContexts = new Set(items);\n        const jsonToContextMap = new Map<unknown, ComponentContext>();\n\n        if (prevContext === componentContext) {\n            items.forEach(context => {\n                jsonToContextMap.set(context.json, context);\n            });\n        }\n\n        items = newItems.map((item, index) => {\n            const found = jsonToContextMap.get(item.div);\n            if (found) {\n                unusedContexts.delete(found);\n                return found;\n            }\n\n            return componentContext.produceChildContext(item.div, {\n                path: index,\n                variables: item.vars,\n                id: item.id\n            });\n        });\n\n        for (const ctx of unusedContexts) {\n            ctx.destroy();\n        }\n        prevContext = componentContext;\n    }\n\n    $: {\n        let children: Readable<ChildInfo>[] = [];\n\n        items.forEach(item => {\n            children.push(\n                componentContext.getDerivedFromVars({\n                    width: item.json.width,\n                    height: item.json.height\n                })\n            );\n        });\n\n        // Create a new array every time so that it is not equal to the previous one\n        childStore = derived(children, val => [...val]);\n    }\n\n    $: {\n        if (!$jsonLayoutMode) {\n            hasLayoutModeError = true;\n            componentContext.logError(wrapError(new Error('Empty \"layout_mode\" prop for div \"pager\"')));\n        } else if ($jsonLayoutMode.type !== 'percentage' && $jsonLayoutMode.type !== 'fixed' && $jsonLayoutMode.type !== 'wrap_content') {\n            hasLayoutModeError = true;\n            componentContext.logError(wrapError(new Error('Incorrect value of \"layout_mode.type\" for div \"pager\"')));\n        } else {\n            hasLayoutModeError = false;\n        }\n    }\n\n    $: {\n        orientation = correctGeneralOrientation($jsonOrientation, orientation);\n    }\n\n    $: {\n        const val = $jsonItemSpacing?.value;\n        if (val && isNonNegativeNumber(val)) {\n            itemSpacing = pxToEmWithUnits(val || 0);\n        }\n    }\n\n    $: {\n        paddingObj = correctEdgeInsertsObject($jsonPaddings, paddingObj);\n        padding = edgeInsertsToCss(paddingObj, $direction);\n        scrollPaddings = {\n            top: paddingObj.top,\n            right: ($direction === 'ltr' ? paddingObj.start : paddingObj.end) ?? paddingObj.left ?? 0,\n            bottom: paddingObj.bottom,\n            left: ($direction === 'ltr' ? paddingObj.end : paddingObj.start) ?? paddingObj.right ?? 0\n        };\n    }\n\n    $: gridSizeProp = orientation === 'horizontal' ? 'grid-auto-columns' : 'grid-auto-rows';\n\n    $: if ($jsonScrollAxisAlignment === 'start' || $jsonScrollAxisAlignment === 'center' || $jsonScrollAxisAlignment === 'end') {\n        scrollAxisAlignment = $jsonScrollAxisAlignment;\n    }\n\n    $: {\n        if ($jsonLayoutMode?.type === 'fixed') {\n            const paddings = componentContext.json.paddings;\n            const paddingStart = orientation === 'horizontal' ?\n                pxToEmWithUnits(\n                    paddings?.start ||\n                    ($direction === 'ltr' ? paddings?.left : paddings?.right) ||\n                    0\n                ) :\n                pxToEmWithUnits(\n                    paddings?.top || 0\n                );\n            const paddingEnd = orientation === 'horizontal' ?\n                pxToEmWithUnits(\n                    paddings?.end ||\n                    ($direction === 'ltr' ? paddings?.right : paddings?.left) ||\n                    0\n                ) :\n                pxToEmWithUnits(\n                    paddings?.bottom || 0\n                );\n            const sumPadding = paddingStart + paddingEnd;\n            const neighbourPageWidth = $jsonLayoutMode.neighbour_page_width?.value || 0;\n\n            if (scrollAxisAlignment === 'center') {\n                sizeVal = `calc(100% + ${paddingStart} + ${paddingEnd} - 2 * ${pxToEmWithUnits(neighbourPageWidth)} - 2 * ${itemSpacing})`;\n            } else if (scrollAxisAlignment === 'start') {\n                sizeVal = `calc(100% + ${paddingEnd} - ${pxToEmWithUnits(neighbourPageWidth)} - ${itemSpacing})`;\n            } else {\n                sizeVal = `calc(100% + ${paddingStart} - ${pxToEmWithUnits(neighbourPageWidth)} - ${itemSpacing})`;\n            }\n        } else if ($jsonLayoutMode?.type === 'percentage') {\n            const pageWidth = $jsonLayoutMode.page_width?.value;\n            sizeVal = `${Number(pageWidth)}%`;\n        } else if ($jsonLayoutMode?.type === 'wrap_content') {\n            sizeVal = 'minmax(max-content, auto)';\n        }\n    }\n\n    $: if ($jsonCrossAxisAlignment === 'start' || $jsonCrossAxisAlignment === 'center' || $jsonCrossAxisAlignment === 'end') {\n        crossAxisAlignment = $jsonCrossAxisAlignment;\n\n        childLayoutParams = {\n            [orientation === 'horizontal' ? 'parentVAlign' : 'parentHAlign']: crossAxisAlignment\n        };\n    }\n\n    $: style = {\n        'grid-gap': itemSpacing,\n        padding,\n        [gridSizeProp]: sizeVal,\n        'scroll-padding-top': scrollPaddings.top ? pxToEm(scrollPaddings.top) : undefined,\n        'scroll-padding-right': scrollPaddings.right ? pxToEm(scrollPaddings.right) : undefined,\n        'scroll-padding-bottom': scrollPaddings.bottom ? pxToEm(scrollPaddings.bottom) : undefined,\n        'scroll-padding-left': scrollPaddings.left ? pxToEm(scrollPaddings.left) : undefined,\n    };\n\n    $: mods = {\n        clip: rootCtx.pagerChildrenClipEnabled,\n        orientation,\n        'cross-align': crossAxisAlignment,\n        'scroll-align': scrollAxisAlignment\n    };\n\n    $: hasError = hasLayoutModeError;\n\n    $: shouldCheckArrows = $isDesktop && mounted && !hasError;\n\n    $: hasScrollLeft = $direction === 'ltr' ? currentItem > 0 : currentItem + 1 < items.length;\n\n    $: hasScrollRight = $direction === 'ltr' ? currentItem + 1 < items.length : currentItem > 0;\n\n    function checkIsFullyIntersecting(scroller: DOMRect, item: DOMRect): boolean {\n        if (orientation === 'horizontal') {\n            return item.left >= scroller.left && item.right <= scroller.right;\n        }\n\n        return item.top >= scroller.top && item.bottom <= scroller.bottom;\n    }\n\n    function calculateCurrentElementIndex(): number {\n        const pagerElements = Array.from(pagerItemsWrapper.children) as HTMLElement[];\n        const wrapperRect = pagerItemsWrapper.getBoundingClientRect();\n\n        const firstFullyVisibleElement = pagerElements.findIndex(el =>\n            checkIsFullyIntersecting(wrapperRect, el.getBoundingClientRect())\n        );\n\n        if (firstFullyVisibleElement !== -1) {\n            return firstFullyVisibleElement;\n        }\n\n        return currentItem;\n    }\n\n    function onScroll(): void {\n        if (!mounted) {\n            // Already destroyed\n            return;\n        }\n\n        const nextItem = calculateCurrentElementIndex();\n        if (nextItem !== currentItem) {\n            currentItem = nextItem;\n        }\n    }\n\n    function pagerDataUpdate(size: number, currentItem: number): void {\n        if (registerData) {\n            registerData.update({\n                instId,\n                currentItem,\n                size,\n                scrollToPagerItem\n            });\n        }\n    }\n\n    function runSelectedActions(currentItem: number): void {\n        // prevent initial actions execution\n        if (currentItem === prevSelectedItem) {\n            return;\n        }\n        prevSelectedItem = currentItem;\n\n        const actions = componentContext.getJsonWithVars(items[currentItem].json?.selected_actions);\n        if (!actions?.length) {\n            return;\n        }\n        componentContext.execAnyActions(actions);\n    }\n\n    $: pagerDataUpdate(items.length, currentItem);\n\n    $: runSelectedActions(currentItem);\n\n    function scrollToPagerItem(index: number, behavior: ScrollBehavior = 'smooth'): void {\n        if (!pagerItemsWrapper) {\n            return;\n        }\n\n        const isHorizontal = orientation === 'horizontal';\n        const nextPagerItem = pagerItemsWrapper.children[index] as HTMLElement;\n        const elementOffset: keyof HTMLElement = isHorizontal ? 'offsetLeft' : 'offsetTop';\n        const elementSize: keyof HTMLElement = isHorizontal ? 'offsetWidth' : 'offsetHeight';\n        const scrollDirection: keyof ScrollToOptions = isHorizontal ? 'left' : 'top';\n        const scrollSize: keyof HTMLElement = isHorizontal ? 'scrollWidth' : 'scrollHeight';\n        let position;\n        if (index === 0) {\n            position = 0;\n        } else if (index === items.length - 1) {\n            position = pagerItemsWrapper[scrollSize];\n        } else {\n            position = nextPagerItem[elementOffset] + nextPagerItem[elementSize] / 2 -\n                pagerItemsWrapper[elementSize] / 2;\n        }\n\n        pagerItemsWrapper.scroll({\n            [scrollDirection]: position,\n            behavior\n        });\n        currentItem = index;\n    }\n\n    function clampIndex(index: number, overflow: Overflow): number {\n        if (index > items.length - 1) {\n            return overflow === 'ring' ? nonNegativeModulo(index, items.length) : items.length - 1;\n        }\n        if (index < 0) {\n            return overflow === 'ring' ? nonNegativeModulo(index, items.length) : 0;\n        }\n\n        return index;\n    }\n\n    function setPreviousItem(step: number, overflow: Overflow, animated: boolean) {\n        let previousItem = clampIndex(currentItem - step, overflow);\n\n        scrollToPagerItem(previousItem, animated ? 'smooth' : 'instant');\n    }\n\n    function setNextItem(step: number, overflow: Overflow, animated: boolean) {\n        let nextItem = clampIndex(currentItem + step, overflow);\n\n        scrollToPagerItem(nextItem, animated ? 'smooth' : 'instant');\n    }\n\n    function init(): void {\n        registerData?.destroy();\n        registerData = undefined;\n\n        if (prevId) {\n            rootCtx.unregisterInstance(prevId);\n            prevId = undefined;\n        }\n\n        if (!componentContext.fakeElement) {\n            registerData = componentContext.registerPager(componentContext.id || undefined);\n        }\n\n        if (componentContext.id && !componentContext.fakeElement) {\n            prevId = componentContext.id;\n            rootCtx.registerInstance<SwitchElements>(prevId, {\n                setCurrentItem(item: number, animated: boolean) {\n                    if (item < 0 || item > items.length - 1) {\n                        throw new Error('Item is out of range in \"set-current-item\" action');\n                    }\n\n                    scrollToPagerItem(item, animated ? 'smooth' : 'instant');\n                },\n                setPreviousItem,\n                setNextItem,\n                scrollToStart(animated) {\n                    scrollToPagerItem(0, animated ? 'smooth' : 'instant');\n                },\n                scrollToEnd(animated) {\n                    scrollToPagerItem(items.length - 1, animated ? 'smooth' : 'instant');\n                },\n                scrollCombined({\n                    step,\n                    overflow,\n                    animated\n                }) {\n                    if (step) {\n                        scrollToPagerItem(clampIndex(currentItem + step, overflow || 'clamp'), animated ? 'smooth' : 'instant');\n                    }\n                },\n            }, 'warn');\n        }\n    }\n\n    $: if (componentContext.json) {\n        const defaultItem = componentContext.getJsonWithVars(componentContext.json.default_item);\n        if (typeof defaultItem === 'number' && defaultItem >= 0 && defaultItem < items.length) {\n            currentItem = prevSelectedItem = defaultItem;\n            pagerDataUpdate(items.length, defaultItem);\n        }\n\n        init();\n    }\n\n    onMount(() => {\n        mounted = true;\n\n        if (pagerItemsWrapper) {\n            scrollToPagerItem(currentItem, 'instant');\n        }\n    });\n\n    onDestroy(() => {\n        mounted = false;\n\n        items.forEach(context => {\n            context.destroy();\n        });\n\n        if (prevId) {\n            rootCtx.unregisterInstance(prevId);\n            prevId = undefined;\n        }\n\n        registerData?.destroy();\n        registerData = undefined;\n    });\n</script>\n\n{#if !hasError}\n    <Outer\n        cls={genClassName('pager', css, mods)}\n        {componentContext}\n        {layoutParams}\n        customPaddings={true}\n        parentOf={items}\n        {replaceItems}\n    >\n        <div\n            class=\"{css.pager__items} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n            style={makeStyle(style)}\n            bind:this={pagerItemsWrapper}\n            on:scroll={onScrollDebounced}\n        >\n            {#each items as item, index}\n                <div\n                    class={genClassName('pager__item', css, getItemMods(orientation, $childStore[index]))}\n                    role=\"tabpanel\"\n                    id=\"{instId}-panel-{index}\"\n                    aria-labelledby=\"{instId}-tab-{index}\"\n                >\n                    <Unknown\n                        componentContext={item}\n                        layoutParams={childLayoutParams}\n                    />\n                </div>\n            {/each}\n        </div>\n\n        {#if hasScrollLeft && shouldCheckArrows}\n            <!-- svelte-ignore a11y-click-events-have-key-events -->\n            <!-- svelte-ignore a11y-no-static-element-interactions -->\n            <div class=\"{leftClass || `${css.pager__arrow} ${arrowsCss.arrow} ${arrowsCss.arrow_left}`}\" on:click={() => ($direction === 'ltr' ? setPreviousItem : setNextItem)(1, 'clamp', true)}>\n                {#if !leftClass}\n                    <svg class={arrowsCss.arrow__icon} xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n                        <path class={css['pager__arrow-icon-path']} d=\"m10 16 8.3 8 1.03-1-4-6-.7-1 .7-1 4-6-1.03-1z\"/>\n                    </svg>\n                {/if}\n            </div>\n        {/if}\n        {#if hasScrollRight && shouldCheckArrows}\n            <!-- svelte-ignore a11y-click-events-have-key-events -->\n            <!-- svelte-ignore a11y-no-static-element-interactions -->\n            <div class=\"{rightClass || `${css.pager__arrow} ${arrowsCss.arrow} ${arrowsCss.arrow_right}`}\" on:click={() => ($direction === 'ltr' ? setNextItem : setPreviousItem)(1, 'clamp', true)}>\n                {#if !rightClass}\n                    <svg class={arrowsCss.arrow__icon} xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n                        <path class={css['pager__arrow-icon-path']} d=\"M22 16l-8.3 8-1.03-1 4-6 .7-1-.7-1-4-6 1.03-1 8.3 8z\"/>\n                    </svg>\n                {/if}\n            </div>\n        {/if}\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","<script lang=\"ts\" context=\"module\">\n    const AVAIL_SHAPES = [\n        'rounded_rectangle',\n        'circle'\n    ];\n</script>\n\n<script lang=\"ts\">\n    import { getContext, onDestroy, onMount, tick } from 'svelte';\n\n    import rootCss from '../Root.module.css';\n    import css from './Indicator.module.css';\n\n    import type { DivIndicatorData } from '../../types/indicator';\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { DivIndicatorDefaultItemPlacement, DivIndicatorStretchItemPlacement } from '../../types/indicator';\n    import type { ComponentContext, PagerData } from '../../types/componentContext';\n\n    import Outer from '../utilities/Outer.svelte';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { genClassName } from '../../utils/genClassName';\n    import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n    import { pxToEm } from '../../utils/pxToEm';\n    import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n    import { ARROW_LEFT, ARROW_RIGHT, END, HOME } from '../../utils/keyboard/codes';\n    import { correctDrawableStyle, type DrawableStyle } from '../../utils/correctDrawableStyles';\n    import { correctColor } from '../../utils/correctColor';\n\n    export let componentContext: ComponentContext<DivIndicatorData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const direction = rootCtx.direction;\n\n    let activeStyle: DrawableStyle = {\n        width: 13,\n        height: 13,\n        borderRadius: 6.5,\n        background: '#ffdc60'\n    };\n    let inactiveStyle: DrawableStyle = {\n        width: 10,\n        height: 10,\n        borderRadius: 5,\n        background: '#33919cb5'\n    };\n\n    let placement: 'default' | 'stretch' = 'default';\n    let spaceBetweenCenters = 15;\n    let maxVisibleItems = 10;\n    let itemSpacing = 5;\n\n    let scroller: HTMLElement;\n    let indicatorItemsWrapper: HTMLElement;\n    let pagerData: PagerData;\n    let pagerDataUnsubscribe: (() => void) | undefined;\n    let mounted = false;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        placement = 'default';\n        spaceBetweenCenters = 15;\n        maxVisibleItems = 10;\n        itemSpacing = 5;\n        activeStyle = {\n            width: 13,\n            height: 13,\n            borderRadius: 6.5,\n            background: '#ffdc60'\n        };\n        inactiveStyle = {\n            width: 10,\n            height: 10,\n            borderRadius: 5,\n            background: '#33919cb5'\n        };\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: if (origJson && mounted) {\n        init();\n    }\n\n    $: jsonShape = componentContext.getDerivedFromVars(componentContext.json.shape);\n    $: jsonActiveItemColor = componentContext.getDerivedFromVars(componentContext.json.active_item_color);\n    $: jsonInactiveItemColor = componentContext.getDerivedFromVars(componentContext.json.inactive_item_color);\n    $: jsonActiveItemSize = componentContext.getDerivedFromVars(componentContext.json.active_item_size);\n    $: jsonActiveShape = componentContext.getDerivedFromVars(componentContext.json.active_shape);\n    $: jsonInactiveShape = componentContext.getDerivedFromVars(componentContext.json.inactive_shape);\n    $: jsonSpaceBetweenCenters = componentContext.getDerivedFromVars(componentContext.json.space_between_centers);\n    $: jsonItemsPlacement = componentContext.getDerivedFromVars(componentContext.json.items_placement);\n\n    $: {\n        if ($jsonActiveShape) {\n            activeStyle = correctDrawableStyle<DrawableStyle>({\n                type: 'shape_drawable',\n                shape: $jsonActiveShape\n            }, AVAIL_SHAPES, activeStyle);\n        }\n        if ($jsonInactiveShape) {\n            inactiveStyle = correctDrawableStyle<DrawableStyle>({\n                type: 'shape_drawable',\n                shape: $jsonInactiveShape\n            }, AVAIL_SHAPES, inactiveStyle);\n        }\n        if (!$jsonActiveShape && !$jsonInactiveShape && $jsonShape) {\n            const activeSize = correctPositiveNumber($jsonActiveItemSize, 1.3);\n            inactiveStyle = correctDrawableStyle<DrawableStyle>({\n                type: 'shape_drawable',\n                shape: $jsonShape,\n                color: inactiveStyle.background\n            }, AVAIL_SHAPES, inactiveStyle);\n            inactiveStyle.background = correctColor($jsonInactiveItemColor, 1, inactiveStyle.background);\n            activeStyle = {\n                ...inactiveStyle,\n                width: inactiveStyle.width * activeSize,\n                height: inactiveStyle.height * activeSize,\n                borderRadius: inactiveStyle.borderRadius * activeSize,\n                background: activeStyle.background\n            };\n            activeStyle.background = correctColor($jsonActiveItemColor, 1, activeStyle.background);\n        }\n    }\n\n    $: if ($jsonItemsPlacement && ($jsonItemsPlacement.type === 'default' || $jsonItemsPlacement.type === 'stretch')) {\n        placement = $jsonItemsPlacement.type;\n        if (placement === 'default') {\n            spaceBetweenCenters = correctNonNegativeNumber(\n                ($jsonItemsPlacement as MaybeMissing<DivIndicatorDefaultItemPlacement>).space_between_centers?.value,\n                spaceBetweenCenters\n            );\n        } else if (placement === 'stretch') {\n            const placement = $jsonItemsPlacement as MaybeMissing<DivIndicatorStretchItemPlacement>;\n            maxVisibleItems = correctPositiveNumber(placement.max_visible_items, maxVisibleItems);\n            itemSpacing = correctNonNegativeNumber(placement.item_spacing?.value, itemSpacing);\n        }\n    } else {\n        placement = 'default';\n        if ($jsonSpaceBetweenCenters) {\n            spaceBetweenCenters = correctNonNegativeNumber($jsonSpaceBetweenCenters.value, spaceBetweenCenters);\n        }\n    }\n\n    async function onPagerDataUpdate(data: PagerData): Promise<void> {\n        pagerData = data;\n\n        await tick();\n\n        if (indicatorItemsWrapper) {\n            // if not destroyed yet\n\n            const elem = indicatorItemsWrapper.children[pagerData.currentItem] as HTMLElement;\n\n            if (elem) {\n                const currentItemOffsetLeft = elem.offsetLeft;\n\n                scroller.scroll({\n                    left: currentItemOffsetLeft - scroller.clientWidth / 2,\n                    behavior: 'smooth'\n                });\n            }\n        }\n    }\n\n    function onIndicatorItemClick(index: number) {\n        if (index !== pagerData.currentItem) {\n            pagerData.scrollToPagerItem(index);\n        }\n    }\n\n    function onIndicatorItemKeydown(event: KeyboardEvent): void {\n        if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n            return;\n        }\n\n        const { size, currentItem } = pagerData;\n        if (event.which === ARROW_LEFT) {\n            const prevItem = currentItem - 1 < 0 ? currentItem : currentItem - 1;\n            moveFocus(prevItem);\n        } else if (event.which === ARROW_RIGHT) {\n            const nextItem = currentItem + 1 >= size ? currentItem : currentItem + 1;\n            moveFocus(nextItem);\n        } else if (event.which === HOME) {\n            moveFocus(0);\n        } else if (event.which === END) {\n            moveFocus(size - 1);\n        } else {\n            return;\n        }\n\n        event.preventDefault();\n    }\n\n    async function moveFocus(index: number) {\n        pagerData.scrollToPagerItem(index);\n\n        await tick();\n\n        const activeItem = indicatorItemsWrapper.querySelector(`.${css.indicator__item_active}`) as HTMLElement | null;\n        if (activeItem) {\n            activeItem.focus();\n        }\n    }\n\n    $: mods = {\n        placement,\n        direction: $direction,\n        visible: pagerData?.size > 1\n    };\n\n    function init() {\n        pagerDataUnsubscribe?.();\n        pagerDataUnsubscribe = undefined;\n\n        const pagerId = componentContext.json.pager_id;\n        pagerDataUnsubscribe = componentContext.listenPager(pagerId, onPagerDataUpdate);\n    }\n\n    onMount(() => {\n        mounted = true;\n    });\n\n    onDestroy(() => {\n        mounted = false;\n        pagerDataUnsubscribe?.();\n        pagerDataUnsubscribe = undefined;\n    });\n</script>\n\n<Outer\n    cls={genClassName('indicator', css, mods)}\n    {componentContext}\n    {layoutParams}\n>\n    <div\n        class={css.indicator__scroller}\n        bind:this={scroller}\n    >\n        <div\n            class={css.indicator__items}\n            role=\"tablist\"\n            bind:this={indicatorItemsWrapper}\n            style:margin={placement === 'default' ? `0 ${pxToEm(Math.max(0, activeStyle.width - inactiveStyle.width) / 2)}` : ''}\n            style:--divkit-indicator-inactive-width={pxToEm(inactiveStyle.width)}\n            style:--divkit-indicator-inactive-height={pxToEm(inactiveStyle.height)}\n            style:--divkit-indicator-inactive-border-radius={pxToEm(inactiveStyle.borderRadius)}\n            style:--divkit-indicator-inactive-background={inactiveStyle.background || ''}\n            style:--divkit-indicator-inactive-box-shadow={inactiveStyle.boxShadow || ''}\n            style:--divkit-indicator-active-width={pxToEm(activeStyle.width)}\n            style:--divkit-indicator-active-height={pxToEm(activeStyle.height)}\n            style:--divkit-indicator-active-border-radius={pxToEm(activeStyle.borderRadius)}\n            style:--divkit-indicator-active-background={activeStyle.background || ''}\n            style:--divkit-indicator-active-box-shadow={activeStyle.boxShadow || ''}\n            style:--divkit-indicator-active-scale={activeStyle.width / inactiveStyle.width}\n            style:--divkit-indicator-default-margin={placement === 'default' ? `0 ${pxToEm((spaceBetweenCenters - inactiveStyle.width) / 2)}` : ''}\n            style:--divkit-indicator-stretch-margin={placement === 'stretch' ? pxToEm(itemSpacing) : ''}\n            style:--divkit-indicator-stretch-max-count={placement === 'stretch' ? maxVisibleItems : ''}\n            style:--divkit-indicator-stretch-max-spacer={placement === 'stretch' ? pxToEm((maxVisibleItems - 1) * itemSpacing) : ''}\n        >\n            {#if pagerData}\n                {#each Array(pagerData.size) as _, index}\n                    {@const isActiveItem = index === pagerData.currentItem}\n                    <div\n                        class=\"{genClassName('indicator__item', css, { active: isActiveItem })} {rootCss.root__clickable}\"\n                        role=\"tab\"\n                        id=\"{pagerData.instId}-tab-{index}\"\n                        aria-controls=\"{pagerData.instId}-panel-{index}\"\n                        aria-selected={isActiveItem ? 'true' : 'false'}\n                        tabindex={isActiveItem ? 0 : -1}\n                        on:click={() => onIndicatorItemClick(index)}\n                        on:keydown={onIndicatorItemKeydown}\n                    ></div>\n                {/each}\n            {/if}\n        </div>\n    </div>\n</Outer>\n","import type { SliderTextStyle } from '../types/slider';\nimport type { MaybeMissing } from '../expressions/json';\nimport { isPositiveNumber } from './isPositiveNumber';\nimport { correctColor } from './correctColor';\nimport { pxToEm } from './pxToEm';\nimport { correctFontWeight } from './correctFontWeight';\n\nexport interface TransformedSliderTextStyle {\n    fontSize: string;\n    fontWeight: number | undefined;\n    textColor: string;\n    offset?: {\n        x: number;\n        y: number;\n    };\n}\n\nexport function correctSliderTextStyle(\n    textStyle: MaybeMissing<SliderTextStyle> | undefined,\n    defaultValue: TransformedSliderTextStyle | undefined\n): TransformedSliderTextStyle | undefined {\n    if (!textStyle || !textStyle.font_size) {\n        return defaultValue;\n    }\n\n    const offset = textStyle.offset;\n    const convertedColor = textStyle.text_color && correctColor(textStyle.text_color) || '#000';\n    const fontWeight = correctFontWeight(textStyle.font_weight, textStyle.font_weight_value, undefined);\n\n    if (\n        isPositiveNumber(textStyle.font_size) &&\n        convertedColor !== 'transparent'\n    ) {\n        const res: TransformedSliderTextStyle = {\n            fontSize: pxToEm(textStyle.font_size),\n            fontWeight,\n            textColor: convertedColor\n        };\n\n        if (typeof offset?.x?.value === 'number' && typeof offset?.y?.value === 'number') {\n            res.offset = {\n                x: offset.x.value,\n                y: offset.y.value\n            };\n        }\n\n        return res;\n    }\n}\n","export function clamp(val: number | bigint, min: number, max: number): number {\n    return Math.max(min, Math.min(max, Number(val)));\n}\n","export function toBigIntNoCheck(val: number | bigint | string): bigint {\n    return BigInt(val);\n}\n\nexport const MAX_INT = toBigIntNoCheck('9223372036854775807');\nexport const MIN_INT = toBigIntNoCheck('-9223372036854775808');\n\nexport function toBigInt(val: number | bigint | string): bigint {\n    const res = toBigIntNoCheck(val);\n    if (res > MAX_INT || res < MIN_INT) {\n        throw new Error('Integer overflow.');\n    }\n    return res;\n}\n\nexport const bigIntZero = toBigInt(0);\n\nexport function absBigInt(val: bigint): bigint {\n    let res = val;\n\n    if (res < 0) {\n        res = -res;\n    }\n\n    return res;\n}\n\nexport function signBigInt(val: bigint): bigint {\n    let res = 0;\n\n    if (val > 0) {\n        res = 1;\n    } else if (val < 0) {\n        res = -1;\n    }\n\n    return toBigInt(res);\n}\n","import type { Writable, Subscriber, Unsubscriber } from 'svelte/store';\nimport { writable } from 'svelte/store';\nimport type { EvalValue } from './eval';\nimport { parseColor } from '../utils/correctColor';\nimport { bigIntZero, toBigInt } from './bigint';\n\nexport type VariableType = 'string' | 'number' | 'integer' | 'boolean' | 'color' | 'url' | 'dict' | 'array';\nexport type VariableValue = string | number | bigint | boolean | null | undefined | object | unknown[];\n\nexport abstract class Variable<\n    ValueType extends ConvertedSetValue = any,\n    TypeName = VariableType,\n    ConvertedSetValue = ValueType\n> {\n    protected name: string;\n    protected value: ValueType;\n    protected store?: Writable<ValueType>;\n\n    constructor(name: string, value: ConvertedSetValue) {\n        const val = this.convertValue(value);\n\n        this.name = name;\n        this.value = val;\n    }\n\n    getName(): string {\n        return this.name;\n    }\n\n    protected abstract convertValue(value: unknown): ValueType;\n\n    subscribe(cb: Subscriber<ValueType>): Unsubscriber {\n        if (!this.store) {\n            this.store = writable(this.value);\n        }\n\n        return this.store.subscribe(cb);\n    }\n\n    set(val: string): void {\n        const value = this.fromString(val);\n\n        this.setValue(value);\n    }\n\n    protected abstract fromString(val: string): ValueType;\n\n    setValue(val: ConvertedSetValue): void {\n        const converted = this.convertValue(val);\n\n        this.value = converted;\n\n        if (this.store) {\n            this.store.set(converted);\n        }\n    }\n\n    getValue(): ValueType {\n        return this.value;\n    }\n\n    abstract getType(): TypeName;\n}\n\nexport class StringVariable extends Variable<string, 'string'> {\n    protected convertValue(value: unknown) {\n        if (typeof value !== 'string') {\n            throw new Error('Incorrect variable value');\n        }\n        return value;\n    }\n\n    protected fromString(val: string) {\n        return val;\n    }\n\n    getType(): 'string' {\n        return 'string';\n    }\n}\n\nexport class IntegerVariable extends Variable<bigint, 'integer', bigint | number> {\n    protected convertValue(value: unknown) {\n        if (typeof value !== 'bigint' && typeof value !== 'number') {\n            throw new Error('Incorrect variable value');\n        }\n\n        try {\n            return toBigInt(value);\n        } catch (_err) {\n            throw new Error('Incorrect variable value');\n        }\n    }\n\n    protected fromString(val: string) {\n        try {\n            return toBigInt(val);\n        } catch (_err) {\n            throw new Error('Incorrect variable value');\n        }\n    }\n\n    getType(): 'integer' {\n        return 'integer';\n    }\n}\n\nexport class NumberVariable extends Variable<number, 'number'> {\n    protected convertValue(value: unknown) {\n        if (\n            typeof value !== 'number' ||\n            Number.isNaN(value) ||\n            !isFinite(value)\n        ) {\n            throw new Error('Incorrect variable value');\n        }\n\n        return value;\n    }\n\n    protected fromString(val: string) {\n        const res = Number(val);\n\n        return this.convertValue(res);\n    }\n\n    getType(): 'number' {\n        return 'number';\n    }\n}\n\nexport class BooleanVariable extends Variable<number, 'boolean'> {\n    protected convertValue(value: unknown) {\n        if (value !== 1 && value !== 0 && value !== true && value !== false) {\n            throw new Error('Incorrect variable value');\n        }\n\n        return Number(value);\n    }\n\n    protected fromString(val: string) {\n        if (val === '1' || val === 'true') {\n            return 1;\n        } else if (val === '0' || val === 'false') {\n            return 0;\n        }\n\n        throw new Error('Incorrect variable value');\n    }\n\n    getType(): 'boolean' {\n        return 'boolean';\n    }\n}\n\nexport class ColorVariable extends Variable<string, 'color'> {\n    protected convertValue(value: unknown) {\n        if (typeof value !== 'string' || !parseColor(value)) {\n            throw new Error('Incorrect variable value');\n        }\n\n        // save input value, some expression tests rely on that\n        return value;\n    }\n\n    protected fromString(val: string) {\n        return this.convertValue(val);\n    }\n\n    getType(): 'color' {\n        return 'color';\n    }\n}\n\nexport class UrlVariable extends Variable<string, 'url'> {\n    protected convertValue(value: unknown) {\n        if (typeof value !== 'string') {\n            throw new Error('Incorrect variable value');\n        }\n\n        return value;\n    }\n\n    protected fromString(val: string) {\n        return val;\n    }\n\n    getType(): 'url' {\n        return 'url';\n    }\n}\n\nexport class DictVariable extends Variable<object, 'dict'> {\n    protected convertValue(value: unknown) {\n        if (typeof value !== 'object' || !value) {\n            throw new Error('Incorrect variable value');\n        }\n\n        return value;\n    }\n\n    protected fromString(val: string): object {\n        try {\n            return JSON.parse(val);\n        } catch (_err) {\n            throw new Error('Incorrect dict value');\n        }\n    }\n\n    getType(): 'dict' {\n        return 'dict';\n    }\n}\n\nexport class ArrayVariable extends Variable<unknown[], 'array'> {\n    protected convertValue(value: unknown[]) {\n        if (!Array.isArray(value)) {\n            throw new Error('Incorrect variable value');\n        }\n\n        return value;\n    }\n\n    protected fromString(val: string): unknown[] {\n        try {\n            return JSON.parse(val);\n        } catch (_err) {\n            throw new Error('Incorrect array value');\n        }\n    }\n\n    getType(): 'array' {\n        return 'array';\n    }\n}\n\nexport const TYPE_TO_CLASS: Record<VariableType, typeof Variable<VariableValue, VariableType>> = {\n    string: StringVariable,\n    number: NumberVariable,\n    integer: IntegerVariable,\n    boolean: BooleanVariable,\n    color: ColorVariable,\n    url: UrlVariable,\n    dict: DictVariable,\n    array: ArrayVariable\n};\n\nexport function createVariable(\n    name: string,\n    type: VariableType,\n    value: unknown\n): InstanceType<typeof TYPE_TO_CLASS[typeof type]> {\n    if (!(type in TYPE_TO_CLASS)) {\n        throw new Error('Unsupported variable type');\n    }\n\n    return new (TYPE_TO_CLASS[type] as any)(name, value);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop(): void {\n}\n\nfunction constSubscribe<ValueType>(this: Variable<ValueType>, cb: Subscriber<ValueType>): Unsubscriber {\n    cb(this.value);\n\n    return noop;\n}\n\nfunction constSetter(): void {\n    throw new Error('Cannot change the value of this type of variable');\n}\n\nclass ConstStringVariable extends StringVariable {}\nclass ConstNumberVariable extends NumberVariable {}\nclass ConstIntegerVariable extends IntegerVariable {}\nclass ConstBooleanVariable extends BooleanVariable {}\nclass ConstColorVariable extends ColorVariable {}\nclass ConstUrlVariable extends UrlVariable {}\nclass ConstDictVariable extends DictVariable {}\nclass ConstArrayVariable extends ArrayVariable {}\n\nclass ConstDatetimeVariable extends Variable<Date, 'datetime'> {\n    protected convertValue(value: unknown) {\n        if (!(value instanceof Date)) {\n            throw new Error('Incorrect variable value');\n        }\n\n        return value;\n    }\n\n    protected fromString(): never {\n        throw new Error('Datetime variable does not support setter from string');\n    }\n\n    getType(): 'datetime' {\n        return 'datetime';\n    }\n}\n\nexport const CONST_TYPE_TO_CLASS: {\n    string: typeof StringVariable;\n    number: typeof NumberVariable;\n    integer: typeof IntegerVariable;\n    boolean: typeof BooleanVariable;\n    color: typeof ColorVariable;\n    url: typeof UrlVariable;\n    dict: typeof DictVariable;\n    array: typeof ArrayVariable;\n    datetime: typeof ConstDatetimeVariable;\n} = {\n    string: ConstStringVariable,\n    number: ConstNumberVariable,\n    integer: ConstIntegerVariable,\n    boolean: ConstBooleanVariable,\n    color: ConstColorVariable,\n    url: ConstUrlVariable,\n    dict: ConstDictVariable,\n    array: ConstArrayVariable,\n    datetime: ConstDatetimeVariable\n} as any;\n\nfor (const type in CONST_TYPE_TO_CLASS) {\n    const Class = CONST_TYPE_TO_CLASS[type as keyof typeof CONST_TYPE_TO_CLASS];\n\n    Class.prototype.subscribe = constSubscribe;\n    Class.prototype.set = constSetter;\n    Class.prototype.setValue = constSetter;\n}\n\nexport function createConstVariable<T extends VariableType | 'datetime'>(\n    name: string,\n    type: T,\n    value: unknown\n): InstanceType<typeof CONST_TYPE_TO_CLASS[T]> {\n    if (!(type in CONST_TYPE_TO_CLASS)) {\n        throw new Error('Unsupported variable type');\n    }\n\n    return new (CONST_TYPE_TO_CLASS[type] as any)(name, value);\n}\n\nexport function defaultValueByType(type: keyof typeof TYPE_TO_CLASS): VariableValue {\n    if (type === 'integer') {\n        return bigIntZero;\n    }\n    if (type === 'boolean' || type === 'number') {\n        return 0;\n    }\n    if (type === 'dict') {\n        return {};\n    }\n    if (type === 'array') {\n        return [];\n    }\n\n    return '';\n}\n\nexport function variableToValue(variable: Variable): EvalValue {\n    return {\n        type: variable.getType(),\n        value: variable.getValue()\n    };\n}\n","<script lang=\"ts\" context=\"module\">\n    const DEFAULT_DRAWABLE_STYLE: DrawableStyle = {\n        width: 10,\n        height: 10,\n        borderRadius: 5,\n        background: '#000'\n    };\n    const THUMB_MARK_SHAPES = [\n        'rounded_rectangle',\n        'circle'\n    ];\n    const TRACK_SHAPES = [\n        'rounded_rectangle'\n    ];\n</script>\n\n<script lang=\"ts\">\n    import { getContext, onDestroy, onMount } from 'svelte';\n\n    import css from './Slider.module.css';\n\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivSliderData, SliderRange } from '../../types/slider';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { Direction } from '../../../typings/common';\n    import type { EdgeInsets } from '../../types/edgeInserts';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { ACTION_CTX, type ActionCtxValue } from '../../context/action';\n    import { genClassName } from '../../utils/genClassName';\n    import { correctDrawableStyle, type DrawableStyle } from '../../utils/correctDrawableStyles';\n    import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n    import { correctSliderTextStyle, type TransformedSliderTextStyle } from '../../utils/correctSliderTextStyle';\n    import { wrapError } from '../../utils/wrapError';\n    import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n    import { clamp } from '../../utils/clamp';\n    import { correctNumber } from '../../utils/correctNumber';\n    import Outer from '../utilities/Outer.svelte';\n    import { createVariable } from '../../expressions/variable';\n    import { debounce } from '../../utils/debounce';\n    import { correctBooleanInt } from '../../utils/correctBooleanInt';\n    import { composeAccessibilityDescription } from '../../utils/composeAccessibilityDescription';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivSliderData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n    const actionCtx = getContext<ActionCtxValue>(ACTION_CTX);\n\n    const direction = rootCtx.direction;\n\n    let prevId: string | undefined;\n    let input: HTMLInputElement;\n    let tracksInner: HTMLElement;\n    let switchedTracks = false;\n    let minValue = 0;\n    let maxValue = 100;\n    let thumbStyle = DEFAULT_DRAWABLE_STYLE;\n    let thumbSecondaryStyle = thumbStyle;\n    let trackInactiveStyle = DEFAULT_DRAWABLE_STYLE;\n    let trackActiveStyle = DEFAULT_DRAWABLE_STYLE;\n    let markActiveTicks: number[];\n    let markActiveStyle: DrawableStyle | null = null;\n    let markInactiveTicks: number[];\n    let markInactiveStyle: DrawableStyle | null = null;\n    let textStyle: TransformedSliderTextStyle | undefined = undefined;\n    let textSecondaryStyle: TransformedSliderTextStyle | undefined = textStyle;\n    let description = '';\n    let secondaryDescription = '';\n    let isEnabled = true;\n    let hasError = false;\n    let renderRanges: {\n        left: string;\n        right: string;\n        height: string;\n        borderRadius: string;\n        background: string;\n        boxShadow: string;\n    }[] = [];\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        thumbStyle = DEFAULT_DRAWABLE_STYLE;\n        thumbSecondaryStyle = thumbStyle;\n        trackInactiveStyle = DEFAULT_DRAWABLE_STYLE;\n        trackActiveStyle = DEFAULT_DRAWABLE_STYLE;\n        markActiveStyle = null;\n        markInactiveStyle = null;\n        textStyle = undefined;\n        textSecondaryStyle = undefined;\n        description = '';\n        isEnabled = true;\n        secondaryDescription = '';\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: firstVariable = componentContext.json.thumb_value_variable;\n    $: secondVariable = componentContext.json.thumb_secondary_value_variable;\n\n    $: valueVariable = firstVariable && componentContext.getVariable(firstVariable, 'integer') || createVariable('temp', 'integer', 0);\n    $: value2Variable = secondVariable && componentContext.getVariable(secondVariable, 'integer') || createVariable('temp', 'integer', 0);\n\n    $: jsonMinValue = componentContext.getDerivedFromVars(componentContext.json.min_value);\n    $: jsonMaxValue = componentContext.getDerivedFromVars(componentContext.json.max_value);\n    $: jsonThumbStyle = componentContext.getDerivedFromVars(componentContext.json.thumb_style);\n    $: jsonThumbSecondaryStyle = componentContext.getDerivedFromVars(componentContext.json.thumb_secondary_style);\n    $: jsonTrackInactiveStyle = componentContext.getDerivedFromVars(componentContext.json.track_inactive_style);\n    $: jsonTrackActiveStyle = componentContext.getDerivedFromVars(componentContext.json.track_active_style);\n    $: jsonMarkActiveStyle = componentContext.getDerivedFromVars(componentContext.json.tick_mark_active_style);\n    $: jsonMarkInactiveStyle = componentContext.getDerivedFromVars(componentContext.json.tick_mark_inactive_style);\n    $: jsonTextStyle = componentContext.getDerivedFromVars(componentContext.json.thumb_text_style);\n    $: jsonSecondaryTextStyle = componentContext.getDerivedFromVars(componentContext.json.thumb_secondary_text_style);\n    $: jsonAccessibility = componentContext.getDerivedFromVars(componentContext.json.accessibility);\n    $: jsonSecondaryAccessibility = componentContext.getDerivedFromVars(\n        componentContext.json.secondary_value_accessibility\n    );\n    $: jsonIsEnabled = componentContext.getDerivedFromVars(componentContext.json.is_enabled);\n    $: jsonRanges = componentContext.getDerivedFromVars(componentContext.json.ranges);\n\n    $: {\n        minValue = correctNumber($jsonMinValue, minValue);\n        maxValue = correctNumber($jsonMaxValue, maxValue);\n        checkTicks();\n    }\n\n    let value = clamp($valueVariable || 0, minValue, maxValue);\n    let value2 = clamp($value2Variable || 0, minValue, maxValue);\n\n    $: {\n        const newVal = clamp($valueVariable || 0, minValue, maxValue);\n        if (newVal !== value) {\n            value = newVal;\n        }\n    }\n\n    $: {\n        const newVal2 = clamp($value2Variable || 0, minValue, maxValue);\n        if (newVal2 !== value2) {\n            value2 = newVal2;\n        }\n    }\n\n    $: {\n        thumbStyle = correctDrawableStyle($jsonThumbStyle, THUMB_MARK_SHAPES, thumbStyle);\n    }\n\n    $: {\n        thumbSecondaryStyle = correctDrawableStyle($jsonThumbSecondaryStyle, THUMB_MARK_SHAPES, thumbStyle);\n    }\n\n    $: {\n        trackInactiveStyle = correctDrawableStyle($jsonTrackInactiveStyle, TRACK_SHAPES, trackInactiveStyle);\n    }\n\n    $: {\n        trackActiveStyle = correctDrawableStyle($jsonTrackActiveStyle, TRACK_SHAPES, trackActiveStyle);\n    }\n\n    function fillTicks(from: number, to: number, minValue: number, maxValue: number, inside: boolean): number[] {\n        let res: number[] = [];\n\n        if (inside) {\n            for (let i = from; i < to; ++i) {\n                res.push((i - minValue) / (maxValue - minValue));\n            }\n        } else {\n            for (let i = minValue; i < from; ++i) {\n                res.push((i - minValue) / (maxValue - minValue));\n            }\n            for (let i = to; i < maxValue + 1; ++i) {\n                res.push((i - minValue) / (maxValue - minValue));\n            }\n        }\n\n        return res;\n    }\n\n    $: {\n        let newStyle = correctDrawableStyle($jsonMarkActiveStyle, THUMB_MARK_SHAPES, DEFAULT_DRAWABLE_STYLE);\n\n        if (newStyle !== DEFAULT_DRAWABLE_STYLE) {\n            markActiveStyle = newStyle;\n        }\n    }\n    $: if (markActiveStyle) {\n        markActiveTicks = secondVariable ?\n            fillTicks(Math.min(value, value2), Math.max(value, value2) + 1, minValue, maxValue, true) :\n            fillTicks(minValue, value, minValue, maxValue, true);\n        checkTicks();\n    } else {\n        markActiveTicks = [];\n    }\n\n    $: {\n        let newStyle = correctDrawableStyle($jsonMarkInactiveStyle, THUMB_MARK_SHAPES, DEFAULT_DRAWABLE_STYLE);\n\n        if (newStyle !== DEFAULT_DRAWABLE_STYLE) {\n            markInactiveStyle = newStyle;\n        }\n    }\n    $: if (markInactiveStyle) {\n        markInactiveTicks = secondVariable ?\n            fillTicks(Math.min(value, value2), Math.max(value, value2) + 1, minValue, maxValue, false) :\n            fillTicks(value + 1, maxValue + 1, minValue, maxValue, true);\n        checkTicks();\n    } else {\n        markInactiveTicks = [];\n    }\n\n    $: {\n        textStyle = correctSliderTextStyle($jsonTextStyle, textStyle);\n    }\n\n    $: {\n        textSecondaryStyle = correctSliderTextStyle($jsonSecondaryTextStyle, textStyle);\n    }\n\n    $: if ($jsonAccessibility?.description) {\n        description = composeAccessibilityDescription($jsonAccessibility);\n    } else {\n        componentContext.logError(wrapError(new Error('Missing accessibility \"description\" for slider'), {\n            level: 'warn'\n        }));\n    }\n\n    $: {\n        isEnabled = correctBooleanInt($jsonIsEnabled, isEnabled);\n    }\n\n    $: if ($jsonSecondaryAccessibility?.description) {\n        secondaryDescription = composeAccessibilityDescription($jsonSecondaryAccessibility);\n    } else if (secondVariable) {\n        componentContext.logError(wrapError(new Error('Missing second accessibility \"description\" for slider'), {\n            level: 'warn'\n        }));\n    }\n\n    $: {\n        let newHasError = false;\n\n        if (actionCtx.hasAction()) {\n            componentContext.logError(wrapError(new Error('Cannot show \"slider\" inside component with an action or inside accessibility mode=exclude')));\n            newHasError = true;\n        } else if (thumbStyle === DEFAULT_DRAWABLE_STYLE) {\n            componentContext.logError(wrapError(new Error('Missing \"thumb_style\" in slider')));\n            newHasError = true;\n        } else if (trackActiveStyle === DEFAULT_DRAWABLE_STYLE) {\n            componentContext.logError(wrapError(new Error('Missing \"track_active_style\" in slider')));\n            newHasError = true;\n        } else if (trackInactiveStyle === DEFAULT_DRAWABLE_STYLE) {\n            componentContext.logError(wrapError(new Error('Missing \"track_inactive_style\" in slider')));\n            newHasError = true;\n        }\n\n        if (newHasError !== hasError) {\n            hasError = newHasError;\n        }\n    }\n\n    $: maxThumbWidth = pxToEm(Math.max(...[\n        thumbStyle.width,\n        thumbSecondaryStyle.width,\n        0,\n    ].filter(isNonNegativeNumber)));\n    $: maxThumbHeight = pxToEm(Math.max(...[\n        thumbStyle.height,\n        thumbSecondaryStyle.height,\n        0,\n    ].filter(isNonNegativeNumber)));\n    $: trackPart = (value - minValue) / (maxValue - minValue);\n    $: trackSecondaryPart = secondVariable ? (value2 - minValue) / (maxValue - minValue) : undefined;\n    $: trackActiveOffset = trackSecondaryPart !== undefined ? Math.min(value, value2) : minValue;\n    $: trackActivePart = trackSecondaryPart !== undefined ? Math.abs(value2 - value) : value - minValue;\n\n    function updateRenderList({\n        direction,\n        minValue,\n        maxValue,\n        trackActiveOffset,\n        trackActivePart,\n        trackInactiveStyle,\n        trackActiveStyle,\n        ranges = []\n    }: {\n        direction: Direction;\n        minValue: number;\n        maxValue: number;\n        trackActiveOffset: number;\n        trackActivePart: number;\n        trackInactiveStyle: DrawableStyle;\n        trackActiveStyle: DrawableStyle;\n        ranges: MaybeMissing<SliderRange[]> | undefined;\n    }) {\n        const parts: {\n            left: number;\n            right: number;\n            totalLeft: number;\n            totalRight: number;\n            leftMargin: number;\n            rightMargin: number;\n            style: DrawableStyle;\n        }[] = [];\n\n        const pushParts = (type: 'active' | 'inactive', from: number, to: number) => {\n            const push = (start: number, end: number, style: DrawableStyle, margins?: EdgeInsets) => {\n                const intersectionStart = Math.max(start, from);\n                const intersectionEnd = Math.min(end, to);\n                if (intersectionEnd - intersectionStart > 0) {\n                    const leftMargin = margins ? (margins[direction === 'ltr' ? 'start' : 'end'] ?? margins.left ?? 0) : 0;\n                    const rightMargin = margins ? (margins[direction === 'ltr' ? 'end' : 'start'] ?? margins.right ?? 0) : 0;\n\n                    parts.push({\n                        left: start,\n                        right: end,\n                        totalLeft: from,\n                        totalRight: to,\n                        leftMargin,\n                        rightMargin,\n                        style\n                    });\n                }\n            };\n\n            if (!ranges[0] || (ranges[0].start ?? minValue) > from) {\n                push(from, ranges[0] ? (ranges[0].start ?? minValue) : to, type === 'inactive' ? trackInactiveStyle : trackActiveStyle);\n            }\n            ranges.forEach((range, index) => {\n                const selfStyle = range[type === 'inactive' ? 'track_inactive_style' : 'track_active_style'];\n                const fallbackStyle = type === 'inactive' ? trackInactiveStyle : trackActiveStyle;\n                const style = selfStyle ?\n                    correctDrawableStyle(selfStyle, TRACK_SHAPES, DEFAULT_DRAWABLE_STYLE) :\n                    fallbackStyle;\n                const prev = ranges[index - 1];\n                const next = ranges[index + 1];\n\n                const start = range.start ?? prev?.end ?? from;\n                const end = range.end ?? next?.start ?? to;\n\n                push(start, end, style, range.margins);\n            });\n            if (ranges[ranges.length - 1] && (ranges[ranges.length - 1].end ?? maxValue) < to) {\n                const start = ranges[ranges.length - 1].end ?? maxValue;\n                push(start, to, type === 'inactive' ? trackInactiveStyle : trackActiveStyle);\n            }\n        };\n        pushParts('inactive', minValue, maxValue);\n        pushParts('active', trackActiveOffset, trackActiveOffset + trackActivePart);\n\n        const total = maxValue - minValue;\n        renderRanges = parts.map(part => {\n            let rangeLeft = `${(part.left - minValue) * 100 / total}%`;\n            if (part.leftMargin) {\n                rangeLeft = `calc(${rangeLeft} + ${pxToEmWithUnits(part.leftMargin)})`;\n            }\n            let left;\n            if (part.totalLeft < part.left) {\n                left = rangeLeft;\n            } else if (part.leftMargin) {\n                left = `max(${(part.totalLeft - minValue) * 100 / total}%, ${rangeLeft})`;\n            } else {\n                left = `${(Math.max(part.totalLeft, part.left) - minValue) * 100 / total}%`;\n            }\n            let rangeRight = `${(1 - (part.right - minValue) / total) * 100}%`;\n            if (part.rightMargin) {\n                rangeRight = `calc(${rangeRight} + ${pxToEmWithUnits(part.rightMargin)})`;\n            }\n            let right;\n            if (part.totalRight > part.right) {\n                right = rangeRight;\n            } else if (part.rightMargin) {\n                right = `max(${(1 - (part.totalRight - minValue) / total) * 100}%, ${rangeRight})`;\n            } else {\n                right = `${(1 - (Math.max(part.totalRight, part.right) - minValue) / total) * 100}%`;\n            }\n\n            return {\n                left,\n                right,\n                height: pxToEm(part.style.height),\n                borderRadius: pxToEm(part.style.borderRadius),\n                background: part.style.background,\n                boxShadow: part.style.boxShadow || ''\n            };\n        });\n    }\n\n    $: updateRenderList({\n        direction: $direction,\n        minValue,\n        maxValue,\n        trackActiveOffset,\n        trackActivePart,\n        trackInactiveStyle,\n        trackActiveStyle,\n        ranges: $jsonRanges\n    });\n\n    $: stl = {\n        '--divkit-slider-thumb-width': pxToEm(thumbStyle.width),\n        '--divkit-slider-thumb-height': pxToEm(thumbStyle.height),\n\n        '--divkit-slider-thumb-secondary-width': pxToEm(thumbSecondaryStyle.width),\n        '--divkit-slider-thumb-secondary-height': pxToEm(thumbSecondaryStyle.height),\n\n        '--divkit-slider-text-offset-x': textStyle?.offset?.x ? pxToEmWithUnits(textStyle.offset.x) : undefined,\n        '--divkit-slider-text-offset-y': textStyle?.offset?.y ? pxToEmWithUnits(textStyle.offset.y) : undefined,\n\n        '--divkit-slider-text-secondary-offset-x': textSecondaryStyle?.offset?.x ? pxToEmWithUnits(textSecondaryStyle.offset.x) : undefined,\n        '--divkit-slider-text-secondary-offset-y': textSecondaryStyle?.offset?.y ? pxToEmWithUnits(textSecondaryStyle.offset.y) : undefined,\n\n        '--divkit-slider-tick-active-width': markActiveStyle ? pxToEm(markActiveStyle.width) : undefined,\n        '--divkit-slider-tick-active-height': markActiveStyle ? pxToEm(markActiveStyle.height) : undefined,\n        '--divkit-slider-tick-active-border-radius': markActiveStyle ? pxToEm(markActiveStyle.borderRadius) : undefined,\n        '--divkit-slider-tick-active-background': markActiveStyle?.background || undefined,\n        '--divkit-slider-tick-active-box-shadow': markActiveStyle?.boxShadow || undefined,\n\n        '--divkit-slider-tick-inactive-width': markInactiveStyle ? pxToEm(markInactiveStyle.width) : undefined,\n        '--divkit-slider-tick-inactive-height': markInactiveStyle ? pxToEm(markInactiveStyle.height) : undefined,\n        '--divkit-slider-tick-inactive-border-radius': markInactiveStyle ?\n            pxToEm(markInactiveStyle.borderRadius) :\n            undefined,\n        '--divkit-slider-tick-inactive-background': markInactiveStyle?.background || undefined,\n        '--divkit-slider-tick-inactive-box-shadow': markInactiveStyle?.boxShadow || undefined,\n\n        '--divkit-slider-max-thumb-width': maxThumbWidth,\n        '--divkit-slider-max-thumb-height': maxThumbHeight,\n        '--divkit-slider-track-part': trackPart,\n        '--divkit-slider-track-secondary-part': trackSecondaryPart,\n    };\n\n    $: mods = {\n        direction: $direction\n    };\n\n    function onSecondMousedown(event: MouseEvent | TouchEvent): void {\n        if (!isEnabled) {\n            return;\n        }\n\n        const pageX = 'pageX' in event ? event.pageX : event.changedTouches?.[0]?.pageX;\n        if (pageX === undefined) {\n            return;\n        }\n\n        const rangeBbox = tracksInner.getBoundingClientRect();\n        let part = (pageX - rangeBbox.left) / rangeBbox.width;\n        if ($direction === 'rtl') {\n            part = 1 - part;\n        }\n        const newVal = minValue + (maxValue - minValue) * part;\n        const final = Math.round(clamp(newVal, minValue, maxValue));\n        const middle = (value + value2) / 2;\n\n        switchedTracks = final < middle === value < value2;\n    }\n\n    function onInputChange(event: Event, type: 'first' | 'second'): void {\n        const val = Number((event.target as HTMLInputElement).value);\n\n        if (switchedTracks === (type === 'first')) {\n            value2 = val;\n            value2Variable.setValue(val);\n        } else {\n            value = val;\n            valueVariable.setValue(val);\n        }\n    }\n\n    let isTicksWarning = false;\n\n    function checkTicks() {\n        if (!tracksInner) {\n            return;\n        }\n\n        const ticksCount = maxValue - minValue;\n        const activeTickWidth = markActiveStyle?.width || 0;\n        const inactiveTickWidth = markInactiveStyle?.width || 0;\n        const maxTickWidth = Math.max(activeTickWidth, inactiveTickWidth);\n\n        if (maxTickWidth * ticksCount >= tracksInner?.clientWidth) {\n            if (!isTicksWarning) {\n                componentContext.logError(wrapError(new Error('Slider ticks overlap each other'), {\n                    level: 'warn'\n                }));\n                isTicksWarning = true;\n            }\n        } else {\n            isTicksWarning = false;\n        }\n    }\n\n    const checkTicksDebounced = debounce(checkTicks, 50);\n\n    $: if (componentContext.json && input) {\n        if (prevId) {\n            rootCtx.unregisterFocusable(prevId);\n            prevId = undefined;\n        }\n\n        if (componentContext.id && !componentContext.fakeElement) {\n            prevId = componentContext.id;\n            rootCtx.registerFocusable(prevId, {\n                focus() {\n                    if (input) {\n                        input.focus();\n                    }\n                }\n            });\n        }\n    }\n\n    onMount(() => {\n        checkTicks();\n    });\n\n    onDestroy(() => {\n        if (prevId) {\n            rootCtx.unregisterFocusable(prevId);\n            prevId = undefined;\n        }\n    });\n</script>\n\n<svelte:window on:resize={checkTicksDebounced} />\n\n{#if !hasError}\n    <Outer\n        let:focusHandler\n        let:blurHandler\n        cls={genClassName('slider', css, mods)}\n        style={stl}\n        customDescription={true}\n        customActions=\"slider\"\n        hasInnerFocusable={true}\n        {componentContext}\n        {layoutParams}\n    >\n        <div class={css['slider__tracks-wrapper']}>\n            <div class={css['slider__tracks-inner']} bind:this={tracksInner}>\n                <div class={css['slider__tracks-ranges'] + ($direction === 'rtl' ? ' ' + css['slider__tracks-ranges_rtl'] : '')}>\n                    {#each renderRanges as range}\n                        <div\n                            class={css.slider__track}\n                            style:left={range.left}\n                            style:right={range.right}\n                            style:height={range.height}\n                            style:border-radius={range.borderRadius}\n                            style:background={range.background}\n                            style:box-shadow={range.boxShadow}\n                        ></div>\n                    {/each}\n                </div>\n                {#each markActiveTicks as val}\n                    <div class=\"{css.slider__tick} {css.slider__tick_active}\" style:--divkit-slider-tick={val}></div>\n                {/each}\n                {#each markInactiveTicks as val}\n                    <div class=\"{css.slider__tick} {css.slider__tick_inactive}\" style:--divkit-slider-tick={val}></div>\n                {/each}\n                <div\n                    class={css.slider__thumb}\n                    style:border-radius={pxToEm(thumbStyle.borderRadius)}\n                    style:background={thumbStyle.background}\n                    style:box-shadow={thumbStyle.boxShadow || ''}\n                >\n                    {#if textStyle}\n                        <div class={css['slider__thumb-text']}>\n                            <div\n                                class={css['slider__thumb-text-inner']}\n                                style:font-size={textStyle?.fontSize || '1em'}\n                                style:font-weight={textStyle?.fontWeight || ''}\n                                style:color={textStyle?.textColor || '#000'}\n                            >\n                                {value}\n                            </div>\n                        </div>\n                    {/if}\n                </div>\n                {#if secondVariable}\n                    <div\n                        class=\"{css.slider__thumb} {css.slider__thumb_secondary}\"\n                        style:border-radius={pxToEm(thumbSecondaryStyle.borderRadius)}\n                        style:background={thumbSecondaryStyle.background}\n                        style:box-shadow={thumbSecondaryStyle.boxShadow || ''}\n                    >\n                        {#if textSecondaryStyle}\n                            <div class=\"{css['slider__thumb-text']} {css['slider__thumb-text_secondary']}\">\n                                <div\n                                    class={css['slider__thumb-text-inner']}\n                                    style:font-size={textSecondaryStyle?.fontSize || '1em'}\n                                    style:font-weight={textSecondaryStyle?.fontWeight || ''}\n                                    style:color={textSecondaryStyle?.textColor || '#000'}\n                                >\n                                    {value2}\n                                </div>\n                            </div>\n                        {/if}\n                    </div>\n                {/if}\n                <input\n                    type=\"range\"\n                    class={switchedTracks ? `${css.slider__input} ${css.slider__input_secondary}` : css.slider__input}\n                    min={minValue}\n                    max={maxValue}\n                    step=\"1\"\n                    value={switchedTracks ? value2 : value}\n                    disabled={!isEnabled}\n                    aria-label={description}\n                    on:input={event => onInputChange(event, 'first')}\n                    on:focus={focusHandler}\n                    on:blur={blurHandler}\n                    bind:this={input}\n                >\n                {#if secondVariable}\n                    <input\n                        type=\"range\"\n                        class={switchedTracks ? css.slider__input : `${css.slider__input} ${css.slider__input_secondary}`}\n                        min={minValue}\n                        max={maxValue}\n                        step=\"1\"\n                        value={switchedTracks ? value : value2}\n                        disabled={!isEnabled}\n                        aria-label={secondaryDescription}\n                        on:input={event => onInputChange(event, 'second')}\n                        on:mousedown={secondVariable ? onSecondMousedown : null}\n                        on:touchstart={secondVariable ? onSecondMousedown : null}\n                        on:focus={focusHandler}\n                        on:blur={blurHandler}\n                    >\n                {/if}\n            </div>\n        </div>\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","// Replicate from Android: client/android/div/src/main/java/com/yandex/div/core/util/mask/TextDiff.kt\n\nexport interface TextDiff {\n    start: number;\n    added: number;\n    removed: number;\n}\n\nexport function textDiff(left: string, right: string): TextDiff {\n    if (left === right) {\n        return {\n            start: left.length,\n            added: 0,\n            removed: 0\n        };\n    }\n\n    if (left.length > right.length) {\n        const diff = textDiff(right, left);\n\n        return {\n            start: diff.start,\n            added: diff.removed,\n            removed: diff.added\n        };\n    }\n\n    let leftIndex = 0;\n    let rightIndex = right.length - 1;\n    const lengthDiff = right.length - left.length;\n\n    while (\n        leftIndex < rightIndex && leftIndex < left.length &&\n        left[leftIndex] === right[leftIndex]\n    ) {\n        ++leftIndex;\n    }\n\n    while (\n        rightIndex - lengthDiff >= leftIndex &&\n        left[rightIndex - lengthDiff] === right[rightIndex]\n    ) {\n        --rightIndex;\n    }\n\n    ++rightIndex;\n\n    return {\n        start: leftIndex,\n        added: rightIndex - leftIndex,\n        removed: rightIndex - leftIndex - lengthDiff\n    };\n}\n","// Replicate from Android: client/android/div/src/main/java/com/yandex/div/core/util/mask/BaseInputMask.kt\n\nimport type { WrappedError } from '../wrapError';\nimport { wrapError } from '../wrapError';\nimport { type TextDiff, textDiff } from '../textDiff';\n\nexport interface MaskKey {\n    key: string;\n    filter?: string | undefined;\n    placeholder: string;\n}\n\nexport interface MaskData {\n    pattern: string;\n    decoding: MaskKey[];\n    alwaysVisible: boolean;\n}\n\ninterface MaskChar {\n    char: string | null;\n}\n\nexport class MaskCharStatic implements MaskChar {\n    constructor(public char: string) {}\n}\n\nexport class MaskCharDynamic implements MaskChar {\n    constructor(public char: string | null, public filter: RegExp, public placeholder: string) {}\n}\n\nexport abstract class BaseInputMask {\n    protected maskData: MaskData;\n    protected filters: Map<string, RegExp> = new Map();\n    protected destructedValue: MaskChar[] = [];\n    protected cursorPos = 0;\n\n    constructor(initialMaskData: MaskData) {\n        this.maskData = initialMaskData;\n        this.updateMaskData(initialMaskData);\n    }\n\n    get cursorPosition(): number {\n        return this.cursorPos;\n    }\n\n    get rawValue(): string {\n        return this.collectValueRange(0, this.destructedValue.length - 1);\n    }\n\n    get value(): string {\n        let str = '';\n\n        for (let i = 0; i < this.destructedValue.length; ++i) {\n            const char = this.destructedValue[i];\n\n            if (char instanceof MaskCharStatic) {\n                str += char.char;\n            } else if (char instanceof MaskCharDynamic) {\n                if (char.char) {\n                    str += char.char;\n                } else if (this.maskData.alwaysVisible) {\n                    str += char.placeholder;\n                } else {\n                    break;\n                }\n            }\n        }\n\n        return str;\n    }\n\n    protected firstEmptyHolderIndex(): number {\n        const index = this.destructedValue.findIndex(maskChar => {\n            return maskChar instanceof MaskCharDynamic && !maskChar.char;\n        });\n\n        if (index !== -1) {\n            return index;\n        }\n\n        return this.destructedValue.length;\n    }\n\n    abstract onException(exception: WrappedError): void;\n\n    updateMaskData(newMaskData: MaskData, restoreValue = true): void {\n        const previousRawValue = this.maskData !== newMaskData && restoreValue ? this.rawValue : null;\n\n        this.filters = new Map();\n        this.maskData = newMaskData;\n\n        this.maskData.decoding.forEach(maskKey => {\n            if (maskKey.filter) {\n                try {\n                    const regexp = new RegExp(maskKey.filter);\n                    this.filters.set(maskKey.key, regexp);\n                } catch (err) {\n                    this.onException(wrapError(err as Error, {\n                        level: 'error',\n                        additional: {\n                            key: maskKey.key\n                        }\n                    }));\n                }\n            }\n        });\n\n        this.destructedValue = this.maskData.pattern.split('').map(maskChar => {\n            const mappingItem = this.maskData.decoding.find(it => it.key === maskChar);\n\n            if (mappingItem) {\n                return new MaskCharDynamic(\n                    null,\n                    this.filters.get(mappingItem.key) as RegExp,\n                    mappingItem.placeholder\n                );\n            }\n\n            return new MaskCharStatic(maskChar);\n        });\n\n        if (previousRawValue !== null) {\n            this.overrideRawValue(previousRawValue);\n        }\n    }\n\n    overrideRawValue(newRawValue: string): void {\n        this.clearRange(0, this.destructedValue.length);\n\n        this.replaceChars(newRawValue, 0);\n\n        this.cursorPos = Math.min(this.cursorPos, this.value.length);\n    }\n\n    applyChangeFrom(newValue: string, position?: number): void {\n        const diff = textDiff(this.value, newValue);\n\n        if (position !== undefined) {\n            diff.start = Math.max(0, position - diff.added);\n        }\n\n        const tailStart = this.replaceBodyTail(diff, newValue);\n\n        this.calculateCursorPosition(diff, tailStart);\n    }\n\n    protected replaceBodyTail(diff: TextDiff, newValue: string): number {\n        const body = this.buildBodySubstring(diff, newValue);\n        const tail = this.buildTailSubstring(diff);\n\n        this.cleanup(diff);\n\n        const fehi = this.firstEmptyHolderIndex();\n\n        const maxShift = tail ? this.calculateMaxShift(tail, fehi) : undefined;\n\n        this.replaceChars(body, fehi, maxShift);\n\n        const tailStart = this.firstEmptyHolderIndex();\n\n        this.replaceChars(tail, tailStart);\n\n        return tailStart;\n    }\n\n    protected buildBodySubstring(diff: TextDiff, newValue: string): string {\n        return newValue.substring(diff.start, diff.start + diff.added);\n    }\n\n    protected buildTailSubstring(diff: TextDiff): string {\n        return this.collectValueRange(\n            diff.start + diff.removed,\n            this.destructedValue.length - 1\n        );\n    }\n\n    protected calculateMaxShift(str: string, start: number): number {\n        if (this.filters.size <= 1) {\n            let dynamicLeft = 0;\n            let index = start;\n\n            while (index < this.destructedValue.length) {\n                if (this.destructedValue[index] instanceof MaskCharDynamic) {\n                    ++dynamicLeft;\n                }\n                ++index;\n            }\n\n            return Math.max(0, dynamicLeft - str.length);\n        }\n\n        const initialInsertableSubstring = this.calculateInsertableSubstring(str, start);\n\n        let index = 0;\n\n        while (\n            index < this.destructedValue.length &&\n                initialInsertableSubstring === this.calculateInsertableSubstring(str, start + index)\n        ) {\n            ++index;\n        }\n\n        return Math.max(0, index - 1);\n    }\n\n    protected cleanup(diff: TextDiff): void {\n        if (diff.added === 0 && diff.removed === 1) {\n            let index = diff.start;\n\n            while (index >= 0) {\n                const maskChar = this.destructedValue[index];\n\n                if (maskChar instanceof MaskCharDynamic && maskChar.char !== null) {\n                    maskChar.char = null;\n\n                    break;\n                } else {\n                    --index;\n                }\n            }\n        }\n\n        this.clearRange(diff.start, this.destructedValue.length);\n    }\n\n    protected clearRange(start: number, end: number): void {\n        let index = start;\n\n        while (index < end && index < this.destructedValue.length) {\n            const holder = this.destructedValue[index];\n\n            if (holder instanceof MaskCharDynamic) {\n                holder.char = null;\n            }\n\n            ++index;\n        }\n    }\n\n    protected calculateCursorPosition(diff: TextDiff, tailStart: number) {\n        const fehi = this.firstEmptyHolderIndex();\n\n        let positionByDiff: number;\n        if (diff.start < fehi) {\n            positionByDiff = Math.min(this.firstHolderAfter(tailStart), this.value.length);\n        } else {\n            positionByDiff = fehi;\n        }\n\n        this.cursorPos = positionByDiff;\n    }\n\n    protected calculateInsertableSubstring(substring: string, start: number): string {\n        let str = '';\n\n        let index = start;\n\n        const moveToAndGetNextHolderFilter: () => RegExp | undefined = () => {\n            while (index < this.destructedValue.length && !(this.destructedValue[index] instanceof MaskCharDynamic)) {\n                ++index;\n            }\n\n            return (this.destructedValue[index] as MaskCharDynamic)?.filter;\n        };\n\n        substring.split('').forEach(char => {\n            const maskCharFilter = moveToAndGetNextHolderFilter();\n\n            if (maskCharFilter?.test(char)) {\n                str += char;\n                ++index;\n            }\n        });\n\n        return str;\n    }\n\n    protected collectValueRange(start: number, end: number): string {\n        let str = '';\n\n        let index = start;\n\n        while (index <= end) {\n            const maskChar = this.destructedValue[index];\n\n            if (maskChar instanceof MaskCharDynamic && maskChar.char !== null) {\n                str += maskChar.char;\n            }\n\n            ++index;\n        }\n\n        return str;\n    }\n\n    protected replaceChars(substring: string, start: number, count?: number): void {\n        let trimmedSubstring = this.calculateInsertableSubstring(substring, start);\n        if (count !== undefined) {\n            trimmedSubstring = trimmedSubstring.substring(0, count);\n        }\n\n        let index = start;\n\n        let insertableCharIndex = 0;\n\n        while (index < this.destructedValue.length && insertableCharIndex < trimmedSubstring.length) {\n            const maskChar = this.destructedValue[index];\n            const char = trimmedSubstring[insertableCharIndex];\n\n            if (maskChar instanceof MaskCharDynamic) {\n                maskChar.char = char;\n\n                ++insertableCharIndex;\n            }\n\n            ++index;\n        }\n    }\n\n    protected firstHolderAfter(start: number): number {\n        let index = start;\n\n        while (index < this.destructedValue.length) {\n            const holder = this.destructedValue[index];\n\n            if (holder instanceof MaskCharDynamic) {\n                break;\n            } else {\n                ++index;\n            }\n        }\n\n        return index;\n    }\n}\n","import type { LogError, WrappedError } from '../wrapError';\nimport { BaseInputMask, type MaskData } from './baseInputMask';\n\nexport class FixedLengthInputMask extends BaseInputMask {\n    constructor(initialMaskData: MaskData, private readonly logError: LogError) {\n        super(initialMaskData);\n    }\n\n    onException(exception: WrappedError) {\n        this.logError(exception);\n    }\n}\n","import type { LogError } from './wrapError';\nimport type { MaskData } from './mask/baseInputMask';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { FixedLengthInputMask as FixedLengthInputMaskType } from '../types/input';\nimport { FixedLengthInputMask } from './mask/fixedLengthInputMask';\n\nexport function updateFixedMask(\n    mask: MaybeMissing<FixedLengthInputMaskType>,\n    logError: LogError,\n    oldValue?: FixedLengthInputMask | null\n): FixedLengthInputMask | null {\n    if (\n        typeof mask.pattern === 'string' && Array.isArray(mask.pattern_elements) &&\n        mask.pattern_elements.every(it => it.key && typeof it.key === 'string')\n    ) {\n        const maskData: MaskData = {\n            pattern: mask.pattern,\n            alwaysVisible: Boolean(mask.always_visible),\n            decoding: mask.pattern_elements.map(it => ({\n                key: it.key as string,\n                filter: it.regex && typeof it.regex === 'string' ? it.regex : undefined,\n                placeholder: it.placeholder && typeof it.placeholder === 'string' ? it.placeholder : '_'\n            }))\n        };\n\n        if (oldValue) {\n            oldValue.updateMaskData(maskData);\n            return oldValue;\n        }\n        return new FixedLengthInputMask(maskData, logError);\n    }\n\n    return oldValue || null;\n}\n","import type { LogError, WrappedError } from '../wrapError';\nimport { BaseInputMask } from './baseInputMask';\nimport { type TextDiff, textDiff } from '../textDiff';\nimport { wrapError } from '../wrapError';\n\nexport class CurrencyInputMask extends BaseInputMask {\n    protected currencyFormatter = new Intl.NumberFormat();\n    protected decimalSeparator = '.';\n    protected localeDigits: Record<string, string> = {};\n    protected trimZeroRegExp = new RegExp('');\n\n    constructor(locale: string | undefined = undefined, private readonly logError: LogError) {\n        super({\n            pattern: '',\n            decoding: [],\n            alwaysVisible: false\n        });\n        this.initFormatter(locale);\n    }\n\n    updateCurrencyParams(locale?: string) {\n        const currentValue = this.parseFormat(this.rawValue) || 0;\n        this.initFormatter(locale);\n\n        const newValue = currentValue.toString().replace('.', this.decimalSeparator);\n\n        this.applyChangeFrom(newValue);\n    }\n\n    protected initFormatter(locale?: string): void {\n        try {\n            this.currencyFormatter = new Intl.NumberFormat(locale, {\n                minimumFractionDigits: 2,\n                maximumFractionDigits: 2\n            });\n            this.decimalSeparator = this.currencyFormatter.format(0)[1];\n            this.localeDigits = new Array(10).fill('').reduce((acc, _, i) => {\n                acc[i] = this.currencyFormatter.format(i)[0];\n                return acc;\n            }, {});\n            this.trimZeroRegExp = new RegExp(`^${this.localeDigits['0']}+`);\n        } catch (err) {\n            this.onException(wrapError(err as Error, {\n                level: 'error',\n                additional: {\n                    locale\n                }\n            }));\n        }\n    }\n\n    protected invalidateMaskDataForFormatted(forValue: number): void {\n        const formatted = this.currencyFormatter.format(forValue);\n        const pattern = this.formatPattern(formatted);\n        const decoding = [{\n            key: '#',\n            filter: `[${[...Object.values(this.localeDigits)].join('')}]`,\n            placeholder: this.localeDigits[0]\n        }, {\n            key: this.decimalSeparator,\n            filter: `[${this.decimalSeparator}]`,\n            placeholder: this.decimalSeparator\n        }];\n\n        this.updateMaskData({\n            pattern,\n            decoding,\n            alwaysVisible: this.maskData.alwaysVisible\n        }, false);\n    }\n\n    overrideRawValue(newRawValue: string): void {\n        const parsed = this.parseFormat(newRawValue) || 0;\n\n        this.invalidateMaskDataForFormatted(parsed);\n\n        super.overrideRawValue(newRawValue);\n    }\n\n    applyChangeFrom(newValue: string, position?: number): void {\n        const diff = textDiff(this.value, newValue);\n        const oldSeparatorIndex = this.value.lastIndexOf(this.decimalSeparator);\n        const newSeparatorIndex = newValue.lastIndexOf(this.decimalSeparator);\n        const needInvalidateMask =\n            oldSeparatorIndex !== newSeparatorIndex ||\n            (oldSeparatorIndex === -1 && newSeparatorIndex === -1);\n        const clearedValue = this.validFormat(newValue, diff);\n\n        this.cleanup(diff);\n\n        const rawValue = this.parseFormat(clearedValue) || 0;\n\n        if (needInvalidateMask) {\n            this.invalidateMaskDataForFormatted(rawValue);\n        }\n\n        this.replaceChars(clearedValue, 0);\n\n        if (this.value.length > diff.start && !this.isDigit(this.value[diff.start])) {\n            this.cursorPos = position ?? this.cursorPosition;\n        } else {\n            this.cursorPos = Math.abs(this.value.length - (newValue.length - (position ?? this.cursorPosition)));\n        }\n    }\n\n    protected parseFormat(value: string): number {\n        return parseFloat(\n            value.replace(/./g, char => {\n                const localeDigit = this.localeDigits[char];\n\n                if (localeDigit) {\n                    return localeDigit;\n                }\n\n                if (char === this.decimalSeparator) {\n                    return '.';\n                }\n\n                return '';\n            })\n        );\n    }\n\n    protected formatPattern(pattern: string): string {\n        let result = '';\n\n        for (const char of pattern) {\n            result += this.isDigit(char) ? '#' : char;\n        }\n\n        return result;\n    }\n\n    protected validFormat(value: string, diff: TextDiff): string {\n        if (!value) {\n            return '';\n        }\n\n        let separatorOutOfDiffIndex = -1;\n        let index = 0;\n\n        while (index < value.length) {\n            if (value[index] === this.decimalSeparator && !this.inDiff(diff, index)) {\n                separatorOutOfDiffIndex = index;\n                break;\n            }\n\n            index++;\n        }\n\n        let replaceCharInDiff = -1;\n\n        if (diff.added === 1 && diff.removed === 0 && [',', '.'].includes(value[diff.start])) {\n            replaceCharInDiff = diff.start;\n        }\n\n        const maxSeparatorOffset = this.currencyFormatter.resolvedOptions().maximumFractionDigits || 0;\n        let leftToInsert = maxSeparatorOffset;\n\n        if (separatorOutOfDiffIndex !== -1) {\n            index = separatorOutOfDiffIndex;\n\n            while (index < value.length) {\n                if (this.isDigit(value[index]) && !this.inDiff(diff, index)) {\n                    leftToInsert--;\n                }\n                index++;\n            }\n        } else {\n            let oldSeparatorLeft = false;\n\n            for (let i = 0; i < value.length; i++) {\n                const char = value[i];\n                if (char === this.decimalSeparator) {\n                    oldSeparatorLeft = true;\n                } else if (!this.inDiff(diff, i) && oldSeparatorLeft && this.isDigit(char)) {\n                    leftToInsert--;\n                }\n            }\n        }\n\n        const containsSeparator = value.includes(this.decimalSeparator) || replaceCharInDiff !== -1;\n        const result: string[] = [];\n\n        index = value.length - 1;\n        let separatorInserted = false;\n\n        while (index >= 0) {\n            const char = value[index];\n            const canInsertSeparator = result.length <= maxSeparatorOffset;\n\n            if (this.isDigit(char)) {\n                if (this.inDiff(diff, index) && !separatorInserted && containsSeparator) {\n                    if (leftToInsert > 0) {\n                        result.push(char);\n                        leftToInsert--;\n                    }\n                } else {\n                    result.push(char);\n                }\n            } else if (canInsertSeparator && separatorOutOfDiffIndex === -1 && index === replaceCharInDiff) {\n                result.push(this.decimalSeparator);\n                separatorInserted = true;\n            } else if (\n                canInsertSeparator &&\n                char === this.decimalSeparator &&\n                (separatorOutOfDiffIndex === index || separatorOutOfDiffIndex === -1)\n            ) {\n                result.push(this.decimalSeparator);\n\n                separatorInserted = true;\n                separatorOutOfDiffIndex = index;\n            }\n\n            index--;\n        }\n\n        return result.reverse().join('').replace(this.trimZeroRegExp, '');\n    }\n\n    protected inDiff(diff: TextDiff, index: number): boolean {\n        return diff.start <= index && index < diff.start + diff.added;\n    }\n\n    protected isDigit(char: string): boolean {\n        return Boolean(this.localeDigits[char]);\n    }\n\n    onException(exception: WrappedError) {\n        this.logError(exception);\n    }\n}\n","import type { MaybeMissing } from '../expressions/json';\nimport type { CurrencyInputMask as CurrencyInputMaskType } from '../types/input';\nimport { CurrencyInputMask } from './mask/currencyInputMask';\nimport type { LogError } from './wrapError';\n\nexport function updateCurrencyMask(\n    mask: MaybeMissing<CurrencyInputMaskType>,\n    logError: LogError,\n    oldValue?: CurrencyInputMask | null\n): CurrencyInputMask | null {\n    if (oldValue) {\n        oldValue.updateCurrencyParams(mask.locale);\n        return oldValue;\n    }\n    return new CurrencyInputMask(mask.locale, logError);\n}\n","import type { LogError, WrappedError } from '../wrapError';\nimport { BaseInputMask, MaskCharDynamic } from './baseInputMask';\nimport { textDiff } from '../textDiff';\nimport data from '../../../../../../shared_data/phone-masks.json';\n\nconst UNIVERSAL_MASK = '000000000000000';\nconst COUNTRY_CODE_END_MARKER = '*';\nconst EXTRA_NUMBERS = '00';\n\nconst DEFAULT_DECODING = [{\n    key: '0',\n    filter: '\\\\d',\n    placeholder: '_'\n}];\n\nexport class PhoneInputMask extends BaseInputMask {\n    protected decimalSeparator = '.';\n    protected localeDigits: Record<string, string> = {};\n    protected trimZeroRegExp = new RegExp('');\n\n    constructor(private readonly logError: LogError) {\n        super({\n            pattern: phoneMaskPattern(''),\n            decoding: DEFAULT_DECODING,\n            alwaysVisible: false\n        });\n    }\n\n    override overrideRawValue(newRawValue: string): void {\n        this.tryInvalidateMaskDataWith(newRawValue);\n        super.overrideRawValue(newRawValue);\n    }\n\n    override applyChangeFrom(newValue: string, position?: number): void {\n        const diff = textDiff(this.value, newValue);\n\n        if (position !== undefined) {\n            diff.start = Math.max(0, position - diff.added);\n        }\n\n        const oldRawValue = this.rawValue;\n\n        const tailStart = this.replaceBodyTail(diff, newValue);\n\n        const newRawValue = this.rawValue;\n        const newPattern = this.newMaskPatternFor(newRawValue);\n\n        if (newPattern == null) {\n            this.calculateCursorPosition(diff, tailStart);\n            return;\n        }\n\n        this.updateMaskDataWith(newPattern);\n        this.replaceChars(newRawValue, 0);\n\n        const rawValueDiff = textDiff(oldRawValue, newRawValue);\n        const dynamicDestination = rawValueDiff.start + rawValueDiff.added;\n        this.calculateCursorPositionBy(dynamicDestination);\n    }\n\n    private calculateCursorPositionBy(dynamicDestination: number): void {\n        let index = 0;\n        let dynamicCounter = 0;\n\n        while (index < this.destructedValue.length && dynamicCounter < dynamicDestination) {\n            if (this.destructedValue[index++] instanceof MaskCharDynamic) {\n                dynamicCounter++;\n            }\n        }\n\n        this.cursorPos = this.firstHolderAfter(index);\n    }\n\n    private tryInvalidateMaskDataWith(rawValue: string): void {\n        const newPattern = this.newMaskPatternFor(rawValue);\n        if (newPattern) {\n            this.updateMaskDataWith(newPattern);\n        }\n    }\n\n    private newMaskPatternFor(rawValue: string): string | null {\n        const newPattern = phoneMaskPattern(rawValue);\n        const currentPattern = this.maskData.pattern;\n        return newPattern !== currentPattern ? newPattern : null;\n    }\n\n    private updateMaskDataWith(newPattern: string) {\n        return this.updateMaskData({\n            pattern: newPattern,\n            decoding: DEFAULT_DECODING,\n            alwaysVisible: this.maskData.alwaysVisible\n        }, false);\n    }\n\n    onException(exception: WrappedError) {\n        this.logError(exception);\n    }\n}\n\nfunction resolveObject(obj: any) {\n    if ('$ref' in obj) {\n        return data.constants[obj.$ref.split('/').pop() as keyof typeof data.constants];\n    }\n    return obj;\n}\n\nfunction phoneMaskPattern(val: string): string {\n    if (!val) {\n        return UNIVERSAL_MASK;\n    }\n    let current: any = data.properties.value.default_value;\n    let countryCodeInd = 0;\n    while (!('value' in current)) {\n        if (countryCodeInd >= val.length) {\n            current = resolveObject(current[COUNTRY_CODE_END_MARKER]);\n            break;\n        }\n        const digit = val[countryCodeInd++];\n        current = resolveObject(current[digit in current ? digit : COUNTRY_CODE_END_MARKER]);\n    }\n    return current.value + EXTRA_NUMBERS;\n}\n","import { PhoneInputMask } from './mask/phoneInputMask';\nimport type { LogError } from './wrapError';\n\nexport function updatePhoneMask(\n    logError: LogError,\n    oldValue?: PhoneInputMask | null\n): PhoneInputMask | null {\n    if (oldValue) {\n        return oldValue;\n    }\n    return new PhoneInputMask(logError);\n}\n","<script lang=\"ts\" context=\"module\">\n    const isSupportInputMode = typeof document !== 'undefined' && 'inputMode' in document.createElement('input');\n\n    const KEYBOARD_MAP: Record<KeyboardType, string> = {\n        email: 'email',\n        number: 'number',\n        phone: 'tel',\n        single_line_text: 'text',\n        multi_line_text: 'text',\n        uri: 'url',\n        password: 'password'\n    };\n\n    const ALLOWED_BLOCKED_MULTILINE_KEYS = new Set([\n        'Backspace',\n        'Delete',\n        'Tab',\n        'ArrowLeft',\n        'ArrowRight',\n        'ArrowUp',\n        'ArrowDown',\n        'Home',\n        'End',\n        'Control',\n        'Shift',\n        'Alt',\n        'Command',\n        'Meta',\n        'Escape',\n    ]);\n</script>\n\n<script lang=\"ts\">\n    import { getContext, onDestroy, onMount, tick } from 'svelte';\n    import type { HTMLAttributes } from 'svelte/elements';\n\n    import css from './Input.module.css';\n\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivInputData, InputEnterKeyType, KeyboardType } from '../../types/input';\n    import type { EdgeInsets } from '../../types/edgeInserts';\n    import type { FixedLengthInputMask } from '../../utils/mask/fixedLengthInputMask';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { InputMask } from '../../types/input';\n    import type { AlignmentHorizontal } from '../../types/alignment';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { PhoneInputMask } from '../../utils/mask/phoneInputMask';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { ACTION_CTX, type ActionCtxValue } from '../../context/action';\n    import { genClassName } from '../../utils/genClassName';\n    import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n    import { wrapError } from '../../utils/wrapError';\n    import { correctColor } from '../../utils/correctColor';\n    import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n    import { correctFontWeight } from '../../utils/correctFontWeight';\n    import { isPositiveNumber } from '../../utils/isPositiveNumber';\n    import { isNumber } from '../../utils/isNumber';\n    import { createVariable } from '../../expressions/variable';\n    import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n    import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n    import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { updateFixedMask } from '../../utils/updateFixedMask';\n    import { BaseInputMask } from '../../utils/mask/baseInputMask';\n    import { updateCurrencyMask } from '../../utils/updateCurrencyMask';\n    import { CurrencyInputMask } from '../../utils/mask/currencyInputMask';\n    import { correctAlignmentHorizontal } from '../../utils/correctAlignmentHorizontal';\n    import { type AlignmentVerticalMapped, correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n    import { calcSelectionOffset, setSelectionOffset } from '../../utils/contenteditable';\n    import { correctBooleanInt } from '../../utils/correctBooleanInt';\n    import { filterEnabledActions } from '../../utils/filterEnabledActions';\n    import { updatePhoneMask } from '../../utils/updatePhoneMask';\n    import { composeAccessibilityDescription } from '../../utils/composeAccessibilityDescription';\n    import Outer from '../utilities/Outer.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivInputData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n    const actionCtx = getContext<ActionCtxValue>(ACTION_CTX);\n\n    const direction = rootCtx.direction;\n\n    let prevId: string | undefined;\n    let input: HTMLInputElement | HTMLSpanElement;\n    let isPressed = false;\n    let inputMask: BaseInputMask | null = null;\n    let value = '';\n    let contentEditableValue = '';\n    let hasError = false;\n    let hintColor = '';\n    let fontSize = 12;\n    let fontWeight: number | undefined = undefined;\n    let fontFamily = '';\n    let lineHeight: number | undefined = undefined;\n    let letterSpacing = '';\n    let textColor = '#000';\n    let highlightColor = '';\n    let alignmentHorizontal: AlignmentHorizontal = 'start';\n    let alignmentVertical: AlignmentVerticalMapped = 'center';\n    let keyboardType = 'multi_line_text';\n    let inputType = 'text';\n    let inputMode: HTMLAttributes<HTMLInputElement>['inputmode'] = undefined;\n    let maxHeight = '';\n    let selfPadding: EdgeInsets | null = null;\n    let padding = '';\n    let verticalPadding = '';\n    let description = '';\n    let isEnabled = true;\n    let maxLength = Infinity;\n    let autocapitalization: 'characters' | 'off' | 'on' | 'none' | 'sentences' | 'words' = 'off';\n    let enterKeyType: InputEnterKeyType = 'default';\n    let describedBy = '';\n    let mounted = false;\n    let validatorsFirstRun = true;\n    let selectionStart = 0;\n    let selectionEnd = 0;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        hintColor = '';\n        fontSize = 12;\n        fontWeight = undefined;\n        fontFamily = '';\n        lineHeight = undefined;\n        textColor = '#000';\n        highlightColor = '';\n        alignmentHorizontal = 'left';\n        alignmentVertical = 'center';\n        keyboardType = 'multi_line_text';\n        inputType = 'text';\n        inputMode = undefined;\n        isEnabled = true;\n        maxLength = Infinity;\n        autocapitalization = 'off';\n        enterKeyType = 'default';\n        describedBy = '';\n        selectionStart = 0;\n        selectionEnd = 0;\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: variable = componentContext.json.text_variable;\n    $: rawVariable = componentContext.json.mask?.raw_text_variable;\n\n    $: valueVariable = variable && componentContext.getVariable(variable, 'string') || createVariable('temp', 'string', '');\n    $: rawValueVariable = rawVariable && componentContext.getVariable(rawVariable, 'string') || createVariable('temp', 'string', '');\n\n    $: jsonHintText = componentContext.getDerivedFromVars(componentContext.json.hint_text);\n    $: jsonHintColor = componentContext.getDerivedFromVars(componentContext.json.hint_color);\n    $: jsonFontSize = componentContext.getDerivedFromVars(componentContext.json.font_size);\n    $: jsonFontWeight = componentContext.getDerivedFromVars(componentContext.json.font_weight);\n    $: jsonFontWeightValue = componentContext.getDerivedFromVars(componentContext.json.font_weight_value);\n    $: jsonFontFamily = componentContext.getDerivedFromVars(componentContext.json.font_family);\n    $: jsonLineHeight = componentContext.getDerivedFromVars(componentContext.json.line_height);\n    $: jsonLetterSpacing = componentContext.getDerivedFromVars(componentContext.json.letter_spacing);\n    $: jsonTextColor = componentContext.getDerivedFromVars(componentContext.json.text_color);\n    $: jsonHighlightColor = componentContext.getDerivedFromVars(componentContext.json.highlight_color);\n    $: jsonAlignmentHorizontal = componentContext.getDerivedFromVars(componentContext.json.text_alignment_horizontal);\n    $: jsonAlignmentVertical = componentContext.getDerivedFromVars(componentContext.json.text_alignment_vertical);\n    $: jsonKeyboardType = componentContext.getDerivedFromVars(componentContext.json.keyboard_type);\n    $: jsonMask = componentContext.getDerivedFromVars(componentContext.json.mask);\n    $: jsonVisibleMaxLines = componentContext.getDerivedFromVars(componentContext.json.max_visible_lines);\n    $: jsonPaddings = componentContext.getDerivedFromVars(componentContext.json.paddings);\n    $: jsonAccessibility = componentContext.getDerivedFromVars(componentContext.json.accessibility);\n    $: jsonSelectAll = componentContext.getDerivedFromVars(componentContext.json.select_all_on_focus);\n    $: jsonIsEnabled = componentContext.getDerivedFromVars(componentContext.json.is_enabled);\n    $: jsonMaxLength = componentContext.getDerivedFromVars(componentContext.json.max_length);\n    $: jsonAutocapitalization = componentContext.getDerivedFromVars(componentContext.json.autocapitalization);\n    $: jsonEnterKeyType = componentContext.getDerivedFromVars(componentContext.json.enter_key_type);\n    $: jsonValidators = componentContext.getDerivedFromVars(componentContext.json.validators);\n    $: jsonFilters = componentContext.getDerivedFromVars(componentContext.json.filters);\n\n    $: {\n        let newHasError = false;\n\n        if (!variable) {\n            hasError = true;\n            componentContext.logError(wrapError(new Error('Missing \"text_variable\" in \"input\"')));\n        } else if (actionCtx.hasAction() || $jsonAccessibility?.mode === 'exclude') {\n            newHasError = true;\n            componentContext.logError(wrapError(new Error('Cannot show \"input\" inside component with an action or inside accessibility mode=exclude')));\n        }\n\n        if (hasError !== newHasError) {\n            hasError = newHasError;\n        }\n    }\n\n    function updateMaskData(mask: MaybeMissing<InputMask> | undefined): void {\n        if (mask?.type === 'fixed_length') {\n            inputMask = updateFixedMask(mask, componentContext.logError, inputMask as FixedLengthInputMask);\n        } else if (mask?.type === 'currency') {\n            inputMask = updateCurrencyMask(mask, componentContext.logError, inputMask as CurrencyInputMask);\n        } else if (mask?.type === 'phone') {\n            inputMask = updatePhoneMask(componentContext.logError, inputMask as PhoneInputMask);\n        }\n\n        if (inputMask) {\n            runRawValueMask();\n        }\n    }\n    $: updateMaskData($jsonMask);\n\n    $: if (!inputMask && value !== $valueVariable) {\n        let val = $valueVariable;\n        if (val.length > maxLength) {\n            val = val.slice(0, maxLength);\n            valueVariable.setValue(val);\n        }\n        value = contentEditableValue = val;\n        runValidators();\n    }\n\n    $: if (inputMask && inputMask.rawValue !== $rawValueVariable) {\n        runRawValueMask();\n        runValidators();\n    }\n\n    $: if ($jsonValidators && mounted) {\n        runValidators();\n    }\n\n    $: placeholder = $jsonHintText;\n\n    $: {\n        hintColor = correctColor($jsonHintColor, 1, hintColor);\n    }\n\n    $: {\n        fontSize = correctPositiveNumber($jsonFontSize, fontSize);\n    }\n\n    $: {\n        fontWeight = correctFontWeight($jsonFontWeight, $jsonFontWeightValue, fontWeight);\n        if ($jsonFontFamily && typeof $jsonFontFamily === 'string') {\n            fontFamily = rootCtx.typefaceProvider($jsonFontFamily, {\n                fontWeight: fontWeight || 400\n            });\n        } else {\n            fontFamily = '';\n        }\n    }\n\n    $: {\n        const val = $jsonLineHeight;\n        if (isPositiveNumber(val)) {\n            lineHeight = val / fontSize;\n        }\n    }\n\n    $: {\n        if (isNumber($jsonLetterSpacing)) {\n            letterSpacing = pxToEm($jsonLetterSpacing);\n        }\n    }\n\n    $: {\n        textColor = correctColor($jsonTextColor, 1, textColor);\n    }\n\n    $: {\n        highlightColor = correctColor($jsonHighlightColor, 1, highlightColor);\n    }\n\n    $: {\n        alignmentHorizontal = correctAlignmentHorizontal($jsonAlignmentHorizontal, $direction, alignmentHorizontal);\n    }\n\n    $: {\n        alignmentVertical = correctAlignmentVertical($jsonAlignmentVertical, alignmentVertical);\n    }\n\n    $: {\n        isEnabled = correctBooleanInt($jsonIsEnabled, isEnabled);\n    }\n\n    $: {\n        maxLength = correctPositiveNumber($jsonMaxLength, maxLength);\n    }\n\n    $: {\n        if ($jsonKeyboardType && $jsonKeyboardType in KEYBOARD_MAP) {\n            inputType = KEYBOARD_MAP[$jsonKeyboardType as KeyboardType];\n            keyboardType = $jsonKeyboardType;\n        }\n\n        if ($jsonMask?.type === 'currency') {\n            inputType = isSupportInputMode ? 'text' : 'tel';\n            inputMode = 'decimal';\n        } else if (keyboardType === 'number') {\n            inputMode = 'decimal';\n        } else {\n            inputMode = undefined;\n        }\n    }\n\n    $: isMultiline = keyboardType === 'multi_line_text';\n\n    $: {\n        if (isPositiveNumber($jsonVisibleMaxLines)) {\n            maxHeight = `calc(${$jsonVisibleMaxLines * (lineHeight || 1.25) * (fontSize / 10) + 'em'} + ${pxToEmWithUnits(correctNonNegativeNumber($jsonPaddings?.top, 0) + correctNonNegativeNumber($jsonPaddings?.bottom, 0))})`;\n        } else {\n            maxHeight = '';\n        }\n        selfPadding = correctEdgeInsertsObject(($jsonPaddings) ? $jsonPaddings : undefined, selfPadding);\n        padding = selfPadding ? edgeInsertsToCss({\n            top: (Number(selfPadding.top) || 0) / fontSize * 10,\n            right: (Number($direction === 'ltr' ? selfPadding.end : selfPadding.start) || Number(selfPadding.right) || 0) / fontSize * 10,\n            bottom: (Number(selfPadding.bottom) || 0) / fontSize * 10,\n            left: (Number($direction === 'ltr' ? selfPadding.start : selfPadding.end) || Number(selfPadding.left) || 0) / fontSize * 10\n        }, $direction) : '';\n        verticalPadding = selfPadding ? edgeInsertsToCss({\n            top: (Number(selfPadding.top) || 0) / fontSize * 10,\n            bottom: (Number(selfPadding.bottom) || 0) / fontSize * 10\n        }, $direction) : '';\n    }\n\n    $: if ($jsonAutocapitalization === 'all_characters') {\n        autocapitalization = 'characters';\n    } else if ($jsonAutocapitalization === 'sentences') {\n        autocapitalization = 'sentences';\n    } else if ($jsonAutocapitalization === 'words') {\n        autocapitalization = 'words';\n    } else if ($jsonAutocapitalization === 'none' || $jsonAutocapitalization === 'auto') {\n        autocapitalization = 'off';\n    }\n\n    $: if ($jsonAccessibility?.description) {\n        description = composeAccessibilityDescription($jsonAccessibility);\n    } else {\n        componentContext.logError(wrapError(new Error('Missing accessibility \"description\" for input'), {\n            level: 'warn'\n        }));\n    }\n\n    $: if (\n        $jsonEnterKeyType === 'default' || $jsonEnterKeyType === 'done' || $jsonEnterKeyType === 'go' ||\n        $jsonEnterKeyType === 'search' || $jsonEnterKeyType === 'send'\n    ) {\n        enterKeyType = $jsonEnterKeyType;\n    }\n\n    $: mods = {\n        'highlight-color': Boolean(highlightColor),\n        multiline: isMultiline,\n        'alignment-horizontal': alignmentHorizontal,\n        'alignment-vertical': alignmentVertical\n    };\n    $: stl = {\n        '--divkit-input-hint-color': hintColor,\n        '--divkit-input-highlight-color': highlightColor,\n        '--divkit-input-line-height': lineHeight,\n        'font-weight': fontWeight,\n        'font-family': fontFamily,\n        'letter-spacing': letterSpacing,\n        color: textColor,\n        'max-height': maxHeight\n    };\n    $: paddingStl = {\n        'font-size': pxToEm(fontSize),\n        padding\n    };\n    $: verticalPaddingStl = {\n        'font-size': pxToEm(fontSize),\n        padding: verticalPadding\n    };\n\n    function checkFilters(val: string): boolean {\n        if (!Array.isArray($jsonFilters) || !val) {\n            return true;\n        }\n\n        for (const filter of $jsonFilters) {\n            if (!filter) {\n                continue;\n            }\n            if (filter.type === 'regex') {\n                try {\n                    const re = new RegExp('^' + (filter.pattern || '') + '$');\n                    if (!re.test(val)) {\n                        return false;\n                    }\n                } catch (err) {\n                    componentContext.logError(wrapError(new Error('Failed to create a regex'), {\n                        additional: {\n                            originalError: String(err)\n                        }\n                    }));\n                    return true;\n                }\n            } else if (filter.type === 'expression') {\n                if (!filter.condition) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n\n    function onInput(event: Event): void {\n        const input = event.target;\n        let val = (isMultiline ?\n            (input as HTMLDivElement).innerText :\n            (input as HTMLInputElement).value\n        ) || '';\n\n        if (val === '\\n') {\n            val = '';\n        }\n\n        if (val.length > maxLength) {\n            val = contentEditableValue = value;\n            if (input instanceof HTMLInputElement) {\n                input.value = val;\n            }\n        }\n\n        if (value !== val) {\n            if (checkFilters(val)) {\n                value = contentEditableValue = val;\n                valueVariable.setValue(val);\n                if (inputMask) {\n                    runValueMask();\n                }\n                runValidators();\n            } else {\n                value = contentEditableValue = val;\n                if (input instanceof HTMLInputElement) {\n                    input.value = val;\n                }\n                tick().then(() => {\n                    setCursorPosition(selectionStart, selectionEnd);\n                });\n            }\n        }\n    }\n\n    function blockOverflow(event: KeyboardEvent): void {\n        if (\n            value.length >= maxLength &&\n            !ALLOWED_BLOCKED_MULTILINE_KEYS.has(event.key) &&\n            !(event.ctrlKey || event.altKey || event.metaKey)\n        ) {\n            event.preventDefault();\n        }\n    }\n\n    function onKeyDown(event: KeyboardEvent): void {\n        selectionStart = getSelectionStart() || 0;\n        selectionEnd = getSelectionEnd() || 0;\n\n        if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) {\n            return;\n        }\n\n        const actions = componentContext.json.enter_key_actions;\n        if (event.key === 'Enter' && Array.isArray(actions) && actions.length) {\n            const evalledActions = componentContext.getJsonWithVars(actions);\n            const filteredActions = evalledActions.filter(action => action.log_id).filter(filterEnabledActions);\n            event.preventDefault();\n            componentContext.execAnyActions(filteredActions);\n        }\n    }\n\n    function onPaste(event: ClipboardEvent): void {\n        event.preventDefault();\n        if (event.clipboardData) {\n            let text = event.clipboardData.getData('text/plain');\n            text = text.trim();\n            document.execCommand('inserttext', false, text);\n        }\n    }\n\n    // Handle text selection\n    function onMousedown() {\n        isPressed = false;\n\n        setTimeout(() => {\n            isPressed = true;\n        }, 250);\n    }\n\n    function onClick() {\n        if (!isPressed) {\n            if (input instanceof HTMLInputElement) {\n                input.select();\n            } else {\n                const selection = window.getSelection();\n                const range = document.createRange();\n                range.selectNodeContents(input);\n                if (selection) {\n                    selection.removeAllRanges();\n                    selection.addRange(range);\n                }\n            }\n        }\n    }\n\n    function getSelectionStart(): number | undefined {\n        if (input instanceof HTMLInputElement) {\n            return input.selectionStart === null ? undefined : input.selectionStart;\n        }\n\n        return calcSelectionOffset(input, 'start');\n    }\n\n    function getSelectionEnd(): number | undefined {\n        if (input instanceof HTMLInputElement) {\n            return input.selectionEnd === null ? undefined : input.selectionEnd;\n        }\n\n        return calcSelectionOffset(input, 'end');\n    }\n\n    function setCursorPosition(start: number, end: number): void {\n        if (input instanceof HTMLInputElement) {\n            input.selectionStart = start;\n            input.selectionEnd = end;\n        } else {\n            const sel = window.getSelection();\n            if (sel) {\n                sel.removeAllRanges();\n                const range = document.createRange();\n                setSelectionOffset(input, range, 'start', start);\n                setSelectionOffset(input, range, 'end', end);\n                sel.addRange(range);\n            }\n        }\n    }\n\n    async function runValueMask(): Promise<void> {\n        if (!input || !inputMask) {\n            return;\n        }\n\n        const start = getSelectionStart() || 0;\n        const end = getSelectionEnd() || 0;\n\n        inputMask.applyChangeFrom(value, end === start ? end : 0);\n\n        rawValueVariable.set(inputMask.rawValue);\n        $valueVariable = value = contentEditableValue = inputMask.value;\n        const cursorPosition = inputMask.cursorPosition;\n\n        await tick();\n\n        if (document.activeElement === input) {\n            setCursorPosition(cursorPosition, cursorPosition);\n        }\n    }\n\n    async function runRawValueMask(): Promise<void> {\n        if (!input || !inputMask) {\n            return;\n        }\n\n        inputMask.overrideRawValue($rawValueVariable);\n\n        rawValueVariable.set(inputMask.rawValue);\n        $valueVariable = value = contentEditableValue = inputMask.value;\n        const cursorPosition = inputMask.cursorPosition;\n\n        await tick();\n\n        if (document.activeElement === input) {\n            setCursorPosition(cursorPosition, cursorPosition);\n        }\n    }\n\n    function runValidators(): void {\n        const isFirstRun = validatorsFirstRun;\n        validatorsFirstRun = false;\n\n        const validators = componentContext.json.validators;\n        if (!Array.isArray(validators) || !validators.length) {\n            return;\n        }\n\n        const evalledValidators = componentContext.getJsonWithVars(validators);\n        const filtered = evalledValidators.filter(it => (it.type === 'regex' || it.type === 'expression') && it.label_id && it.variable);\n        const describeList: string[] = [];\n\n        filtered.forEach(validator => {\n            const variable = componentContext.getVariable(validator.variable as string);\n            if (!variable) {\n                return;\n            }\n\n            if (variable.getType() !== 'boolean') {\n                if (isFirstRun) {\n                    componentContext.logError(wrapError(new Error('Incorrect variable type for the validator'), {\n                        additional: {\n                            variable: validator.variable\n                        }\n                    }));\n                }\n                return;\n            }\n\n            let isValid = false;\n            if (value === '' && (validator.allow_empty === true || validator.allow_empty === 1)) {\n                isValid = true;\n            } else if (validator.type === 'regex') {\n                if (!validator.pattern || typeof validator.pattern !== 'string') {\n                    return;\n                }\n                try {\n                    const re = new RegExp('^' + validator.pattern + '$');\n                    isValid = re.test(value);\n                } catch (err) {\n                    if (isFirstRun) {\n                        componentContext.logError(wrapError(new Error('Failed to create a regular expression using the validator pattern'), {\n                            additional: {\n                                pattern: validator.pattern\n                            }\n                        }));\n                    }\n                    return;\n                }\n            } else if (validator.type === 'expression') {\n                isValid = validator.condition === true || validator.condition === 1;\n            } else {\n                return;\n            }\n\n            variable.setValue(isValid);\n\n            if (!isValid) {\n                const htmlId = rootCtx.getComponentId(validator.label_id as string);\n                if (htmlId) {\n                    describeList.push(htmlId);\n                }\n            }\n        });\n        describedBy = describeList.join(' ');\n    }\n\n    $: if (input && componentContext.json) {\n        if (prevId) {\n            rootCtx.unregisterFocusable(prevId);\n            prevId = undefined;\n        }\n\n        if (componentContext.id && !componentContext.fakeElement) {\n            prevId = componentContext.id;\n            rootCtx.registerFocusable(prevId, {\n                focus() {\n                    if (input) {\n                        input.focus();\n                        setCursorPosition(value.length, value.length);\n                    }\n                }\n            });\n        }\n    }\n\n    onMount(() => {\n        mounted = true;\n\n        if (input && inputMask) {\n            if ($rawValueVariable) {\n                inputMask.overrideRawValue($rawValueVariable);\n                $valueVariable = value = contentEditableValue = inputMask.value;\n            }\n        }\n    });\n\n    onDestroy(() => {\n        mounted = false;\n\n        if (prevId) {\n            rootCtx.unregisterFocusable(prevId);\n            prevId = undefined;\n        }\n    });\n</script>\n\n{#if !hasError}\n    <Outer\n        let:focusHandler\n        let:blurHandler\n        let:hasCustomFocus\n        cls={genClassName('input', css, mods)}\n        style={stl}\n        customDescription={true}\n        customActions={'input'}\n        customPaddings={true}\n        hasInnerFocusable={true}\n        {componentContext}\n        {layoutParams}\n    >\n        {#if isMultiline}\n            <span class={css['input__scroll-wrapper']}>\n                {#if !contentEditableValue && placeholder}\n                    <div\n                        class={css.input__placeholder}\n                        aria-hidden=\"true\"\n                        style={makeStyle(paddingStl)}\n                    >\n                        {placeholder}\n                    </div>\n                {/if}\n\n                <!-- zero-width space, so other baseline-elements could be aligned without value -->\n                <span\n                    class={css.input__aligner}\n                    aria-hidden=\"true\"\n                    style={makeStyle(verticalPaddingStl)}\n                >​</span>\n\n                {#if isEnabled}\n                    <span\n                        bind:this={input}\n                        class={genClassName('input__input', css, { 'has-custom-focus': hasCustomFocus, multiline: true })}\n                        autocapitalize={autocapitalization}\n                        contenteditable=\"true\"\n                        role=\"textbox\"\n                        tabindex=\"0\"\n                        aria-label={description}\n                        aria-multiline=\"true\"\n                        enterkeyhint={enterKeyType === 'default' ? undefined : enterKeyType}\n                        aria-describedby={describedBy || undefined}\n                        style={makeStyle(paddingStl)}\n                        bind:innerText={contentEditableValue}\n                        on:input={onInput}\n                        on:keydown={blockOverflow}\n                        on:keydown={onKeyDown}\n                        on:paste={onPaste}\n                        on:mousedown={$jsonSelectAll ? onMousedown : undefined}\n                        on:click={$jsonSelectAll ? onClick : undefined}\n                        on:focus={focusHandler}\n                        on:blur={blurHandler}\n                    >\n                    </span>\n                {:else}\n                    <span\n                        bind:this={input}\n                        class={genClassName('input__input', css, { multiline: true })}\n                        autocapitalize={autocapitalization}\n                        contenteditable=\"false\"\n                        role=\"textbox\"\n                        aria-label={description}\n                        aria-disabled=\"true\"\n                        aria-multiline=\"true\"\n                        aria-describedby={describedBy || undefined}\n                        style={makeStyle(paddingStl)}\n                        bind:innerText={contentEditableValue}\n                    >\n                    </span>\n                {/if}\n            </span>\n        {:else}\n            <input\n                bind:this={input}\n                type={inputType}\n                inputmode={inputMode}\n                class={genClassName('input__input', css, { 'has-custom-focus': hasCustomFocus, singleline: true })}\n                autocomplete=\"off\"\n                autocapitalize={autocapitalization}\n                aria-label={description}\n                aria-describedby={describedBy || undefined}\n                style={makeStyle(paddingStl)}\n                disabled={!isEnabled}\n                maxlength={maxLength === Infinity ? undefined : maxLength}\n                {placeholder}\n                {value}\n                enterkeyhint={enterKeyType === 'default' ? undefined : enterKeyType}\n                on:input={onInput}\n                on:keydown={onKeyDown}\n                on:mousedown={$jsonSelectAll ? onMousedown : undefined}\n                on:click={$jsonSelectAll ? onClick : undefined}\n                on:focus={focusHandler}\n                on:blur={blurHandler}\n            >\n        {/if}\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","<script lang=\"ts\">\n    import { getContext, onDestroy } from 'svelte';\n\n    import css from './Select.module.css';\n\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { DivSelectData } from '../../types/select';\n    import type { EdgeInsets } from '../../types/edgeInserts';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { ACTION_CTX, type ActionCtxValue } from '../../context/action';\n    import { genClassName } from '../../utils/genClassName';\n    import { pxToEm } from '../../utils/pxToEm';\n    import { wrapError } from '../../utils/wrapError';\n    import { correctColor } from '../../utils/correctColor';\n    import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n    import { correctFontWeight } from '../../utils/correctFontWeight';\n    import { isPositiveNumber } from '../../utils/isPositiveNumber';\n    import { isNumber } from '../../utils/isNumber';\n    import { createVariable } from '../../expressions/variable';\n    import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n    import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { composeAccessibilityDescription } from '../../utils/composeAccessibilityDescription';\n    import Outer from '../utilities/Outer.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivSelectData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n    const actionCtx = getContext<ActionCtxValue>(ACTION_CTX);\n\n    const direction = rootCtx.direction;\n\n    let prevId: string | undefined;\n    let select: HTMLSelectElement;\n    let hasError = false;\n    let selectText = '';\n    let selfPadding: EdgeInsets | null = null;\n    let padding = '';\n    let hintColor = 'rgba(0,0,0,.45)';\n    let fontSize = 12;\n    let fontWeight: number | undefined = undefined;\n    let fontFamily = '';\n    let lineHeight: number | undefined = undefined;\n    let letterSpacing = '';\n    let textColor = '#000';\n    let description = '';\n    let prevWarnValue: string | undefined;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        selfPadding = null;\n        hintColor = 'rgba(0,0,0,.45)';\n        fontSize = 12;\n        fontWeight = undefined;\n        fontFamily = '';\n        lineHeight = undefined;\n        letterSpacing = '';\n        textColor = '#000';\n        description = '';\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: variable = componentContext.json.value_variable;\n    $: items = componentContext.json.options;\n    $: filteredItems = Array.isArray(items) && items.filter(it => typeof it.value === 'string') || [];\n\n    $: valueVariable = variable && componentContext.getVariable(variable, 'string') || createVariable('temp', 'string', '');\n\n    $: jsonPaddings = componentContext.getDerivedFromVars(componentContext.json.paddings);\n    $: jsonHintText = componentContext.getDerivedFromVars(componentContext.json.hint_text);\n    $: jsonHintColor = componentContext.getDerivedFromVars(componentContext.json.hint_color);\n    $: jsonFontSize = componentContext.getDerivedFromVars(componentContext.json.font_size);\n    $: jsonFontWeight = componentContext.getDerivedFromVars(componentContext.json.font_weight);\n    $: jsonFontWeightValue = componentContext.getDerivedFromVars(componentContext.json.font_weight_value);\n    $: jsonFontFamily = componentContext.getDerivedFromVars(componentContext.json.font_family);\n    $: jsonLineHeight = componentContext.getDerivedFromVars(componentContext.json.line_height);\n    $: jsonLetterSpacing = componentContext.getDerivedFromVars(componentContext.json.letter_spacing);\n    $: jsonTextColor = componentContext.getDerivedFromVars(componentContext.json.text_color);\n    $: jsonAccessibility = componentContext.getDerivedFromVars(componentContext.json.accessibility);\n\n    $: if (!(Array.isArray(filteredItems) && filteredItems.length)) {\n        componentContext.logError(wrapError(new Error('Empty selection \"items\" in \"select\"')));\n    }\n\n    $: {\n        let newHasError = false;\n\n        if (!variable) {\n            hasError = true;\n            componentContext.logError(wrapError(new Error('Missing \"value_variable\" in \"select\"')));\n        } else if (actionCtx.hasAction() || $jsonAccessibility?.mode === 'exclude') {\n            newHasError = true;\n            componentContext.logError(wrapError(new Error('Cannot show \"select\" inside component with an action or inside accessibility mode=exclude')));\n        }\n\n        if (hasError !== newHasError) {\n            hasError = newHasError;\n        }\n    }\n\n    $: {\n        const item = filteredItems.find(it => {\n            return it.value === $valueVariable;\n        });\n        if (item) {\n            selectText = (typeof item.text === 'string' ? item.text : item.value) || '';\n        } else {\n            selectText = '';\n            if ($valueVariable && prevWarnValue !== $valueVariable) {\n                prevWarnValue = $valueVariable;\n                componentContext.logError(wrapError(new Error('Value from the variable was not found in the selection items for \"select\"')));\n            }\n        }\n    }\n\n    $: {\n        selfPadding = correctEdgeInsertsObject(($jsonPaddings) ? $jsonPaddings : undefined, selfPadding);\n        padding = selfPadding ? edgeInsertsToCss({\n            top: (Number(selfPadding.top) || 0) / fontSize * 10,\n            right: (Number($direction === 'ltr' ? selfPadding.end : selfPadding.start) || Number(selfPadding.right) || 0) / fontSize * 10,\n            bottom: (Number(selfPadding.bottom) || 0) / fontSize * 10,\n            left: (Number($direction === 'ltr' ? selfPadding.start : selfPadding.end) || Number(selfPadding.left) || 0) / fontSize * 10\n        }, $direction) : '';\n    }\n\n    $: {\n        hintColor = correctColor($jsonHintColor, 1, hintColor);\n    }\n\n    $: {\n        fontSize = correctPositiveNumber($jsonFontSize, fontSize);\n    }\n\n    $: {\n        fontWeight = correctFontWeight($jsonFontWeight, $jsonFontWeightValue, fontWeight);\n        if ($jsonFontFamily && typeof $jsonFontFamily === 'string') {\n            fontFamily = rootCtx.typefaceProvider($jsonFontFamily, {\n                fontWeight: fontWeight || 400\n            });\n        } else {\n            fontFamily = '';\n        }\n    }\n\n    $: {\n        const val = $jsonLineHeight;\n        if (isPositiveNumber(val)) {\n            lineHeight = val / fontSize;\n        }\n    }\n\n    $: {\n        if (isNumber($jsonLetterSpacing)) {\n            letterSpacing = pxToEm($jsonLetterSpacing / fontSize * 10);\n        }\n    }\n\n    $: {\n        textColor = correctColor($jsonTextColor, 1, textColor);\n    }\n\n    $: if ($jsonAccessibility?.description) {\n        description = composeAccessibilityDescription($jsonAccessibility);\n    } else {\n        componentContext.logError(wrapError(new Error('Missing accessibility \"description\" for select'), {\n            level: 'warn'\n        }));\n    }\n\n    $: mods = {\n        hint: !selectText\n    };\n    $: stl = {\n        '--divkit-input-hint-color': hintColor,\n        'font-weight': fontWeight,\n        'font-family': fontFamily,\n        color: textColor\n    };\n    $: innerStl = {\n        padding,\n        'font-size': pxToEm(fontSize),\n        'line-height': lineHeight,\n        'letter-spacing': letterSpacing\n    };\n    $: selectStl = {\n        'font-size': pxToEm(fontSize),\n        'line-height': lineHeight,\n        'letter-spacing': letterSpacing\n    };\n\n    $: if (componentContext.json && select) {\n        if (prevId) {\n            rootCtx.unregisterFocusable(prevId);\n            prevId = undefined;\n        }\n\n        if (componentContext.id && !componentContext.fakeElement) {\n            prevId = componentContext.id;\n            rootCtx.registerFocusable(prevId, {\n                focus() {\n                    if (select) {\n                        select.focus();\n                    }\n                }\n            });\n        }\n    }\n\n    onDestroy(() => {\n        if (prevId) {\n            rootCtx.unregisterFocusable(prevId);\n            prevId = undefined;\n        }\n    });\n</script>\n\n{#if !hasError}\n    <Outer\n        let:hasCustomFocus\n        let:focusHandler\n        let:blurHandler\n        cls={genClassName('select', css, mods)}\n        style={stl}\n        customDescription={true}\n        customActions={'select'}\n        customPaddings={true}\n        hasInnerFocusable={true}\n        {componentContext}\n        {layoutParams}\n    >\n        <span class={css['select__select-text']} style={makeStyle(innerStl)} aria-hidden=\"true\">\n            <!--Space holder should have height even it has no value-->\n            {selectText || $jsonHintText || '​'}\n        </span>\n\n        <select\n            class={genClassName('select__select', css, { 'has-custom-focus': hasCustomFocus })}\n            aria-label={description}\n            bind:this={select}\n            bind:value={$valueVariable}\n            style={makeStyle(selectStl)}\n            on:focus={focusHandler}\n            on:blur={blurHandler}\n        >\n            {#each filteredItems as item}\n                <option class={css.select__option} value={item.value}>{item.text || item.value}</option>\n            {/each}\n        </select>\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","import type { VideoSource } from '../../typings/common';\nimport type { MaybeMissing } from '../expressions/json';\n\nexport interface PreparedVideoSource {\n    src: string;\n    type?: string;\n}\n\nexport function correctVideoSource(\n    data: MaybeMissing<VideoSource>[] | undefined,\n    defaultValue: PreparedVideoSource[]\n): PreparedVideoSource[] {\n    if (Array.isArray(data) && data.length) {\n        return data.filter(it => {\n            return it?.type === 'video_source' && typeof it.url === 'string' && typeof it.mime_type === 'string';\n        }).map(it => {\n            const res: PreparedVideoSource = {\n                src: it.url as string\n            };\n\n            if (it.mime_type) {\n                res.type = it.mime_type;\n            }\n\n            return res;\n        });\n    }\n\n    return defaultValue;\n}\n","import type { VideoScale } from '../../typings/common';\n\nexport function videoSize(scale?: VideoScale): string {\n    if (scale === 'fill') {\n        return 'cover';\n    /* } else if (scale === 'stretch') {\n        return 'fill'; */\n    } else if (scale === 'no_scale') {\n        return 'none';\n    }\n\n    // 'fit' and default\n    return 'contain';\n}\n","<script lang=\"ts\">\n    import { getContext, onDestroy, onMount } from 'svelte';\n    import type { Unsubscriber } from 'svelte/store';\n\n    import css from './Video.module.css';\n\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivVideoData, VideoElements } from '../../types/video';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { VideoPlayerInstance, VideoPlayerProviderClient, VideoPlayerProviderData, VideoPlayerProviderServer, VideoSource } from '../../../typings/common';\n    import type { MaybeMissing } from '../../expressions/json';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { wrapError } from '../../utils/wrapError';\n    import { createVariable } from '../../expressions/variable';\n    import { type PreparedVideoSource, correctVideoSource } from '../../utils/correctVideoSource';\n    import { correctBooleanInt } from '../../utils/correctBooleanInt';\n    import Outer from '../utilities/Outer.svelte';\n    import { prepareBase64 } from '../../utils/prepareBase64';\n    import { videoSize } from '../../utils/video';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { isPositiveNumber } from '../../utils/isPositiveNumber';\n    import { genClassName } from '../../utils/genClassName';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivVideoData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n    const videoPlayerProvider = rootCtx.videoPlayerProvider;\n\n    let prevId: string | undefined;\n    let hasError = false;\n    let isSelfVariableSet = false;\n    let videoElem: HTMLVideoElement;\n    let videoParentElem: HTMLElement;\n    let sources: PreparedVideoSource[] = [];\n    let loop = false;\n    let autoplay = false;\n    let muted = false;\n    let preload = false;\n    let poster: string | undefined = undefined;\n    let scale = 'fit';\n    let aspectPaddingBottom = '0';\n    let isAbsolute = false;\n    let elapsedVariableUnsubscriber: Unsubscriber | undefined;\n    let providedVideoTemplate = '';\n    let customVideoInstance: VideoPlayerInstance | undefined;\n    let shouldUseVideoProvider = Boolean(videoPlayerProvider);\n\n    if (import.meta.env.SSR && videoPlayerProvider) {\n        const provider = videoPlayerProvider as VideoPlayerProviderServer;\n        if (typeof provider.template === 'string') {\n            providedVideoTemplate = provider.template;\n        } else {\n            const data = calcVideoProviderData(componentContext.json);\n            if (data) {\n                providedVideoTemplate = provider.template(data);\n            } else {\n                shouldUseVideoProvider = false;\n            }\n        }\n    }\n\n    function calcVideoProviderData(json: MaybeMissing<DivVideoData>): VideoPlayerProviderData | undefined {\n        const evalled = componentContext.getJsonWithVars({\n            sources: json.video_sources,\n            repeatable: json.repeatable,\n            autostart: json.autostart,\n            preloadRequired: json.preload_required,\n            muted: json.muted,\n            preview: json.preview,\n            aspect: json.aspect,\n            scale: json.scale,\n            payload: json.player_settings_payload\n        });\n        const repeatable = correctBooleanInt(evalled.repeatable, false);\n        const autostart = correctBooleanInt(evalled.autostart, false);\n        const preloadRequired = correctBooleanInt(evalled.preloadRequired, false);\n        const muted = correctBooleanInt(evalled.muted, false);\n        const aspect = evalled.aspect?.ratio && isPositiveNumber(evalled.aspect.ratio) ?\n            evalled.aspect.ratio :\n            undefined;\n\n        if (!evalled.sources?.length) {\n            return;\n        }\n\n        return {\n            sources: evalled.sources as VideoSource[],\n            repeatable,\n            autostart,\n            preloadRequired,\n            muted,\n            preview: evalled.preview,\n            aspect,\n            scale: evalled.scale,\n            payload: evalled.payload\n        };\n    }\n\n    $: if (componentContext.json) {\n        loop = false;\n        autoplay = false;\n        muted = false;\n        preload = false;\n        poster = undefined;\n        scale = 'fit';\n        isAbsolute = false;\n        shouldUseVideoProvider = Boolean(videoPlayerProvider);\n    }\n\n    $: if (componentContext.json && customVideoInstance && (\n        $jsonSource ||\n        $jsonRepeatable ||\n        $jsonAutostart ||\n        $jsonMuted ||\n        $jsonPreload ||\n        $jsonPreview ||\n        $jsonScale ||\n        $jsonAspect\n    )) {\n        const data = calcVideoProviderData(componentContext.json);\n        if (data) {\n            customVideoInstance.update?.(data);\n        }\n    }\n\n    $: elapsedVariableName = componentContext.json.elapsed_time_variable;\n    $: elapsedVariable = elapsedVariableName && componentContext.getVariable(elapsedVariableName, 'integer') || createVariable('temp', 'integer', 0);\n\n    function variableListener(val: number): void {\n        if (isSelfVariableSet) {\n            isSelfVariableSet = false;\n            return;\n        }\n        if (customVideoInstance) {\n            customVideoInstance.seek?.(Number(val));\n        } else if (videoElem) {\n            videoElem.currentTime = Number(val) / 1000;\n        }\n    }\n\n    $: if (elapsedVariable) {\n        if (elapsedVariableUnsubscriber) {\n            elapsedVariableUnsubscriber();\n        }\n        elapsedVariableUnsubscriber = elapsedVariable.subscribe(variableListener);\n    }\n\n    $: jsonSource = componentContext.getDerivedFromVars(componentContext.json.video_sources);\n    $: jsonRepeatable = componentContext.getDerivedFromVars(componentContext.json.repeatable);\n    $: jsonAutostart = componentContext.getDerivedFromVars(componentContext.json.autostart);\n    $: jsonMuted = componentContext.getDerivedFromVars(componentContext.json.muted);\n    $: jsonPreload = componentContext.getDerivedFromVars(componentContext.json.preload_required);\n    $: jsonPreview = componentContext.getDerivedFromVars(componentContext.json.preview);\n    $: jsonScale = componentContext.getDerivedFromVars(componentContext.json.scale);\n    $: jsonAspect = componentContext.getDerivedFromVars(componentContext.json.aspect);\n    $: jsonWidth = componentContext.getDerivedFromVars(componentContext.json.width);\n    $: jsonHeight = componentContext.getDerivedFromVars(componentContext.json.height);\n\n    $: {\n        sources = correctVideoSource($jsonSource, sources);\n\n        if (sources.length) {\n            hasError = false;\n        } else {\n            hasError = true;\n            componentContext.logError(wrapError(new Error('Missing \"video_sources\" in \"video\"')));\n        }\n    }\n\n    $: loop = correctBooleanInt($jsonRepeatable, loop);\n\n    $: autoplay = correctBooleanInt($jsonAutostart, autoplay);\n\n    $: muted = correctBooleanInt($jsonMuted, muted);\n\n    $: preload = correctBooleanInt($jsonPreload, preload);\n\n    $: poster = typeof $jsonPreview === 'string' ? prepareBase64($jsonPreview) : poster;\n\n    $: {\n        scale = videoSize($jsonScale) || scale;\n    }\n\n    $: {\n        const newRatio = $jsonAspect?.ratio;\n        if (newRatio && isPositiveNumber(newRatio)) {\n            aspectPaddingBottom = (100 / Number(newRatio)).toFixed(2);\n            isAbsolute = true;\n        } else {\n            aspectPaddingBottom = '0';\n            isAbsolute = (!$jsonWidth || $jsonWidth.type === 'match_parent') && $jsonHeight?.type === 'match_parent';\n        }\n    }\n\n    function pause(): void {\n        if (customVideoInstance) {\n            customVideoInstance.pause();\n        } else {\n            videoElem?.pause();\n        }\n    }\n\n    function start(): void {\n        if (customVideoInstance) {\n            customVideoInstance.play();\n            return;\n        }\n\n        const res = videoElem?.play();\n        if (res) {\n            res.catch(err => {\n                componentContext.logError(wrapError(new Error('Video playing error'), {\n                    level: 'error',\n                    additional: {\n                        originalText: String(err)\n                    }\n                }));\n            });\n        }\n    }\n\n    $: if (componentContext.json) {\n        if (prevId) {\n            rootCtx.unregisterInstance(prevId);\n            prevId = undefined;\n        }\n\n        if (componentContext.id && !hasError && !componentContext.fakeElement) {\n            prevId = componentContext.id;\n            rootCtx.registerInstance<VideoElements>(prevId, {\n                pause,\n                start\n            });\n        }\n    }\n\n    // Video will not start after autoplay set in setData, do it manually\n    $: if (componentContext.json && $jsonAutostart && videoElem) {\n        start();\n    }\n\n    $: mods = {\n        absolute: isAbsolute\n    };\n\n    $: style = {\n        'object-fit': scale\n    };\n\n    function onTimeUpdate(): void {\n        if (videoElem) {\n            isSelfVariableSet = true;\n            elapsedVariable.setValue(Math.floor(videoElem.currentTime * 1000));\n        }\n    }\n\n    function onEnd(): void {\n        const actions = componentContext.getJsonWithVars(componentContext.json.end_actions);\n        componentContext.execAnyActions(actions);\n    }\n\n    function onPlaying(): void {\n        const actions = componentContext.getJsonWithVars(componentContext.json.resume_actions);\n        componentContext.execAnyActions(actions);\n    }\n\n    function onPause(): void {\n        const actions = componentContext.getJsonWithVars(componentContext.json.pause_actions);\n        componentContext.execAnyActions(actions);\n    }\n\n    function onWaiting(): void {\n        const actions = componentContext.getJsonWithVars(componentContext.json.buffering_actions);\n        componentContext.execAnyActions(actions);\n    }\n\n    function onError(): void {\n        const actions = componentContext.getJsonWithVars(componentContext.json.fatal_actions);\n        componentContext.execAnyActions(actions);\n    }\n\n    onMount(() => {\n        if (videoPlayerProvider && videoParentElem) {\n            const data = calcVideoProviderData(componentContext.json);\n            if (data) {\n                const res = (videoPlayerProvider as VideoPlayerProviderClient).instance(videoParentElem, data);\n                if (res) {\n                    customVideoInstance = res;\n                } else {\n                    shouldUseVideoProvider = false;\n                }\n            }\n        }\n    });\n\n    onDestroy(() => {\n        if (prevId) {\n            rootCtx.unregisterInstance(prevId);\n            prevId = undefined;\n        }\n\n        if (elapsedVariableUnsubscriber) {\n            elapsedVariableUnsubscriber();\n            elapsedVariableUnsubscriber = undefined;\n        }\n\n        if (customVideoInstance) {\n            customVideoInstance.destroy();\n            customVideoInstance = undefined;\n        }\n    });\n</script>\n\n{#if !hasError}\n    <Outer\n        cls={genClassName('video', css, mods)}\n        customActions=\"video\"\n        {componentContext}\n        {layoutParams}\n        heightByAspect={aspectPaddingBottom !== '0'}\n    >\n        {#if aspectPaddingBottom !== '0'}\n            <div class={css['video__aspect-wrapper']} style:padding-bottom=\"{aspectPaddingBottom}%\">\n                {#if shouldUseVideoProvider}\n                    <div class={css.video__container} bind:this={videoParentElem}>\n                        <!-- eslint-disable-next-line svelte/no-at-html-tags -->\n                        {@html providedVideoTemplate}\n                    </div>\n                {:else}\n                    <video\n                        bind:this={videoElem}\n                        class={css.video__video}\n                        style={makeStyle(style)}\n                        playsinline\n                        {loop}\n                        {autoplay}\n                        {muted}\n                        {poster}\n                        preload={preload ? 'metadata' : 'auto'}\n                        on:timeupdate={onTimeUpdate}\n                        on:ended={onEnd}\n                        on:playing={onPlaying}\n                        on:pause={onPause}\n                        on:waiting={onWaiting}\n                        on:error={onError}\n                    >\n                        {#each sources as source}\n                            {#key source}\n                                <source src={source.src} type={source.type} on:error={onError}>\n                            {/key}\n                        {/each}\n                    </video>\n                {/if}\n            </div>\n        {:else}\n            {#if shouldUseVideoProvider}\n                <div class={css.video__container} bind:this={videoParentElem}>\n                    <!-- eslint-disable-next-line svelte/no-at-html-tags -->\n                    {@html providedVideoTemplate}\n                </div>\n            {:else}\n                <video\n                    bind:this={videoElem}\n                    class={css.video__video}\n                    style={makeStyle(style)}\n                    playsinline\n                    {loop}\n                    {autoplay}\n                    {muted}\n                    {poster}\n                    preload={preload ? 'metadata' : 'auto'}\n                    on:timeupdate={onTimeUpdate}\n                    on:ended={onEnd}\n                    on:playing={onPlaying}\n                    on:pause={onPause}\n                    on:waiting={onWaiting}\n                    on:error={onError}\n                >\n                    {#each sources as source}\n                        {#key source}\n                            <source src={source.src} type={source.type} on:error={onError}>\n                        {/key}\n                    {/each}\n                </video>\n            {/if}\n        {/if}\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","import type { BooleanInt } from '../../typings/common';\n\nexport function booleanInt(val: BooleanInt): boolean {\n    return val === true || val === 1;\n}\n","<script lang=\"ts\">\n    import { getContext, onDestroy } from 'svelte';\n\n    import css from './Switch.module.css';\n\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivSwitchData } from '../../types/switch';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { ACTION_CTX, type ActionCtxValue } from '../../context/action';\n    import { genClassName } from '../../utils/genClassName';\n    import { wrapError } from '../../utils/wrapError';\n    import { correctColor, parseColor, stringifyColorToCss } from '../../utils/correctColor';\n    import { createVariable } from '../../expressions/variable';\n    import { correctBooleanInt } from '../../utils/correctBooleanInt';\n    import { booleanInt } from '../../utils/booleanInt';\n    import { composeAccessibilityDescription } from '../../utils/composeAccessibilityDescription';\n    import Outer from '../utilities/Outer.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivSwitchData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n    const actionCtx = getContext<ActionCtxValue>(ACTION_CTX);\n    const direction = rootCtx.direction;\n\n    let prevId: string | undefined;\n    let input: HTMLInputElement;\n    let value = false;\n    let hasError = false;\n    let description = '';\n    let isEnabled = true;\n    let onColor = '#129386';\n    let onSubColor = '#1293864c';\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        isEnabled = true;\n        onColor = '#129386';\n        onSubColor = '#1293864c';\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: variable = componentContext.json.is_on_variable;\n\n    $: valueVariable = variable && componentContext.getVariable(variable, 'boolean') || createVariable('temp', 'boolean', false);\n\n    $: jsonAccessibility = componentContext.getDerivedFromVars(componentContext.json.accessibility);\n    $: jsonIsEnabled = componentContext.getDerivedFromVars(componentContext.json.is_enabled);\n    $: jsonOnColor = componentContext.getDerivedFromVars(componentContext.json.on_color);\n\n    $: {\n        let newHasError = false;\n\n        if (!variable) {\n            newHasError = true;\n            componentContext.logError(wrapError(new Error('Missing \"is_on_variable\" in \"switch\"')));\n        } else if (actionCtx.hasAction() || $jsonAccessibility?.mode === 'exclude') {\n            newHasError = true;\n            componentContext.logError(wrapError(new Error('Cannot show \"switch\" inside component with an action or inside accessibility mode=exclude')));\n        }\n\n        if (hasError !== newHasError) {\n            hasError = newHasError;\n        }\n    }\n\n    $: if (booleanInt(value) !== booleanInt($valueVariable)) {\n        value = booleanInt($valueVariable);\n    }\n\n    $: {\n        isEnabled = correctBooleanInt($jsonIsEnabled, isEnabled);\n    }\n\n    $: {\n        onColor = correctColor($jsonOnColor, 1, onColor);\n\n        if (typeof $jsonOnColor === 'string') {\n            const parsed = parseColor($jsonOnColor);\n            if (parsed) {\n                parsed.a *= .3;\n                onSubColor = stringifyColorToCss(parsed);\n            }\n        }\n    }\n\n    $: if ($jsonAccessibility?.description) {\n        description = composeAccessibilityDescription($jsonAccessibility);\n    } else {\n        componentContext.logError(wrapError(new Error('Missing accessibility \"description\" for switch'), {\n            level: 'warn'\n        }));\n    }\n\n    $: mods = {\n        disabled: !isEnabled,\n        direction: $direction\n    };\n    $: stl = {\n        '--divkit-switch-on-color': onColor,\n        '--divkit-switch-on-sub-color': onSubColor\n    };\n\n    function onInput(event: Event): void {\n        value = (event.target as HTMLInputElement).checked;\n        valueVariable.setValue(value);\n    }\n\n    $: if (input && componentContext.json) {\n        if (prevId) {\n            rootCtx.unregisterFocusable(prevId);\n            prevId = undefined;\n        }\n\n        if (componentContext.id && !componentContext.fakeElement) {\n            prevId = componentContext.id;\n            rootCtx.registerFocusable(prevId, {\n                focus() {\n                    if (input) {\n                        input.focus();\n                    }\n                }\n            });\n        }\n    }\n\n    onDestroy(() => {\n        if (prevId) {\n            rootCtx.unregisterFocusable(prevId);\n            prevId = undefined;\n        }\n    });\n</script>\n\n{#if !hasError}\n    <Outer\n        let:focusHandler\n        let:blurHandler\n        let:hasCustomFocus\n        cls={genClassName('switch', css, mods)}\n        style={stl}\n        customDescription={true}\n        customActions={'switch'}\n        hasInnerFocusable={true}\n        {componentContext}\n        {layoutParams}\n    >\n        <div\n            class={genClassName('switch__tumbler', css, { checked: value })}\n        >\n            <div class={css.switch__thumb}></div>\n        </div>\n        <input\n            bind:this={input}\n            type=\"checkbox\"\n            class={genClassName('switch__input', css, { 'has-custom-focus': hasCustomFocus })}\n            autocomplete=\"off\"\n            aria-label={description}\n            disabled={!isEnabled}\n            checked={value}\n            on:input={onInput}\n            on:focus={focusHandler}\n            on:blur={blurHandler}\n        >\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","<script lang=\"ts\">\n    import { getContext, onDestroy, onMount } from 'svelte';\n\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivCustomData } from '../../types/custom';\n    import type { CustomComponentDescription } from '../../../typings/custom';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { wrapError } from '../../utils/wrapError';\n    import Unknown from '../utilities/Unknown.svelte';\n    import Outer from '../utilities/Outer.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivCustomData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    let customElem: HTMLElement;\n    let desc: CustomComponentDescription | null = null;\n    let templateContent = '';\n    // shadowrootmode is an unknown attribute in TS :(\n    let templateAttrs: any = {};\n    let items: ComponentContext[] = [];\n\n    $: if (\n        typeof componentContext.json.custom_type === 'string' &&\n        componentContext.json.custom_type &&\n        rootCtx.customComponents?.has(componentContext.json.custom_type)\n    ) {\n        desc = rootCtx.customComponents.get(componentContext.json.custom_type)!;\n        if (typeof desc.template === 'function') {\n            const ctx = rootCtx.getExtensionContext(componentContext);\n            const variables: Map<string, string | number | boolean | unknown[] | object> = new Map();\n            for (const [key, varaible] of ctx.variables) {\n                variables.set(key, varaible.getValue());\n            }\n\n            templateContent = desc.template({\n                props: componentContext.json.custom_props,\n                variables\n            });\n        } else if (desc.template && typeof desc.template === 'string') {\n            templateContent = desc.template;\n        } else {\n            templateContent = '';\n        }\n        templateAttrs = {\n            shadowrootmode: desc.shadowRootMode || 'open'\n        };\n    } else {\n        desc = null;\n        templateContent = ';';\n        componentContext.logError(wrapError(new Error('Unknown or incorrect \"custom_type\" prop for div \"custom\"')));\n    }\n\n    let hasItemsError = false;\n    $: jsonItems = componentContext.json.items;\n    $: {\n        if (jsonItems !== undefined && !Array.isArray(jsonItems)) {\n            hasItemsError = true;\n            componentContext.logError(wrapError(new Error('Incorrect \"items\" prop for div \"custom\"')));\n        } else {\n            hasItemsError = false;\n        }\n    }\n\n    $: {\n        items.forEach(context => {\n            context.destroy();\n        });\n\n        items = (!hasItemsError && jsonItems || []).map((item, index) => {\n            return componentContext.produceChildContext(item, {\n                path: index\n            });\n        });\n    }\n\n    onMount(() => {\n        if (customElem && 'divKitApiCallback' in customElem && typeof customElem.divKitApiCallback === 'function') {\n            const ctx = rootCtx.getExtensionContext(componentContext);\n            customElem.divKitApiCallback(ctx);\n        }\n    });\n\n    onDestroy(() => {\n        items.forEach(context => {\n            context.destroy();\n        });\n    });\n</script>\n\n{#if desc}\n    <Outer\n        {componentContext}\n        {layoutParams}\n    >\n        <svelte:element\n            bind:this={customElem}\n            this={desc.element}\n            {...(componentContext.json.custom_props || {})}\n        >\n            {#if templateContent}\n                <template {...templateAttrs}>\n                    <!-- eslint-disable-next-line svelte/no-at-html-tags -->\n                    {@html templateContent}\n                </template>\n            {/if}\n\n            {#if !hasItemsError && jsonItems}\n                {#key jsonItems}\n                    {#each items as item}\n                        <Unknown\n                            componentContext={item}\n                        />\n                    {/each}\n                {/key}\n            {/if}\n        </svelte:element>\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","import type { ComponentType } from 'svelte';\n// Force import order\nimport './utilities/Outer.svelte';\nimport Text from './text/Text.svelte';\nimport Container from './container/Container.svelte';\nimport Separator from './separator/Separator.svelte';\nimport Image from './image/Image.svelte';\nimport Grid from './grid/Grid.svelte';\nimport Gallery from './gallery/Gallery.svelte';\nimport Tabs from './tabs/Tabs.svelte';\nimport State from './state/State.svelte';\nimport Pager from './pager/Pager.svelte';\nimport Indicator from './indicator/Indicator.svelte';\nimport Slider from './slider/Slider.svelte';\nimport Input from './input/Input.svelte';\nimport Select from './select/Select.svelte';\nimport Video from './video/Video.svelte';\nimport Switch from './switch/Switch.svelte';\nimport Custom from './custom/Custom.svelte';\n\nexport const TYPE_MAP: Record<string, ComponentType> = {\n    text: Text,\n    container: Container,\n    separator: Separator,\n    image: Image,\n    gif: Image,\n    grid: Grid,\n    gallery: Gallery,\n    tabs: Tabs,\n    state: State,\n    pager: Pager,\n    indicator: Indicator,\n    slider: Slider,\n    input: Input,\n    select: Select,\n    video: Video,\n    switch: Switch,\n    custom: Custom\n};\n","<script lang=\"ts\">\n    import { getContext } from 'svelte';\n    import type { ComponentType } from 'svelte';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { LayoutParams } from '../../types/layoutParams';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { wrapError } from '../../utils/wrapError';\n    import { TYPE_MAP } from '../typeMap';\n\n    export let componentContext: ComponentContext;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    let component: ComponentType | undefined;\n\n    $: {\n        const childJson = componentContext.json;\n\n        component = childJson?.type && TYPE_MAP[childJson.type] || undefined;\n\n        if (!component) {\n            let errorText: string;\n            if (childJson?.type && rootCtx.hasTemplate(childJson.type)) {\n                errorText = 'Recursive template';\n            } else {\n                errorText = 'Unknown component';\n            }\n\n            componentContext.logError(wrapError(new Error(errorText), {\n                additional: {\n                    component: childJson?.type || '<missing>'\n                }\n            }));\n        }\n    }\n</script>\n\n{#if component}\n    <svelte:component\n        this={component}\n        {componentContext}\n        {layoutParams}\n    />\n{/if}\n","<script lang=\"ts\">\n    import css from './RootSvgFilters.module.css';\n\n    export let svgFiltersMap: Record<string, string>;\n</script>\n\n{#if Object.keys(svgFiltersMap).length}\n    <svg\n        class={css['root-svg-filters']}\n        aria-hidden=\"true\"\n    >\n        <defs>\n            {#each [...Object.keys(svgFiltersMap)] as filterKey}\n                {@const [filterColor, filterMode] = filterKey.split(':')}\n                <filter id={svgFiltersMap[filterKey]}>\n                    <feFlood flood-color={filterColor} />\n\n                    {#if filterMode === 'source_in' || filterMode === 'source_atop'}\n                        <feComposite in2=\"SourceGraphic\" operator={filterMode.split('_')[1]} />\n                    {:else if filterMode === 'multiply'}\n                        <feComposite in2=\"SourceGraphic\" operator=\"arithmetic\" k1=\"1\" k2=\"0\" k3=\"0\" k4=\"0\" />\n                    {:else}\n                        <feBlend in2=\"SourceGraphic\" mode={filterMode} />\n                    {/if}\n                </filter>\n            {/each}\n        </defs>\n    </svg>\n{/if}\n","import { wrapError, type WrappedError } from './wrapError';\nimport type { DivBase, TemplateContext } from '../../typings/common';\nimport type { DivBaseData } from '../types/base';\n\nexport function applyTemplate<T extends DivBase>(\n    json: T,\n    templateContext: TemplateContext,\n    templates: Record<string, unknown>,\n    logError: (error: WrappedError) => void\n): {\n    json: T;\n    templateContext: TemplateContext;\n};\nexport function applyTemplate(\n    json: DivBaseData,\n    templateContext: TemplateContext,\n    templates: Record<string, unknown>,\n    logError: (error: WrappedError) => void\n): {\n    json: DivBaseData;\n    templateContext: TemplateContext;\n} {\n    const template = templates[json.type];\n\n    if (!template) {\n        logError(wrapError(new Error('No such template'), {\n            additional: {\n                template: json.type\n            }\n        }));\n\n        return {\n            json,\n            templateContext\n        };\n    }\n\n    let i;\n    const newContext: TemplateContext = {};\n\n    for (i in templateContext) {\n        if (templateContext.hasOwnProperty(i)) {\n            newContext[i] = templateContext[i];\n        }\n    }\n\n    for (i in json) {\n        if (i === 'type' || i === '__proto__') {\n            continue;\n        }\n\n        if (json.hasOwnProperty(i)) {\n            newContext[i] = json[i as keyof typeof json];\n        }\n    }\n\n    function copyTemplated(base: any, extender: any) {\n        const keys = Object.keys(extender).filter(key => key !== '__proto__');\n        const simpleKeys = keys.filter(key => key.charAt(0) !== '$');\n        const templateKeys = keys.filter(key => key.charAt(0) === '$');\n\n        simpleKeys.forEach(key => {\n            const item = extender[key];\n\n            if (typeof item === 'object' && item !== null) {\n                base[key] = Array.isArray(item) ? [] : {};\n                copyTemplated(base[key], item);\n            } else {\n                base[key] = item;\n            }\n        });\n\n        templateKeys.forEach(key => {\n            const item = extender[key];\n\n            const val = newContext[item];\n\n            if (val !== undefined) {\n                const prop = key.substring(1);\n                base[prop] = val;\n            }\n        });\n\n        return base;\n    }\n\n    const newJson = copyTemplated({}, template);\n\n    for (i in json) {\n        if (i === 'type' || i === '__proto__') {\n            continue;\n        }\n\n        if (json.hasOwnProperty(i)) {\n            newJson[i] = json[i as keyof typeof json];\n        }\n    }\n\n    return {\n        json: newJson,\n        templateContext: newContext\n    };\n}\n","export const MAX_INT32 = 2147483647;\nexport const MIN_INT32 = -2147483648;\n\nexport const MAX_NUMBER = Number.MAX_VALUE;\nexport const MIN_NUMBER = Number.MIN_VALUE;\n\nexport const STRING = 'string';\nexport const INTEGER = 'integer';\nexport const NUMBER = 'number';\nexport const BOOLEAN = 'boolean';\nexport const COLOR = 'color';\nexport const URL = 'url';\nexport const DATETIME = 'datetime';\nexport const DICT = 'dict';\nexport const ARRAY = 'array';\n","import type { Node } from './ast';\n\nexport function walk(ast: Node, visitors: {\n    [Type in Node['type']]?: (node: Extract<Node, { type: Type }>) => void;\n}): void {\n    visitors[ast.type]?.(ast as any);\n\n    switch (ast.type) {\n        case 'TemplateLiteral':\n            ast.expressions.forEach(item => {\n                walk(item, visitors);\n            });\n            break;\n        case 'BinaryExpression':\n        case 'LogicalExpression':\n            walk(ast.left, visitors);\n            walk(ast.right, visitors);\n            break;\n        case 'UnaryExpression':\n            walk(ast.argument, visitors);\n            break;\n        case 'ConditionalExpression':\n            walk(ast.test, visitors);\n            walk(ast.consequent, visitors);\n            walk(ast.alternate, visitors);\n            break;\n        case 'TryExpression':\n            walk(ast.test, visitors);\n            walk(ast.alternate, visitors);\n            break;\n        case 'CallExpression':\n            ast.arguments.forEach(item => {\n                walk(item, visitors);\n            });\n            break;\n        case 'MethodExpression':\n            walk(ast.object, visitors);\n            ast.arguments.forEach(item => {\n                walk(item, visitors);\n            });\n            break;\n    }\n}\n","import type { EvalContext, EvalTypesWithoutDatetime, EvalValue, EvalValueBase, IntegerValue, NumberValue } from './eval';\nimport type { Node, Variable } from './ast';\nimport type { VariablesMap } from './eval';\nimport { walk } from './walk';\nimport { parseColor, type ParsedColor } from '../utils/correctColor';\nimport { padLeft } from '../utils/padLeft';\nimport { MAX_INT, MIN_INT, toBigInt } from './bigint';\nimport { NUMBER } from './const';\n\nexport function valToInternal(val: EvalValue): EvalValue {\n    if (val.type === 'url' || val.type === 'color') {\n        return {\n            type: 'string',\n            value: val.value\n        };\n    }\n\n    return val;\n}\n\nexport function dateToString(date: Date): string {\n    return date\n        .toISOString()\n        .replace('T', ' ')\n        .replace(/\\.\\d{3}Z$/, '');\n}\n\nexport function valToString(val: EvalValue): string {\n    if (val.type === 'string') {\n        return val.value;\n    } else if (val.type === 'integer') {\n        return String(val.value);\n    } else if (val.type === 'number') {\n        let res = String(val.value);\n\n        if (!res.includes('.')) {\n            if (res.includes('e')) {\n                res = res.replace('e', '.0e');\n            } else {\n                res += '.0';\n            }\n        }\n\n        res = res.replace(/e\\+?/i, 'E');\n\n        return res;\n    } else if (val.type === 'boolean') {\n        return val.value ? 'true' : 'false';\n    } else if (val.type === 'datetime') {\n        return dateToString(val.value);\n    } else if (val.type === 'color') {\n        return stringifyColor(safeConvertColor(val.value));\n    } else if (val.type === 'url') {\n        return val.value;\n    } else if (val.type === 'dict') {\n        return '<dict>';\n    } else if (val.type === 'array') {\n        return '<array>';\n    }\n\n    // For purpose when new eval value types will be added\n    throw new Error(`Unexpected type ${(val as EvalValueBase).type}`);\n}\n\nexport function valToPreview(val: EvalValue): string {\n    let res = valToString(val);\n\n    if (val.type === 'string') {\n        res = \"'\" +\n            res\n                .replace(/\\\\/g, '\\\\\\\\')\n                .replace(/'/g, '\\\\\\'') +\n            \"'\";\n    }\n\n    return res;\n}\n\nexport function typeToString(type: string): string {\n    if (type === 'datetime') {\n        return 'DateTime';\n    }\n    return type.charAt(0).toUpperCase() + type.substring(1);\n}\n\nexport function roundInteger(_ctx: EvalContext, val: bigint): bigint {\n    return toBigInt(val);\n}\n\nexport function checkIntegerOverflow(_ctx: EvalContext, val: number | bigint): void {\n    if (val < MIN_INT || val > MAX_INT) {\n        throw new Error('Integer overflow.');\n    }\n}\n\nexport function gatherVarsFromAst(ast: Node): string[] {\n    const res = new Set<string>();\n\n    walk(ast, {\n        Variable(node: Variable): void {\n            res.add(node.id.name);\n        }\n    });\n\n    return [...res];\n}\n\nexport function evalError(msg: string, details: string): never {\n    throw new Error(`Failed to evaluate [${msg}]. ${details}`);\n}\n\nexport function containsUnsetVariables(ast: Node, variables: VariablesMap): boolean {\n    let result = false;\n\n    walk(ast, {\n        Variable(node: Variable): void {\n            if (!variables.has(node.id.name)) {\n                result = true;\n            }\n        }\n    });\n\n    return result;\n}\n\nexport function safeConvertColor(color: string): ParsedColor {\n    const res = parseColor(color);\n\n    if (res) {\n        return res;\n    }\n\n    throw new Error('Unable to convert value to Color, expected format #AARRGGBB.');\n}\n\nexport function stringifyColor(color: ParsedColor): string {\n    return `#${[color.a, color.r, color.g, color.b].map(it => {\n        if (it < 0 || it > 255) {\n            throw new Error('Value out of range 0..1.');\n        }\n\n        return padLeft(Math.round(it).toString(16), 2);\n    }).join('').toUpperCase()}`;\n}\n\nexport function transformColorValue(color: string): string {\n    return stringifyColor(safeConvertColor(color));\n}\n\nexport function integerToNumber(integerValue: IntegerValue): NumberValue {\n    return {\n        type: NUMBER,\n        value: Number(integerValue.value)\n    };\n}\n\nconst EVAL_TYPE_TO_JS_TYPE = {\n    string: 'string',\n    number: 'number',\n    integer: 'number',\n    boolean: 'boolean',\n    color: 'string',\n    url: 'string',\n    array: 'array',\n    dict: 'object'\n};\nexport function convertJsValueToDivKit(ctx: EvalContext, val: unknown, evalType: EvalTypesWithoutDatetime): EvalValue {\n    const jsType = EVAL_TYPE_TO_JS_TYPE[evalType];\n\n    let type: string = typeof val;\n    if (\n        jsType === 'array' && !Array.isArray(val) ||\n        jsType !== 'array' && type !== jsType ||\n        type === 'object' && val === null\n    ) {\n        if (type === 'object') {\n            if (Array.isArray(val)) {\n                type = 'array';\n            } else if (val === null) {\n                type = 'null';\n            } else {\n                type = 'dict';\n            }\n        }\n        throw new Error(`Incorrect value type: expected ${typeToString(evalType)}, got ${typeToString(type)}.`);\n    }\n    if (jsType === 'number' && evalType === 'integer') {\n        checkIntegerOverflow(ctx, val as number);\n        try {\n            val = toBigInt(val as number);\n        } catch (_err) {\n            throw new Error('Cannot convert value to integer.');\n        }\n    }\n    if (jsType === 'string' && evalType === 'color') {\n        val = transformColorValue(val as string);\n    }\n\n    return {\n        type: evalType,\n        value: val\n    } as EvalValue;\n}\n","import { INTEGER, NUMBER } from '../const';\nimport type { EvalTypes, EvalValue } from '../eval';\nimport type { EvalContext } from '../eval';\nimport { integerToNumber } from '../utils';\n\nexport type FuncArg = EvalTypes | {\n    type: EvalTypes;\n    isVararg?: boolean;\n}\n\nexport interface Func {\n    args: FuncArg[];\n    cb(ctx: EvalContext, ...args: EvalValue[]): EvalValue;\n}\n\nexport const funcs: Map<string, Func[]> = new Map();\nexport const funcByArgs: Map<string, Func> = new Map();\nexport const methods: Map<string, Func[]> = new Map();\nexport const methodByArgs: Map<string, Func> = new Map();\n\nexport type FuncMatchError = {\n    type: 'mismatch';\n    expected: EvalTypes;\n    found: EvalTypes;\n    def: Func;\n    hasOverloads: boolean;\n} | {\n    type: 'few';\n    expected: number;\n    found: number;\n    def: Func;\n    hasOverloads: boolean;\n} | {\n    type: 'many';\n    expected: number;\n    found: number;\n    def: Func;\n    hasOverloads: boolean;\n} | {\n    type: 'missing';\n};\n\nexport interface FuncMatchFound {\n    func: Func;\n    conversions: number;\n}\n\nexport type FuncMatch = FuncMatchFound | FuncMatchError;\n\n// no args\nexport function registerFunc(name: string, args: [], cb: (ctx?: EvalContext) => EvalValue): void;\n// one specific arg\nexport function registerFunc<\n    A0 extends EvalTypes\n>(\n    name: string,\n    args: [A0],\n    cb: (\n        ctx: EvalContext,\n        arg0: Extract<EvalValue, { type: A0 }>\n    ) => EvalValue\n): void;\n// two specific args\nexport function registerFunc<\n    A0 extends EvalTypes,\n    A1 extends EvalTypes\n>(\n    name: string,\n    args: [A0, A1],\n    cb: (\n        ctx: EvalContext,\n        arg0: Extract<EvalValue, { type: A0 }>,\n        arg1: Extract<EvalValue, { type: A1 }>\n    ) => EvalValue\n): void;\n// three specific args\nexport function registerFunc<\n    A0 extends EvalTypes,\n    A1 extends EvalTypes,\n    A2 extends EvalTypes\n>(\n    name: string,\n    args: [A0, A1, A2],\n    cb: (\n        ctx: EvalContext,\n        arg0: Extract<EvalValue, { type: A0 }>,\n        arg1: Extract<EvalValue, { type: A1 }>,\n        arg2: Extract<EvalValue, { type: A2 }>\n    ) => EvalValue\n): void;\n// any args\nexport function registerFunc(\n    name: string,\n    args: FuncArg[],\n    cb: (ctx: EvalContext, ...args: any[]) => EvalValue\n): void;\n\nexport function registerFunc(\n    name: string,\n    args: FuncArg[],\n    cb: (ctx: EvalContext, ...args: EvalValue[]) => EvalValue\n): void {\n    const desc: Func = {\n        args,\n        cb\n    };\n\n    const arr = funcs.get(name) || [];\n\n    if (!funcs.has(name)) {\n        funcs.set(name, arr);\n    }\n    arr.push(desc);\n\n    const funcKey = name + ':' + args.map(it => {\n        if (typeof it === 'object') {\n            return it.type;\n        }\n        return it;\n    }).join('#');\n\n    funcByArgs.set(funcKey, desc);\n}\n\n// no args\nexport function registerMethod(name: string, args: [], cb: (ctx?: EvalContext) => EvalValue): void;\n// one specific arg\nexport function registerMethod<\n    A0 extends EvalTypes\n>(\n    name: string,\n    args: [A0],\n    cb: (\n        ctx: EvalContext,\n        arg0: Extract<EvalValue, { type: A0 }>\n    ) => EvalValue\n): void;\n// two specific args\nexport function registerMethod<\n    A0 extends EvalTypes,\n    A1 extends EvalTypes\n>(\n    name: string,\n    args: [A0, A1],\n    cb: (\n        ctx: EvalContext,\n        arg0: Extract<EvalValue, { type: A0 }>,\n        arg1: Extract<EvalValue, { type: A1 }>\n    ) => EvalValue\n): void;\n// three specific args\nexport function registerMethod<\n    A0 extends EvalTypes,\n    A1 extends EvalTypes,\n    A2 extends EvalTypes\n>(\n    name: string,\n    args: [A0, A1, A2],\n    cb: (\n        ctx: EvalContext,\n        arg0: Extract<EvalValue, { type: A0 }>,\n        arg1: Extract<EvalValue, { type: A1 }>,\n        arg2: Extract<EvalValue, { type: A2 }>\n    ) => EvalValue\n): void;\n// any args\nexport function registerMethod(\n    name: string,\n    args: FuncArg[],\n    cb: (ctx: EvalContext, ...args: any[]) => EvalValue\n): void;\n\nexport function registerMethod(\n    name: string,\n    args: FuncArg[],\n    cb: (ctx: EvalContext, ...args: EvalValue[]) => EvalValue\n): void {\n    const desc: Func = {\n        args,\n        cb\n    };\n\n    const arr = methods.get(name) || [];\n\n    if (!methods.has(name)) {\n        methods.set(name, arr);\n    }\n    arr.push(desc);\n\n    const funcKey = name + ':' + args.map(it => {\n        if (typeof it === 'object') {\n            return it.type;\n        }\n        return it;\n    }).join('#');\n\n    methodByArgs.set(funcKey, desc);\n}\n\nfunction matchFuncArgs(func: Func, args: EvalValue[], hasOverloads: boolean): {\n    type: 'match';\n    conversions: number;\n} | FuncMatchError {\n    const minArgs = func.args.length;\n    let maxArgs = func.args.length;\n    let conversions = 0;\n    const lastArg = func.args[func.args.length - 1];\n\n    if (typeof lastArg === 'object' && lastArg.isVararg) {\n        maxArgs = Infinity;\n    }\n\n    if (args.length < minArgs) {\n        return {\n            type: 'few',\n            expected: minArgs,\n            found: args.length,\n            def: func,\n            hasOverloads\n        };\n    } else if (args.length > maxArgs) {\n        return {\n            type: 'many',\n            expected: maxArgs,\n            found: args.length,\n            def: func,\n            hasOverloads\n        };\n    }\n\n    for (let i = 0; i < args.length; ++i) {\n        let funcArg = i >= func.args.length ? func.args[func.args.length - 1] : func.args[i];\n        if (typeof funcArg !== 'object') {\n            funcArg = {\n                type: funcArg\n            };\n        }\n\n        if (funcArg.type === NUMBER && args[i].type === INTEGER) {\n            ++conversions;\n            continue;\n        }\n\n        if (funcArg.type !== args[i].type) {\n            return {\n                type: 'mismatch',\n                expected: funcArg.type,\n                found: args[i].type,\n                def: func,\n                hasOverloads\n            };\n        }\n    }\n\n    return {\n        type: 'match',\n        conversions\n    };\n}\n\nexport function findBestMatchedFunc(map: Map<string, Func[]>, funcName: string, args: EvalValue[]): FuncMatch {\n    const list = map.get(funcName);\n    if (!list) {\n        return {\n            type: 'missing'\n        };\n    }\n\n    let firstError: FuncMatchError | null = null;\n    let bestFunc: {\n        func: Func;\n        conversions: number;\n    } | null = null;\n    for (let i = 0; i < list.length; ++i) {\n        const match = matchFuncArgs(list[i], args, list.length > 1);\n        if (match.type === 'match') {\n            if (!bestFunc || bestFunc.conversions > match.conversions) {\n                bestFunc = {\n                    func: list[i],\n                    conversions: match.conversions\n                };\n            }\n            continue;\n        }\n        if (!firstError) {\n            firstError = match;\n        }\n    }\n\n    if (!bestFunc) {\n        if (firstError) {\n            return firstError;\n        }\n        throw new Error('Missing function');\n    }\n\n    return bestFunc;\n}\n\nexport function convertArgs(func: Func, args: EvalValue[]): EvalValue[] {\n    return args.map((arg, i) => {\n        let funcArg = i >= func.args.length ? func.args[func.args.length - 1] : func.args[i];\n        if (typeof funcArg !== 'object') {\n            funcArg = {\n                type: funcArg\n            };\n        }\n\n        if (funcArg.type === NUMBER && arg.type === INTEGER) {\n            return integerToNumber(arg);\n        }\n\n        return arg;\n    });\n}\n\nexport function funcToKey(funcName: string, func: Func): string {\n    return funcName + ':' + func.args.map(arg => typeof arg === 'string' ? arg : arg.type).join('#');\n}\n","import type {\n    ArrayValue,\n    BooleanValue,\n    ColorValue,\n    DictValue,\n    EvalContext,\n    EvalValue,\n    IntegerValue,\n    NumberValue,\n    StringValue,\n    UrlValue\n} from '../eval';\nimport type { VariableType, VariableValue } from '../variable';\nimport { registerFunc, registerMethod } from './funcs';\nimport { ARRAY, BOOLEAN, COLOR, DICT, INTEGER, NUMBER, STRING, URL } from '../const';\nimport { transformColorValue, valToString } from '../utils';\nimport { MAX_INT, MIN_INT, toBigInt } from '../bigint';\n\nfunction toString(\n    _ctx: EvalContext,\n    arg: IntegerValue | NumberValue | BooleanValue | ColorValue | UrlValue | StringValue | ArrayValue | DictValue\n): EvalValue {\n    if (arg.type === ARRAY || arg.type === DICT) {\n        return {\n            type: STRING,\n            value: JSON.stringify(arg.value)\n        };\n    }\n\n    return {\n        type: STRING,\n        value: valToString(arg)\n    };\n}\n\n\nfunction toNumber(_ctx: EvalContext, arg: IntegerValue | StringValue): EvalValue {\n    const num = Number(arg.value);\n\n    if (Number.isNaN(num) || !Number.isFinite(num)) {\n        throw new Error('Unable to convert value to Number.');\n    }\n    if (arg.value === '') {\n        throw new Error('Unable to convert value to Number.');\n    }\n\n    return {\n        type: NUMBER,\n        value: num\n    };\n}\n\n\nfunction toIntegerNumber(_ctx: EvalContext, arg: NumberValue): EvalValue {\n    if (arg.value > MAX_INT || arg.value < MIN_INT) {\n        throw new Error('Unable to convert value to Integer.');\n    }\n\n    const num = arg.value - (arg.value % 1);\n\n    return {\n        type: INTEGER,\n        value: toBigInt(num)\n    };\n}\n\nfunction toIntegerString(_ctx: EvalContext, arg: StringValue): EvalValue {\n    let num: bigint;\n\n    try {\n        num = toBigInt(arg.value);\n    } catch (err) {\n        throw new Error('Unable to convert value to Integer.');\n    }\n\n    return {\n        type: INTEGER,\n        value: num\n    };\n}\n\nfunction toIntegerBoolean(_ctx: EvalContext, arg: BooleanValue): EvalValue {\n    return {\n        type: INTEGER,\n        value: toBigInt(arg.value ? 1 : 0)\n    };\n}\n\n\nfunction toBooleanInteger(_ctx: EvalContext, arg: IntegerValue): EvalValue {\n    const intVal = Number(arg.value);\n    if (intVal !== 1 && intVal !== 0) {\n        throw new Error('Unable to convert value to Boolean.');\n    }\n\n    return {\n        type: BOOLEAN,\n        value: intVal\n    };\n}\n\nfunction toBooleanString(_ctx: EvalContext, arg: StringValue): EvalValue {\n    if (arg.value !== 'true' && arg.value !== 'false') {\n        throw new Error('Unable to convert value to Boolean.');\n    }\n\n    return {\n        type: BOOLEAN,\n        value: arg.value === 'true' ? 1 : 0\n    };\n}\n\nfunction toColor(_ctx: EvalContext, arg: StringValue): EvalValue {\n    return {\n        type: COLOR,\n        value: transformColorValue(arg.value)\n    };\n}\n\nfunction toUrl(_ctx: EvalContext, arg: StringValue): EvalValue {\n    return {\n        type: URL,\n        value: arg.value\n    };\n}\n\nfunction encodeUri(_ctx: EvalContext, str: StringValue): EvalValue {\n    try {\n        return {\n            type: STRING,\n            value: encodeURIComponent(str.value)\n        };\n    } catch (_err) {\n        throw new Error('Unable to encodeUri string.');\n    }\n}\n\nfunction decodeUri(_ctx: EvalContext, str: StringValue): EvalValue {\n    try {\n        return {\n            type: STRING,\n            value: decodeURIComponent(str.value)\n        };\n    } catch (_err) {\n        throw new Error('Unable to decodeUri string.');\n    }\n}\n\nfunction getValueForced(\n    ctx: EvalContext,\n    varName: StringValue,\n    fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue,\n    type: VariableType\n): EvalValue {\n    const variable = ctx.variables.get(varName.value);\n    let value: VariableValue;\n\n    if (variable && variable.getType() === type) {\n        value = variable.getValue();\n    } else {\n        value = fallback.value;\n    }\n\n    if (type === 'color') {\n        value = transformColorValue(value as string);\n    }\n\n    return {\n        type,\n        // value is synced with type by params\n        value: value as any\n    };\n}\n\nfunction getValue(\n    ctx: EvalContext,\n    varName: StringValue,\n    fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue\n): EvalValue {\n    return getValueForced(ctx, varName, fallback, fallback.type);\n}\n\nfunction getColorValue(\n    ctx: EvalContext,\n    varName: StringValue,\n    fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue\n) {\n    return getValueForced(ctx, varName, fallback, 'color');\n}\n\nfunction getUrlValue(\n    ctx: EvalContext,\n    varName: StringValue,\n    fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue\n) {\n    return getValueForced(ctx, varName, fallback, 'url');\n}\n\nexport function registerStd(): void {\n    registerFunc('toString', [INTEGER], toString);\n    registerFunc('toString', [NUMBER], toString);\n    registerFunc('toString', [BOOLEAN], toString);\n    registerFunc('toString', [COLOR], toString);\n    registerFunc('toString', [URL], toString);\n    registerFunc('toString', [STRING], toString);\n    registerFunc('toString', [ARRAY], toString);\n    registerFunc('toString', [DICT], toString);\n\n    registerFunc('toNumber', [INTEGER], toNumber);\n    registerFunc('toNumber', [STRING], toNumber);\n\n    registerFunc('toInteger', [NUMBER], toIntegerNumber);\n    registerFunc('toInteger', [STRING], toIntegerString);\n    registerFunc('toInteger', [BOOLEAN], toIntegerBoolean);\n\n    registerFunc('toBoolean', [INTEGER], toBooleanInteger);\n    registerFunc('toBoolean', [STRING], toBooleanString);\n\n    registerFunc('toColor', [STRING], toColor);\n\n    registerFunc('toUrl', [STRING], toUrl);\n\n    registerFunc('encodeUri', [STRING], encodeUri);\n    registerFunc('decodeUri', [STRING], decodeUri);\n\n    registerFunc('getIntegerValue', [STRING, INTEGER], getValue);\n    registerFunc('getNumberValue', [STRING, NUMBER], getValue);\n    registerFunc('getBooleanValue', [STRING, BOOLEAN], getValue);\n    registerFunc('getStringValue', [STRING, STRING], getValue);\n    registerFunc('getColorValue', [STRING, COLOR], getColorValue);\n    registerFunc('getColorValue', [STRING, STRING], getColorValue);\n    registerFunc('getUrlValue', [STRING, URL], getUrlValue);\n    registerFunc('getUrlValue', [STRING, STRING], getUrlValue);\n\n    registerMethod('toString', [INTEGER], toString);\n    registerMethod('toString', [NUMBER], toString);\n    registerMethod('toString', [BOOLEAN], toString);\n    registerMethod('toString', [COLOR], toString);\n    registerMethod('toString', [URL], toString);\n    registerMethod('toString', [STRING], toString);\n    registerMethod('toString', [ARRAY], toString);\n    registerMethod('toString', [DICT], toString);\n}\n","// Some code based on the https://github.com/date-fns (MIT License)\n\ntype FormatGetter = (opts: Intl.DateTimeFormatOptions & {\n    date?: Date;\n}, field: Intl.DateTimeFormatPartTypes | 'week' | 'weekyear' | 'extendedyear' | 'weekofmonth' | 'dayofyear' | 'dayofweekinmonth' | 'weekdaynumeric' | 'timezoneoffset') => string | undefined;\n\nfunction formatNumber(num: string | undefined, len: number | undefined): string | undefined {\n    if (!num || !len) {\n        return num;\n    }\n\n    return num.padStart(len, '0');\n}\n\nconst formatters: Record<string, (token: number, getter: FormatGetter) => string | undefined> = {\n    G(token, getter) {\n        let era: Intl.DateTimeFormatOptions['era'];\n        if (token < 4) {\n            era = 'short';\n        } else if (token === 5) {\n            era = 'narrow';\n        } else {\n            era = 'long';\n        }\n        return getter({\n            era\n        }, 'era');\n    },\n    d(token, getter) {\n        return formatNumber(getter({\n            day: 'numeric'\n        }, 'day'), token > 1 ? token : 0);\n    },\n    D(token, getter) {\n        return formatNumber(getter({}, 'dayofyear'), token > 1 ? token : 0);\n    },\n    F(token, getter) {\n        return formatNumber(getter({}, 'dayofweekinmonth'), token > 1 ? token : 0);\n    },\n    M(token, getter) {\n        let month: Intl.DateTimeFormatOptions['month'];\n        if (token === 1) {\n            month = 'numeric';\n        } else if (token === 2) {\n            month = '2-digit';\n        } else if (token === 3) {\n            month = 'short';\n        } else if (token === 5) {\n            month = 'narrow';\n        } else {\n            month = 'long';\n        }\n        return getter({\n            month,\n            // to get a genitive case of month\n            day: 'numeric'\n        }, 'month');\n    },\n    y(token, getter) {\n        return formatNumber(getter({\n            year: token === 2 ? '2-digit' : 'numeric'\n        }, 'year'), token > 2 ? token : undefined);\n    },\n    Y(token, getter) {\n        return formatNumber(getter({\n            year: token === 2 ? '2-digit' : 'numeric'\n        }, 'weekyear'), token > 2 ? token : undefined);\n    },\n    u(token, getter) {\n        return formatNumber(getter({\n            year: 'numeric'\n        }, 'extendedyear'), token > 1 ? token : undefined);\n    },\n    E(token, getter) {\n        let weekday: Intl.DateTimeFormatOptions['weekday'];\n        if (token <= 3) {\n            weekday = 'short';\n        } else if (token === 5) {\n            weekday = 'narrow';\n        } else {\n            weekday = 'long';\n        }\n        return getter({\n            weekday\n        }, 'weekday');\n    },\n    e(token, getter) {\n        if (token > 2) {\n            return formatters.E(token, getter);\n        }\n        return formatNumber(getter({}, 'weekdaynumeric'), token > 1 ? token : undefined);\n    },\n    w(token, getter) {\n        return formatNumber(getter({}, 'week'), token > 1 ? token : undefined);\n    },\n    W(token, getter) {\n        return formatNumber(getter({}, 'weekofmonth'), token > 1 ? token : undefined);\n    },\n    H(token, getter) {\n        const hours = getter({\n            hour: 'numeric',\n            hour12: false,\n            hourCycle: 'h23',\n        }, 'hour');\n\n        if (!hours) {\n            return;\n        }\n\n        // v8 may return '24' with 'h23' style\n        const fixed = String(Number(hours) % 24);\n        return formatNumber(fixed, token > 1 ? token : undefined);\n    },\n    h(token, getter) {\n        return formatNumber(getter({\n            hour: 'numeric',\n            hour12: true,\n            hourCycle: 'h12',\n        }, 'hour'), token > 1 ? token : undefined);\n    },\n    K(token, getter) {\n        const hours = getter({\n            hour: 'numeric',\n            hour12: true,\n            hourCycle: 'h11',\n        }, 'hour');\n\n        if (!hours) {\n            return;\n        }\n\n        const fixed = String(Number(hours) % 12);\n        return formatNumber(fixed, token > 1 ? token : undefined);\n    },\n    k(token, getter) {\n        return formatNumber(getter({\n            hour: 'numeric',\n            hour12: false,\n            hourCycle: 'h24',\n        }, 'hour'), token > 2 ? token : undefined);\n    },\n    a(_token, getter) {\n        return getter({\n            hour: 'numeric',\n            hour12: true,\n            hourCycle: 'h11',\n            dayPeriod: undefined\n        }, 'dayPeriod');\n    },\n    m(token, getter) {\n        return formatNumber(getter({\n            minute: 'numeric'\n        }, 'minute'), token > 1 ? token : undefined);\n    },\n    s(token, getter) {\n        return formatNumber(getter({\n            second: 'numeric'\n        }, 'second'), token > 1 ? token : undefined);\n    },\n    S(token, getter) {\n        const res = getter({\n            fractionalSecondDigits: Math.min(3, token) as 1 | 2 | 3\n        }, 'fractionalSecond');\n\n        if (res && token > 3) {\n            return res.padEnd(token, '0');\n        }\n        return res;\n    },\n    z(token, getter) {\n        return getter({\n            timeZoneName: token === 4 ? 'long' : 'short'\n        }, 'timeZoneName');\n    },\n    Z(_token, getter) {\n        const offset = -Number(getter({}, 'timezoneoffset'));\n        const timeOffset = Math.abs(offset / 60);\n        const fullOffset = Math.floor(timeOffset) * 100 + (timeOffset - Math.floor(timeOffset)) * 60;\n\n        return (offset >= 0 ? '+' : '-') + formatNumber(String(fullOffset), 4);\n    },\n};\n\nconst formattingTokensRegExp =\n    /(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nconst msInDay = 1000 * 60 * 60 * 24;\n\nfunction cleanEscapedString(input: string): string {\n    const matched = input.match(escapedStringRegExp);\n\n    if (!matched) {\n        return input;\n    }\n\n    return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\nfunction getWeekFirstDay(date: Date, isUTC: boolean, weekStartDay: number): Date {\n    const weekDay = date[isUTC ? 'getUTCDay' : 'getDay']();\n\n    // Monday logic\n    const offset = (weekDay < weekStartDay) ?\n        weekStartDay - weekDay - 7 :\n        weekStartDay - weekDay;\n\n    return new Date(date.getTime() + msInDay * offset);\n}\n\nfunction getFirstWeekFirstDay(date: Date, isUTC: boolean, weekStartDay: number): Date {\n    const firstDay = new Date(date);\n    firstDay[isUTC ? 'setUTCDate' : 'setDate'](1);\n    firstDay[isUTC ? 'setUTCMonth' : 'setMonth'](0);\n\n    return getWeekFirstDay(firstDay, isUTC, weekStartDay);\n}\n\nfunction dayDiff(date0: Date, date1: Date): number {\n    return Math.round((date0.getTime() - date1.getTime()) / msInDay);\n}\n\nfunction getIOSWeekYear(date: Date, isUTC: boolean, weekStartDay: number): {\n    week: number;\n    year: number;\n} {\n    let week = 0;\n\n    const firstWeekFirstDay = getFirstWeekFirstDay(date, isUTC || false, weekStartDay);\n    const nextYearDate = new Date(date);\n    nextYearDate[isUTC ? 'setUTCFullYear' : 'setFullYear'](date[isUTC ? 'getUTCFullYear' : 'getFullYear']() + 1);\n    const nextYearFirstWeekFirstDay = getFirstWeekFirstDay(nextYearDate, isUTC || false, weekStartDay);\n\n    const isBeforeFirstWeek = date.getTime() < firstWeekFirstDay.getTime();\n    const isAfterLastWeek = date.getTime() >= nextYearFirstWeekFirstDay.getTime();\n\n    let year = date[isUTC ? 'getUTCFullYear' : 'getFullYear']();\n    if (isBeforeFirstWeek) {\n        --year;\n        firstWeekFirstDay[isUTC ? 'setUTCFullYear' : 'setFullYear'](firstWeekFirstDay[isUTC ? 'getUTCFullYear' : 'getFullYear']() - 1);\n        const dayOfYear = dayDiff(getWeekFirstDay(date, isUTC, weekStartDay), firstWeekFirstDay);\n        week = Math.round(dayOfYear / 7) + 1;\n    } else if (isAfterLastWeek) {\n        ++year;\n        week = 1;\n    } else {\n        const dayOfYear = dayDiff(getWeekFirstDay(date, isUTC, weekStartDay), firstWeekFirstDay);\n        week = Math.round(dayOfYear / 7) + 1;\n    }\n\n    return {\n        week,\n        year\n    };\n}\n\nexport function formatDate(date: Date, format: string, {\n    locale,\n    isUTC,\n    weekStartDay = 0\n}: {\n    locale?: string;\n    isUTC?: boolean;\n    weekStartDay?: number;\n} = {}): string {\n    const getter: FormatGetter = (opts, field): string | undefined => {\n        if (field === 'week') {\n            const { week } = getIOSWeekYear(date, isUTC || false, weekStartDay);\n\n            return String(week);\n        }\n\n        if (field === 'weekofmonth') {\n            const weekday = date[isUTC ? 'getUTCDay' : 'getDay']();\n            const firstDay = new Date(date);\n            firstDay[isUTC ? 'setUTCDate' : 'setDate'](1);\n            const firstWeekday = firstDay[isUTC ? 'getUTCDay' : 'getDay']();\n            const dayOfMonth = date[isUTC ? 'getUTCDate' : 'getDate']();\n\n            return String(Math.ceil(dayOfMonth / 7) + (weekday < firstWeekday ? 1 : 0));\n        }\n\n        if (field === 'dayofweekinmonth') {\n            const dayOfMonth = date[isUTC ? 'getUTCDate' : 'getDate']();\n\n            return String(Math.ceil(dayOfMonth / 7));\n        }\n\n        if (field === 'weekdaynumeric') {\n            let weekday = date[isUTC ? 'getUTCDay' : 'getDay']();\n\n            if (weekday < weekStartDay) {\n                weekday += 7;\n            }\n\n            return String(weekday - weekStartDay + 1);\n        }\n\n        if (field === 'dayofyear') {\n            const firstDay = new Date(date);\n            firstDay[isUTC ? 'setUTCMonth' : 'setMonth'](0);\n            firstDay[isUTC ? 'setUTCDate' : 'setDate'](1);\n            firstDay[isUTC ? 'setUTCHours' : 'setHours'](1);\n            firstDay[isUTC ? 'setUTCMinutes' : 'setMinutes'](1);\n            firstDay[isUTC ? 'setUTCSeconds' : 'setSeconds'](1);\n\n            const dayOfYear = Math.ceil((date.getTime() - firstDay.getTime()) / msInDay);\n\n            return String(dayOfYear);\n        }\n\n        if (field === 'weekyear') {\n            let { year } = getIOSWeekYear(date, isUTC || false, weekStartDay);\n\n            if (year < 1) {\n                year = 1 - year;\n            }\n\n            if (opts.year === '2-digit') {\n                return String(year % 100);\n            }\n            return String(year);\n        }\n\n        if (field === 'extendedyear') {\n            const year = date[isUTC ? 'getUTCFullYear' : 'getFullYear']();\n\n            if (opts.year === '2-digit') {\n                return String(year % 100);\n            }\n            return String(year);\n        }\n\n        if (field === 'timezoneoffset') {\n            if (isUTC) {\n                return '0';\n            }\n            return String(date.getTimezoneOffset());\n        }\n\n        if (isUTC) {\n            opts.timeZone = 'UTC';\n        }\n\n        const formatter = new Intl.DateTimeFormat(locale, opts);\n        const parts = formatter.formatToParts(date);\n\n        for (let i = 0; i < parts.length; ++i) {\n            if (parts[i].type === field) {\n                return parts[i].value;\n            }\n        }\n    };\n\n    return (format\n        .match(formattingTokensRegExp) || [])\n        .map(substring => {\n            if (substring === \"''\") {\n                return \"'\";\n            }\n\n            const firstCharacter = substring[0];\n            if (firstCharacter === \"'\") {\n                return cleanEscapedString(substring);\n            }\n\n            if (formatters[firstCharacter]) {\n                return formatters[firstCharacter](substring.length, getter);\n            }\n\n            if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n                throw new Error(\n                    `Format string contains an unescaped latin alphabet character \"${firstCharacter}\"`\n                );\n            }\n\n            return substring;\n        })\n        .join('');\n}\n","/* eslint-disable no-nested-ternary */\nimport type { DatetimeValue, EvalContext, EvalValue, IntegerValue, StringValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { DATETIME, INTEGER, STRING } from '../const';\nimport { valToString } from '../utils';\nimport { toBigInt } from '../bigint';\nimport { formatDate } from '../../utils/formatDate';\n\nfunction getMaxDate(date: Date): number {\n    const copy = new Date(date);\n\n    copy.setUTCMonth(copy.getUTCMonth() + 1);\n    copy.setUTCDate(0);\n\n    return copy.getUTCDate();\n}\n\nfunction parseUnixTime(_ctx: EvalContext, arg: IntegerValue): EvalValue {\n    return {\n        type: DATETIME,\n        value: new Date(Number(arg.value) * 1000)\n    };\n}\n\nfunction parseUnixTimeAsLocal(_ctx: EvalContext, arg: IntegerValue): EvalValue {\n    const date = new Date(Number(arg.value) * 1000);\n    const offset = date.getTimezoneOffset();\n    date.setMinutes(date.getMinutes() - offset);\n\n    return {\n        type: DATETIME,\n        value: date\n    };\n}\n\nfunction nowLocal(): EvalValue {\n    return {\n        type: DATETIME,\n        value: new Date()\n    };\n}\n\nfunction addMillis(_ctx: EvalContext, datetime: DatetimeValue, milliseconds: IntegerValue): EvalValue {\n    return {\n        type: DATETIME,\n        value: new Date(datetime.value.getTime() + Number(milliseconds.value))\n    };\n}\n\nfunction setYear(_ctx: EvalContext, datetime: DatetimeValue, year: IntegerValue): EvalValue {\n    const copy = new Date(datetime.value);\n\n    copy.setUTCFullYear(Number(year.value));\n\n    return {\n        type: DATETIME,\n        value: copy\n    };\n}\n\nfunction setMonth(_ctx: EvalContext, datetime: DatetimeValue, month: IntegerValue): EvalValue {\n    const intVal = Number(month.value);\n\n    if (intVal < 1 || intVal > 12) {\n        throw new Error(`Expecting month in [1..12], instead got ${intVal}.`);\n    }\n\n    const copy = new Date(datetime.value);\n    copy.setUTCMonth(intVal - 1);\n\n    return {\n        type: DATETIME,\n        value: copy\n    };\n}\n\nfunction setDay(_ctx: EvalContext, datetime: DatetimeValue, day: IntegerValue): EvalValue {\n    const copy = new Date(datetime.value);\n    const intVal = Number(day.value);\n\n    if (intVal <= 0 && intVal !== -1 || intVal > getMaxDate(copy)) {\n        throw new Error(`Unable to set day ${intVal} for date ${valToString(datetime)}.`);\n    }\n\n    copy.setUTCDate(intVal === -1 ? 0 : intVal);\n\n    return {\n        type: DATETIME,\n        value: copy\n    };\n}\n\nfunction setHours(_ctx: EvalContext, datetime: DatetimeValue, hours: IntegerValue): EvalValue {\n    const intVal = Number(hours.value);\n\n    if (intVal < 0 || intVal > 23) {\n        throw new Error(`Expecting hours in [0..23], instead got ${intVal}.`);\n    }\n\n    const copy = new Date(datetime.value);\n    copy.setUTCHours(intVal);\n\n    return {\n        type: DATETIME,\n        value: copy\n    };\n}\n\nfunction setMinutes(_ctx: EvalContext, datetime: DatetimeValue, minutes: IntegerValue): EvalValue {\n    const intVal = Number(minutes.value);\n\n    if (intVal < 0 || intVal > 59) {\n        throw new Error(`Expecting minutes in [0..59], instead got ${intVal}.`);\n    }\n\n    const copy = new Date(datetime.value);\n\n    copy.setUTCMinutes(intVal);\n\n    return {\n        type: DATETIME,\n        value: copy\n    };\n}\n\nfunction setSeconds(_ctx: EvalContext, datetime: DatetimeValue, seconds: IntegerValue): EvalValue {\n    const intVal = Number(seconds.value);\n\n    if (intVal < 0 || intVal > 59) {\n        throw new Error(`Expecting seconds in [0..59], instead got ${intVal}.`);\n    }\n\n    const copy = new Date(datetime.value);\n    copy.setUTCSeconds(intVal);\n\n    return {\n        type: DATETIME,\n        value: copy\n    };\n}\n\nfunction setMillis(_ctx: EvalContext, datetime: DatetimeValue, millis: IntegerValue): EvalValue {\n    const intVal = Number(millis.value);\n\n    if (intVal < 0 || intVal > 999) {\n        throw new Error(`Expecting millis in [0..999], instead got ${intVal}.`);\n    }\n\n    const copy = new Date(datetime.value);\n    copy.setUTCMilliseconds(intVal);\n\n    return {\n        type: DATETIME,\n        value: copy\n    };\n}\n\nconst getter = (\n    method: 'getUTCFullYear' | 'getUTCMonth' | 'getUTCDate' | 'getUTCDay' | 'getUTCHours' | 'getUTCMinutes' |\n        'getUTCSeconds' | 'getUTCMilliseconds'\n) => {\n    return (_ctx: EvalContext, datetime: DatetimeValue): EvalValue => {\n        const copy = new Date(datetime.value.getTime());\n\n        let value: number = copy[method]();\n\n        if (method === 'getUTCMonth') {\n            ++value;\n        } else if (method === 'getUTCDay' && value === 0) {\n            value = 7;\n        }\n\n        return {\n            type: INTEGER,\n            value: toBigInt(value)\n        };\n    };\n};\n\nfunction makeFormat(isUTC: boolean) {\n    return (ctx: EvalContext, datetime: DatetimeValue, format: StringValue, locale?: StringValue): EvalValue => {\n        return {\n            type: STRING,\n            value: formatDate(datetime.value, format.value, {\n                locale: locale?.value,\n                isUTC,\n                weekStartDay: ctx.weekStartDay\n            })\n        };\n    };\n}\n\nconst getYear = getter('getUTCFullYear');\nconst getMonth = getter('getUTCMonth');\nconst getDay = getter('getUTCDate');\nconst getDayOfWeek = getter('getUTCDay');\nconst getHours = getter('getUTCHours');\nconst getMinutes = getter('getUTCMinutes');\nconst getSeconds = getter('getUTCSeconds');\nconst getMillis = getter('getUTCMilliseconds');\n\nconst formatAsLocal = makeFormat(false);\nconst formatAsUTC = makeFormat(true);\n\nexport function registerDatetime(): void {\n    registerFunc('parseUnixTime', [INTEGER], parseUnixTime);\n    registerFunc('parseUnixTimeAsLocal', [INTEGER], parseUnixTimeAsLocal);\n    registerFunc('nowLocal', [], nowLocal);\n    registerFunc('addMillis', [DATETIME, INTEGER], addMillis);\n\n    registerFunc('setYear', [DATETIME, INTEGER], setYear);\n    registerFunc('setMonth', [DATETIME, INTEGER], setMonth);\n    registerFunc('setDay', [DATETIME, INTEGER], setDay);\n    registerFunc('setHours', [DATETIME, INTEGER], setHours);\n    registerFunc('setMinutes', [DATETIME, INTEGER], setMinutes);\n    registerFunc('setSeconds', [DATETIME, INTEGER], setSeconds);\n    registerFunc('setMillis', [DATETIME, INTEGER], setMillis);\n\n    registerFunc('getYear', [DATETIME], getYear);\n    registerFunc('getMonth', [DATETIME], getMonth);\n    registerFunc('getDay', [DATETIME], getDay);\n    registerFunc('getDayOfWeek', [DATETIME], getDayOfWeek);\n    registerFunc('getHours', [DATETIME], getHours);\n    registerFunc('getMinutes', [DATETIME], getMinutes);\n    registerFunc('getSeconds', [DATETIME], getSeconds);\n    registerFunc('getMillis', [DATETIME], getMillis);\n\n    registerFunc('formatDateAsLocal', [DATETIME, STRING], formatAsLocal);\n    registerFunc('formatDateAsUTC', [DATETIME, STRING], formatAsUTC);\n    registerFunc('formatDateAsLocalWithLocale', [DATETIME, STRING, STRING], formatAsLocal);\n    registerFunc('formatDateAsUTCWithLocale', [DATETIME, STRING, STRING], formatAsUTC);\n}\n","export function escapeRegExp(str: string): string {\n    return str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n","import type { EvalContext, EvalValue, IntegerValue, StringValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { BOOLEAN, INTEGER, STRING } from '../const';\nimport { escapeRegExp } from '../../utils/escapeRegExp';\nimport { valToString } from '../utils';\nimport { wrapError } from '../../utils/wrapError';\nimport { toBigInt } from '../bigint';\n\nfunction len(_ctx: EvalContext, arg: StringValue): EvalValue {\n    return {\n        type: INTEGER,\n        value: toBigInt(arg.value.length)\n    };\n}\n\nfunction contains(_ctx: EvalContext, wholeStr: StringValue, partStr: StringValue): EvalValue {\n    return {\n        type: BOOLEAN,\n        value: wholeStr.value.includes(partStr.value) ? 1 : 0\n    };\n}\n\nfunction substring(_ctx: EvalContext, str: StringValue, start: IntegerValue, end: IntegerValue): EvalValue {\n    if (end.value < start.value) {\n        throw new Error('Indexes should be in ascending order.');\n    }\n\n    if (\n        start.value < 0 || start.value > str.value.length ||\n        end.value < 0 || end.value > str.value.length\n    ) {\n        throw new Error('Indexes are out of bounds.');\n    }\n\n    return {\n        type: STRING,\n        value: str.value.substring(Number(start.value), Number(end.value))\n    };\n}\n\nfunction replaceAll(_ctx: EvalContext, str: StringValue, what: StringValue, replacer: StringValue): EvalValue {\n    let res: string;\n\n    if (what.value) {\n        res = str.value.replace(new RegExp(escapeRegExp(what.value), 'g'), replacer.value);\n    } else {\n        // empty str\n        res = str.value;\n    }\n\n    return {\n        type: STRING,\n        value: res\n    };\n}\n\nfunction index(_ctx: EvalContext, str: StringValue, what: StringValue): EvalValue {\n    return {\n        type: INTEGER,\n        value: toBigInt(str.value.indexOf(what.value))\n    };\n}\n\nfunction lastIndex(_ctx: EvalContext, str: StringValue, what: StringValue): EvalValue {\n    return {\n        type: INTEGER,\n        value: toBigInt(str.value.lastIndexOf(what.value))\n    };\n}\n\nfunction trim(_ctx: EvalContext, str: StringValue): EvalValue {\n    return {\n        type: STRING,\n        value: str.value.trim()\n    };\n}\n\nfunction trimLeft(_ctx: EvalContext, str: StringValue): EvalValue {\n    return {\n        type: STRING,\n        value: str.value.replace(/^\\s+/, '')\n    };\n}\n\nfunction trimRight(_ctx: EvalContext, str: StringValue): EvalValue {\n    return {\n        type: STRING,\n        value: str.value.replace(/\\s+$/, '')\n    };\n}\n\nfunction toUpperCase(_ctx: EvalContext, str: StringValue): EvalValue {\n    return {\n        type: STRING,\n        value: str.value.toUpperCase()\n    };\n}\n\nfunction toLowerCase(_ctx: EvalContext, str: StringValue): EvalValue {\n    return {\n        type: STRING,\n        value: str.value.toLowerCase()\n    };\n}\n\nfunction calcPad(\n    ctx: EvalContext,\n    val: StringValue | IntegerValue,\n    len: IntegerValue,\n    pad: StringValue\n): string {\n    if (!pad.value.length) {\n        ctx.warnings.push(wrapError(new Error('String for padding is empty.'), {\n            level: 'warn'\n        }));\n        return '';\n    }\n\n    let part = '';\n    const str = val.type === STRING ? val.value : valToString(val);\n\n    while (part.length + str.length < len.value) {\n        part += pad.value;\n    }\n    if (part.length > 0 && part.length + str.length > len.value) {\n        part = part.substring(0, Number(len.value) - Number(str.length));\n    }\n\n    return part;\n}\n\nfunction padStart(\n    ctx: EvalContext,\n    val: StringValue | IntegerValue,\n    len: IntegerValue,\n    pad: StringValue\n): EvalValue {\n    const prefix = calcPad(ctx, val, len, pad);\n\n    return {\n        type: STRING,\n        value: prefix + valToString(val)\n    };\n}\n\nfunction padEnd(\n    ctx: EvalContext,\n    val: StringValue | IntegerValue,\n    len: IntegerValue,\n    pad: StringValue\n): EvalValue {\n    const suffix = calcPad(ctx, val, len, pad);\n\n    return {\n        type: STRING,\n        value: valToString(val) + suffix\n    };\n}\n\nfunction testRegex(_ctx: EvalContext, str: StringValue, regex: StringValue): EvalValue {\n    let re: RegExp;\n    try {\n        re = new RegExp(regex.value);\n    } catch (err) {\n        throw new Error('Invalid regular expression.');\n    }\n\n    return {\n        type: BOOLEAN,\n        value: re.test(str.value) ? 1 : 0\n    };\n}\n\nfunction encodeRegex(_ctx: EvalContext, str: StringValue): EvalValue {\n    return {\n        type: STRING,\n        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions#escaping\n        value: str.value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n    };\n}\n\nexport function registerStrings(): void {\n    registerFunc('len', [STRING], len);\n    registerFunc('contains', [STRING, STRING], contains);\n    registerFunc('substring', [STRING, INTEGER, INTEGER], substring);\n    registerFunc('replaceAll', [STRING, STRING, STRING], replaceAll);\n    registerFunc('index', [STRING, STRING], index);\n    registerFunc('lastIndex', [STRING, STRING], lastIndex);\n    registerFunc('trim', [STRING], trim);\n    registerFunc('trimLeft', [STRING], trimLeft);\n    registerFunc('trimRight', [STRING], trimRight);\n    registerFunc('toUpperCase', [STRING], toUpperCase);\n    registerFunc('toLowerCase', [STRING], toLowerCase);\n    registerFunc('padStart', [STRING, INTEGER, STRING], padStart);\n    registerFunc('padStart', [INTEGER, INTEGER, STRING], padStart);\n    registerFunc('padEnd', [STRING, INTEGER, STRING], padEnd);\n    registerFunc('padEnd', [INTEGER, INTEGER, STRING], padEnd);\n    registerFunc('testRegex', [STRING, STRING], testRegex);\n    registerFunc('encodeRegex', [STRING], encodeRegex);\n}\n","import type { EvalContext, EvalValue, IntegerValue, NumberValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { INTEGER, MAX_NUMBER, MIN_NUMBER, NUMBER } from '../const';\nimport { checkIntegerOverflow, roundInteger } from '../utils';\nimport { absBigInt, bigIntZero, signBigInt, MAX_INT, MIN_INT, toBigInt } from '../bigint';\n\nfunction divInteger(ctx: EvalContext, arg0: IntegerValue, arg1: IntegerValue): EvalValue {\n    if (arg1.value === bigIntZero) {\n        throw new Error('Division by zero is not supported.');\n    }\n\n    let res = arg0.value / arg1.value;\n    res = roundInteger(ctx, res);\n    checkIntegerOverflow(ctx, res);\n\n    return {\n        type: INTEGER,\n        value: res\n    };\n}\n\nfunction divNumber(_ctx: EvalContext, arg0: NumberValue, arg1: NumberValue): EvalValue {\n    if (arg1.value === 0) {\n        throw new Error('Division by zero is not supported.');\n    }\n\n    const res = arg0.value / arg1.value;\n\n    return {\n        type: NUMBER,\n        value: res\n    };\n}\n\nfunction modInteger(ctx: EvalContext, arg0: IntegerValue, arg1: IntegerValue): EvalValue {\n    if (arg1.value === bigIntZero) {\n        throw new Error('Division by zero is not supported.');\n    }\n\n    let res = arg0.value % arg1.value;\n    res = roundInteger(ctx, res);\n    checkIntegerOverflow(ctx, res);\n\n    return {\n        type: INTEGER,\n        value: res\n    };\n}\n\nfunction modNumber(_ctx: EvalContext, arg0: NumberValue, arg1: NumberValue): EvalValue {\n    if (arg1.value === 0) {\n        throw new Error('Division by zero is not supported.');\n    }\n\n    const res = arg0.value % arg1.value;\n\n    return {\n        type: NUMBER,\n        value: res\n    };\n}\n\nfunction mulInteger(ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n    let res = args.length ? args[0].value : bigIntZero;\n    for (let i = 1; i < args.length; ++i) {\n        res *= args[i].value;\n        res = roundInteger(ctx, res);\n        checkIntegerOverflow(ctx, res);\n    }\n\n    return {\n        type: INTEGER,\n        value: res\n    };\n}\n\nfunction mulNumber(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n    let res = args.length ? args[0].value : 0;\n    for (let i = 1; i < args.length; ++i) {\n        res *= args[i].value;\n    }\n\n    return {\n        type: NUMBER,\n        value: res\n    };\n}\n\nfunction subInteger(ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n    let res = args.length ? args[0].value : bigIntZero;\n    for (let i = 1; i < args.length; ++i) {\n        res -= args[i].value;\n        res = roundInteger(ctx, res);\n        checkIntegerOverflow(ctx, res);\n    }\n\n    return {\n        type: INTEGER,\n        value: res\n    };\n}\n\nfunction subNumber(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n    let res = args.length ? args[0].value : 0;\n    for (let i = 1; i < args.length; ++i) {\n        res -= args[i].value;\n    }\n\n    return {\n        type: NUMBER,\n        value: res\n    };\n}\n\nfunction sumInteger(ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n    let res = bigIntZero;\n    for (let i = 0; i < args.length; ++i) {\n        res += args[i].value;\n        res = roundInteger(ctx, res);\n        checkIntegerOverflow(ctx, res);\n    }\n\n    return {\n        type: INTEGER,\n        value: res\n    };\n}\n\nfunction sumNumber(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n    let res = 0;\n    for (let i = 0; i < args.length; ++i) {\n        res += args[i].value;\n    }\n\n    return {\n        type: NUMBER,\n        value: res\n    };\n}\n\nfunction absInteger(ctx: EvalContext, arg: IntegerValue): EvalValue {\n    const res = absBigInt(arg.value);\n\n    checkIntegerOverflow(ctx, res);\n\n    return {\n        type: arg.type,\n        value: res\n    };\n}\n\nfunction absNumber(_ctx: EvalContext, arg: NumberValue): EvalValue {\n    const res = Math.abs(arg.value);\n\n    return {\n        type: NUMBER,\n        value: res\n    };\n}\n\nfunction maxInt(_ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n    if (!args.length) {\n        throw new Error('Function requires non empty argument list.');\n    }\n\n    let max = args[0].value;\n    for (let i = 1; i < args.length; ++i) {\n        if (args[i].value > max) {\n            max = args[i].value;\n        }\n    }\n\n    return {\n        type: INTEGER,\n        value: max\n    };\n}\n\nfunction maxNum(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n    if (!args.length) {\n        throw new Error('Function requires non empty argument list.');\n    }\n\n    return {\n        type: NUMBER,\n        value: Math.max(...args.map(arg => arg.value))\n    };\n}\n\nfunction minInt(_ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n    if (!args.length) {\n        throw new Error('Function requires non empty argument list.');\n    }\n\n    let min = args[0].value;\n    for (let i = 1; i < args.length; ++i) {\n        if (args[i].value < min) {\n            min = args[i].value;\n        }\n    }\n\n    return {\n        type: INTEGER,\n        value: min\n    };\n}\n\nfunction minNum(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n    if (!args.length) {\n        throw new Error('Function requires non empty argument list.');\n    }\n\n    return {\n        type: NUMBER,\n        value: Math.min(...args.map(arg => arg.value))\n    };\n}\n\nfunction maxNumber(): EvalValue {\n    return {\n        type: NUMBER,\n        value: MAX_NUMBER\n    };\n}\n\nfunction minNumber(): EvalValue {\n    return {\n        type: NUMBER,\n        value: MIN_NUMBER\n    };\n}\n\nfunction maxInteger(ctx: EvalContext): EvalValue {\n    checkIntegerOverflow(ctx, MAX_INT);\n\n    return {\n        type: INTEGER,\n        value: MAX_INT\n    };\n}\n\nfunction minInteger(ctx: EvalContext): EvalValue {\n    checkIntegerOverflow(ctx, MIN_INT);\n\n    return {\n        type: INTEGER,\n        value: MIN_INT\n    };\n}\n\nfunction round(_ctx: EvalContext, arg: NumberValue): EvalValue {\n    const sign = Math.sign(arg.value);\n\n    return {\n        type: NUMBER,\n        // js treats Math.round(-0.5) as 0, which is different to other platforms\n        value: sign * Math.round(Math.abs(arg.value))\n    };\n}\n\nfunction floor(_ctx: EvalContext, arg: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: Math.floor(arg.value)\n    };\n}\n\nfunction ceil(_ctx: EvalContext, arg: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: Math.ceil(arg.value)\n    };\n}\n\nfunction signumInteger(_ctx: EvalContext, arg: IntegerValue): EvalValue {\n    return {\n        type: INTEGER,\n        value: signBigInt(arg.value)\n    };\n}\n\nfunction signumNumber(_ctx: EvalContext, arg: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: Math.sign(arg.value)\n    };\n}\n\nfunction copySignInteger(ctx: EvalContext, arg0: IntegerValue, arg1: IntegerValue): EvalValue {\n    let res: bigint;\n\n    if (arg1.value === bigIntZero) {\n        res = arg0.value;\n    } else if (arg0.value === bigIntZero) {\n        res = toBigInt(0);\n    } else {\n        const sign = signBigInt(arg1.value);\n\n        res = absBigInt(arg0.value) * sign;\n    }\n\n    checkIntegerOverflow(ctx, res);\n\n    return {\n        type: INTEGER,\n        value: res\n    };\n}\n\nfunction copySignNumber(_ctx: EvalContext, arg0: NumberValue, arg1: NumberValue): EvalValue {\n    let sign = Math.sign(arg1.value);\n\n    if (sign === 0) {\n        sign = Object.is(sign, 0) ? 1 : -1;\n    }\n\n    const res = Math.abs(arg0.value) * sign;\n\n    return {\n        type: NUMBER,\n        value: res\n    };\n}\n\nexport function registerMath(): void {\n    registerFunc('div', [INTEGER, INTEGER], divInteger);\n    registerFunc('div', [NUMBER, NUMBER], divNumber);\n\n    registerFunc('mod', [INTEGER, INTEGER], modInteger);\n    registerFunc('mod', [NUMBER, NUMBER], modNumber);\n\n    registerFunc('mul', [{\n        type: INTEGER,\n        isVararg: true\n    }], mulInteger);\n    registerFunc('mul', [{\n        type: NUMBER,\n        isVararg: true\n    }], mulNumber);\n\n    registerFunc('sub', [{\n        type: INTEGER,\n        isVararg: true\n    }], subInteger);\n    registerFunc('sub', [{\n        type: NUMBER,\n        isVararg: true\n    }], subNumber);\n\n    registerFunc('sum', [{\n        type: INTEGER,\n        isVararg: true\n    }], sumInteger);\n    registerFunc('sum', [{\n        type: NUMBER,\n        isVararg: true\n    }], sumNumber);\n\n    registerFunc('abs', [INTEGER], absInteger);\n    registerFunc('abs', [NUMBER], absNumber);\n\n    registerFunc('max', [{\n        type: INTEGER,\n        isVararg: true\n    }], maxInt);\n    registerFunc('max', [{\n        type: NUMBER,\n        isVararg: true\n    }], maxNum);\n\n    registerFunc('min', [{\n        type: INTEGER,\n        isVararg: true\n    }], minInt);\n    registerFunc('min', [{\n        type: NUMBER,\n        isVararg: true\n    }], minNum);\n\n    registerFunc('maxNumber', [], maxNumber);\n    registerFunc('minNumber', [], minNumber);\n\n    registerFunc('maxInteger', [], maxInteger);\n    registerFunc('minInteger', [], minInteger);\n\n    registerFunc('round', [NUMBER], round);\n    registerFunc('floor', [NUMBER], floor);\n    registerFunc('ceil', [NUMBER], ceil);\n\n    registerFunc('signum', [INTEGER], signumInteger);\n    registerFunc('signum', [NUMBER], signumNumber);\n\n    registerFunc('copySign', [INTEGER, INTEGER], copySignInteger);\n    registerFunc('copySign', [NUMBER, NUMBER], copySignNumber);\n}\n","import type { ColorValue, EvalContext, EvalValue, NumberValue, StringValue } from '../eval';\nimport type { ParsedColor } from '../../utils/correctColor';\nimport { registerFunc } from './funcs';\nimport { COLOR, NUMBER, STRING } from '../const';\nimport { safeConvertColor, stringifyColor } from '../utils';\n\nfunction colorGetter(\n    field: keyof ParsedColor\n): (_ctx: EvalContext, color: StringValue | ColorValue) => EvalValue {\n    return (_vars, color) => {\n        const parsed = safeConvertColor(color.value);\n\n        return {\n            type: NUMBER,\n            value: parsed[field] / 255\n        };\n    };\n}\n\nfunction colorSetter(\n    field: keyof ParsedColor\n): (_ctx: EvalContext, color: StringValue | ColorValue, val: NumberValue) => EvalValue {\n    return (_vars, color, val) => {\n        const parsed = safeConvertColor(color.value);\n\n        parsed[field] = val.value * 255;\n\n        return {\n            type: COLOR,\n            value: stringifyColor(parsed)\n        };\n    };\n}\n\nconst getColorAlpha = colorGetter('a');\nconst getColorRed = colorGetter('r');\nconst getColorGreen = colorGetter('g');\nconst getColorBlue = colorGetter('b');\n\nconst setColorAlpha = colorSetter('a');\nconst setColorRed = colorSetter('r');\nconst setColorGreen = colorSetter('g');\nconst setColorBlue = colorSetter('b');\n\nfunction rgb(_ctx: EvalContext, red: NumberValue, green: NumberValue, blue: NumberValue): EvalValue {\n    const parsed: ParsedColor = {\n        a: 255,\n        r: red.value * 255,\n        g: green.value * 255,\n        b: blue.value * 255\n    };\n\n    return {\n        type: COLOR,\n        value: stringifyColor(parsed)\n    };\n}\n\nfunction argb(\n    _ctx: EvalContext,\n    alpha: NumberValue,\n    red: NumberValue,\n    green: NumberValue,\n    blue: NumberValue\n): EvalValue {\n    const parsed: ParsedColor = {\n        a: alpha.value * 255,\n        r: red.value * 255,\n        g: green.value * 255,\n        b: blue.value * 255\n    };\n\n    return {\n        type: COLOR,\n        value: stringifyColor(parsed)\n    };\n}\n\nexport function registerColors(): void {\n    registerFunc('getColorAlpha', [STRING], getColorAlpha);\n    registerFunc('getColorAlpha', [COLOR], getColorAlpha);\n    registerFunc('getColorRed', [STRING], getColorRed);\n    registerFunc('getColorRed', [COLOR], getColorRed);\n    registerFunc('getColorGreen', [STRING], getColorGreen);\n    registerFunc('getColorGreen', [COLOR], getColorGreen);\n    registerFunc('getColorBlue', [STRING], getColorBlue);\n    registerFunc('getColorBlue', [COLOR], getColorBlue);\n\n    registerFunc('setColorAlpha', [STRING, NUMBER], setColorAlpha);\n    registerFunc('setColorAlpha', [COLOR, NUMBER], setColorAlpha);\n    registerFunc('setColorRed', [STRING, NUMBER], setColorRed);\n    registerFunc('setColorRed', [COLOR, NUMBER], setColorRed);\n    registerFunc('setColorGreen', [STRING, NUMBER], setColorGreen);\n    registerFunc('setColorGreen', [COLOR, NUMBER], setColorGreen);\n    registerFunc('setColorBlue', [STRING, NUMBER], setColorBlue);\n    registerFunc('setColorBlue', [COLOR, NUMBER], setColorBlue);\n\n    registerFunc('rgb', [NUMBER, NUMBER, NUMBER], rgb);\n    registerFunc('argb', [NUMBER, NUMBER, NUMBER, NUMBER], argb);\n}\n","import type { EvalContext, EvalValue, IntegerValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { INTEGER } from '../const';\nimport { toBigInt } from '../bigint';\nimport { checkIntegerOverflow } from '../utils';\n\nfunction getDuration(ctx: EvalContext, milliseconds: IntegerValue, delimiter: number, whole?: number): EvalValue {\n    if (milliseconds.value < 0) {\n        throw new Error('Expecting non-negative number of milliseconds.');\n    }\n\n    let val = toBigInt(milliseconds.value) / toBigInt(delimiter);\n\n    checkIntegerOverflow(ctx, val);\n\n    if (whole) {\n        val = toBigInt(val) % toBigInt(whole);\n    }\n\n    return {\n        type: INTEGER,\n        value: val\n    };\n}\n\nconst MS_IN_SECOND = 1000;\nconst SECONDS_IN_MINUTE = 60;\nconst MS_IN_MINUTE = 1000 * 60;\nconst MINUTES_IN_HOUR = 60;\nconst MS_IN_HOUR = 1000 * 60 * 60;\nconst HOURS_IN_DAY = 24;\nconst MS_IN_DAY = 1000 * 60 * 60 * 24;\nconst MS_IN_WEEK = 1000 * 60 * 60 * 24 * 7;\n\nfunction getIntervalSeconds(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n    return getDuration(ctx, milliseconds, MS_IN_SECOND, SECONDS_IN_MINUTE);\n}\n\nfunction getIntervalTotalSeconds(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n    return getDuration(ctx, milliseconds, MS_IN_SECOND);\n}\n\nfunction getIntervalMinutes(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n    return getDuration(ctx, milliseconds, MS_IN_MINUTE, MINUTES_IN_HOUR);\n}\n\nfunction getIntervalTotalMinutes(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n    return getDuration(ctx, milliseconds, MS_IN_MINUTE);\n}\n\nfunction getIntervalHours(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n    return getDuration(ctx, milliseconds, MS_IN_HOUR, HOURS_IN_DAY);\n}\n\nfunction getIntervalTotalHours(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n    return getDuration(ctx, milliseconds, MS_IN_HOUR);\n}\n\nfunction getIntervalTotalDays(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n    return getDuration(ctx, milliseconds, MS_IN_DAY);\n}\n\nfunction getIntervalTotalWeeks(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n    return getDuration(ctx, milliseconds, MS_IN_WEEK);\n}\n\nexport function registerInterval(): void {\n    registerFunc('getIntervalSeconds', [INTEGER], getIntervalSeconds);\n    registerFunc('getIntervalTotalSeconds', [INTEGER], getIntervalTotalSeconds);\n    registerFunc('getIntervalMinutes', [INTEGER], getIntervalMinutes);\n    registerFunc('getIntervalTotalMinutes', [INTEGER], getIntervalTotalMinutes);\n    registerFunc('getIntervalHours', [INTEGER], getIntervalHours);\n    registerFunc('getIntervalTotalHours', [INTEGER], getIntervalTotalHours);\n    registerFunc('getIntervalTotalDays', [INTEGER], getIntervalTotalDays);\n    registerFunc('getIntervalTotalWeeks', [INTEGER], getIntervalTotalWeeks);\n}\n","import { ARRAY, BOOLEAN, COLOR, DICT, INTEGER, NUMBER, STRING, URL } from '../const';\nimport type { BooleanValue, DictValue, EvalContext, EvalTypes, EvalTypesWithoutDatetime, EvalValue, IntegerValue, NumberValue, StringValue } from '../eval';\nimport { convertJsValueToDivKit, transformColorValue } from '../utils';\nimport { registerFunc, registerMethod } from './funcs';\n\nfunction getProp(obj: object, path: string[]): unknown {\n    let current: object = obj;\n\n    for (let i = 0; i < path.length; ++i) {\n        if (!current) {\n            throw new Error(`Missing property \"${path[i]}\" in the dict.`);\n        }\n        const val = current[path[i] as keyof typeof current];\n        if (val === undefined) {\n            throw new Error(`Missing property \"${path[i]}\" in the dict.`);\n        }\n        current = val;\n    }\n\n    return current;\n}\n\nfunction dictGetter(evalType: EvalTypesWithoutDatetime) {\n    return (ctx: EvalContext, dict: DictValue, ...path: StringValue[]): EvalValue => {\n        if (path.length === 0) {\n            throw new Error('Non empty argument list is required.');\n        }\n\n        const val = getProp(dict.value, path.map(it => it.value));\n\n        return convertJsValueToDivKit(ctx, val, evalType);\n    };\n}\n\nfunction optWrapper<ValueType extends EvalValue>(\n    func: (ctx: EvalContext, dict: DictValue, ...path: StringValue[]) => EvalValue,\n    fallbackType: EvalTypes\n) {\n    return (ctx: EvalContext, fallback: ValueType, dict: DictValue, ...path: StringValue[]) => {\n        try {\n            return func(ctx, dict, ...path);\n        } catch (_err) {\n            // ignore error\n\n            let value = fallback.value;\n            if (fallbackType === 'color') {\n                value = transformColorValue(value as string);\n            }\n            return {\n                type: fallbackType,\n                value\n            } as unknown as EvalValue;\n        }\n    };\n}\n\nconst getDictString = dictGetter(STRING);\nconst getDictNumber = dictGetter(NUMBER);\nconst getDictInteger = dictGetter(INTEGER);\nconst getDictBoolean = dictGetter(BOOLEAN);\nconst getDictColor = dictGetter(COLOR);\nconst getDictUrl = dictGetter(URL);\nconst getDictArray = dictGetter(ARRAY);\nconst getDictDict = dictGetter(DICT);\n\nconst getDictOptString = optWrapper<StringValue>(getDictString, STRING);\nconst getDictOptNumber = optWrapper<NumberValue>(getDictNumber, NUMBER);\nconst getDictOptInteger = optWrapper<IntegerValue>(getDictInteger, INTEGER);\nconst getDictOptBoolean = optWrapper<BooleanValue>(getDictBoolean, BOOLEAN);\nconst getDictOptColor = optWrapper<BooleanValue>(getDictColor, COLOR);\nconst getDictOptUrl = optWrapper<BooleanValue>(getDictUrl, URL);\n\nfunction getDictOptArray(ctx: EvalContext, dict: DictValue, ...path: StringValue[]): EvalValue {\n    try {\n        return getDictArray(ctx, dict, ...path);\n    } catch (_err) {\n        // ignore error\n        return {\n            type: ARRAY,\n            value: []\n        } as unknown as EvalValue;\n    }\n}\n\nfunction getDictOptDict(ctx: EvalContext, dict: DictValue, ...path: StringValue[]): EvalValue {\n    try {\n        return getDictDict(ctx, dict, ...path);\n    } catch (_err) {\n        // ignore error\n        return {\n            type: DICT,\n            value: {}\n        } as unknown as EvalValue;\n    }\n}\n\nfunction containsKey(_ext: EvalContext, dict: DictValue, key: StringValue): BooleanValue {\n    return {\n        type: BOOLEAN,\n        value: key.value in dict.value ? 1 : 0\n    };\n}\n\nfunction isEmpty(_ext: EvalContext, dict: DictValue): BooleanValue {\n    return {\n        type: BOOLEAN,\n        value: Object.keys(dict.value).length ? 0 : 1\n    };\n}\n\nexport function registerDict(): void {\n    const STRING_VARARG = {\n        type: STRING,\n        isVararg: true\n    } as const;\n\n    registerFunc('getDictString', [DICT, STRING_VARARG], getDictString);\n    registerFunc('getStringFromDict', [DICT, STRING_VARARG], getDictString);\n\n    registerFunc('getDictNumber', [DICT, STRING_VARARG], getDictNumber);\n    registerFunc('getNumberFromDict', [DICT, STRING_VARARG], getDictNumber);\n\n    registerFunc('getDictInteger', [DICT, STRING_VARARG], getDictInteger);\n    registerFunc('getIntegerFromDict', [DICT, STRING_VARARG], getDictInteger);\n\n    registerFunc('getDictBoolean', [DICT, STRING_VARARG], getDictBoolean);\n    registerFunc('getBooleanFromDict', [DICT, STRING_VARARG], getDictBoolean);\n\n    registerFunc('getDictColor', [DICT, STRING_VARARG], getDictColor);\n    registerFunc('getColorFromDict', [DICT, STRING_VARARG], getDictColor);\n\n    registerFunc('getDictUrl', [DICT, STRING_VARARG], getDictUrl);\n    registerFunc('getUrlFromDict', [DICT, STRING_VARARG], getDictUrl);\n\n    registerFunc('getDictOptString', [STRING, DICT, STRING_VARARG], getDictOptString);\n    registerFunc('getOptStringFromDict', [STRING, DICT, STRING_VARARG], getDictOptString);\n\n    registerFunc('getDictOptNumber', [NUMBER, DICT, STRING_VARARG], getDictOptNumber);\n    registerFunc('getOptNumberFromDict', [NUMBER, DICT, STRING_VARARG], getDictOptNumber);\n\n    registerFunc('getDictOptInteger', [INTEGER, DICT, STRING_VARARG], getDictOptInteger);\n    registerFunc('getOptIntegerFromDict', [INTEGER, DICT, STRING_VARARG], getDictOptInteger);\n\n    registerFunc('getDictOptBoolean', [BOOLEAN, DICT, STRING_VARARG], getDictOptBoolean);\n    registerFunc('getOptBooleanFromDict', [BOOLEAN, DICT, STRING_VARARG], getDictOptBoolean);\n\n    registerFunc('getDictOptColor', [COLOR, DICT, STRING_VARARG], getDictOptColor);\n    registerFunc('getOptColorFromDict', [COLOR, DICT, STRING_VARARG], getDictOptColor);\n\n    registerFunc('getDictOptColor', [STRING, DICT, STRING_VARARG], getDictOptColor);\n    registerFunc('getOptColorFromDict', [STRING, DICT, STRING_VARARG], getDictOptColor);\n\n    registerFunc('getDictOptUrl', [STRING, DICT, STRING_VARARG], getDictOptUrl);\n    registerFunc('getOptUrlFromDict', [STRING, DICT, STRING_VARARG], getDictOptUrl);\n\n    registerFunc('getDictOptUrl', [URL, DICT, STRING_VARARG], getDictOptUrl);\n    registerFunc('getOptUrlFromDict', [URL, DICT, STRING_VARARG], getDictOptUrl);\n\n    registerFunc('getDictFromDict', [DICT, STRING_VARARG], getDictDict);\n\n    registerFunc('getArrayFromDict', [DICT, STRING_VARARG], getDictArray);\n\n    registerFunc('getOptArrayFromDict', [DICT, STRING_VARARG], getDictOptArray);\n\n    registerFunc('getOptDictFromDict', [DICT, STRING_VARARG], getDictOptDict);\n\n    registerMethod('getString', [DICT, STRING_VARARG], getDictString);\n    registerMethod('getBoolean', [DICT, STRING_VARARG], getDictBoolean);\n    registerMethod('getInteger', [DICT, STRING_VARARG], getDictInteger);\n    registerMethod('getNumber', [DICT, STRING_VARARG], getDictNumber);\n    registerMethod('getUrl', [DICT, STRING_VARARG], getDictUrl);\n    registerMethod('getColor', [DICT, STRING_VARARG], getDictColor);\n    registerMethod('getArray', [DICT, STRING_VARARG], getDictArray);\n    registerMethod('getDict', [DICT, STRING_VARARG], getDictDict);\n    registerMethod('containsKey', [DICT, STRING], containsKey);\n    registerMethod('isEmpty', [DICT], isEmpty);\n}\n","import { toBigInt } from '../bigint';\nimport { ARRAY, BOOLEAN, COLOR, DICT, INTEGER, NUMBER, STRING, URL } from '../const';\nimport type { ArrayValue, BooleanValue, ColorValue, EvalContext, EvalTypes, EvalValue, IntegerValue, NumberValue, StringValue, UrlValue } from '../eval';\nimport { checkIntegerOverflow, transformColorValue, typeToString } from '../utils';\nimport { registerFunc, registerMethod } from './funcs';\n\nfunction arrayGetter(jsType: string, runtimeType: string) {\n    return (ctx: EvalContext, array: ArrayValue, index: IntegerValue): EvalValue => {\n        if (index.value < 0 || index.value >= array.value.length) {\n            throw new Error(`Requested index (${index.value}) out of bounds array size (${array.value.length}).`);\n        }\n        let val = array.value[Number(index.value)];\n\n        let type: string = typeof val;\n        if (\n            jsType === 'array' && !Array.isArray(val) ||\n            jsType !== 'array' && type !== jsType ||\n            type === 'object' && val === null\n        ) {\n            if (type === 'object') {\n                if (Array.isArray(val)) {\n                    type = 'Array';\n                } else if (val === null) {\n                    type = 'Null';\n                } else {\n                    type = 'Dict';\n                }\n            }\n            throw new Error(`Incorrect value type: expected ${typeToString(runtimeType)}, got ${typeToString(type)}.`);\n        }\n        if (jsType === 'number' && runtimeType === 'integer') {\n            checkIntegerOverflow(ctx, val as number);\n            try {\n                val = toBigInt(val as number);\n            } catch (_err) {\n                throw new Error('Cannot convert value to integer.');\n            }\n        }\n        if (jsType === 'string' && runtimeType === 'color') {\n            val = transformColorValue(val as string);\n        }\n\n        return {\n            type: runtimeType,\n            value: val\n        } as EvalValue;\n    };\n}\n\nfunction optWrapper<ValueType extends EvalValue>(\n    func: (ctx: EvalContext, array: ArrayValue, index: IntegerValue) => EvalValue,\n    fallbackType: EvalTypes\n) {\n    return (ctx: EvalContext, array: ArrayValue, index: IntegerValue, fallback: ValueType) => {\n        try {\n            return func(ctx, array, index);\n        } catch (_err) {\n            // ignore error\n\n            let value = fallback.value;\n            if (fallbackType === 'color') {\n                value = transformColorValue(value as string);\n            }\n            return {\n                type: fallbackType,\n                value\n            } as unknown as EvalValue;\n        }\n    };\n}\n\nconst getArrayString = arrayGetter('string', 'string');\nconst getArrayNumber = arrayGetter('number', 'number');\nconst getArrayInteger = arrayGetter('number', 'integer');\nconst getArrayBoolean = arrayGetter('boolean', 'boolean');\nconst getArrayColor = arrayGetter('string', 'color');\nconst getArrayUrl = arrayGetter('string', 'url');\nconst getArrayArray = arrayGetter('array', 'array');\nconst getArrayDict = arrayGetter('object', 'dict');\n\nconst getArrayOptString = optWrapper<StringValue>(getArrayString, 'string');\nconst getArrayOptNumber = optWrapper<NumberValue>(getArrayNumber, 'number');\nconst getArrayOptInteger = optWrapper<IntegerValue>(getArrayInteger, 'integer');\nconst getArrayOptBoolean = optWrapper<BooleanValue>(getArrayBoolean, 'boolean');\nconst getArrayOptColor = optWrapper<ColorValue>(getArrayColor, 'color');\nconst getArrayOptUrl = optWrapper<UrlValue>(getArrayUrl, 'url');\n\nfunction getArrayOptArray(ctx: EvalContext, array: ArrayValue, index: IntegerValue): EvalValue {\n    try {\n        return getArrayArray(ctx, array, index);\n    } catch (_err) {\n        // ignore error\n        return {\n            type: ARRAY,\n            value: []\n        } as unknown as EvalValue;\n    }\n}\n\nfunction getArrayOptDict(ctx: EvalContext, array: ArrayValue, index: IntegerValue): EvalValue {\n    try {\n        return getArrayDict(ctx, array, index);\n    } catch (_err) {\n        // ignore error\n        return {\n            type: DICT,\n            value: {}\n        } as unknown as EvalValue;\n    }\n}\n\nfunction len(_ctx: EvalContext, array: ArrayValue): EvalValue {\n    return {\n        type: INTEGER,\n        value: toBigInt(array.value.length)\n    };\n}\n\nfunction isEmpty(_ctx: EvalContext, array: ArrayValue): EvalValue {\n    return {\n        type: BOOLEAN,\n        value: array.value.length === 0 ? 1 : 0\n    };\n}\n\nexport function registerArray(): void {\n    registerFunc('getArrayString', [\n        ARRAY,\n        INTEGER\n    ], getArrayString);\n    registerFunc('getStringFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayString);\n\n    registerFunc('getArrayNumber', [\n        ARRAY,\n        INTEGER\n    ], getArrayNumber);\n    registerFunc('getNumberFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayNumber);\n\n    registerFunc('getArrayInteger', [\n        ARRAY,\n        INTEGER\n    ], getArrayInteger);\n    registerFunc('getIntegerFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayInteger);\n\n    registerFunc('getArrayBoolean', [\n        ARRAY,\n        INTEGER\n    ], getArrayBoolean);\n    registerFunc('getBooleanFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayBoolean);\n\n    registerFunc('getArrayColor', [\n        ARRAY,\n        INTEGER\n    ], getArrayColor);\n    registerFunc('getColorFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayColor);\n\n    registerFunc('getArrayUrl', [\n        ARRAY,\n        INTEGER\n    ], getArrayUrl);\n    registerFunc('getUrlFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayUrl);\n\n    registerFunc('getArrayFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayArray);\n\n    registerFunc('getDictFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayDict);\n\n    registerFunc('getArrayOptString', [\n        ARRAY,\n        INTEGER,\n        STRING\n    ], getArrayOptString);\n    registerFunc('getOptStringFromArray', [\n        ARRAY,\n        INTEGER,\n        STRING\n    ], getArrayOptString);\n\n    registerFunc('getArrayOptNumber', [\n        ARRAY,\n        INTEGER,\n        NUMBER\n    ], getArrayOptNumber);\n    registerFunc('getOptNumberFromArray', [\n        ARRAY,\n        INTEGER,\n        NUMBER\n    ], getArrayOptNumber);\n\n    registerFunc('getArrayOptInteger', [\n        ARRAY,\n        INTEGER,\n        INTEGER\n    ], getArrayOptInteger);\n    registerFunc('getOptIntegerFromArray', [\n        ARRAY,\n        INTEGER,\n        INTEGER\n    ], getArrayOptInteger);\n\n    registerFunc('getArrayOptBoolean', [\n        ARRAY,\n        INTEGER,\n        BOOLEAN\n    ], getArrayOptBoolean);\n    registerFunc('getOptBooleanFromArray', [\n        ARRAY,\n        INTEGER,\n        BOOLEAN\n    ], getArrayOptBoolean);\n\n    registerFunc('getArrayOptColor', [\n        ARRAY,\n        INTEGER,\n        COLOR\n    ], getArrayOptColor);\n    registerFunc('getOptColorFromArray', [\n        ARRAY,\n        INTEGER,\n        COLOR\n    ], getArrayOptColor);\n    registerFunc('getArrayOptColor', [\n        ARRAY,\n        INTEGER,\n        STRING\n    ], getArrayOptColor);\n    registerFunc('getOptColorFromArray', [\n        ARRAY,\n        INTEGER,\n        STRING\n    ], getArrayOptColor);\n\n    registerFunc('getArrayOptUrl', [\n        ARRAY,\n        INTEGER,\n        URL\n    ], getArrayOptUrl);\n    registerFunc('getOptUrlFromArray', [\n        ARRAY,\n        INTEGER,\n        URL\n    ], getArrayOptUrl);\n    registerFunc('getArrayOptUrl', [\n        ARRAY,\n        INTEGER,\n        STRING\n    ], getArrayOptUrl);\n    registerFunc('getOptUrlFromArray', [\n        ARRAY,\n        INTEGER,\n        STRING\n    ], getArrayOptUrl);\n\n    registerFunc('getOptArrayFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayOptArray);\n\n    registerFunc('getOptDictFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayOptDict);\n\n    registerFunc('len', [\n        ARRAY\n    ], len);\n\n    registerMethod('getString', [ARRAY, INTEGER], getArrayString);\n    registerMethod('getInteger', [ARRAY, INTEGER], getArrayInteger);\n    registerMethod('getNumber', [ARRAY, INTEGER], getArrayNumber);\n    registerMethod('getBoolean', [ARRAY, INTEGER], getArrayBoolean);\n    registerMethod('getUrl', [ARRAY, INTEGER], getArrayUrl);\n    registerMethod('getColor', [ARRAY, INTEGER], getArrayColor);\n    registerMethod('getArray', [ARRAY, INTEGER], getArrayArray);\n    registerMethod('getDict', [ARRAY, INTEGER], getArrayDict);\n    registerMethod('isEmpty', [ARRAY], isEmpty);\n}\n","import type { EvalContext, EvalValue, StringValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { ARRAY, BOOLEAN, COLOR, DICT, INTEGER, NUMBER, STRING, URL } from '../const';\nimport { convertJsValueToDivKit } from '../utils';\n\nexport function getStored(evalType: 'string' | 'number' | 'integer' | 'boolean' | 'color' | 'url' | 'array' | 'dict') {\n    return (ctx: EvalContext, name: StringValue, fallback?: EvalValue): EvalValue => {\n        if (!ctx.store) {\n            if (!fallback) {\n                throw new Error('Missing value.');\n            }\n            return {\n                type: evalType,\n                value: fallback.value\n            } as EvalValue;\n        }\n        let expectedType: 'boolean' | 'number' | 'string';\n        if (evalType === 'boolean') {\n            expectedType = 'boolean';\n        } else if (evalType === 'number' || evalType === 'integer') {\n            expectedType = 'number';\n        } else {\n            expectedType = 'string';\n        }\n        let val;\n        if (ctx.store.get) {\n            val = ctx.store.get(name.value, evalType);\n        } else if (ctx.store.getValue) {\n            val = ctx.store.getValue(name.value, expectedType);\n        }\n\n        if (val === undefined) {\n            if (!fallback) {\n                throw new Error('Missing value.');\n            }\n            return {\n                type: evalType,\n                value: fallback.value\n            } as EvalValue;\n        }\n\n        return convertJsValueToDivKit(ctx, val, evalType);\n    };\n}\n\nexport function registerStored(): void {\n    registerFunc('getStoredIntegerValue', [STRING, INTEGER], getStored(INTEGER));\n    registerFunc('getStoredNumberValue', [STRING, NUMBER], getStored(NUMBER));\n    registerFunc('getStoredStringValue', [STRING, STRING], getStored(STRING));\n    registerFunc('getStoredUrlValue', [STRING, URL], getStored(URL));\n    registerFunc('getStoredUrlValue', [STRING, STRING], getStored(URL));\n    registerFunc('getStoredColorValue', [STRING, COLOR], getStored(COLOR));\n    registerFunc('getStoredColorValue', [STRING, STRING], getStored(COLOR));\n    registerFunc('getStoredBooleanValue', [STRING, BOOLEAN], getStored(BOOLEAN));\n    registerFunc('getStoredArrayValue', [STRING], getStored(ARRAY));\n    registerFunc('getStoredDictValue', [STRING], getStored(DICT));\n}\n","import type { EvalContext, EvalValue, NumberValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { NUMBER } from '../const';\n\nfunction pi(): EvalValue {\n    return {\n        type: NUMBER,\n        value: Math.PI\n    };\n}\n\nfunction toRadians(_ctx: EvalContext, degrees: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: degrees.value / 180 * Math.PI\n    };\n}\n\nfunction toDegrees(_ctx: EvalContext, radians: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: radians.value / Math.PI * 180\n    };\n}\n\nfunction sin(_ctx: EvalContext, rad: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: Math.sin(rad.value)\n    };\n}\n\nfunction cos(_ctx: EvalContext, rad: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: Math.cos(rad.value)\n    };\n}\n\nfunction tan(_ctx: EvalContext, rad: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: Math.tan(rad.value)\n    };\n}\n\nfunction cot(_ctx: EvalContext, rad: NumberValue): EvalValue {\n    const tan = Math.tan(rad.value);\n\n    if (Math.abs(tan) < 1e-12) {\n        throw new Error('Cotangent is undefined for the given value.');\n    }\n\n    return {\n        type: NUMBER,\n        value: 1 / tan\n    };\n}\n\nfunction atan(_ctx: EvalContext, rad: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: Math.atan(rad.value)\n    };\n}\n\nfunction asin(_ctx: EvalContext, rad: NumberValue): EvalValue {\n    if (rad.value > 1 || rad.value < -1) {\n        throw new Error('Arcsine is undefined for the given value.');\n    }\n\n    return {\n        type: NUMBER,\n        value: Math.asin(rad.value)\n    };\n}\n\nfunction acos(_ctx: EvalContext, rad: NumberValue): EvalValue {\n    if (rad.value > 1 || rad.value < -1) {\n        throw new Error('Arccosine is undefined for the given value.');\n    }\n\n    return {\n        type: NUMBER,\n        value: Math.acos(rad.value)\n    };\n}\n\nexport function registerTrigonometry(): void {\n    registerFunc('pi', [], pi);\n    registerFunc('toRadians', [NUMBER], toRadians);\n    registerFunc('toDegrees', [NUMBER], toDegrees);\n    registerFunc('sin', [NUMBER], sin);\n    registerFunc('cos', [NUMBER], cos);\n    registerFunc('tan', [NUMBER], tan);\n    registerFunc('cot', [NUMBER], cot);\n    registerFunc('atan', [NUMBER], atan);\n    registerFunc('asin', [NUMBER], asin);\n    registerFunc('acos', [NUMBER], acos);\n}\n","import { registerStd } from './std';\nimport { registerDatetime } from './datetime';\nimport { registerStrings } from './strings';\nimport { registerMath } from './math';\nimport { registerColors } from './colors';\nimport { registerInterval } from './interval';\nimport { registerDict } from './dict';\nimport { registerArray } from './array';\nimport { registerStored } from './stored';\nimport { registerTrigonometry } from './trigonometry';\n\nexport function register(): void {\n    registerStd();\n    registerDatetime();\n    registerInterval();\n    registerStrings();\n    registerMath();\n    registerColors();\n    registerDict();\n    registerArray();\n    registerStored();\n    registerTrigonometry();\n}\n","/* eslint-disable max-depth */\n/* eslint-disable no-else-return */\n\nimport type {\n    BinaryExpression, BooleanLiteral, CallExpression, CompareOperator,\n    ConditionalExpression, EqualityOperator, FactorOperator, IntegerLiteral,\n    LogicalExpression,\n    MethodExpression,\n    Node, NumberLiteral, StringLiteral, SumOperator,\n    TemplateLiteral,\n    TryExpression,\n    UnaryExpression, Variable\n} from './ast';\nimport type { WrappedError } from '../utils/wrapError';\nimport { convertArgs, findBestMatchedFunc, type Func, funcByArgs, type FuncMatch, type FuncMatchError, funcs, methodByArgs, methods } from './funcs/funcs';\nimport {\n    checkIntegerOverflow,\n    evalError,\n    integerToNumber,\n    roundInteger,\n    typeToString,\n    valToInternal,\n    valToPreview,\n    valToString\n} from './utils';\nimport { BOOLEAN, DATETIME, INTEGER, NUMBER, STRING } from './const';\nimport { register } from './funcs';\nimport { Variable as VariableInstance, variableToValue } from './variable';\nimport { toBigInt } from './bigint';\nimport type { Store } from '../../typings/store';\nimport type { CustomFunctions } from './funcs/customFuncs';\n\nexport type VariablesMap = Map<string, VariableInstance>;\n\nexport type EvalTypes = 'string' | 'number' | 'integer' | 'boolean' | 'color' | 'url' | 'datetime' | 'dict' | 'array';\n\nexport type EvalTypesWithoutDatetime = 'string' | 'number' | 'integer' | 'boolean' | 'color' | 'url' | 'dict' | 'array';\n\nexport interface EvalValueBase {\n    type: string;\n    value: unknown;\n}\n\nexport interface StringValue extends EvalValueBase {\n    type: 'string';\n    value: string;\n}\n\nexport interface UrlValue extends EvalValueBase {\n    type: 'url';\n    value: string;\n}\n\nexport interface ColorValue extends EvalValueBase {\n    type: 'color';\n    value: string;\n}\n\nexport interface NumberValue extends EvalValueBase {\n    type: 'number';\n    value: number;\n}\n\nexport interface IntegerValue extends EvalValueBase {\n    type: 'integer';\n    value: bigint;\n}\n\nexport interface BooleanValue extends EvalValueBase {\n    type: 'boolean';\n    value: number;\n}\n\nexport interface DatetimeValue extends EvalValueBase {\n    type: 'datetime';\n    value: Date;\n}\n\nexport interface DictValue extends EvalValueBase {\n    type: 'dict';\n    value: object;\n}\n\nexport interface ArrayValue extends EvalValueBase {\n    type: 'array';\n    value: unknown[];\n}\n\nexport type EvalValue = StringValue | UrlValue | ColorValue | NumberValue | IntegerValue |\n    BooleanValue | DatetimeValue | DictValue | ArrayValue;\n\nexport interface EvalError {\n    type: 'error';\n    value: string;\n}\n\nexport type EvalResult = EvalValue | EvalError;\n\nexport interface EvalContext {\n    variables: VariablesMap;\n    customFunctions: CustomFunctions | undefined;\n    warnings: WrappedError[];\n    store?: Store;\n    weekStartDay: number;\n}\n\nregister();\n\nfunction evalStringLiteral(_ctx: EvalContext, expr: StringLiteral): EvalValue {\n    return {\n        type: STRING,\n        value: expr.value\n    };\n}\n\nfunction evalNumberLiteral(_ctx: EvalContext, expr: NumberLiteral): EvalValue {\n    return {\n        type: NUMBER,\n        value: expr.value\n    };\n}\n\nfunction evalIntegerLiteral(ctx: EvalContext, expr: IntegerLiteral): EvalValue {\n    checkIntegerOverflow(ctx, expr.value);\n\n    return {\n        type: INTEGER,\n        value: expr.value\n    };\n}\n\nfunction evalBooleanLiteral(_ctx: EvalContext, expr: BooleanLiteral): EvalValue {\n    return {\n        type: BOOLEAN,\n        value: expr.value ? 1 : 0\n    };\n}\n\nfunction evalUnary(ctx: EvalContext, expr: UnaryExpression): EvalValue {\n    const val = valToInternal(evalAny(ctx, expr.argument));\n\n    switch (expr.operator) {\n        case '!':\n            if (val.type === BOOLEAN) {\n                return {\n                    type: BOOLEAN,\n                    value: val.value ? 0 : 1\n                };\n            } else {\n                evalError(`${expr.operator}${valToPreview(val)}`, 'A Boolean is expected after a unary not.');\n            }\n        case '+':\n        case '-':\n            const mul = expr.operator === '+' ? 1 : -1;\n\n            if (val.type === INTEGER) {\n                const value = val.value * toBigInt(mul);\n\n                checkIntegerOverflow(ctx, value);\n\n                return {\n                    type: INTEGER,\n                    value\n                };\n            } else if (val.type === NUMBER) {\n                return {\n                    type: NUMBER,\n                    value: val.value * mul\n                };\n            } else {\n                evalError(\n                    `${expr.operator}${valToPreview(val)}`,\n                    `A Number is expected after a unary ${expr.operator === '+' ? 'plus' : 'minus'}.`\n                );\n            }\n    }\n}\n\nfunction evalConditional(ctx: EvalContext, expr: ConditionalExpression): EvalValue {\n    const test = valToInternal(evalAny(ctx, expr.test));\n    if (test.type === BOOLEAN) {\n        if (test.value) {\n            return evalAny(ctx, expr.consequent);\n        } else {\n            return evalAny(ctx, expr.alternate);\n        }\n    } else {\n        evalError(\n            `${valToPreview(test)} ? ${valToPreview(evalAny(ctx, expr.consequent))} : ${valToPreview(evalAny(ctx, expr.alternate))}`,\n            'Ternary must be called with a Boolean value as a condition.'\n        );\n    }\n}\n\nfunction evalTry(ctx: EvalContext, expr: TryExpression): EvalValue {\n    try {\n        return evalAny(ctx, expr.test);\n    } catch (_err) {\n        return evalAny(ctx, expr.alternate);\n    }\n}\n\nfunction evalTemplateLiteral(ctx: EvalContext, expr: TemplateLiteral): EvalValue {\n    let result = '';\n\n    if (expr.quasis.length === 2 && expr.quasis[0].value === '' && expr.quasis[1].value === '') {\n        return evalAny(ctx, expr.expressions[0]);\n    }\n\n    for (let i = 0; i < expr.expressions.length; ++i) {\n        result += expr.quasis[i].value;\n        result += valToString(evalAny(ctx, expr.expressions[i]));\n    }\n    result += expr.quasis[expr.quasis.length - 1].value;\n\n    return {\n        type: STRING,\n        value: result\n    };\n}\n\nfunction evalLogicalExpression(ctx: EvalContext, expr: LogicalExpression): EvalValue {\n    const left = valToInternal(evalAny(ctx, expr.left));\n    if (left.type !== BOOLEAN) {\n        evalError(\n            `${valToPreview(left)} ${expr.operator} ...`,\n            `'${expr.operator}' must be called with boolean operands.`\n        );\n    }\n\n    if (expr.operator === '||' && left.value) {\n        return left;\n    }\n    if (expr.operator === '&&' && !left.value) {\n        return {\n            type: BOOLEAN,\n            value: 0\n        };\n    }\n\n    const right = valToInternal(evalAny(ctx, expr.right));\n    if (right.type !== BOOLEAN) {\n        evalError(\n            `${valToPreview(left)} ${expr.operator} ${valToPreview(right)}`,\n            `Operator '${expr.operator}' cannot be applied to different types: Boolean and ${typeToString(right.type)}.`\n        );\n    }\n\n    return {\n        type: BOOLEAN,\n        value: right.value\n    };\n}\n\nfunction evalBinaryEquality<T extends EvalValue>(operator: EqualityOperator, left: T, right: T): EvalValue {\n    let res: boolean;\n\n    if (left.type === DATETIME && right.type === DATETIME) {\n        res = left.value.getTime() === right.value.getTime();\n    } else {\n        res = left.value === right.value;\n    }\n\n    if (operator === '!=') {\n        res = !res;\n    }\n\n    return {\n        type: BOOLEAN,\n        value: res ? 1 : 0\n    };\n}\n\nfunction evalBinaryCompare<T extends EvalValue>(operator: CompareOperator, left: T, right: T): EvalValue {\n    if (\n        left.type !== NUMBER && left.type !== INTEGER && left.type !== DATETIME ||\n        right.type !== NUMBER && right.type !== INTEGER && right.type !== DATETIME\n    ) {\n        evalError(\n            `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n            `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n        );\n    }\n\n    let res: boolean;\n    const leftVal = left.type === DATETIME ? left.value.getTime() : left.value;\n    const rightVal = right.type === DATETIME ? right.value.getTime() : right.value;\n\n    if (operator === '>') {\n        res = leftVal > rightVal;\n    } else if (operator === '>=') {\n        res = leftVal >= rightVal;\n    } else if (operator === '<') {\n        res = leftVal < rightVal;\n    } else {\n        res = leftVal <= rightVal;\n    }\n\n    return {\n        type: BOOLEAN,\n        value: res ? 1 : 0\n    };\n}\n\nfunction evalBinarySum<T extends EvalValue>(ctx: EvalContext, operator: SumOperator, left: T, right: T): EvalValue {\n    if (left.type !== STRING && left.type !== NUMBER && left.type !== INTEGER) {\n        evalError(\n            `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n            `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n        );\n    }\n\n    if (left.type === STRING) {\n        if (operator === '-') {\n            evalError(\n                `${valToPreview(left)} - ${valToPreview(right)}`,\n                `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n            );\n        }\n        return {\n            type: STRING,\n            value: left.value + right.value\n        };\n    }\n\n    let res: number | bigint = operator === '+' ?\n        (left.value as bigint) + (right.value as bigint) :\n        (left.value as bigint) - (right.value as bigint);\n\n    // integer\n    if (left.type === INTEGER) {\n        try {\n            res = roundInteger(ctx, res);\n            checkIntegerOverflow(ctx, res);\n        } catch (err: any) {\n            evalError(\n                `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n                err.message\n            );\n        }\n    }\n\n    return {\n        type: left.type,\n        value: res as any\n    };\n}\n\nfunction evalBinaryFactor<T extends EvalValue>(\n    ctx: EvalContext,\n    operator: FactorOperator,\n    left: T,\n    right: T\n): EvalValue {\n    if (left.type !== INTEGER && left.type !== NUMBER) {\n        evalError(\n            `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n            `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n        );\n    }\n\n    let res: number | bigint;\n    if (operator === '*') {\n        // bigint | number actually\n        res = (left.value as bigint) * (right.value as bigint);\n    } else if (operator === '/' || operator === '%') {\n        if (Number(right.value) === 0) {\n            evalError(\n                `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n                'Division by zero is not supported.'\n            );\n        }\n        if (operator === '/') {\n            // bigint | number actually\n            res = (left.value as bigint) / (right.value as bigint);\n        } else {\n            // bigint | number actually\n            res = (left.value as bigint) % (right.value as bigint);\n        }\n    } else {\n        throw new Error(`Unsupported operation ${operator}`);\n    }\n\n    if (left.type === INTEGER) {\n        try {\n            res = roundInteger(ctx, res);\n            checkIntegerOverflow(ctx, res);\n        } catch (err: any) {\n            evalError(\n                `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n                err.message\n            );\n        }\n    }\n\n    return {\n        type: left.type,\n        value: res as any\n    };\n}\n\nfunction evalBinaryExpression(ctx: EvalContext, expr: BinaryExpression): EvalValue {\n    const operator = expr.operator;\n    let left = evalAny(ctx, expr.left);\n    let right = evalAny(ctx, expr.right);\n\n    if (\n        left.type === 'number' && right.type === 'integer' ||\n        left.type === 'integer' && right.type === 'number'\n    ) {\n        if (left.type === 'integer') {\n            left = integerToNumber(left);\n        } else if (right.type === 'integer') {\n            right = integerToNumber(right);\n        }\n    }\n\n    if (left.type !== right.type) {\n        evalError(\n            `${valToPreview(left)} ${expr.operator} ${valToPreview(right)}`,\n            `Operator '${operator}' cannot be applied to different types: ${typeToString(left.type)} and ${typeToString(right.type)}.`\n        );\n    }\n\n    if (operator === '==' || operator === '!=') {\n        return evalBinaryEquality(operator, left, right);\n    } else if (operator === '>' || operator === '>=' || operator === '<' || operator === '<=') {\n        return evalBinaryCompare(operator, left, right);\n    } else if (operator === '+' || operator === '-') {\n        return evalBinarySum(ctx, operator, left, right);\n    } else if (operator === '/' || operator === '*' || operator === '%') {\n        return evalBinaryFactor(ctx, operator, left, right);\n    }\n\n    throw new Error(`Unsupported operation ${operator}`);\n}\n\nfunction argsToStr(args: EvalValue[]): string {\n    return args.map(valToPreview).join(', ');\n}\n\nfunction evalCallExpression(ctx: EvalContext, expr: CallExpression): EvalValue {\n    const funcName = expr.callee.name;\n\n    let func: Func | undefined;\n\n    let args = expr.arguments.map(arg => evalAny(ctx, arg));\n    const funcKey = funcName + ':' + args.map(arg => arg.type).join('#');\n    let findRes: FuncMatch | undefined;\n\n    if (ctx.customFunctions) {\n        findRes = findBestMatchedFunc(ctx.customFunctions, funcName, args);\n    }\n\n    if (!findRes || !('func' in findRes)) {\n        if (funcByArgs.has(funcKey)) {\n            findRes = {\n                func: funcByArgs.get(funcKey) as Func,\n                conversions: 0\n            };\n        } else {\n            const builtInFindRes = findBestMatchedFunc(funcs, funcName, args);\n\n            // Assign errors only there is no match error in user defined funcs\n            if ('func' in builtInFindRes || !findRes) {\n                findRes = builtInFindRes;\n            }\n        }\n    }\n\n    if (findRes) {\n        if ('expected' in findRes || 'type' in findRes && findRes.type === 'missing') {\n            logFunctionMatchError(funcName, args, findRes);\n        }\n        func = findRes.func;\n\n        if (findRes.conversions) {\n            args = convertArgs(func, args);\n        }\n    }\n\n    if (!func) {\n        throw new Error('Function not found');\n    }\n\n    try {\n        return func.cb(ctx, ...args);\n    } catch (err: any) {\n        const prefix = `${funcName}(${argsToStr(args)})`;\n        evalError(prefix, err.message);\n    }\n}\n\nfunction logFunctionMatchError(funcName: string, args: EvalValue[], findRes: FuncMatchError): never {\n    const argsType = args.map(arg => typeToString(arg.type)).join(', ');\n    const prefix = `${funcName}(${argsToStr(args)})`;\n\n    if (findRes.type === 'few' && args.length === 0 && findRes.hasOverloads) {\n        evalError(prefix, 'Function requires non empty argument list.');\n    } else if (findRes.type === 'many' || findRes.type === 'few' || findRes.type === 'mismatch') {\n        if (findRes.hasOverloads) {\n            evalError(prefix, `Function has no matching overload for given argument types: ${argsType}.`);\n        } else {\n            // eslint-disable-next-line no-lonely-if\n            if (findRes.type === 'many' || findRes.type === 'few') {\n                if (findRes.def.args.some(arg => typeof arg === 'object' && arg.isVararg)) {\n                    evalError(prefix, `At least ${findRes.def.args.length} argument(s) expected.`);\n                } else {\n                    evalError(prefix, `Exactly ${findRes.def.args.length} argument(s) expected.`);\n                }\n            } else {\n                const expectedArgs = findRes.def.args.map(arg => typeToString(typeof arg === 'string' ? arg : arg.type)).join(', ');\n                evalError(prefix, `Invalid argument type: expected ${expectedArgs}, got ${argsType}.`);\n            }\n        }\n    } else {\n        evalError(prefix, `Unknown function name: ${funcName}.`);\n    }\n}\n\nfunction evalMethodExpression(ctx: EvalContext, expr: MethodExpression): EvalValue {\n    const methodName = expr.method.name;\n\n    let func: Func | undefined;\n\n    let args = [expr.object, ...expr.arguments].map(arg => evalAny(ctx, arg));\n    const methodKey = methodName + ':' + args.map(arg => arg.type).join('#');\n\n    if (!methodByArgs.has(methodKey)) {\n        const findRes = findBestMatchedFunc(methods, methodName, args);\n        if ('expected' in findRes || 'type' in findRes && findRes.type === 'missing') {\n            const argsType = args.slice(1).map(arg => typeToString(arg.type)).join(', ');\n            const prefix = `${methodName}(${argsToStr(args.slice(1))})`;\n\n            if (findRes.type === 'few' && args.length === 1) {\n                evalError(prefix, 'Method requires non empty argument list.');\n            } else if (findRes.type === 'many') {\n                evalError(prefix, `Method has no matching overload for given argument types: ${argsType}.`);\n            } else if (findRes.type === 'few' || findRes.type === 'mismatch') {\n                evalError(prefix, `Method has no matching overload for given argument types: ${argsType}.`);\n            } else {\n                evalError(prefix, `Unknown method name: ${methodName}.`);\n            }\n        }\n        func = findRes.func;\n\n        if (findRes.conversions) {\n            args = convertArgs(func, args);\n        }\n    } else {\n        func = methodByArgs.get(methodKey);\n    }\n\n    if (!func) {\n        throw new Error('Method not found');\n    }\n\n    try {\n        return func.cb(ctx, ...args);\n    } catch (err: any) {\n        const prefix = `${methodName}(${argsToStr(args.slice(1))})`;\n        evalError(prefix, err.message);\n    }\n}\n\nfunction evalVariable(ctx: EvalContext, expr: Variable): EvalValue {\n    const varName = expr.id.name;\n    const variable = ctx.variables.get(varName);\n\n    if (variable) {\n        return variableToValue(variable);\n    }\n\n    throw new Error(`Variable '${varName}' is missing.`);\n}\n\nconst EVAL_MAP = {\n    StringLiteral: evalStringLiteral,\n    NumberLiteral: evalNumberLiteral,\n    IntegerLiteral: evalIntegerLiteral,\n    BooleanLiteral: evalBooleanLiteral,\n    UnaryExpression: evalUnary,\n    ConditionalExpression: evalConditional,\n    TryExpression: evalTry,\n    TemplateLiteral: evalTemplateLiteral,\n    LogicalExpression: evalLogicalExpression,\n    BinaryExpression: evalBinaryExpression,\n    CallExpression: evalCallExpression,\n    MethodExpression: evalMethodExpression,\n    Variable: evalVariable\n};\n\nexport function evalAny(ctx: EvalContext, expr: Node): EvalValue {\n    if (expr.type in EVAL_MAP) {\n        return EVAL_MAP[expr.type](ctx, expr as any);\n    }\n    throw new Error('Unsupported expression');\n}\n\nexport function evalExpression(\n    vars: VariablesMap,\n    customFunctions: CustomFunctions | undefined,\n    store: Store | undefined,\n    expr: Node,\n    opts?: {\n        weekStartDay?: number;\n    }\n): {\n    result: EvalResult;\n    warnings: WrappedError[];\n} {\n    try {\n        const ctx: EvalContext = {\n            variables: vars,\n            customFunctions,\n            warnings: [],\n            store,\n            weekStartDay: opts?.weekStartDay || 0\n        };\n\n        const result = evalAny(ctx, expr);\n\n        return {\n            result,\n            warnings: ctx.warnings\n        };\n    } catch (err: any) {\n        return {\n            result: {\n                type: 'error',\n                value: err.message\n            },\n            warnings: []\n        };\n    }\n}\n","// Generated by Peggy 3.0.2.\n//\n// https://peggyjs.org/\n\n\n    import { toBigInt } from './bigint';\n\n    function buildConditionalExpression(expr, tail) {\n        if (tail && tail[3] && tail[7]) {\n            return {type: 'ConditionalExpression', test: expr, consequent: tail[3], alternate: tail[7]};\n        }\n\n        return expr;\n    }\n\n    function buildTryExpression(expr, tail) {\n        if (tail && tail[3]) {\n            return {type: 'TryExpression', test: expr, alternate: tail[3]};\n        }\n\n        return expr;\n    }\n\n    function buildBinaryExpression(head, tail) {\n        if (!tail.length) {\n            return head;\n        }\n\n        return tail.reduce((result, element) => {\n            return {\n                type: 'BinaryExpression',\n                operator: element[1],\n                left: result,\n                right: element[3]\n            };\n        }, head);\n    }\n\n    function buildLogicalExpression(head, tail) {\n        if (!tail.length) {\n            return head;\n        }\n\n        return tail.reduce((result, element) => {\n            return {\n                type: 'LogicalExpression',\n                operator: element[1],\n                left: result,\n                right: element[3]\n            };\n        }, head);\n    }\n\n    function buildMethodCall(head, tail) {\n        if (!tail.length) {\n            return head;\n        }\n\n        return tail.reduce((result, element) => {\n            if (!element[5]) {\n                throw new Error('Method expected after .');\n            }\n            return {\n                type: 'MethodExpression',\n                object: result,\n                method: element[3],\n                arguments: element[5][2]\n            };\n        }, head);\n    }\n\n    function buildVariableOrBoolean(txt) {\n        if (txt === 'true' || txt === 'false') {\n            return {type: 'BooleanLiteral', value: txt === 'true'};\n        }\n\n        return {type: 'Variable', id: {type: 'Identifier', name: txt}};\n    }\n\n    function buildString(list) {\n        if (list.every(it => typeof it === 'string')) {\n            return {type: 'StringLiteral', value: list.join('')};\n        }\n        let res = list.reduce((result, element) => {\n            if (typeof element === 'string' && typeof result[result.length - 1] === 'string') {\n                result[result.length - 1] += element;\n            } else {\n                result.push(element);\n            }\n            return result;\n        }, []).reduce((result, element) => {\n            if (typeof element === 'string') {\n                result.quasis.push({type: 'StringLiteral', value: element});\n            } else {\n                if (result.quasis.length === result.expressions.length) {\n                    result.quasis.push({type: 'StringLiteral', value: ''});\n                }\n                result.expressions.push(element);\n            }\n            return result;\n        }, {\n            type: 'TemplateLiteral',\n            quasis: [],\n            expressions: []\n        });\n\n        if (res.quasis.length === res.expressions.length) {\n            res.quasis.push({type: 'StringLiteral', value: ''});\n        }\n\n        return res;\n    }\n\n    function convertToInt64(str) {\n        try {\n            return toBigInt(str);\n        } catch (_err) {\n            throw new Error(`Value ${str} can't be converted to Integer type.`);\n        }\n    }\n\n    function escapeChar(char) {\n        if (char === \"'\" || char === '\\\\') {\n            return char;\n        }\n        throw new Error('Incorrect string escape');\n    }\n\nfunction peg$subclass(child, parent) {\n  function C() { this.constructor = child; }\n  C.prototype = parent.prototype;\n  child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n  var self = Error.call(this, message);\n  // istanbul ignore next Check is a necessary evil to support older environments\n  if (Object.setPrototypeOf) {\n    Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n  }\n  self.expected = expected;\n  self.found = found;\n  self.location = location;\n  self.name = \"SyntaxError\";\n  return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n  padString = padString || \" \";\n  if (str.length > targetLength) { return str; }\n  targetLength -= str.length;\n  padString += padString.repeat(targetLength);\n  return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n  var str = \"Error: \" + this.message;\n  if (this.location) {\n    var src = null;\n    var k;\n    for (k = 0; k < sources.length; k++) {\n      if (sources[k].source === this.location.source) {\n        src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n        break;\n      }\n    }\n    var s = this.location.start;\n    var offset_s = (this.location.source && (typeof this.location.source.offset === \"function\"))\n      ? this.location.source.offset(s)\n      : s;\n    var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n    if (src) {\n      var e = this.location.end;\n      var filler = peg$padEnd(\"\", offset_s.line.toString().length, ' ');\n      var line = src[s.line - 1];\n      var last = s.line === e.line ? e.column : line.length + 1;\n      var hatLen = (last - s.column) || 1;\n      str += \"\\n --> \" + loc + \"\\n\"\n          + filler + \" |\\n\"\n          + offset_s.line + \" | \" + line + \"\\n\"\n          + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n          + peg$padEnd(\"\", hatLen, \"^\");\n    } else {\n      str += \"\\n at \" + loc;\n    }\n  }\n  return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n  var DESCRIBE_EXPECTATION_FNS = {\n    literal: function(expectation) {\n      return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n    },\n\n    class: function(expectation) {\n      var escapedParts = expectation.parts.map(function(part) {\n        return Array.isArray(part)\n          ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n          : classEscape(part);\n      });\n\n      return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n    },\n\n    any: function() {\n      return \"any character\";\n    },\n\n    end: function() {\n      return \"end of input\";\n    },\n\n    other: function(expectation) {\n      return expectation.description;\n    }\n  };\n\n  function hex(ch) {\n    return ch.charCodeAt(0).toString(16).toUpperCase();\n  }\n\n  function literalEscape(s) {\n    return s\n      .replace(/\\\\/g, \"\\\\\\\\\")\n      .replace(/\"/g,  \"\\\\\\\"\")\n      .replace(/\\0/g, \"\\\\0\")\n      .replace(/\\t/g, \"\\\\t\")\n      .replace(/\\n/g, \"\\\\n\")\n      .replace(/\\r/g, \"\\\\r\")\n      .replace(/[\\x00-\\x0F]/g,          function(ch) { return \"\\\\x0\" + hex(ch); })\n      .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\"  + hex(ch); });\n  }\n\n  function classEscape(s) {\n    return s\n      .replace(/\\\\/g, \"\\\\\\\\\")\n      .replace(/\\]/g, \"\\\\]\")\n      .replace(/\\^/g, \"\\\\^\")\n      .replace(/-/g,  \"\\\\-\")\n      .replace(/\\0/g, \"\\\\0\")\n      .replace(/\\t/g, \"\\\\t\")\n      .replace(/\\n/g, \"\\\\n\")\n      .replace(/\\r/g, \"\\\\r\")\n      .replace(/[\\x00-\\x0F]/g,          function(ch) { return \"\\\\x0\" + hex(ch); })\n      .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\"  + hex(ch); });\n  }\n\n  function describeExpectation(expectation) {\n    return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n  }\n\n  function describeExpected(expected) {\n    var descriptions = expected.map(describeExpectation);\n    var i, j;\n\n    descriptions.sort();\n\n    if (descriptions.length > 0) {\n      for (i = 1, j = 1; i < descriptions.length; i++) {\n        if (descriptions[i - 1] !== descriptions[i]) {\n          descriptions[j] = descriptions[i];\n          j++;\n        }\n      }\n      descriptions.length = j;\n    }\n\n    switch (descriptions.length) {\n      case 1:\n        return descriptions[0];\n\n      case 2:\n        return descriptions[0] + \" or \" + descriptions[1];\n\n      default:\n        return descriptions.slice(0, -1).join(\", \")\n          + \", or \"\n          + descriptions[descriptions.length - 1];\n    }\n  }\n\n  function describeFound(found) {\n    return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n  }\n\n  return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n  options = options !== undefined ? options : {};\n\n  var peg$FAILED = {};\n  var peg$source = options.grammarSource;\n\n  var peg$startRuleFunctions = { start: peg$parsestart, JsonStringContents: peg$parseJsonStringContents };\n  var peg$startRuleFunction = peg$parsestart;\n\n  var peg$c0 = \"@{\";\n  var peg$c1 = \"}\";\n  var peg$c2 = \"@{}\";\n  var peg$c3 = \"\\\\\";\n  var peg$c4 = \"?\";\n  var peg$c5 = \":\";\n  var peg$c6 = \"!:\";\n  var peg$c7 = \"||\";\n  var peg$c8 = \"&&\";\n  var peg$c9 = \"==\";\n  var peg$c10 = \"!=\";\n  var peg$c11 = \">=\";\n  var peg$c12 = \">\";\n  var peg$c13 = \"<=\";\n  var peg$c14 = \"<\";\n  var peg$c15 = \"+\";\n  var peg$c16 = \"-\";\n  var peg$c17 = \"/\";\n  var peg$c18 = \"*\";\n  var peg$c19 = \"%\";\n  var peg$c20 = \"!\";\n  var peg$c21 = \".\";\n  var peg$c22 = \"(\";\n  var peg$c23 = \")\";\n  var peg$c24 = \",\";\n  var peg$c25 = \"'\";\n  var peg$c26 = \"e\";\n  var peg$c27 = \"E\";\n\n  var peg$r0 = /^[^}]/;\n  var peg$r1 = /^[^'}]/;\n  var peg$r2 = /^[0-9]/;\n  var peg$r3 = /^[a-zA-Z_]/;\n  var peg$r4 = /^[a-zA-Z_0-9]/;\n  var peg$r5 = /^[ \\t\\r\\n]/;\n\n  var peg$e0 = peg$literalExpectation(\"@{\", false);\n  var peg$e1 = peg$literalExpectation(\"}\", false);\n  var peg$e2 = peg$literalExpectation(\"@{}\", false);\n  var peg$e3 = peg$literalExpectation(\"\\\\\", false);\n  var peg$e4 = peg$anyExpectation();\n  var peg$e5 = peg$classExpectation([\"}\"], true, false);\n  var peg$e6 = peg$literalExpectation(\"?\", false);\n  var peg$e7 = peg$literalExpectation(\":\", false);\n  var peg$e8 = peg$literalExpectation(\"!:\", false);\n  var peg$e9 = peg$literalExpectation(\"||\", false);\n  var peg$e10 = peg$literalExpectation(\"&&\", false);\n  var peg$e11 = peg$literalExpectation(\"==\", false);\n  var peg$e12 = peg$literalExpectation(\"!=\", false);\n  var peg$e13 = peg$literalExpectation(\">=\", false);\n  var peg$e14 = peg$literalExpectation(\">\", false);\n  var peg$e15 = peg$literalExpectation(\"<=\", false);\n  var peg$e16 = peg$literalExpectation(\"<\", false);\n  var peg$e17 = peg$literalExpectation(\"+\", false);\n  var peg$e18 = peg$literalExpectation(\"-\", false);\n  var peg$e19 = peg$literalExpectation(\"/\", false);\n  var peg$e20 = peg$literalExpectation(\"*\", false);\n  var peg$e21 = peg$literalExpectation(\"%\", false);\n  var peg$e22 = peg$literalExpectation(\"!\", false);\n  var peg$e23 = peg$literalExpectation(\".\", false);\n  var peg$e24 = peg$literalExpectation(\"(\", false);\n  var peg$e25 = peg$literalExpectation(\")\", false);\n  var peg$e26 = peg$literalExpectation(\",\", false);\n  var peg$e27 = peg$otherExpectation(\"string\");\n  var peg$e28 = peg$literalExpectation(\"'\", false);\n  var peg$e29 = peg$classExpectation([\"'\", \"}\"], true, false);\n  var peg$e30 = peg$otherExpectation(\"integer\");\n  var peg$e31 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n  var peg$e32 = peg$otherExpectation(\"number\");\n  var peg$e33 = peg$literalExpectation(\"e\", false);\n  var peg$e34 = peg$literalExpectation(\"E\", false);\n  var peg$e35 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"_\"], false, false);\n  var peg$e36 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"_\", [\"0\", \"9\"]], false, false);\n  var peg$e37 = peg$otherExpectation(\"whitespace\");\n  var peg$e38 = peg$classExpectation([\" \", \"\\t\", \"\\r\", \"\\n\"], false, false);\n\n  var peg$f0 = function(expr) { return expr; };\n  var peg$f1 = function(list) { return buildString(list); };\n  var peg$f2 = function(expr) { return expr; };\n  var peg$f3 = function() { return ''; };\n  var peg$f4 = function() { return text(); };\n  var peg$f5 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n  var peg$f6 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n  var peg$f7 = function(str) { return str; };\n  var peg$f8 = function(char) { return escapeChar(char); };\n  var peg$f9 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n  var peg$f10 = function(expr, tail) { return buildConditionalExpression(expr, tail); };\n  var peg$f11 = function(expr, tail) { return buildTryExpression(expr, tail); };\n  var peg$f12 = function(head, tail) { return buildLogicalExpression(head, tail); };\n  var peg$f13 = function(head, tail) { return buildLogicalExpression(head, tail); };\n  var peg$f14 = function(head, tail) { return buildBinaryExpression(head, tail); };\n  var peg$f15 = function(head, tail) { return buildBinaryExpression(head, tail); };\n  var peg$f16 = function(head, tail) { return buildBinaryExpression(head, tail); };\n  var peg$f17 = function(head, tail) { return buildBinaryExpression(head, tail); };\n  var peg$f18 = function(val) { return val; };\n  var peg$f19 = function(val) { return val; };\n  var peg$f20 = function(op, expr) { return {type: 'UnaryExpression', operator: op, argument: expr}; };\n  var peg$f21 = function() { throw new Error(\"Incorrect unary operator\"); };\n  var peg$f22 = function(head, tail) { return buildMethodCall(head, tail); };\n  var peg$f23 = function(id, args) { return {type: 'CallExpression', callee: id, arguments: args}; };\n  var peg$f24 = function(expr, list) { return [expr, ...list]; };\n  var peg$f25 = function(expr) { return expr; };\n  var peg$f26 = function(str) { return str; };\n  var peg$f27 = function(list) { return buildString(list); };\n  var peg$f28 = function(expr) { return expr; };\n  var peg$f29 = function() { return ''; };\n  var peg$f30 = function() { return text(); };\n  var peg$f31 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n  var peg$f32 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n  var peg$f33 = function(str) { return str; };\n  var peg$f34 = function(char) { return escapeChar(char); };\n  var peg$f35 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n  var peg$f36 = function() { return {type: 'IntegerLiteral', value: convertToInt64(text())}; };\n  var peg$f37 = function() { return {type: 'NumberLiteral', value: parseFloat(text())}; };\n  var peg$f38 = function() { return {type: 'NumberLiteral', value: parseFloat(text())}; };\n  var peg$f39 = function() { const txt = text(); if (/\\.\\./.test(txt) || /\\.$/.test(txt)) {throw new Error('Unexpected token: .')} return buildVariableOrBoolean(txt); };\n  var peg$f40 = function() { return {type: 'Identifier', name: text()}; };\n  var peg$currPos = 0;\n  var peg$savedPos = 0;\n  var peg$posDetailsCache = [{ line: 1, column: 1 }];\n  var peg$maxFailPos = 0;\n  var peg$maxFailExpected = [];\n  var peg$silentFails = 0;\n\n  var peg$result;\n\n  if (\"startRule\" in options) {\n    if (!(options.startRule in peg$startRuleFunctions)) {\n      throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n    }\n\n    peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n  }\n\n  function text() {\n    return input.substring(peg$savedPos, peg$currPos);\n  }\n\n  function offset() {\n    return peg$savedPos;\n  }\n\n  function range() {\n    return {\n      source: peg$source,\n      start: peg$savedPos,\n      end: peg$currPos\n    };\n  }\n\n  function location() {\n    return peg$computeLocation(peg$savedPos, peg$currPos);\n  }\n\n  function expected(description, location) {\n    location = location !== undefined\n      ? location\n      : peg$computeLocation(peg$savedPos, peg$currPos);\n\n    throw peg$buildStructuredError(\n      [peg$otherExpectation(description)],\n      input.substring(peg$savedPos, peg$currPos),\n      location\n    );\n  }\n\n  function error(message, location) {\n    location = location !== undefined\n      ? location\n      : peg$computeLocation(peg$savedPos, peg$currPos);\n\n    throw peg$buildSimpleError(message, location);\n  }\n\n  function peg$literalExpectation(text, ignoreCase) {\n    return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n  }\n\n  function peg$classExpectation(parts, inverted, ignoreCase) {\n    return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n  }\n\n  function peg$anyExpectation() {\n    return { type: \"any\" };\n  }\n\n  function peg$endExpectation() {\n    return { type: \"end\" };\n  }\n\n  function peg$otherExpectation(description) {\n    return { type: \"other\", description: description };\n  }\n\n  function peg$computePosDetails(pos) {\n    var details = peg$posDetailsCache[pos];\n    var p;\n\n    if (details) {\n      return details;\n    } else {\n      p = pos - 1;\n      while (!peg$posDetailsCache[p]) {\n        p--;\n      }\n\n      details = peg$posDetailsCache[p];\n      details = {\n        line: details.line,\n        column: details.column\n      };\n\n      while (p < pos) {\n        if (input.charCodeAt(p) === 10) {\n          details.line++;\n          details.column = 1;\n        } else {\n          details.column++;\n        }\n\n        p++;\n      }\n\n      peg$posDetailsCache[pos] = details;\n\n      return details;\n    }\n  }\n\n  function peg$computeLocation(startPos, endPos, offset) {\n    var startPosDetails = peg$computePosDetails(startPos);\n    var endPosDetails = peg$computePosDetails(endPos);\n\n    var res = {\n      source: peg$source,\n      start: {\n        offset: startPos,\n        line: startPosDetails.line,\n        column: startPosDetails.column\n      },\n      end: {\n        offset: endPos,\n        line: endPosDetails.line,\n        column: endPosDetails.column\n      }\n    };\n    if (offset && peg$source && (typeof peg$source.offset === \"function\")) {\n      res.start = peg$source.offset(res.start);\n      res.end = peg$source.offset(res.end);\n    }\n    return res;\n  }\n\n  function peg$fail(expected) {\n    if (peg$currPos < peg$maxFailPos) { return; }\n\n    if (peg$currPos > peg$maxFailPos) {\n      peg$maxFailPos = peg$currPos;\n      peg$maxFailExpected = [];\n    }\n\n    peg$maxFailExpected.push(expected);\n  }\n\n  function peg$buildSimpleError(message, location) {\n    return new peg$SyntaxError(message, null, null, location);\n  }\n\n  function peg$buildStructuredError(expected, found, location) {\n    return new peg$SyntaxError(\n      peg$SyntaxError.buildMessage(expected, found),\n      expected,\n      found,\n      location\n    );\n  }\n\n  function peg$parsestart() {\n    var s0, s1, s2, s3;\n\n    s0 = peg$currPos;\n    s1 = peg$parse_();\n    s2 = peg$parseExpression();\n    if (s2 !== peg$FAILED) {\n      s3 = peg$parse_();\n      peg$savedPos = s0;\n      s0 = peg$f0(s2);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseJsonStringContents() {\n    var s0, s1, s2;\n\n    s0 = peg$currPos;\n    s1 = [];\n    s2 = peg$parseJsonStringChar();\n    while (s2 !== peg$FAILED) {\n      s1.push(s2);\n      s2 = peg$parseJsonStringChar();\n    }\n    peg$savedPos = s0;\n    s1 = peg$f1(s1);\n    s0 = s1;\n\n    return s0;\n  }\n\n  function peg$parseJsonStringChar() {\n    var s0, s1, s2, s3, s4, s5;\n\n    s0 = peg$currPos;\n    if (input.substr(peg$currPos, 2) === peg$c0) {\n      s1 = peg$c0;\n      peg$currPos += 2;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e0); }\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parse_();\n      s3 = peg$parseExpression();\n      if (s3 !== peg$FAILED) {\n        s4 = peg$parse_();\n        if (input.charCodeAt(peg$currPos) === 125) {\n          s5 = peg$c1;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e1); }\n        }\n        if (s5 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s0 = peg$f2(s3);\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    if (s0 === peg$FAILED) {\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 3) === peg$c2) {\n        s1 = peg$c2;\n        peg$currPos += 3;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e2); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$f3();\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$currPos;\n        peg$silentFails++;\n        if (input.charCodeAt(peg$currPos) === 92) {\n          s2 = peg$c3;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e3); }\n        }\n        if (s2 === peg$FAILED) {\n          if (input.substr(peg$currPos, 2) === peg$c0) {\n            s2 = peg$c0;\n            peg$currPos += 2;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e0); }\n          }\n        }\n        peg$silentFails--;\n        if (s2 === peg$FAILED) {\n          s1 = undefined;\n        } else {\n          peg$currPos = s1;\n          s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n          if (input.length > peg$currPos) {\n            s2 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e4); }\n          }\n          if (s2 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s0 = peg$f4();\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 2) === peg$c0) {\n            s1 = peg$c0;\n            peg$currPos += 2;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e0); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = [];\n            if (peg$r0.test(input.charAt(peg$currPos))) {\n              s3 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s3 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e5); }\n            }\n            if (s3 !== peg$FAILED) {\n              while (s3 !== peg$FAILED) {\n                s2.push(s3);\n                if (peg$r0.test(input.charAt(peg$currPos))) {\n                  s3 = input.charAt(peg$currPos);\n                  peg$currPos++;\n                } else {\n                  s3 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$e5); }\n                }\n              }\n            } else {\n              s2 = peg$FAILED;\n            }\n            if (s2 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 125) {\n                s3 = peg$c1;\n                peg$currPos++;\n              } else {\n                s3 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$e1); }\n              }\n              if (s3 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s0 = peg$f5();\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.substr(peg$currPos, 2) === peg$c0) {\n              s1 = peg$c0;\n              peg$currPos += 2;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e0); }\n            }\n            if (s1 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$f6();\n            }\n            s0 = s1;\n            if (s0 === peg$FAILED) {\n              s0 = peg$currPos;\n              if (input.charCodeAt(peg$currPos) === 92) {\n                s1 = peg$c3;\n                peg$currPos++;\n              } else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$e3); }\n              }\n              if (s1 !== peg$FAILED) {\n                if (input.substr(peg$currPos, 2) === peg$c0) {\n                  s2 = peg$c0;\n                  peg$currPos += 2;\n                } else {\n                  s2 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$e0); }\n                }\n                if (s2 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s0 = peg$f7(s2);\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n              if (s0 === peg$FAILED) {\n                s0 = peg$currPos;\n                if (input.charCodeAt(peg$currPos) === 92) {\n                  s1 = peg$c3;\n                  peg$currPos++;\n                } else {\n                  s1 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$e3); }\n                }\n                if (s1 !== peg$FAILED) {\n                  if (input.length > peg$currPos) {\n                    s2 = input.charAt(peg$currPos);\n                    peg$currPos++;\n                  } else {\n                    s2 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$e4); }\n                  }\n                  if (s2 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s0 = peg$f8(s2);\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n                if (s0 === peg$FAILED) {\n                  s0 = peg$currPos;\n                  if (input.charCodeAt(peg$currPos) === 92) {\n                    s1 = peg$c3;\n                    peg$currPos++;\n                  } else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$e3); }\n                  }\n                  if (s1 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$f9();\n                  }\n                  s0 = s1;\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseExpression() {\n    var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n    s0 = peg$currPos;\n    s1 = peg$parseTry();\n    if (s1 !== peg$FAILED) {\n      s2 = peg$currPos;\n      s3 = peg$parse_();\n      if (input.charCodeAt(peg$currPos) === 63) {\n        s4 = peg$c4;\n        peg$currPos++;\n      } else {\n        s4 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e6); }\n      }\n      if (s4 !== peg$FAILED) {\n        s5 = peg$parse_();\n        s6 = peg$parseExpression();\n        if (s6 !== peg$FAILED) {\n          s7 = peg$parse_();\n          if (input.charCodeAt(peg$currPos) === 58) {\n            s8 = peg$c5;\n            peg$currPos++;\n          } else {\n            s8 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e7); }\n          }\n          if (s8 !== peg$FAILED) {\n            s9 = peg$parse_();\n            s10 = peg$parseExpression();\n            if (s10 !== peg$FAILED) {\n              s3 = [s3, s4, s5, s6, s7, s8, s9, s10];\n              s2 = s3;\n            } else {\n              peg$currPos = s2;\n              s2 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s2;\n        s2 = peg$FAILED;\n      }\n      if (s2 === peg$FAILED) {\n        s2 = null;\n      }\n      peg$savedPos = s0;\n      s0 = peg$f10(s1, s2);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseTry() {\n    var s0, s1, s2, s3, s4, s5, s6;\n\n    s0 = peg$currPos;\n    s1 = peg$parseOr();\n    if (s1 !== peg$FAILED) {\n      s2 = peg$currPos;\n      s3 = peg$parse_();\n      if (input.substr(peg$currPos, 2) === peg$c6) {\n        s4 = peg$c6;\n        peg$currPos += 2;\n      } else {\n        s4 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e8); }\n      }\n      if (s4 !== peg$FAILED) {\n        s5 = peg$parse_();\n        s6 = peg$parseExpression();\n        if (s6 !== peg$FAILED) {\n          s3 = [s3, s4, s5, s6];\n          s2 = s3;\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s2;\n        s2 = peg$FAILED;\n      }\n      if (s2 === peg$FAILED) {\n        s2 = null;\n      }\n      peg$savedPos = s0;\n      s0 = peg$f11(s1, s2);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseOr() {\n    var s0, s1, s2, s3, s4, s5, s6, s7;\n\n    s0 = peg$currPos;\n    s1 = peg$parseAnd();\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = peg$currPos;\n      s4 = peg$parse_();\n      if (input.substr(peg$currPos, 2) === peg$c7) {\n        s5 = peg$c7;\n        peg$currPos += 2;\n      } else {\n        s5 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e9); }\n      }\n      if (s5 !== peg$FAILED) {\n        s6 = peg$parse_();\n        s7 = peg$parseAnd();\n        if (s7 !== peg$FAILED) {\n          s4 = [s4, s5, s6, s7];\n          s3 = s4;\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = peg$currPos;\n        s4 = peg$parse_();\n        if (input.substr(peg$currPos, 2) === peg$c7) {\n          s5 = peg$c7;\n          peg$currPos += 2;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e9); }\n        }\n        if (s5 !== peg$FAILED) {\n          s6 = peg$parse_();\n          s7 = peg$parseAnd();\n          if (s7 !== peg$FAILED) {\n            s4 = [s4, s5, s6, s7];\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      }\n      peg$savedPos = s0;\n      s0 = peg$f12(s1, s2);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseAnd() {\n    var s0, s1, s2, s3, s4, s5, s6, s7;\n\n    s0 = peg$currPos;\n    s1 = peg$parseEqual();\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = peg$currPos;\n      s4 = peg$parse_();\n      if (input.substr(peg$currPos, 2) === peg$c8) {\n        s5 = peg$c8;\n        peg$currPos += 2;\n      } else {\n        s5 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e10); }\n      }\n      if (s5 !== peg$FAILED) {\n        s6 = peg$parse_();\n        s7 = peg$parseEqual();\n        if (s7 !== peg$FAILED) {\n          s4 = [s4, s5, s6, s7];\n          s3 = s4;\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = peg$currPos;\n        s4 = peg$parse_();\n        if (input.substr(peg$currPos, 2) === peg$c8) {\n          s5 = peg$c8;\n          peg$currPos += 2;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e10); }\n        }\n        if (s5 !== peg$FAILED) {\n          s6 = peg$parse_();\n          s7 = peg$parseEqual();\n          if (s7 !== peg$FAILED) {\n            s4 = [s4, s5, s6, s7];\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      }\n      peg$savedPos = s0;\n      s0 = peg$f13(s1, s2);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseEqual() {\n    var s0, s1, s2, s3, s4, s5, s6, s7;\n\n    s0 = peg$currPos;\n    s1 = peg$parseComparison();\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = peg$currPos;\n      s4 = peg$parse_();\n      if (input.substr(peg$currPos, 2) === peg$c9) {\n        s5 = peg$c9;\n        peg$currPos += 2;\n      } else {\n        s5 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e11); }\n      }\n      if (s5 === peg$FAILED) {\n        if (input.substr(peg$currPos, 2) === peg$c10) {\n          s5 = peg$c10;\n          peg$currPos += 2;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e12); }\n        }\n      }\n      if (s5 !== peg$FAILED) {\n        s6 = peg$parse_();\n        s7 = peg$parseComparison();\n        if (s7 !== peg$FAILED) {\n          s4 = [s4, s5, s6, s7];\n          s3 = s4;\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = peg$currPos;\n        s4 = peg$parse_();\n        if (input.substr(peg$currPos, 2) === peg$c9) {\n          s5 = peg$c9;\n          peg$currPos += 2;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e11); }\n        }\n        if (s5 === peg$FAILED) {\n          if (input.substr(peg$currPos, 2) === peg$c10) {\n            s5 = peg$c10;\n            peg$currPos += 2;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e12); }\n          }\n        }\n        if (s5 !== peg$FAILED) {\n          s6 = peg$parse_();\n          s7 = peg$parseComparison();\n          if (s7 !== peg$FAILED) {\n            s4 = [s4, s5, s6, s7];\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      }\n      peg$savedPos = s0;\n      s0 = peg$f14(s1, s2);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseComparison() {\n    var s0, s1, s2, s3, s4, s5, s6, s7;\n\n    s0 = peg$currPos;\n    s1 = peg$parseSum();\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = peg$currPos;\n      s4 = peg$parse_();\n      if (input.substr(peg$currPos, 2) === peg$c11) {\n        s5 = peg$c11;\n        peg$currPos += 2;\n      } else {\n        s5 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e13); }\n      }\n      if (s5 === peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 62) {\n          s5 = peg$c12;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e14); }\n        }\n        if (s5 === peg$FAILED) {\n          if (input.substr(peg$currPos, 2) === peg$c13) {\n            s5 = peg$c13;\n            peg$currPos += 2;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e15); }\n          }\n          if (s5 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 60) {\n              s5 = peg$c14;\n              peg$currPos++;\n            } else {\n              s5 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e16); }\n            }\n          }\n        }\n      }\n      if (s5 !== peg$FAILED) {\n        s6 = peg$parse_();\n        s7 = peg$parseSum();\n        if (s7 !== peg$FAILED) {\n          s4 = [s4, s5, s6, s7];\n          s3 = s4;\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = peg$currPos;\n        s4 = peg$parse_();\n        if (input.substr(peg$currPos, 2) === peg$c11) {\n          s5 = peg$c11;\n          peg$currPos += 2;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e13); }\n        }\n        if (s5 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 62) {\n            s5 = peg$c12;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e14); }\n          }\n          if (s5 === peg$FAILED) {\n            if (input.substr(peg$currPos, 2) === peg$c13) {\n              s5 = peg$c13;\n              peg$currPos += 2;\n            } else {\n              s5 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e15); }\n            }\n            if (s5 === peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 60) {\n                s5 = peg$c14;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$e16); }\n              }\n            }\n          }\n        }\n        if (s5 !== peg$FAILED) {\n          s6 = peg$parse_();\n          s7 = peg$parseSum();\n          if (s7 !== peg$FAILED) {\n            s4 = [s4, s5, s6, s7];\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      }\n      peg$savedPos = s0;\n      s0 = peg$f15(s1, s2);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseSum() {\n    var s0, s1, s2, s3, s4, s5, s6, s7;\n\n    s0 = peg$currPos;\n    s1 = peg$parseFactor();\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = peg$currPos;\n      s4 = peg$parse_();\n      if (input.charCodeAt(peg$currPos) === 43) {\n        s5 = peg$c15;\n        peg$currPos++;\n      } else {\n        s5 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e17); }\n      }\n      if (s5 === peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 45) {\n          s5 = peg$c16;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e18); }\n        }\n      }\n      if (s5 !== peg$FAILED) {\n        s6 = peg$parse_();\n        s7 = peg$parseFactor();\n        if (s7 !== peg$FAILED) {\n          s4 = [s4, s5, s6, s7];\n          s3 = s4;\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = peg$currPos;\n        s4 = peg$parse_();\n        if (input.charCodeAt(peg$currPos) === 43) {\n          s5 = peg$c15;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e17); }\n        }\n        if (s5 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 45) {\n            s5 = peg$c16;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e18); }\n          }\n        }\n        if (s5 !== peg$FAILED) {\n          s6 = peg$parse_();\n          s7 = peg$parseFactor();\n          if (s7 !== peg$FAILED) {\n            s4 = [s4, s5, s6, s7];\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      }\n      peg$savedPos = s0;\n      s0 = peg$f16(s1, s2);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseFactor() {\n    var s0, s1, s2, s3, s4, s5, s6, s7;\n\n    s0 = peg$currPos;\n    s1 = peg$parseUnaryExpression();\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = peg$currPos;\n      s4 = peg$parse_();\n      if (input.charCodeAt(peg$currPos) === 47) {\n        s5 = peg$c17;\n        peg$currPos++;\n      } else {\n        s5 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e19); }\n      }\n      if (s5 === peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 42) {\n          s5 = peg$c18;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e20); }\n        }\n        if (s5 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 37) {\n            s5 = peg$c19;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e21); }\n          }\n        }\n      }\n      if (s5 !== peg$FAILED) {\n        s6 = peg$parse_();\n        s7 = peg$parseUnaryExpression();\n        if (s7 !== peg$FAILED) {\n          s4 = [s4, s5, s6, s7];\n          s3 = s4;\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = peg$currPos;\n        s4 = peg$parse_();\n        if (input.charCodeAt(peg$currPos) === 47) {\n          s5 = peg$c17;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e19); }\n        }\n        if (s5 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 42) {\n            s5 = peg$c18;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e20); }\n          }\n          if (s5 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 37) {\n              s5 = peg$c19;\n              peg$currPos++;\n            } else {\n              s5 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e21); }\n            }\n          }\n        }\n        if (s5 !== peg$FAILED) {\n          s6 = peg$parse_();\n          s7 = peg$parseUnaryExpression();\n          if (s7 !== peg$FAILED) {\n            s4 = [s4, s5, s6, s7];\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      }\n      peg$savedPos = s0;\n      s0 = peg$f17(s1, s2);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseUnaryExpression() {\n    var s0, s1, s2, s3;\n\n    s0 = peg$currPos;\n    s1 = peg$currPos;\n    peg$silentFails++;\n    if (input.charCodeAt(peg$currPos) === 45) {\n      s2 = peg$c16;\n      peg$currPos++;\n    } else {\n      s2 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e18); }\n    }\n    peg$silentFails--;\n    if (s2 !== peg$FAILED) {\n      peg$currPos = s1;\n      s1 = undefined;\n    } else {\n      s1 = peg$FAILED;\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parseNumber();\n      if (s2 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s0 = peg$f18(s2);\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    if (s0 === peg$FAILED) {\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      peg$silentFails++;\n      if (input.charCodeAt(peg$currPos) === 45) {\n        s2 = peg$c16;\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e18); }\n      }\n      peg$silentFails--;\n      if (s2 !== peg$FAILED) {\n        peg$currPos = s1;\n        s1 = undefined;\n      } else {\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseInteger();\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s0 = peg$f19(s2);\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 33) {\n          s1 = peg$c20;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e22); }\n        }\n        if (s1 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 43) {\n            s1 = peg$c15;\n            peg$currPos++;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e17); }\n          }\n          if (s1 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 45) {\n              s1 = peg$c16;\n              peg$currPos++;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e18); }\n            }\n          }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse_();\n          s3 = peg$parseDoubleUnaryExpressionCatch();\n          if (s3 === peg$FAILED) {\n            s3 = peg$parseMethod();\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s0 = peg$f20(s1, s3);\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseMethod();\n        }\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseDoubleUnaryExpressionCatch() {\n    var s0, s1;\n\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 43) {\n      s1 = peg$c15;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e17); }\n    }\n    if (s1 === peg$FAILED) {\n      if (input.charCodeAt(peg$currPos) === 45) {\n        s1 = peg$c16;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e18); }\n      }\n    }\n    if (s1 !== peg$FAILED) {\n      peg$savedPos = s0;\n      s1 = peg$f21();\n    }\n    s0 = s1;\n\n    return s0;\n  }\n\n  function peg$parseMethod() {\n    var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14;\n\n    s0 = peg$currPos;\n    s1 = peg$parseCall();\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = peg$currPos;\n      s4 = peg$parse_();\n      if (input.charCodeAt(peg$currPos) === 46) {\n        s5 = peg$c21;\n        peg$currPos++;\n      } else {\n        s5 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e23); }\n      }\n      if (s5 !== peg$FAILED) {\n        s6 = peg$parse_();\n        s7 = peg$parseStrictIdentifier();\n        if (s7 !== peg$FAILED) {\n          s8 = peg$parse_();\n          s9 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 40) {\n            s10 = peg$c22;\n            peg$currPos++;\n          } else {\n            s10 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e24); }\n          }\n          if (s10 !== peg$FAILED) {\n            s11 = peg$parse_();\n            s12 = peg$parseArguments();\n            if (s12 !== peg$FAILED) {\n              s13 = peg$parse_();\n              if (input.charCodeAt(peg$currPos) === 41) {\n                s14 = peg$c23;\n                peg$currPos++;\n              } else {\n                s14 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$e25); }\n              }\n              if (s14 !== peg$FAILED) {\n                s10 = [s10, s11, s12, s13, s14];\n                s9 = s10;\n              } else {\n                peg$currPos = s9;\n                s9 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s9;\n              s9 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s9;\n            s9 = peg$FAILED;\n          }\n          if (s9 === peg$FAILED) {\n            s9 = null;\n          }\n          s4 = [s4, s5, s6, s7, s8, s9];\n          s3 = s4;\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = peg$currPos;\n        s4 = peg$parse_();\n        if (input.charCodeAt(peg$currPos) === 46) {\n          s5 = peg$c21;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e23); }\n        }\n        if (s5 !== peg$FAILED) {\n          s6 = peg$parse_();\n          s7 = peg$parseStrictIdentifier();\n          if (s7 !== peg$FAILED) {\n            s8 = peg$parse_();\n            s9 = peg$currPos;\n            if (input.charCodeAt(peg$currPos) === 40) {\n              s10 = peg$c22;\n              peg$currPos++;\n            } else {\n              s10 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e24); }\n            }\n            if (s10 !== peg$FAILED) {\n              s11 = peg$parse_();\n              s12 = peg$parseArguments();\n              if (s12 !== peg$FAILED) {\n                s13 = peg$parse_();\n                if (input.charCodeAt(peg$currPos) === 41) {\n                  s14 = peg$c23;\n                  peg$currPos++;\n                } else {\n                  s14 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$e25); }\n                }\n                if (s14 !== peg$FAILED) {\n                  s10 = [s10, s11, s12, s13, s14];\n                  s9 = s10;\n                } else {\n                  peg$currPos = s9;\n                  s9 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s9;\n                s9 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s9;\n              s9 = peg$FAILED;\n            }\n            if (s9 === peg$FAILED) {\n              s9 = null;\n            }\n            s4 = [s4, s5, s6, s7, s8, s9];\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      }\n      peg$savedPos = s0;\n      s0 = peg$f22(s1, s2);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseCall() {\n    var s0, s1, s2, s3, s4, s5, s6, s7;\n\n    s0 = peg$currPos;\n    s1 = peg$parseStrictIdentifier();\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parse_();\n      if (input.charCodeAt(peg$currPos) === 40) {\n        s3 = peg$c22;\n        peg$currPos++;\n      } else {\n        s3 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e24); }\n      }\n      if (s3 !== peg$FAILED) {\n        s4 = peg$parse_();\n        s5 = peg$parseArguments();\n        if (s5 !== peg$FAILED) {\n          s6 = peg$parse_();\n          if (input.charCodeAt(peg$currPos) === 41) {\n            s7 = peg$c23;\n            peg$currPos++;\n          } else {\n            s7 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e25); }\n          }\n          if (s7 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s0 = peg$f23(s1, s5);\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    if (s0 === peg$FAILED) {\n      s0 = peg$parsePrimaryExpression();\n    }\n\n    return s0;\n  }\n\n  function peg$parseArguments() {\n    var s0, s1, s2, s3, s4, s5, s6, s7;\n\n    s0 = peg$currPos;\n    s1 = peg$parseExpression();\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = peg$currPos;\n      s4 = peg$parse_();\n      if (input.charCodeAt(peg$currPos) === 44) {\n        s5 = peg$c24;\n        peg$currPos++;\n      } else {\n        s5 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e26); }\n      }\n      if (s5 !== peg$FAILED) {\n        s6 = peg$parse_();\n        s7 = peg$parseExpression();\n        if (s7 !== peg$FAILED) {\n          s3 = s7;\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = peg$currPos;\n        s4 = peg$parse_();\n        if (input.charCodeAt(peg$currPos) === 44) {\n          s5 = peg$c24;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e26); }\n        }\n        if (s5 !== peg$FAILED) {\n          s6 = peg$parse_();\n          s7 = peg$parseExpression();\n          if (s7 !== peg$FAILED) {\n            s3 = s7;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      }\n      peg$savedPos = s0;\n      s0 = peg$f24(s1, s2);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    if (s0 === peg$FAILED) {\n      s0 = peg$parse_();\n    }\n\n    return s0;\n  }\n\n  function peg$parsePrimaryExpression() {\n    var s0, s1, s2, s3, s4, s5;\n\n    s0 = peg$parseIdentifierOrBoolean();\n    if (s0 === peg$FAILED) {\n      s0 = peg$parseString();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseNumber();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseInteger();\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.charCodeAt(peg$currPos) === 40) {\n              s1 = peg$c22;\n              peg$currPos++;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e24); }\n            }\n            if (s1 !== peg$FAILED) {\n              s2 = peg$parse_();\n              s3 = peg$parseExpression();\n              if (s3 !== peg$FAILED) {\n                s4 = peg$parse_();\n                if (input.charCodeAt(peg$currPos) === 41) {\n                  s5 = peg$c23;\n                  peg$currPos++;\n                } else {\n                  s5 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$e25); }\n                }\n                if (s5 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s0 = peg$f25(s3);\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          }\n        }\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseString() {\n    var s0, s1, s2, s3;\n\n    peg$silentFails++;\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 39) {\n      s1 = peg$c25;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e28); }\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parseStringContents();\n      if (input.charCodeAt(peg$currPos) === 39) {\n        s3 = peg$c25;\n        peg$currPos++;\n      } else {\n        s3 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e28); }\n      }\n      if (s3 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s0 = peg$f26(s2);\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    peg$silentFails--;\n    if (s0 === peg$FAILED) {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e27); }\n    }\n\n    return s0;\n  }\n\n  function peg$parseStringContents() {\n    var s0, s1, s2;\n\n    s0 = peg$currPos;\n    s1 = [];\n    s2 = peg$parseStringChar();\n    while (s2 !== peg$FAILED) {\n      s1.push(s2);\n      s2 = peg$parseStringChar();\n    }\n    peg$savedPos = s0;\n    s1 = peg$f27(s1);\n    s0 = s1;\n\n    return s0;\n  }\n\n  function peg$parseStringChar() {\n    var s0, s1, s2, s3, s4, s5;\n\n    s0 = peg$currPos;\n    if (input.substr(peg$currPos, 2) === peg$c0) {\n      s1 = peg$c0;\n      peg$currPos += 2;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e0); }\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parse_();\n      s3 = peg$parseExpression();\n      if (s3 !== peg$FAILED) {\n        s4 = peg$parse_();\n        if (input.charCodeAt(peg$currPos) === 125) {\n          s5 = peg$c1;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e1); }\n        }\n        if (s5 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s0 = peg$f28(s3);\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    if (s0 === peg$FAILED) {\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 3) === peg$c2) {\n        s1 = peg$c2;\n        peg$currPos += 3;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e2); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$f29();\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$currPos;\n        peg$silentFails++;\n        if (input.charCodeAt(peg$currPos) === 92) {\n          s2 = peg$c3;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e3); }\n        }\n        if (s2 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 39) {\n            s2 = peg$c25;\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e28); }\n          }\n          if (s2 === peg$FAILED) {\n            if (input.substr(peg$currPos, 2) === peg$c0) {\n              s2 = peg$c0;\n              peg$currPos += 2;\n            } else {\n              s2 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e0); }\n            }\n          }\n        }\n        peg$silentFails--;\n        if (s2 === peg$FAILED) {\n          s1 = undefined;\n        } else {\n          peg$currPos = s1;\n          s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n          if (input.length > peg$currPos) {\n            s2 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e4); }\n          }\n          if (s2 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s0 = peg$f30();\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 2) === peg$c0) {\n            s1 = peg$c0;\n            peg$currPos += 2;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e0); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = [];\n            if (peg$r1.test(input.charAt(peg$currPos))) {\n              s3 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s3 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e29); }\n            }\n            if (s3 !== peg$FAILED) {\n              while (s3 !== peg$FAILED) {\n                s2.push(s3);\n                if (peg$r1.test(input.charAt(peg$currPos))) {\n                  s3 = input.charAt(peg$currPos);\n                  peg$currPos++;\n                } else {\n                  s3 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$e29); }\n                }\n              }\n            } else {\n              s2 = peg$FAILED;\n            }\n            if (s2 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 125) {\n                s3 = peg$c1;\n                peg$currPos++;\n              } else {\n                s3 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$e1); }\n              }\n              if (s3 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s0 = peg$f31();\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.substr(peg$currPos, 2) === peg$c0) {\n              s1 = peg$c0;\n              peg$currPos += 2;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e0); }\n            }\n            if (s1 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$f32();\n            }\n            s0 = s1;\n            if (s0 === peg$FAILED) {\n              s0 = peg$currPos;\n              if (input.charCodeAt(peg$currPos) === 92) {\n                s1 = peg$c3;\n                peg$currPos++;\n              } else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$e3); }\n              }\n              if (s1 !== peg$FAILED) {\n                if (input.substr(peg$currPos, 2) === peg$c0) {\n                  s2 = peg$c0;\n                  peg$currPos += 2;\n                } else {\n                  s2 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$e0); }\n                }\n                if (s2 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s0 = peg$f33(s2);\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n              if (s0 === peg$FAILED) {\n                s0 = peg$currPos;\n                if (input.charCodeAt(peg$currPos) === 92) {\n                  s1 = peg$c3;\n                  peg$currPos++;\n                } else {\n                  s1 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$e3); }\n                }\n                if (s1 !== peg$FAILED) {\n                  if (input.length > peg$currPos) {\n                    s2 = input.charAt(peg$currPos);\n                    peg$currPos++;\n                  } else {\n                    s2 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$e4); }\n                  }\n                  if (s2 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s0 = peg$f34(s2);\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n                if (s0 === peg$FAILED) {\n                  s0 = peg$currPos;\n                  if (input.charCodeAt(peg$currPos) === 92) {\n                    s1 = peg$c3;\n                    peg$currPos++;\n                  } else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$e3); }\n                  }\n                  if (s1 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$f35();\n                  }\n                  s0 = s1;\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseInteger() {\n    var s0, s1, s2, s3;\n\n    peg$silentFails++;\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 45) {\n      s1 = peg$c16;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e18); }\n    }\n    if (s1 === peg$FAILED) {\n      s1 = null;\n    }\n    s2 = [];\n    if (peg$r2.test(input.charAt(peg$currPos))) {\n      s3 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s3 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e31); }\n    }\n    if (s3 !== peg$FAILED) {\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        if (peg$r2.test(input.charAt(peg$currPos))) {\n          s3 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e31); }\n        }\n      }\n    } else {\n      s2 = peg$FAILED;\n    }\n    if (s2 !== peg$FAILED) {\n      peg$savedPos = s0;\n      s0 = peg$f36();\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    peg$silentFails--;\n    if (s0 === peg$FAILED) {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e30); }\n    }\n\n    return s0;\n  }\n\n  function peg$parseNumber() {\n    var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n    peg$silentFails++;\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 45) {\n      s1 = peg$c16;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e18); }\n    }\n    if (s1 === peg$FAILED) {\n      s1 = null;\n    }\n    s2 = [];\n    if (peg$r2.test(input.charAt(peg$currPos))) {\n      s3 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s3 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e31); }\n    }\n    while (s3 !== peg$FAILED) {\n      s2.push(s3);\n      if (peg$r2.test(input.charAt(peg$currPos))) {\n        s3 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s3 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e31); }\n      }\n    }\n    if (input.charCodeAt(peg$currPos) === 46) {\n      s3 = peg$c21;\n      peg$currPos++;\n    } else {\n      s3 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e23); }\n    }\n    if (s3 !== peg$FAILED) {\n      s4 = [];\n      if (peg$r2.test(input.charAt(peg$currPos))) {\n        s5 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s5 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e31); }\n      }\n      if (s5 !== peg$FAILED) {\n        while (s5 !== peg$FAILED) {\n          s4.push(s5);\n          if (peg$r2.test(input.charAt(peg$currPos))) {\n            s5 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e31); }\n          }\n        }\n      } else {\n        s4 = peg$FAILED;\n      }\n      if (s4 !== peg$FAILED) {\n        s5 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 101) {\n          s6 = peg$c26;\n          peg$currPos++;\n        } else {\n          s6 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e33); }\n        }\n        if (s6 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 69) {\n            s6 = peg$c27;\n            peg$currPos++;\n          } else {\n            s6 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e34); }\n          }\n        }\n        if (s6 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 43) {\n            s7 = peg$c15;\n            peg$currPos++;\n          } else {\n            s7 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e17); }\n          }\n          if (s7 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 45) {\n              s7 = peg$c16;\n              peg$currPos++;\n            } else {\n              s7 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e18); }\n            }\n          }\n          if (s7 === peg$FAILED) {\n            s7 = null;\n          }\n          s8 = [];\n          if (peg$r2.test(input.charAt(peg$currPos))) {\n            s9 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s9 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e31); }\n          }\n          if (s9 !== peg$FAILED) {\n            while (s9 !== peg$FAILED) {\n              s8.push(s9);\n              if (peg$r2.test(input.charAt(peg$currPos))) {\n                s9 = input.charAt(peg$currPos);\n                peg$currPos++;\n              } else {\n                s9 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$e31); }\n              }\n            }\n          } else {\n            s8 = peg$FAILED;\n          }\n          if (s8 !== peg$FAILED) {\n            s6 = [s6, s7, s8];\n            s5 = s6;\n          } else {\n            peg$currPos = s5;\n            s5 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s5;\n          s5 = peg$FAILED;\n        }\n        if (s5 === peg$FAILED) {\n          s5 = null;\n        }\n        peg$savedPos = s0;\n        s0 = peg$f37();\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    if (s0 === peg$FAILED) {\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 45) {\n        s1 = peg$c16;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e18); }\n      }\n      if (s1 === peg$FAILED) {\n        s1 = null;\n      }\n      s2 = [];\n      if (peg$r2.test(input.charAt(peg$currPos))) {\n        s3 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s3 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e31); }\n      }\n      if (s3 !== peg$FAILED) {\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          if (peg$r2.test(input.charAt(peg$currPos))) {\n            s3 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e31); }\n          }\n        }\n      } else {\n        s2 = peg$FAILED;\n      }\n      if (s2 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 101) {\n          s3 = peg$c26;\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e33); }\n        }\n        if (s3 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 69) {\n            s3 = peg$c27;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e34); }\n          }\n        }\n        if (s3 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 43) {\n            s4 = peg$c15;\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e17); }\n          }\n          if (s4 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 45) {\n              s4 = peg$c16;\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e18); }\n            }\n          }\n          if (s4 === peg$FAILED) {\n            s4 = null;\n          }\n          s5 = [];\n          if (peg$r2.test(input.charAt(peg$currPos))) {\n            s6 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s6 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e31); }\n          }\n          if (s6 !== peg$FAILED) {\n            while (s6 !== peg$FAILED) {\n              s5.push(s6);\n              if (peg$r2.test(input.charAt(peg$currPos))) {\n                s6 = input.charAt(peg$currPos);\n                peg$currPos++;\n              } else {\n                s6 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$e31); }\n              }\n            }\n          } else {\n            s5 = peg$FAILED;\n          }\n          if (s5 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s0 = peg$f38();\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    }\n    peg$silentFails--;\n    if (s0 === peg$FAILED) {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e32); }\n    }\n\n    return s0;\n  }\n\n  function peg$parseIdentifierOrBoolean() {\n    var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n    s0 = peg$currPos;\n    if (peg$r3.test(input.charAt(peg$currPos))) {\n      s1 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e35); }\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = [];\n      if (peg$r4.test(input.charAt(peg$currPos))) {\n        s4 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s4 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e36); }\n      }\n      if (s4 !== peg$FAILED) {\n        while (s4 !== peg$FAILED) {\n          s3.push(s4);\n          if (peg$r4.test(input.charAt(peg$currPos))) {\n            s4 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e36); }\n          }\n        }\n      } else {\n        s3 = peg$FAILED;\n      }\n      if (s3 === peg$FAILED) {\n        s3 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 46) {\n          s4 = peg$c21;\n          peg$currPos++;\n        } else {\n          s4 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e23); }\n        }\n        if (s4 !== peg$FAILED) {\n          s5 = peg$currPos;\n          peg$silentFails++;\n          s6 = peg$currPos;\n          s7 = peg$parse_();\n          s8 = peg$parseStrictIdentifier();\n          if (s8 !== peg$FAILED) {\n            s9 = peg$parse_();\n            if (input.charCodeAt(peg$currPos) === 40) {\n              s10 = peg$c22;\n              peg$currPos++;\n            } else {\n              s10 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e24); }\n            }\n            if (s10 !== peg$FAILED) {\n              s7 = [s7, s8, s9, s10];\n              s6 = s7;\n            } else {\n              peg$currPos = s6;\n              s6 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s6;\n            s6 = peg$FAILED;\n          }\n          peg$silentFails--;\n          if (s6 === peg$FAILED) {\n            s5 = undefined;\n          } else {\n            peg$currPos = s5;\n            s5 = peg$FAILED;\n          }\n          if (s5 !== peg$FAILED) {\n            s4 = [s4, s5];\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      }\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = [];\n        if (peg$r4.test(input.charAt(peg$currPos))) {\n          s4 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s4 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e36); }\n        }\n        if (s4 !== peg$FAILED) {\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            if (peg$r4.test(input.charAt(peg$currPos))) {\n              s4 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e36); }\n            }\n          }\n        } else {\n          s3 = peg$FAILED;\n        }\n        if (s3 === peg$FAILED) {\n          s3 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 46) {\n            s4 = peg$c21;\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e23); }\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$currPos;\n            peg$silentFails++;\n            s6 = peg$currPos;\n            s7 = peg$parse_();\n            s8 = peg$parseStrictIdentifier();\n            if (s8 !== peg$FAILED) {\n              s9 = peg$parse_();\n              if (input.charCodeAt(peg$currPos) === 40) {\n                s10 = peg$c22;\n                peg$currPos++;\n              } else {\n                s10 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$e24); }\n              }\n              if (s10 !== peg$FAILED) {\n                s7 = [s7, s8, s9, s10];\n                s6 = s7;\n              } else {\n                peg$currPos = s6;\n                s6 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s6;\n              s6 = peg$FAILED;\n            }\n            peg$silentFails--;\n            if (s6 === peg$FAILED) {\n              s5 = undefined;\n            } else {\n              peg$currPos = s5;\n              s5 = peg$FAILED;\n            }\n            if (s5 !== peg$FAILED) {\n              s4 = [s4, s5];\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        }\n      }\n      peg$savedPos = s0;\n      s0 = peg$f39();\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseStrictIdentifier() {\n    var s0, s1, s2, s3;\n\n    s0 = peg$currPos;\n    if (peg$r3.test(input.charAt(peg$currPos))) {\n      s1 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e35); }\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      if (peg$r4.test(input.charAt(peg$currPos))) {\n        s3 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s3 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e36); }\n      }\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        if (peg$r4.test(input.charAt(peg$currPos))) {\n          s3 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e36); }\n        }\n      }\n      peg$savedPos = s0;\n      s0 = peg$f40();\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parse_() {\n    var s0, s1;\n\n    peg$silentFails++;\n    s0 = [];\n    if (peg$r5.test(input.charAt(peg$currPos))) {\n      s1 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e38); }\n    }\n    while (s1 !== peg$FAILED) {\n      s0.push(s1);\n      if (peg$r5.test(input.charAt(peg$currPos))) {\n        s1 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e38); }\n      }\n    }\n    peg$silentFails--;\n    s1 = peg$FAILED;\n    if (peg$silentFails === 0) { peg$fail(peg$e37); }\n\n    return s0;\n  }\n\n  peg$result = peg$startRuleFunction();\n\n  if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n    return peg$result;\n  } else {\n    if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n      peg$fail(peg$endExpectation());\n    }\n\n    throw peg$buildStructuredError(\n      peg$maxFailExpected,\n      peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n      peg$maxFailPos < input.length\n        ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n        : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n    );\n  }\n}\n\nexport {\n  peg$SyntaxError as SyntaxError,\n\n  peg$parse as parse\n};\n","import type { Node } from './ast';\n\n/**\n * LRU cache\n * JavaScript Map iteration is guaranteed to be performed in the insertation order\n * On usage, remove the item from the Map and insert it in the end\n */\n\nconst MAX_ENTRIES = 128;\n\nconst cache = new Map();\nlet latestItem: string | undefined;\n\nexport function cacheGet(expr: string): Node | undefined {\n    return cache.get(expr);\n}\n\nexport function cacheSet(expr: string, ast: Node): void {\n    if (expr === latestItem) {\n        return;\n    }\n\n    cache.delete(expr);\n\n    if (cache.size >= MAX_ENTRIES) {\n        cache.delete(cache.keys().next().value);\n    }\n\n    cache.set(expr, ast);\n\n    latestItem = expr;\n}\n","import type { DivFunction } from '../../../typings/common';\nimport type { Node } from '../ast';\nimport { evalExpression, type EvalTypes, type VariablesMap } from '../eval';\nimport { parse } from '../expressions';\nimport type { MaybeMissing } from '../json';\nimport { cacheGet, cacheSet } from '../parserCache';\nimport { createConstVariable, Variable } from '../variable';\nimport { funcToKey, type Func } from './funcs';\n\nexport type CustomFunctions = Map<string, Func[]>;\n\nconst supportedTypes = new Set<EvalTypes>([\n    'string',\n    'integer',\n    'number',\n    'boolean',\n    'datetime',\n    'color',\n    'url',\n    'dict',\n    'array'\n]);\n\nexport function checkCustomFunction(func: MaybeMissing<DivFunction>): void {\n    if (!(typeof func.name === 'string' && func.name)) {\n        throw new Error('Incorrect function name');\n    }\n\n    if (!(typeof func.body === 'string' && func.body)) {\n        throw new Error('Incorrect function body');\n    }\n\n    if (!(func.return_type && supportedTypes.has(func.return_type))) {\n        throw new Error('Incorrect function return_type');\n    }\n\n    if (!Array.isArray(func.arguments)) {\n        throw new Error('Incorrect function arguments');\n    }\n\n    const argumentsNames = new Set<string>();\n    func.arguments.forEach(arg => {\n        if (!(typeof arg.name === 'string' && arg.name)) {\n            throw new Error('Incorrect argument name');\n        }\n\n        if (!(arg.type && supportedTypes.has(arg.type))) {\n            throw new Error('Incorrect argument type');\n        }\n\n        if (argumentsNames.has(arg.name)) {\n            throw new Error('Duplicate argument name');\n        }\n        argumentsNames.add(arg.name);\n    });\n}\n\nexport function customFunctionWrap(fn: DivFunction): Func {\n    let ast: Node | undefined;\n\n    return {\n        args: fn.arguments.map(it => {\n            return {\n                type: it.type\n            };\n        }),\n        cb(ctx, ...args) {\n            if (!ast) {\n                ast = cacheGet(fn.body) || parse(fn.body, {\n                    startRule: 'JsonStringContents'\n                });\n                cacheSet(fn.body, ast);\n            }\n\n            const vars: VariablesMap = new Map();\n            args.forEach((arg, index) => {\n                const instance = createConstVariable(fn.arguments[index].name, arg.type, arg.value);\n                // DatetimeVariable doesnt exist right know, but works fine\n                vars.set(instance.getName(), instance as Variable);\n            });\n\n            const res = evalExpression(vars, ctx.customFunctions, ctx.store, ast, {\n                weekStartDay: ctx.weekStartDay\n            });\n            res.warnings.forEach(warn => {\n                ctx.warnings.push(warn);\n            });\n            const result = res.result;\n\n            if (result.type === 'error') {\n                throw new Error(result.value);\n            }\n\n            if (result.type !== fn.return_type) {\n                throw new Error('Incorrect function return_type');\n            }\n\n            return result;\n        },\n    };\n}\n\nexport function mergeCustomFunctions(\n    map0: CustomFunctions | undefined,\n    map1: CustomFunctions | undefined\n): CustomFunctions | undefined {\n    if (!map0) {\n        return map1 || undefined;\n    }\n    if (!map1) {\n        return map0 || undefined;\n    }\n\n    const merged = new Map();\n    const defined = new Set<string>();\n    for (const [name, funcs] of map1) {\n        for (const func of funcs) {\n            const key = funcToKey(name, func);\n            defined.add(key);\n        }\n        merged.set(name, funcs);\n    }\n    for (const [name, funcs] of map0) {\n        for (const func of funcs) {\n            const key = funcToKey(name, func);\n            if (!defined.has(key)) {\n                defined.add(key);\n                const list = merged.get(name) || [];\n                list.push(func);\n                merged.set(name, list);\n            }\n        }\n    }\n\n    return merged;\n}\n","import type { DivJson } from '../../typings/common';\nimport { wrapError, type WrappedError } from './wrapError';\nimport { TYPE_MAP } from '../components/typeMap';\n\n/**\n * Simple check for json card\n * @param json\n * @returns Error string or null if everything fine\n */\nexport function simpleCheckInput(json?: Partial<DivJson>): WrappedError | null {\n    if (!json) {\n        return wrapError(new Error('Missing object'));\n    }\n\n    const card = json.card;\n    const templates = json.templates || {};\n\n    if (!card) {\n        return wrapError(new Error('Missing card'));\n    }\n\n    if (!card.states || !card.states.length) {\n        return wrapError(new Error('Missing states'));\n    }\n\n    for (const templateName in templates) {\n        if (templates.hasOwnProperty(templateName)) {\n            if (templateName in TYPE_MAP) {\n                return wrapError(new Error('Template name collision'), {\n                    additional: {\n                        templateName\n                    }\n                });\n            }\n        }\n    }\n\n    for (let i = 0; i < card.states.length; ++i) {\n        if (!card.states[i].div) {\n            return wrapError(new Error('Missing state div'), {\n                additional: {\n                    stateId: card.states[i].state_id\n                }\n            });\n        }\n        if (typeof card.states[i].state_id !== 'number') {\n            return wrapError(new Error('Missing state_id'), {\n                additional: {\n                    index: i\n                }\n            });\n        }\n    }\n\n    return null;\n}\n","export function uniq(list: string[]): string[] {\n    return [...new Set(list)];\n}\n","/* eslint-disable max-depth */\nimport type { Node } from './ast';\nimport type { VariableValue } from './variable';\nimport type { Store } from '../../typings/store';\nimport { uniq } from '../utils/uniq';\nimport { parse } from './expressions';\nimport { evalExpression, type VariablesMap } from './eval';\nimport { dateToString, gatherVarsFromAst, stringifyColor } from './utils';\nimport { type LogError, wrapError } from '../utils/wrapError';\nimport { parseColor } from '../utils/correctColor';\nimport { MAX_INT32, MIN_INT32 } from './const';\nimport { simpleUnescapeString } from './simpleUnescapeString';\nimport { cacheGet, cacheSet } from './parserCache';\nimport type { CustomFunctions } from './funcs/customFuncs';\n\nclass ExpressionBinding {\n    private readonly ast: Node;\n\n    constructor(ast: Node) {\n        this.ast = ast;\n    }\n\n    /**\n     * Applies variables into ast\n     * @param variables\n     * @param logError\n     */\n    apply(\n        {\n            variables,\n            customFunctions,\n            logError,\n            store,\n            weekStartDay,\n            keepComplex\n        }: {\n            variables: VariablesMap;\n            customFunctions: CustomFunctions | undefined;\n            logError: LogError;\n            store: Store | undefined;\n            weekStartDay: number;\n            keepComplex?: boolean;\n        }\n    ): VariableValue | string | undefined {\n        try {\n            const res = evalExpression(variables, customFunctions, store, this.ast, {\n                weekStartDay\n            });\n            res.warnings.forEach(logError);\n            const result = res.result;\n\n            if (result.type === 'error') {\n                logError(wrapError(new Error('Expression execution error'), {\n                    additional: {\n                        message: result.value\n                    }\n                }));\n                return undefined;\n            }\n\n            const value = result.value;\n            if (value instanceof Date) {\n                return dateToString(value);\n            }\n            if (result.type === 'boolean') {\n                return Boolean(value);\n            }\n            if (result.type === 'color') {\n                const parsed = parseColor(String(value));\n                if (parsed) {\n                    return stringifyColor(parsed);\n                }\n                logError(wrapError(new Error('Expression execution error')));\n            }\n            if (result.type === 'integer') {\n                if ((value as number) > MAX_INT32 || (value as number) < MIN_INT32) {\n                    logError(wrapError(new Error('Expression result is out of 32-bit int range')));\n                    return undefined;\n                }\n                return Number(value);\n            }\n            if (!keepComplex && (result.type === 'array' || result.type === 'dict')) {\n                try {\n                    return JSON.stringify(value);\n                } catch (err) {\n                    logError(wrapError(new Error(`Failed to stringify ${result.type}`)));\n                    return `<${result.type}>`;\n                }\n            }\n            return value;\n        } catch (err) {\n            logError(wrapError(new Error('Expression execution error')));\n            return undefined;\n        }\n    }\n}\n\nclass VariableBinding {\n    private readonly variable: string;\n\n    constructor(variable: string) {\n        this.variable = variable;\n    }\n\n    /**\n     * Applies variables into ast\n     * @param variables\n     * @param logError\n     */\n    apply(variables: VariablesMap): VariableValue | string | undefined {\n        const varInstance = variables.get(this.variable);\n        if (varInstance) {\n            return varInstance.getValue();\n        }\n\n        return undefined;\n    }\n}\n\nexport type MaybeMissing<T> = T | (\n    T extends (infer U)[] ?\n        MaybeMissing<U>[] :\n        (\n            T extends object ?\n                {\n                    [P in keyof T]?: MaybeMissing<T[P]>;\n                } :\n                T | undefined\n        )\n);\n\nfunction hasExpressions(str: string): boolean {\n    return str.indexOf('@{') > -1 || str.indexOf('\\\\') > -1;\n}\n\nfunction prepareVarsObj<T>(\n    jsonProp: T,\n    store: {\n        vars: string[];\n        hasExpression: boolean;\n    },\n    logError: LogError\n): unknown {\n    if (jsonProp) {\n        if (typeof jsonProp === 'string') {\n            if (hasExpressions(jsonProp)) {\n                store.hasExpression = true;\n\n                if (process.env.ENABLE_EXPRESSIONS || process.env.ENABLE_EXPRESSIONS === undefined) {\n                    try {\n                        const ast = cacheGet(jsonProp) || parse(jsonProp, {\n                            startRule: 'JsonStringContents'\n                        });\n                        cacheSet(jsonProp, ast);\n                        const propVars = gatherVarsFromAst(ast);\n                        store.vars.push(...propVars);\n\n                        return new ExpressionBinding(ast);\n                    } catch (err) {\n                        logError(wrapError(new Error('Unable to parse expression'), {\n                            additional: {\n                                expression: jsonProp\n                            }\n                        }));\n                        return undefined;\n                    }\n                } else {\n                    if (jsonProp === '@{}') {\n                        return '';\n                    } else if (jsonProp.startsWith('@{') && jsonProp.endsWith('}')) {\n                        return new VariableBinding(jsonProp.substring(2, jsonProp.length - 1));\n                    }\n                    try {\n                        return simpleUnescapeString(jsonProp);\n                    } catch (err: any) {\n                        logError(wrapError(err as Error, {\n                            additional: {\n                                expression: jsonProp\n                            }\n                        }));\n                        return undefined;\n                    }\n                }\n            }\n        } else if (Array.isArray(jsonProp)) {\n            return jsonProp.map(item => prepareVarsObj(item, store, logError));\n        } else if (typeof jsonProp === 'object') {\n            const res: Record<string, unknown> = {};\n            for (const key in jsonProp) {\n                res[key] = prepareVarsObj(jsonProp[key], store, logError);\n            }\n            return res;\n        }\n    }\n    return jsonProp;\n}\n\nfunction applyVars(\n    jsonProp: unknown,\n    opts: {\n        variables: VariablesMap;\n        customFunctions: CustomFunctions | undefined;\n        logError: LogError;\n        store: Store | undefined;\n        weekStartDay: number;\n        keepComplex?: boolean;\n    }\n): unknown {\n    if (jsonProp) {\n        if (\n            (process.env.ENABLE_EXPRESSIONS || process.env.ENABLE_EXPRESSIONS === undefined) &&\n            jsonProp instanceof ExpressionBinding\n        ) {\n            return jsonProp.apply(opts);\n        } else if (\n            (!process.env.ENABLE_EXPRESSIONS && process.env.ENABLE_EXPRESSIONS !== undefined) &&\n            jsonProp instanceof VariableBinding\n        ) {\n            return jsonProp.apply(opts.variables);\n        } else if (Array.isArray(jsonProp)) {\n            return jsonProp.map(it => applyVars(it, opts));\n        } else if (typeof jsonProp === 'object') {\n            const res: Record<string, unknown> = {};\n            for (const key in jsonProp) {\n                res[key] = applyVars(jsonProp[key as keyof typeof jsonProp], opts);\n            }\n            return res;\n        }\n    }\n    return jsonProp;\n}\n\nexport interface PreparedExpression<T> {\n    vars: string[];\n    hasExpression: boolean;\n    applyVars: (\n        variables: VariablesMap,\n        customFunctions?: CustomFunctions,\n        keepComplex?: boolean\n    ) => MaybeMissing<T>;\n}\n\nexport function prepareVars<T>(jsonProp: T, logError: LogError, store: Store | undefined, weekStartDay: number):\n    PreparedExpression<T> {\n    const result: {\n        vars: string[];\n        hasExpression: boolean;\n    } = {\n        vars: [],\n        hasExpression: false\n    };\n    const root = prepareVarsObj(jsonProp, result, logError);\n\n    const vars = uniq(result.vars);\n\n    return {\n        vars,\n        hasExpression: result.hasExpression,\n        applyVars(variables, customFunctions, keepComplex) {\n            return applyVars(root, {\n                variables,\n                customFunctions,\n                logError,\n                store,\n                weekStartDay,\n                keepComplex\n            }) as MaybeMissing<T>;\n        }\n    };\n}\n","import type { Writable } from 'svelte/store';\nimport { writable } from 'svelte/store';\nimport type { Variable } from './variable';\n\nconst controllerToStore = new Map<GlobalVariablesController, Writable<string>>();\nconst controllerToVars = new Map<GlobalVariablesController, Map<string, Variable>>();\n\nexport function getControllerStore(controller: GlobalVariablesController): Writable<string> {\n    const store = controllerToStore.get(controller) || writable('');\n\n    if (!controllerToStore.has(controller)) {\n        controllerToStore.set(controller, store);\n    }\n\n    return store;\n}\n\nexport function cleanControllerStore(controller: GlobalVariablesController): void {\n    controllerToStore.delete(controller);\n    controllerToVars.delete(controller);\n}\n\nexport function getControllerVars(controller: GlobalVariablesController): Map<string, Variable> {\n    const map = controllerToVars.get(controller) || new Map();\n\n    if (!controllerToVars.has(controller)) {\n        controllerToVars.set(controller, map);\n    }\n\n    return map;\n}\n\nexport class GlobalVariablesController {\n    setVariable(variable: Variable): void {\n        const name = variable.getName();\n        const vars = getControllerVars(this);\n\n        if (vars.has(name)) {\n            throw new Error('Variable with the same name already exist');\n        } else {\n            vars.set(name, variable);\n            const store = getControllerStore(this);\n            store.set(name);\n        }\n    }\n\n    getVariable(variableName: string): Variable | undefined {\n        const vars = getControllerVars(this);\n\n        return vars.get(variableName);\n    }\n\n    list(): IterableIterator<Variable> {\n        const vars = getControllerVars(this);\n\n        return vars.values();\n    }\n}\n\nexport function createGlobalVariablesController() {\n    return new GlobalVariablesController();\n}\n","import type { DivTimer } from '../../typings/common';\nimport type { ExecAnyActionsFunc } from '../context/root';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { VariableType } from '../expressions/variable';\nimport { type LogError, wrapError } from './wrapError';\n\ninterface TimerState {\n    state: 'stopped' | 'running' | 'paused';\n    definition: DivTimer;\n    duration?: number;\n    tick?: number;\n    durationTimeout?: number;\n    tickTimeout?: number;\n    tickStarted?: number;\n    tickPassed?: number;\n    tickCount?: number;\n    tickCountPredict?: number;\n    durationStarted?: number;\n    durationPassed?: number;\n    hold?: boolean;\n}\n\nconst AVAIL_ACTIONS_NAMES = ['start', 'stop', 'pause', 'resume', 'cancel', 'reset'] as const;\n\ntype AVAIL_ACTIONS_LIST = typeof AVAIL_ACTIONS_NAMES[number];\n\nconst AVAIL_ACTIONS = new Set<string>(AVAIL_ACTIONS_NAMES);\n\ntype ApplyVarsFunc = <T>(json: T) => MaybeMissing<T>;\n\ntype HasVariableWithTypeFunc = (name: string, type: VariableType) => boolean;\n\ntype SetVariableValueFunc = (name: string, value: unknown) => void;\n\nexport class TimersController {\n    private readonly timers: Map<string, TimerState> = new Map();\n    private readonly logError: LogError;\n    private readonly applyVars: ApplyVarsFunc;\n    private readonly hasVariableWithType: HasVariableWithTypeFunc;\n    private readonly setVariableValue: SetVariableValueFunc;\n    private readonly execAnyActions: ExecAnyActionsFunc;\n    private readonly visibilityHandler: () => void;\n    private awaitActions: {\n        id: string;\n        action: AVAIL_ACTIONS_LIST;\n    }[] = [];\n\n    constructor(opts: {\n        logError: LogError;\n        applyVars: ApplyVarsFunc;\n        hasVariableWithType: HasVariableWithTypeFunc;\n        setVariableValue: SetVariableValueFunc;\n        execAnyActions: ExecAnyActionsFunc;\n    }) {\n        this.logError = opts.logError;\n        this.applyVars = opts.applyVars;\n        this.hasVariableWithType = opts.hasVariableWithType;\n        this.setVariableValue = opts.setVariableValue;\n        this.execAnyActions = opts.execAnyActions;\n\n        this.visibilityHandler = () => {\n            if (document.visibilityState === 'visible') {\n                this.awaitActions.forEach(({ id, action }) => {\n                    this.execTimerAction(id, action);\n                });\n                this.awaitActions = [];\n                this.unholdAll();\n            } else {\n                this.holdAll();\n            }\n        };\n\n        document.addEventListener('visibilitychange', this.visibilityHandler);\n    }\n\n    destroy(): void {\n        document.removeEventListener('visibilitychange', this.visibilityHandler);\n\n        for (const [_id, timer] of this.timers) {\n            this.stopTimerTimeouts(timer);\n        }\n    }\n\n    createTimer(timer: DivTimer) {\n        if (!timer?.id) {\n            this.logError(wrapError(new Error('Missing timer id')));\n            return;\n        }\n        if (!(timer.duration || timer.tick_interval && (timer.value_variable || timer.tick_actions))) {\n            this.logError(wrapError(new Error('Misconfigured timer'), {\n                additional: {\n                    id: timer.id\n                }\n            }));\n            return;\n        }\n\n        this.timers.set(timer.id, {\n            state: 'stopped',\n            definition: timer\n        });\n    }\n\n    execTimerAction(id: string | null | undefined, action: string | null | undefined) {\n        if (!id || !action || !this.timers.has(id) || !AVAIL_ACTIONS.has(action)) {\n            this.logError(wrapError(new Error('Incorrect timer action'), {\n                additional: {\n                    id,\n                    action\n                }\n            }));\n            return;\n        }\n        const actionTyped = action as AVAIL_ACTIONS_LIST;\n\n        if (document.visibilityState !== 'visible') {\n            // wait till the page is visible\n            this.awaitActions.push({\n                id,\n                action: actionTyped\n            });\n            return;\n        }\n\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        const timer = this.timers.get(id)!;\n        this[actionTyped](timer);\n    }\n\n    private stopTimerTimeouts(timer: TimerState): void {\n        if (timer.durationTimeout) {\n            clearTimeout(timer.durationTimeout);\n            timer.durationTimeout = undefined;\n        }\n        if (timer.tickTimeout) {\n            clearTimeout(timer.tickTimeout);\n            timer.tickTimeout = undefined;\n        }\n    }\n\n    private async tickOrUnholdAction(timer: TimerState): Promise<void> {\n        const now = performance.now();\n        const value = (timer.durationPassed || 0) + now - (timer.durationStarted || 0);\n        if (timer.duration && value > timer.duration) {\n            return;\n        }\n        this.updateVariable(timer, value);\n        await this.callActions(timer, 'tick');\n\n        if (timer.tickCount !== undefined) {\n            ++timer.tickCount;\n        }\n    }\n\n    private startOrResume(timer: TimerState): void {\n        timer.state = 'running';\n        timer.hold = false;\n\n        timer.durationStarted = performance.now();\n\n        const duration = timer.duration;\n        if (duration) {\n            timer.durationTimeout = window.setTimeout(async() => {\n                this.updateVariable(timer, duration);\n                if (\n                    timer.tickCountPredict &&\n                    timer.tickCount !== undefined &&\n                    timer.tickCount < timer.tickCountPredict\n                ) {\n                    await this.callActions(timer, 'tick');\n                }\n                this.stop(timer);\n            }, Math.max(0, duration - (timer.durationPassed || 0)));\n        }\n        const tick = timer.tick;\n        if (tick) {\n            const startTick = () => {\n                const started = timer.tickStarted = performance.now();\n                const duration = Math.max(0, tick - (timer.tickPassed || 0));\n                timer.tickTimeout = window.setTimeout(async() => {\n                    await this.tickOrUnholdAction(timer);\n                    timer.tickPassed = ((performance.now() - started) - duration) % tick;\n                    if (timer.state === 'running') {\n                        startTick();\n                    }\n                }, duration);\n            };\n\n            startTick();\n        }\n    }\n\n    private start(timer: TimerState): void {\n        if (timer.state === 'running') {\n            this.logError(wrapError(new Error('The timer is already running')));\n            return;\n        } else if (timer.state === 'paused') {\n            this.logError(wrapError(new Error('The timer is paused')));\n            return;\n        }\n\n        const variableName = timer.definition.value_variable;\n        if (variableName && !this.hasVariableWithType(variableName, 'integer')) {\n            this.logError(wrapError(new Error('Cannot find variable'), {\n                additional: {\n                    name: variableName\n                }\n            }));\n            return;\n        }\n\n        if (variableName) {\n            this.setVariableValue(variableName, 0);\n        }\n\n        if (timer.definition.duration) {\n            timer.duration = this.applyVars(timer.definition.duration);\n        }\n        if (timer.definition.tick_interval) {\n            timer.tick = this.applyVars(timer.definition.tick_interval);\n        }\n        // duration < 0 is incorrect\n        // tick_interval <= is incorrect\n        if (\n            timer.duration !== undefined && timer.duration < 0 ||\n            timer.tick !== undefined && timer.tick <= 0\n        ) {\n            this.logError(wrapError(new Error('Incorrect timer properties'), {\n                additional: {\n                    id: timer.definition.id\n                }\n            }));\n            return;\n        }\n\n        if (timer.duration !== undefined && timer.tick !== undefined) {\n            timer.tickCount = 0;\n            timer.tickCountPredict = Math.floor(timer.duration / timer.tick);\n        }\n\n        this.startOrResume(timer);\n    }\n\n    private stop(timer: TimerState): void {\n        if (timer.state === 'stopped') {\n            this.logError(wrapError(new Error('The timer has already been stopped')));\n            return;\n        }\n\n        timer.state = 'stopped';\n        timer.durationPassed = 0;\n        timer.tickPassed = 0;\n        this.stopTimerTimeouts(timer);\n        this.callActions(timer, 'end');\n    }\n\n    private pause(timer: TimerState): void {\n        if (timer.state === 'stopped') {\n            this.logError(wrapError(new Error('The timer has already been stopped')));\n            return;\n        } else if (timer.state === 'paused') {\n            this.logError(wrapError(new Error('The timer has already been paused')));\n            return;\n        }\n\n        timer.state = 'paused';\n\n        this.stopTimerTimeouts(timer);\n\n        const now = performance.now();\n\n        if (timer.durationStarted) {\n            timer.durationPassed = (timer.durationPassed || 0) + now - timer.durationStarted;\n        }\n        if (timer.tickStarted) {\n            timer.tickPassed = (timer.tickPassed || 0) + now - timer.tickStarted;\n        }\n\n        const variableName = timer.definition.value_variable;\n        if (variableName && timer.durationPassed) {\n            this.setVariableValue(variableName, Math.round(timer.durationPassed));\n        }\n    }\n\n    private resume(timer: TimerState): void {\n        if (timer.state === 'stopped') {\n            this.logError(wrapError(new Error('The timer has already been stopped')));\n            return;\n        } else if (timer.state === 'running') {\n            this.logError(wrapError(new Error('The timer is already running')));\n            return;\n        }\n\n        this.startOrResume(timer);\n    }\n\n    private cancel(timer: TimerState): void {\n        if (timer.state === 'stopped') {\n            return;\n        }\n\n        timer.state = 'stopped';\n        timer.durationPassed = 0;\n        timer.tickPassed = 0;\n        this.stopTimerTimeouts(timer);\n    }\n\n    private reset(timer: TimerState): void {\n        this.cancel(timer);\n        this.start(timer);\n    }\n\n    private updateVariable(timer: TimerState, value: number): void {\n        const variableName = timer.definition.value_variable;\n        if (variableName) {\n            this.setVariableValue(variableName, Math.round(value));\n        }\n    }\n\n    private async callActions(timer: TimerState, type: 'tick' | 'end'): Promise<void> {\n        const actions = timer.definition[type === 'end' ? 'end_actions' : 'tick_actions'];\n\n        if (actions) {\n            const actionsWithExpressions = this.applyVars(actions);\n            return this.execAnyActions(actionsWithExpressions, {\n                processUrls: false\n            });\n        }\n    }\n\n    private holdAll(): void {\n        for (const [_id, timer] of this.timers) {\n            if (timer.state === 'running') {\n                timer.hold = true;\n                this.stopTimerTimeouts(timer);\n            }\n        }\n    }\n\n    private async unholdAll(): Promise<void> {\n        for (const [_id, timer] of this.timers) {\n            if (timer.state === 'running' && timer.hold) {\n                // All timeouts were canceled, but the time is not stopped\n                const now = performance.now();\n\n                if (timer.durationStarted) {\n                    timer.durationPassed = (timer.durationPassed || 0) + now - timer.durationStarted;\n                }\n                if (timer.tickStarted) {\n                    timer.tickPassed = (timer.tickPassed || 0) + now - timer.tickStarted;\n                }\n\n                if (timer.tick) {\n                    // Run tick actions and update variable instantly after the page is shown, if:\n                    // Timer has the tick_interval\n                    // Timer is not done yet (check inside function)\n                    await this.tickOrUnholdAction(timer);\n                }\n\n                this.startOrResume(timer);\n            }\n        }\n    }\n}\n","import type { ActionArrayInsertValue, ActionArrayRemoveValue, ActionArraySetValue, WrappedError } from '../../typings/common';\nimport type { ArrayVariable, Variable } from '../../typings/variables';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { ComponentContext } from '../types/componentContext';\nimport { wrapError } from '../utils/wrapError';\n\nexport function arrayInsert(\n    componentContext: ComponentContext | undefined,\n    variables: Map<string, Variable>,\n    logError: (error: WrappedError) => void,\n    actionTyped: MaybeMissing<ActionArrayInsertValue>\n): void {\n    const { variable_name: name, index, value } = actionTyped;\n\n    if (!value || typeof index !== 'number' && index !== undefined) {\n        logError(wrapError(new Error('Incorrect array_insert_value action'), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    handle(componentContext, variables, logError, actionTyped, variableInstance => {\n        const list = variableInstance.getValue();\n        if (typeof index === 'number' && (index < 0 || index > list.length)) {\n            logError(wrapError(new Error(`Index out of bound for mutation ${actionTyped.type}`), {\n                additional: {\n                    name,\n                    index,\n                    length: list.length\n                }\n            }));\n        } else {\n            const newList = list.slice();\n            if (typeof index === 'number') {\n                newList.splice(index, 0, value.value);\n            } else {\n                newList.push(value.value);\n            }\n            variableInstance.setValue(newList);\n        }\n    });\n}\n\nexport function arrayRemove(\n    componentContext: ComponentContext | undefined,\n    variables: Map<string, Variable>,\n    logError: (error: WrappedError) => void,\n    actionTyped: MaybeMissing<ActionArrayRemoveValue>\n): void {\n    const { variable_name: name, index } = actionTyped;\n\n    if (typeof index !== 'number') {\n        logError(wrapError(new Error('Incorrect array_remove_value action'), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    handle(componentContext, variables, logError, actionTyped, variableInstance => {\n        const list = variableInstance.getValue();\n        if (typeof index === 'number' && (index < 0 || index >= list.length)) {\n            logError(wrapError(new Error(`Index out of bound for mutation ${actionTyped.type}`), {\n                additional: {\n                    name,\n                    index,\n                    length: list.length\n                }\n            }));\n        } else {\n            const newList = list.slice();\n            newList.splice(index, 1);\n            variableInstance.setValue(newList);\n        }\n    });\n}\n\nexport function arraySet(\n    componentContext: ComponentContext | undefined,\n    variables: Map<string, Variable>,\n    logError: (error: WrappedError) => void,\n    actionTyped: MaybeMissing<ActionArraySetValue>\n): void {\n    const { variable_name: name, index, value } = actionTyped;\n\n    if (!value || typeof index !== 'number') {\n        logError(wrapError(new Error('Incorrect array_set_value action'), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    handle(componentContext, variables, logError, actionTyped, variableInstance => {\n        const list = variableInstance.getValue();\n        if (typeof index === 'number' && (index < 0 || index >= list.length)) {\n            logError(wrapError(new Error(`Index out of bound for mutation ${actionTyped.type}`), {\n                additional: {\n                    name,\n                    index,\n                    length: list.length\n                }\n            }));\n        } else {\n            const newList = list.slice();\n            newList[index] = value.value;\n            variableInstance.setValue(newList);\n        }\n    });\n}\n\nfunction handle(\n    componentContext: ComponentContext | undefined,\n    variables: Map<string, Variable>,\n    logError: (error: WrappedError) => void,\n    actionTyped: MaybeMissing<ActionArrayRemoveValue | ActionArrayInsertValue | ActionArraySetValue>,\n    cb: (variableInstance: ArrayVariable) => void\n): void {\n    const { variable_name: name } = actionTyped;\n\n    if (!name) {\n        logError(wrapError(new Error(`Incorrect ${actionTyped.type} action`), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    const variableInstance = componentContext?.getVariable(name) || variables.get(name);\n\n    if (!variableInstance) {\n        logError(wrapError(new Error('Cannot find variable'), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    const type = variableInstance.getType();\n    if (type === 'array') {\n        cb(variableInstance as ArrayVariable);\n    } else {\n        logError(wrapError(new Error('Trying to insert value into the non-array'), {\n            additional: {\n                name,\n                type\n            }\n        }));\n    }\n}\n","import type { ActionDictSetValue, WrappedError } from '../../typings/common';\nimport type { Variable } from '../../typings/variables';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { ComponentContext } from '../types/componentContext';\nimport { wrapError } from '../utils/wrapError';\n\nexport function dictSetValue(\n    componentContext: ComponentContext | undefined,\n    variables: Map<string, Variable>,\n    logError: (error: WrappedError) => void,\n    actionTyped: MaybeMissing<ActionDictSetValue>\n): void {\n    const { variable_name: name, key, value } = actionTyped;\n\n    if (typeof key !== 'string') {\n        logError(wrapError(new Error('Incorrect dict_set_value action'), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    if (!name) {\n        logError(wrapError(new Error(`Incorrect ${actionTyped.type} action`), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    const variableInstance = componentContext?.getVariable(name) || variables.get(name);\n\n    if (!variableInstance) {\n        logError(wrapError(new Error('Cannot find variable'), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    const type = variableInstance.getType();\n    if (type === 'dict') {\n        const dict = variableInstance.getValue() as Record<string, unknown>;\n        const newDict = { ...dict };\n        if (value) {\n            newDict[key] = value.value;\n        } else {\n            delete newDict[key];\n        }\n        variableInstance.setValue(newDict);\n    } else {\n        logError(wrapError(new Error('Trying to set value into the non-dict'), {\n            additional: {\n                name,\n                type\n            }\n        }));\n    }\n}\n","import type { ActionCopyToClipboard, WrappedError } from '../../typings/common';\nimport type { MaybeMissing } from '../expressions/json';\nimport { wrapError } from '../utils/wrapError';\n\nexport function copyToClipboard(\n    logError: (error: WrappedError) => void,\n    actionTyped: MaybeMissing<ActionCopyToClipboard>\n): void {\n    if (!(\n        actionTyped.content && (actionTyped.content.type === 'text' || actionTyped.content.type === 'url') &&\n        typeof actionTyped.content.value === 'string'\n    )) {\n        logError(wrapError(new Error('Incorrect action'), {\n            additional: {\n                action: actionTyped\n            }\n        }));\n        return;\n    }\n\n    if (!(\n        typeof navigator !== 'undefined' &&\n        'clipboard' in navigator &&\n        navigator.clipboard &&\n        'writeText' in navigator.clipboard &&\n        typeof navigator.clipboard.writeText === 'function'\n    )) {\n        logError(wrapError(new Error('Clipboard is unavailable'), {\n            additional: {\n                action: actionTyped\n            }\n        }));\n        return;\n    }\n\n    navigator.clipboard.writeText(actionTyped.content.value).catch(err => {\n        logError(wrapError(new Error('Failed to copy to the clipboard'), {\n            additional: {\n                originalError: String(err)\n            }\n        }));\n    });\n}\n","import type { AnimatorDirection, TypedValue } from '../../typings/common';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { Animator } from '../types/base';\nimport type { Variable, VariableType } from '../../typings/variables';\nimport type { ExecAnyActionsFunc } from '../context/root';\nimport { stringifyColor } from '../expressions/utils';\nimport { clamp } from './clamp';\nimport { parseColor } from './correctColor';\nimport { correctNonNegativeNumber } from './correctNonNegativeNumber';\nimport { correctPositiveNumber } from './correctPositiveNumber';\nimport { getEasing } from './easing';\nimport { lerp } from './lerp';\n\nfunction correctDirection(direction: string | undefined): AnimatorDirection | undefined {\n    if (direction === 'normal' || direction === 'reverse' || direction === 'alternate' || direction === 'alternate_reverse') {\n        return direction;\n    }\n}\n\nexport type CalcedAnimator = MaybeMissing<Animator & {\n    start_value_typed: TypedValue;\n    end_value_typed: TypedValue;\n}>;\n\nexport interface AnimatorInstance {\n    stop(): void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function createAnimator(\n    animator: CalcedAnimator,\n    variableInstance: Variable<any, VariableType>,\n    onEnd: () => void,\n    execAnyActions: ExecAnyActionsFunc\n): AnimatorInstance | undefined {\n    const duration = correctPositiveNumber(animator.duration, 0);\n\n    if (!duration || animator.type !== 'color_animator' && animator.type !== 'number_animator') {\n        return;\n    }\n\n    const startValue = (animator.start_value_typed ? animator.start_value_typed.value : animator.start_value) ??\n        variableInstance.getValue();\n    const endValue = animator.end_value_typed ? animator.end_value_typed.value : animator.end_value;\n\n    if (startValue === undefined || endValue === undefined) {\n        return;\n    }\n\n    if (\n        animator.type === 'color_animator' && (typeof startValue !== 'string' && startValue !== undefined || typeof endValue !== 'string') ||\n        animator.type === 'number_animator' && (typeof startValue !== 'number' && startValue !== undefined || typeof endValue !== 'number')\n    ) {\n        return;\n    }\n\n    const parsedStart = animator.type === 'color_animator' && parseColor(startValue as string);\n    const parsedEnd = animator.type === 'color_animator' && parseColor(endValue as string);\n    if (animator.type === 'color_animator' && (!parsedStart || !parsedEnd)) {\n        return;\n    }\n\n    const delay = correctNonNegativeNumber(animator.start_delay, 0);\n    const easing = getEasing(animator.interpolator || 'linear');\n    const direction = correctDirection(animator.direction) || 'normal';\n    // eslint-disable-next-line no-nested-ternary\n    const repeatCount = animator.repeat_count?.type === 'infinity' ?\n        Infinity :\n        (animator.repeat_count?.type === 'fixed' ? correctNonNegativeNumber(animator.repeat_count?.value, 1) : 1);\n\n    let animationTime = 0;\n    let localTime = performance.now();\n    const maxTime = repeatCount === Infinity ? Infinity : repeatCount * duration + delay;\n\n    function mix(t: number): string | number {\n        if (animator.type === 'color_animator') {\n            if (!parsedStart || !parsedEnd) {\n                throw new Error('Missing start/end value');\n            }\n            return stringifyColor({\n                a: clamp(lerp(parsedStart.a, parsedEnd.a, t), 0, 255),\n                r: clamp(lerp(parsedStart.r, parsedEnd.r, t), 0, 255),\n                g: clamp(lerp(parsedStart.g, parsedEnd.g, t), 0, 255),\n                b: clamp(lerp(parsedStart.b, parsedEnd.b, t), 0, 255)\n            });\n        }\n        return lerp(startValue as number, endValue as number, t);\n    }\n\n    function tick(now: number) {\n        const diff = now - localTime;\n        localTime = now;\n\n        animationTime += diff;\n\n        if (animationTime >= delay) {\n            let iterationNumber = Math.floor((animationTime - delay) / duration);\n\n            let t = (animationTime - delay - iterationNumber * duration) / duration;\n\n            if (iterationNumber >= repeatCount) {\n                iterationNumber = repeatCount - 1;\n                t = 1;\n            }\n\n            let dir: 'normal' | 'reverse';\n            if (\n                direction === 'normal' ||\n                (direction === 'alternate' && iterationNumber % 2 === 0) ||\n                direction === 'alternate_reverse' && iterationNumber % 2 === 1\n            ) {\n                dir = 'normal';\n            } else {\n                dir = 'reverse';\n            }\n\n            if (dir === 'reverse') {\n                t = 1 - t;\n            }\n\n            const value = mix(easing(t));\n            variableInstance.setValue(value);\n        }\n\n        if (animationTime < maxTime) {\n            timer = requestAnimationFrame(tick);\n        } else {\n            onEnd();\n            execAnyActions(animator.end_actions);\n        }\n    }\n\n    let timer = requestAnimationFrame(tick);\n\n    return {\n        stop() {\n            cancelAnimationFrame(timer);\n            execAnyActions(animator.cancel_actions);\n            execAnyActions(animator.end_actions);\n        }\n    };\n}\n","import type { ComponentContext } from '../types/componentContext';\n\nexport function getTooltipContext(componentContext: ComponentContext | undefined): ComponentContext | undefined {\n    let ctx = componentContext;\n    while (ctx && !ctx.isTooltipRoot) {\n        ctx = ctx.parent;\n    }\n    return ctx;\n}\n\nexport function getStateContext(componentContext: ComponentContext | undefined): ComponentContext | undefined {\n    let ctx = componentContext;\n    while (ctx?.parent && ctx.json.type !== 'state' && !ctx.isRootState && !ctx.isTooltipRoot) {\n        ctx = ctx.parent;\n    }\n    return ctx;\n}\n","import type { ActionSubmit, ActionSubmitHeader, ActionSubmitMethod } from '../../typings/common';\nimport type { MaybeMissing } from '../expressions/json';\n\nfunction checkString(str: string | undefined): boolean {\n    return Boolean(str && typeof str === 'string');\n}\n\nconst allowedMethods = new Set([\n    'get',\n    'post',\n    'put',\n    'patch',\n    'delete',\n    'head',\n    'options'\n]);\n\nfunction checkMethod(method: ActionSubmitMethod | undefined): boolean {\n    return method === undefined || allowedMethods.has(method);\n}\n\nfunction checkHeaders(headers: MaybeMissing<ActionSubmitHeader>[] | undefined): boolean {\n    return headers === undefined ||\n        Array.isArray(headers) &&\n            headers.every(header => checkString(header.name) && checkString(header.value));\n}\n\nexport function checkSubmitAction(action: MaybeMissing<ActionSubmit>): action is ActionSubmit {\n    return checkString(action.container_id) &&\n        checkString(action.request?.url) &&\n        checkMethod(action.request?.method) &&\n        checkHeaders(action.request?.headers);\n}\n","export const hasDialogSupport = typeof window !== 'undefined' && 'HTMLDialogElement' in window;\n","<script lang=\"ts\" context=\"module\">\n    const DEFAULT_ANIMATION: Animation = {\n        name: 'set',\n        items: [{\n            name: 'translate'\n        }, {\n            name: 'fade'\n        }]\n    };\n</script>\n\n<script lang=\"ts\">\n    import { afterUpdate, getContext, onDestroy, onMount } from 'svelte';\n\n    import rootCss from '../Root.module.css';\n    import css from './Tooltip.module.css';\n\n    import type { Tooltip } from '../../types/base';\n    import type { Animation } from '../../types/animation';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { MaybeMissing } from '../../expressions/json';\n    import Unknown from '../utilities/Unknown.svelte';\n    import { genClassName } from '../../utils/genClassName';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { inOutAnimation } from '../../utils/inOutAnimation';\n    import { hasDialogSupport } from '../../utils/hasDialogSupport';\n\n    export let ownerNode: HTMLElement;\n    export let data: MaybeMissing<Tooltip>;\n    export let internalId: number;\n    export let parentComponentContext: ComponentContext;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const isDesktop = rootCtx.isDesktop;\n\n    const creationTime = Date.now();\n\n    let tooltipNode: HTMLDialogElement | HTMLElement;\n    let visible = false;\n    let tooltipX = '';\n    let tooltipY = '';\n    let tooltipWidth = '';\n    let tooltipHeight = '';\n    let resizeObserver: ResizeObserver | null = null;\n    let componentContext: ComponentContext;\n    let modal = true;\n    let prevFocusedElement: Element | null = null;\n\n    $: {\n        if (componentContext) {\n            componentContext.destroy();\n        }\n        componentContext = parentComponentContext.produceChildContext(data.div || {}, {\n            isTooltipRoot: true\n        });\n    }\n\n    $: position = parentComponentContext.getDerivedFromVars(data.position);\n    $: offsetX = parentComponentContext.getDerivedFromVars(data.offset?.x?.value);\n    $: offsetY = parentComponentContext.getDerivedFromVars(data.offset?.y?.value);\n\n    $: animationIn = parentComponentContext.getDerivedFromVars(data.animation_in);\n    $: animationOut = parentComponentContext.getDerivedFromVars(data.animation_out);\n\n    $: if (data.mode?.type === 'non_modal') {\n        modal = false;\n    } else {\n        modal = true;\n    }\n\n    $: mods = {\n        visible\n    };\n\n    function reposition(): void {\n        if (!tooltipNode || !ownerNode) {\n            return;\n        }\n        const parent = tooltipNode.parentElement;\n        if (!parent) {\n            return;\n        }\n\n        const prevTransform = tooltipNode.style.cssText;\n        // Override transform from the css animation in the inOutAnimation\n        // So it happens in the order:\n        // 1) Attach dom node\n        // 2) Run in-out transition\n        // 3) Call afterUpdate\n        tooltipNode.style.cssText += ';transform: none !important';\n\n        const ownerBbox = ownerNode.getBoundingClientRect();\n        const tooltipBbox = tooltipNode.getBoundingClientRect();\n        const parentBbox = parent.getBoundingClientRect();\n\n        tooltipNode.style.cssText = prevTransform;\n\n        let x = 0;\n        let y = 0;\n        let width: number | null = null;\n        let height: number | null = null;\n        let calcedWidth = 0;\n        let calcedHeight = 0;\n\n        const jsonWidth = componentContext?.json?.width;\n        const jsonHeight = componentContext?.json?.height;\n\n        if (!jsonWidth || jsonWidth.type === 'match_parent') {\n            calcedWidth = width = window.innerWidth;\n        } else if (jsonWidth.type === 'fixed' && jsonWidth.value) {\n            calcedWidth = width = jsonWidth.value;\n        } else {\n            calcedWidth = tooltipBbox.width;\n        }\n        if (jsonHeight?.type === 'match_parent') {\n            calcedHeight = height = window.innerHeight;\n        } else if (jsonHeight?.type === 'fixed' && jsonHeight.value) {\n            calcedHeight = height = jsonHeight.value;\n        } else {\n            calcedHeight = tooltipBbox.height;\n        }\n\n        if ($position === 'left' || $position === 'bottom-left' || $position === 'top-left') {\n            x = ownerBbox.left - calcedWidth;\n        } else if ($position === 'top' || $position === 'bottom' || $position === 'center') {\n            x = (ownerBbox.left + ownerBbox.right) / 2 - calcedWidth / 2;\n        } else if ($position === 'right' || $position === 'bottom-right' || $position === 'top-right') {\n            x = ownerBbox.right;\n        } else {\n            return;\n        }\n\n        if ($position === 'top' || $position === 'top-left' || $position === 'top-right') {\n            y = ownerBbox.top - calcedHeight;\n        } else if ($position === 'left' || $position === 'right' || $position === 'center') {\n            y = (ownerBbox.top + ownerBbox.bottom) / 2 - calcedHeight / 2;\n        } else if ($position === 'bottom-left' || $position === 'bottom' || $position === 'bottom-right') {\n            y = ownerBbox.bottom;\n        } else {\n            return;\n        }\n\n        if (!(hasDialogSupport && modal)) {\n            x -= parentBbox.left;\n            y -= parentBbox.top;\n        }\n\n        x += $offsetX || 0;\n        y += $offsetY || 0;\n\n        tooltipX = `${x}px`;\n        tooltipY = `${y}px`;\n        tooltipWidth = width !== null ? `${width}px` : '';\n        tooltipHeight = height !== null ? `${height}px` : '';\n        visible = true;\n\n        if (width === null || height === null) {\n            // wrap_content by any side\n            if (typeof ResizeObserver !== 'undefined' && !resizeObserver) {\n                resizeObserver = new ResizeObserver(() => {\n                    requestAnimationFrame(reposition);\n                });\n                resizeObserver.observe(tooltipNode);\n            }\n        } else {\n            resizeObserver?.disconnect();\n        }\n    }\n\n    function onOutClick(event: Event): void {\n        const path = event.composedPath();\n\n        if (\n            Date.now() - creationTime < 100 ||\n            path.includes(tooltipNode) && !(hasDialogSupport && path[0] === tooltipNode)\n        ) {\n            return;\n        }\n\n        closeByOutside(event);\n    }\n\n    function closeByOutside(event: Event): void {\n        event.stopPropagation();\n        event.preventDefault();\n\n        if (componentContext.getJsonWithVars(data.close_by_tap_outside) !== false) {\n            rootCtx.onTooltipClose(internalId);\n        }\n\n        if (data.tap_outside_actions) {\n            componentContext.execAnyActions(data.tap_outside_actions, {\n                processUrls: true\n            });\n        }\n    }\n\n    function onWindowResize(): void {\n        reposition();\n    }\n\n    function onKeyDown(event: KeyboardEvent): void {\n        if (event.key === 'Escape' && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {\n            rootCtx.onTooltipClose(internalId);\n        }\n    }\n\n    function onClose(event: Event): void {\n        rootCtx.onTooltipClose(internalId);\n        event.preventDefault();\n    }\n\n    onMount(() => {\n        try {\n            prevFocusedElement = document.activeElement;\n        } catch (_err) {}\n\n        if (rootCtx.tooltipRoot) {\n            const computed = window.getComputedStyle(tooltipNode);\n            tooltipNode.style.fontSize = computed.fontSize;\n            tooltipNode.style.fontFamily = computed.fontFamily;\n            tooltipNode.style.lineHeight = computed.lineHeight;\n            rootCtx.tooltipRoot.appendChild(tooltipNode);\n        }\n\n        if (hasDialogSupport && tooltipNode && tooltipNode instanceof HTMLDialogElement) {\n            tooltipNode[modal ? 'showModal' : 'show']();\n        }\n    });\n\n    afterUpdate(() => {\n        if (!visible) {\n            reposition();\n        }\n    });\n\n    onDestroy(() => {\n        if (componentContext) {\n            componentContext.destroy();\n        }\n\n        resizeObserver?.disconnect();\n\n        if (modal && prevFocusedElement && prevFocusedElement instanceof HTMLElement) {\n            if (hasDialogSupport && tooltipNode && tooltipNode instanceof HTMLDialogElement) {\n                tooltipNode.close();\n            }\n\n            try {\n                prevFocusedElement.focus({\n                    preventScroll: true\n                });\n            } catch (_err) {}\n        }\n    });\n</script>\n\n<svelte:window\n    on:resize={onWindowResize}\n/>\n\n<svelte:body\n    on:click={onOutClick}\n/>\n\n{#if hasDialogSupport}\n    <!-- svelte-ignore a11y-no-noninteractive-element-interactions -->\n    <dialog\n        bind:this={tooltipNode}\n        class=\"{genClassName('tooltip', css, mods)} {$isDesktop ? rootCss.root_platform_desktop : ''}\"\n        style:top={tooltipY}\n        style:left={tooltipX}\n        style:width={tooltipWidth}\n        style:height={tooltipHeight}\n        in:inOutAnimation|global={{ animations: $animationIn || DEFAULT_ANIMATION, direction: 'in' }}\n        out:inOutAnimation|global={{ animations: $animationOut || DEFAULT_ANIMATION, direction: 'out' }}\n        on:keydown={onKeyDown}\n        on:close={onClose}\n        on:cancel={onClose}\n        on:click={onOutClick}\n    >\n        {#if visible && modal && data.background_accessibility_description}\n            <button\n                class={css.tooltip__overlay}\n                type=\"button\"\n                aria-label={data.background_accessibility_description}\n                on:click={closeByOutside}\n            ></button>\n        {/if}\n\n        <div class={css.tooltip__inner}>\n            <Unknown\n                {componentContext}\n            />\n        </div>\n    </dialog>\n{:else}\n    {#if visible && modal}\n        {#if data.background_accessibility_description}\n            <button\n                class={css.tooltip__overlay}\n                type=\"button\"\n                aria-label={data.background_accessibility_description}\n                on:click={closeByOutside}\n            ></button>\n        {:else}\n            <!-- svelte-ignore a11y-click-events-have-key-events -->\n            <!-- svelte-ignore a11y-no-static-element-interactions -->\n            <div\n                class={css.tooltip__overlay}\n                on:click={closeByOutside}\n            ></div>\n        {/if}\n    {/if}\n\n    <!-- svelte-ignore a11y-no-noninteractive-element-interactions -->\n    <div\n        bind:this={tooltipNode}\n        class=\"{genClassName('tooltip', css, mods)} {$isDesktop ? rootCss.root_platform_desktop : ''}\"\n        role=\"dialog\"\n        aria-modal={modal}\n        style:top={tooltipY}\n        style:left={tooltipX}\n        style:width={tooltipWidth}\n        style:height={tooltipHeight}\n        in:inOutAnimation|global={{ animations: $animationIn || DEFAULT_ANIMATION, direction: 'in' }}\n        out:inOutAnimation|global={{ animations: $animationOut || DEFAULT_ANIMATION, direction: 'out' }}\n        on:keydown={onKeyDown}\n    >\n        <div class={css.tooltip__inner}>\n            <Unknown\n                {componentContext}\n            />\n        </div>\n    </div>\n{/if}\n","<script lang=\"ts\">\n    import { afterUpdate, createEventDispatcher, getContext, onDestroy, onMount } from 'svelte';\n    import { fly } from 'svelte/transition';\n\n    import rootCss from '../Root.module.css';\n    import css from './Menu.module.css';\n\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { ActionMenuItem } from '../../../typings/common';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { genClassName } from '../../utils/genClassName';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import Actionable from '../utilities/Actionable.svelte';\n\n    export let ownerNode: HTMLElement;\n    export let items: MaybeMissing<ActionMenuItem[]>;\n    export let parentComponentContext: ComponentContext;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const popupMix = rootCtx.getCustomization('menuPopupClass') || '';\n    const itemMix = rootCtx.getCustomization('menuItemClass') || '';\n\n    const isDesktop = rootCtx.isDesktop;\n\n    const creationTime = Date.now();\n\n    const dispatch = createEventDispatcher();\n\n    let menuNode: HTMLElement;\n    let visible = false;\n    let menuX = '';\n    let menuY = '';\n    let menuWidth = '';\n    let menuHeight = '';\n    let resizeObserver: ResizeObserver | null = null;\n\n    $: mods = {\n        visible\n    };\n\n    function reposition(): void {\n        if (!menuNode || !ownerNode) {\n            return;\n        }\n        const parent = menuNode.parentElement;\n        if (!parent) {\n            return;\n        }\n\n        const ownerBbox = ownerNode.getBoundingClientRect();\n        const menuBbox = menuNode.getBoundingClientRect();\n        const parentBbox = parent.getBoundingClientRect();\n        const windowWidth = window.innerWidth;\n        const windowHeight = window.innerHeight;\n\n        let x = 0;\n        let y = 0;\n        let width: number | null = null;\n        let height: number | null = null;\n        let calcedWidth = menuBbox.width;\n        let calcedHeight = menuBbox.height;\n\n        x = ownerBbox.left - parentBbox.left;\n        y = ownerBbox.bottom - parentBbox.top;\n\n        if (x + calcedWidth > windowWidth) {\n            x = windowWidth - calcedWidth;\n        }\n        if (x < 0) {\n            x = 0;\n        }\n        if (y + calcedHeight > windowHeight) {\n            if (ownerBbox.top - parentBbox.top - calcedHeight > 0) {\n                y = ownerBbox.top - parentBbox.top - calcedHeight;\n            } else {\n                y = windowHeight - calcedHeight;\n            }\n        }\n        if (y < 0) {\n            y = 0;\n        }\n\n        menuX = `${x}px`;\n        menuY = `${y}px`;\n        menuWidth = width !== null ? `${width}px` : '';\n        menuHeight = height !== null ? `${height}px` : '';\n        visible = true;\n\n        if (width === null || height === null) {\n            // wrap_content by any side\n            if (typeof ResizeObserver !== 'undefined' && !resizeObserver) {\n                resizeObserver = new ResizeObserver(() => {\n                    requestAnimationFrame(reposition);\n                });\n                resizeObserver.observe(menuNode);\n            }\n        } else {\n            resizeObserver?.disconnect();\n        }\n    }\n\n    function onWindowClick(event: Event): void {\n        if (Date.now() - creationTime < 100 || event.composedPath().includes(menuNode)) {\n            return;\n        }\n\n        dispatch('close');\n    }\n\n    function onWindowResize(): void {\n        reposition();\n    }\n\n    function onItemAction(): boolean {\n        dispatch('close');\n        return true;\n    }\n\n    onMount(() => {\n        if (rootCtx.tooltipRoot) {\n            const computed = window.getComputedStyle(menuNode);\n            menuNode.style.fontSize = computed.fontSize;\n            menuNode.style.fontFamily = computed.fontFamily;\n            menuNode.style.lineHeight = computed.lineHeight;\n            rootCtx.tooltipRoot.appendChild(menuNode);\n        }\n    });\n\n    afterUpdate(() => {\n        if (!visible) {\n            reposition();\n        }\n    });\n\n    onDestroy(() => {\n        resizeObserver?.disconnect();\n    });\n</script>\n\n<svelte:window\n    on:click={onWindowClick}\n    on:resize={onWindowResize}\n/>\n\n<div\n    bind:this={menuNode}\n    class=\"{genClassName('menu', css, mods)} {$isDesktop ? rootCss.root_platform_desktop : ''} {popupMix}\"\n    style:top={menuY}\n    style:left={menuX}\n    style:width={menuWidth}\n    style:height={menuHeight}\n    transition:fly={{ y: 20 }}\n>\n    <ul class={css.menu__list}>\n        {#each items as item}\n            <li>\n                <Actionable\n                    componentContext={parentComponentContext}\n                    actions={item.actions || (item.action && [item.action])}\n                    cls=\"{css.menu__item} {itemMix}\"\n                    customAction={onItemAction}\n                >\n                    {item.text}\n                </Actionable>\n            </li>\n        {/each}\n    </ul>\n</div>\n","<script lang=\"ts\" context=\"module\">\n    import { type Readable, type Writable, writable } from 'svelte/store';\n\n    let isPointerFocus = writable(true);\n    let rootInstancesCount = 0;\n\n    function onWindowKeyDown() {\n        isPointerFocus.set(false);\n    }\n\n    function onWindowPointerDown() {\n        isPointerFocus.set(true);\n    }\n\n    const AVAIL_SET_STORED_TYPES = new Set(['string', 'integer', 'number', 'url', 'color', 'boolean']);\n    const AVAIL_SET_STORED_ALL_TYPES = new Set(['string', 'integer', 'number', 'url', 'color', 'boolean', 'array', 'dict']);\n</script>\n\n<script lang=\"ts\">\n    import { onDestroy, onMount, setContext, tick } from 'svelte';\n    import { derived } from 'svelte/store';\n\n    import css from './Root.module.css';\n\n    import type {\n        Action,\n        VisibilityAction,\n        ComponentCallback,\n        CustomActionCallback,\n        DivBase,\n        DivJson,\n        ErrorCallback,\n        Platform,\n        StatCallback,\n        TemplateContext,\n        Theme,\n        Customization,\n        DivExtension,\n        DivExtensionContext,\n        DivExtensionClass,\n        TypefaceProvider,\n        DerivedExpression,\n        DisappearAction,\n        FetchInit,\n        DivVariable,\n        Direction,\n        ActionMenuItem,\n        Patch,\n        VariableTrigger,\n        DownloadCallbacks,\n        ActionSubmit,\n        SubmitCallback,\n        ActionScrollTo,\n        ActionScrollBy,\n        Overflow,\n        VideoPlayerProvider,\n        DivFunction\n    } from '../../typings/common';\n    import type { CustomComponentDescription } from '../../typings/custom';\n    import type { Animator, AppearanceTransition, DivBaseData, Tooltip, TransitionChange } from '../types/base';\n    import type { SwitchElements } from '../types/switch-elements';\n    import type { TintMode } from '../types/image';\n    import type { VideoElements } from '../types/video';\n    import type { ComponentContext, StateSetter } from '../types/componentContext';\n    import type { Store, StoreAllTypes, StoreTypes } from '../../typings/store';\n    import Unknown from './utilities/Unknown.svelte';\n    import RootSvgFilters from './utilities/RootSvgFilters.svelte';\n    import { ROOT_CTX, type FocusableMethods, type NodeGetter, type ParentMethods, type RootCtxValue, type Running } from '../context/root';\n    import { applyTemplate } from '../utils/applyTemplate';\n    import { type LogError, wrapError, type WrappedError } from '../utils/wrapError';\n    import { checkCustomFunction, customFunctionWrap, mergeCustomFunctions, type CustomFunctions } from '../expressions/funcs/customFuncs';\n    import { simpleCheckInput } from '../utils/simpleCheckInput';\n    import { ACTION_CTX, type ActionCtxValue } from '../context/action';\n    import { STATE_CTX, type StateCtxValue } from '../context/state';\n    import { constStore } from '../utils/constStore';\n    import {\n        type MaybeMissing,\n        prepareVars\n    } from '../expressions/json';\n    import { evalExpression } from '../expressions/eval';\n    import { parse } from '../expressions/expressions';\n    import { gatherVarsFromAst } from '../expressions/utils';\n    import { Truthy } from '../utils/truthy';\n    import { createConstVariable, createVariable, TYPE_TO_CLASS, Variable, type VariableType } from '../expressions/variable';\n    import {\n        cleanControllerStore,\n        getControllerStore,\n        getControllerVars,\n        GlobalVariablesController\n    } from '../expressions/globalVariablesController';\n    import { getUrlSchema, isBuiltinSchema } from '../utils/url';\n    import { TimersController } from '../utils/timers';\n    import { arrayInsert, arrayRemove, arraySet } from '../actions/array';\n    import { dictSetValue } from '../actions/dict';\n    import { copyToClipboard } from '../actions/copyToClipboard';\n    import { filterEnabledActions } from '../utils/filterEnabledActions';\n    import { ENABLED_CTX, type EnabledCtxValue } from '../context/enabled';\n    import { createAnimator, type AnimatorInstance } from '../utils/animators';\n    import { getStateContext, getTooltipContext } from '../utils/componentUtils';\n    import { checkSubmitAction } from '../utils/checkSubmitAction';\n    import TooltipView from './tooltip/Tooltip.svelte';\n    import Menu from './menu/Menu.svelte';\n\n    export let id: string;\n    export let json: Partial<DivJson> = {};\n    export let platform: Platform = 'auto';\n    export let theme: Theme = 'system';\n    export let globalVariablesController: GlobalVariablesController | undefined = undefined;\n    export let mix = '';\n    export let customization: Customization = {};\n    export let builtinProtocols: string[] = ['http', 'https', 'tel', 'mailto', 'intent'];\n    export let extensions: Map<string, DivExtensionClass> = new Map();\n    export let onError: ErrorCallback | undefined = undefined;\n    export let onStat: StatCallback | undefined = undefined;\n    export let onSubmit: SubmitCallback | undefined = undefined;\n    export let onCustomAction: CustomActionCallback | undefined = undefined;\n    export let onComponent: ComponentCallback | undefined = undefined;\n    export let typefaceProvider: TypefaceProvider = _fontFamily => '';\n    export let fetchInit: FetchInit = {};\n    export let tooltipRoot: HTMLElement | undefined = undefined;\n    export let customComponents: Map<string, CustomComponentDescription> | undefined = undefined;\n    export let direction: Direction = 'ltr';\n    export let store: Store | undefined = undefined;\n    export let pagerChildrenClipEnabled = true;\n    export let weekStartDay = 0;\n    export let videoPlayerProvider: VideoPlayerProvider | undefined = undefined;\n\n    let isMounted = true;\n\n    let isDesktop = writable(platform === 'desktop');\n    if (platform === 'auto' && typeof matchMedia !== 'undefined') {\n        const touchQuery = matchMedia('(any-pointer: coarse)');\n        isDesktop.set(!touchQuery.matches);\n        touchQuery.addListener(() => {\n            isDesktop.set(!touchQuery.matches);\n        });\n    }\n\n    let currentTheme: 'light' | 'dark' = 'light';\n    let themeQuery: MediaQueryList | null = null;\n    $: if (theme === 'light' || theme === 'dark') {\n        currentTheme = theme;\n    } else if (theme === 'system') {\n        if (typeof matchMedia !== 'undefined') {\n            if (!themeQuery) {\n                themeQuery = matchMedia('(prefers-color-scheme: dark)');\n                themeQuery.addListener(themeQueryListener);\n            }\n            currentTheme = themeQuery.matches ? 'dark' : 'light';\n        } else {\n            currentTheme = 'light';\n        }\n    } else {\n        logError(wrapError(new Error('Unsupported theme')));\n    }\n\n    $: if (currentTheme) {\n        updateTheme();\n    }\n\n    const directionStore = writable<Direction>(direction === 'rtl' ? 'rtl' : 'ltr');\n\n    function themeQueryListener(): void {\n        if (theme !== 'system' || !themeQuery) {\n            return;\n        }\n\n        currentTheme = themeQuery.matches ? 'dark' : 'light';\n    }\n\n    export function setTheme(newTheme: Theme): void {\n        theme = newTheme;\n    }\n\n    export function getDebugVariables() {\n        if (!process.env.DEVTOOL) {\n            return new Map<string, Variable>();\n        }\n\n        return localVariables;\n    }\n\n    export function getDebugAllVariables() {\n        if (!process.env.DEVTOOL) {\n            return new Map<string, Variable>();\n        }\n\n        return variables;\n    }\n\n    export function setData(newJson: Partial<DivJson>) {\n        json = newJson;\n    }\n\n    export function applyPatch(json: Patch): boolean {\n        return applyPatchInternal(json, logError);\n    }\n\n    const builtinSet = new Set(builtinProtocols);\n\n    let hasError = false;\n    let hasIdError = false;\n\n    $: {\n        hasError = false;\n\n        const initialError = simpleCheckInput(json);\n        if (initialError) {\n            hasError = true;\n            logError(initialError);\n        }\n    }\n\n    if (!id) {\n        hasIdError = true;\n        logError(wrapError(new Error('\"id\" prop is required')));\n    }\n\n    $: templates = json.templates || {};\n\n    const running: Record<Running, boolean> = {\n        stateChange: false\n    };\n\n    const variablesController = globalVariablesController || new GlobalVariablesController();\n\n    // Will notify about new global variables\n    const globalVariablesStore = getControllerStore(variablesController);\n    // Global variables only\n    const globalVariables = getControllerVars(variablesController);\n    // Local variables only\n    const localVariables = new Map<string, Variable>();\n    // Local and global variables combined, with local in precedence\n    const variables = new Map<string, Variable>();\n    // Stores for notify unset global variables\n    const awaitingGlobalVariables = new Map<string, Writable<any>>();\n\n    let timersController: TimersController | null = null;\n\n    const animators: Map<string, AnimatorInstance> = new Map();\n\n    let tooltipCounter = 0;\n    let tooltips: {\n        internalId: number;\n        ownerNode: HTMLElement;\n        desc: MaybeMissing<Tooltip>;\n        timeoutId: number | null;\n        componentContext: ComponentContext | undefined;\n    }[] = [];\n    const shownTooltips = new Set<string>();\n    let menu: {\n        items: MaybeMissing<ActionMenuItem>[];\n        node: HTMLElement;\n        componentContext: ComponentContext | undefined;\n    } | undefined;\n\n    const timeouts: number[] = [];\n\n    function mergeMaps<T>(\n        variables0: Map<string, T>,\n        variables1: Map<string, T> | undefined\n    ): Map<string, T>;\n    function mergeMaps<T>(\n        variables0: Map<string, T> | undefined,\n        variables1: Map<string, T> | undefined\n    ): Map<string, T> | undefined;\n    function mergeMaps<T>(\n        variables0: Map<string, T> | undefined,\n        variables1: Map<string, T> | undefined\n    ): Map<string, T> | undefined {\n        if (variables0 && variables1) {\n            return new Map([...variables0, ...variables1]);\n        } else if (variables0) {\n            return variables0;\n        } else if (variables1) {\n            return variables1;\n        }\n\n        return undefined;\n    }\n\n    function getCustomization<K extends keyof Customization>(prop: K): Customization[K] | undefined {\n        return customization?.[prop];\n    }\n\n    function getDerivedFromVars<T>(\n        logError: LogError,\n        jsonProp: T,\n        additionalVars?: Map<string, Variable>,\n        keepComplex = false,\n        customFunctions: CustomFunctions | undefined = undefined\n    ): Readable<MaybeMissing<T>> {\n        if (!jsonProp) {\n            return constStore(jsonProp);\n        }\n\n        const vars = mergeMaps(variables, additionalVars);\n\n        const prepared = prepareVars(jsonProp, logError, store, weekStartDay);\n        if (!prepared.vars.length) {\n            if (prepared.hasExpression) {\n                return constStore(prepared.applyVars(vars, customFunctions));\n            }\n            return constStore(jsonProp);\n        }\n        const stores = prepared.vars.map(name => {\n            return vars.get(name) || awaitVariableChanges(name);\n        }).filter(Truthy);\n\n        return derived(stores, () => prepared.applyVars(vars, customFunctions, keepComplex));\n    }\n\n    function getJsonWithVars<T>(\n        logError: LogError,\n        jsonProp: T,\n        additionalVars?: Map<string, Variable>,\n        keepComplex = false,\n        customFunctions: CustomFunctions | undefined = undefined\n    ): MaybeMissing<T> {\n        const prepared = prepareVars(jsonProp, logError, store, weekStartDay);\n\n        if (!prepared.hasExpression) {\n            return jsonProp;\n        }\n\n        const vars = mergeMaps(variables, additionalVars);\n\n        return prepared.applyVars(vars, customFunctions, keepComplex);\n    }\n\n    function preparePrototypeVariables(\n        name: string,\n        data: Record<string, unknown>,\n        index: number\n    ): Map<string, Variable> {\n        const map = new Map<string, Variable>();\n\n        const dict = createConstVariable(name, 'dict', data);\n        map.set(name, dict);\n\n        const indexVar = createConstVariable('index', 'integer', index);\n        map.set('index', indexVar);\n\n        return map;\n    }\n\n    function logError(error: WrappedError): void {\n        if (onError) {\n            onError({\n                error\n            });\n        } else if (error?.level === 'warn') {\n            console.warn(error);\n        } else {\n            console.error(error);\n        }\n    }\n\n    function logStat(type: string, action: Action): void {\n        if (onStat) {\n            onStat({\n                type,\n                action\n            });\n        }\n    }\n\n    function hasTemplate(templateName: string): boolean {\n        return templateName in templates;\n    }\n\n    function processTemplate(json: MaybeMissing<DivBaseData>, templateContext: TemplateContext): {\n        json: MaybeMissing<DivBaseData>;\n        templateContext: TemplateContext;\n    } {\n        if (!json) {\n            return {\n                json,\n                templateContext\n            };\n        }\n\n        const usedTypes = new Set([json.type]);\n\n        while (json.type && json.type in templates) {\n            ({\n                json,\n                templateContext\n            } = applyTemplate(json as DivBase, templateContext, templates, logError));\n\n            if (usedTypes.has(json.type)) {\n                return {\n                    json,\n                    templateContext\n                };\n            }\n            usedTypes.add(json.type);\n        }\n\n        return {\n            json,\n            templateContext\n        };\n    }\n\n    function componentDevtoolReal({\n        type,\n        node,\n        json,\n        origJson,\n        templateContext,\n        componentContext\n    }: {\n        type: 'mount' | 'update' | 'destroy';\n        node: HTMLElement | null;\n        json: MaybeMissing<DivBaseData>;\n        origJson: MaybeMissing<DivBaseData> | undefined;\n        templateContext: TemplateContext;\n        componentContext: ComponentContext;\n    }): void {\n        if (onComponent) {\n            onComponent({\n                type,\n                node,\n                json: json as DivBase,\n                origJson: origJson as DivBase | undefined,\n                templateContext,\n                componentContext\n            });\n        }\n    }\n\n    let idCounter = 0;\n    function genId(key: string): string {\n        if (process.env.IS_PROD) {\n            return `${id}-${idCounter++}`;\n        }\n        return `${id}-${key}-${idCounter++}`;\n    }\n\n    function genClass(key: string): string {\n        return `divkit-${genId(key)}`;\n    }\n\n    let svgFiltersMap: Record<string, string> = {};\n    let svgFilterUsages: Record<string, number> = {};\n\n    function addSvgFilter(color: string, mode: TintMode): string {\n        const key = `${color}:${mode}`;\n        svgFilterUsages[key] = svgFilterUsages[key] || 0;\n        ++svgFilterUsages[key];\n\n        if (svgFiltersMap[key]) {\n            return svgFiltersMap[key];\n        }\n\n        const filterId = `${genId('root')}-svg-filter`;\n        svgFiltersMap = {\n            ...svgFiltersMap,\n            [key]: filterId\n        };\n\n        return filterId;\n    }\n\n    function removeSvgFilter(color: string | undefined, mode: TintMode): void {\n        if (!color) {\n            return;\n        }\n\n        const key = `${color}:${mode}`;\n        if (!svgFilterUsages[key]) {\n            return;\n        }\n\n        if (--svgFilterUsages[key] === 0) {\n            svgFiltersMap = Object.keys(svgFiltersMap).reduce((acc, item) => {\n                if (svgFilterUsages[item]) {\n                    acc[item] = svgFiltersMap[item];\n                }\n                return acc;\n            }, {} as typeof svgFiltersMap);\n        }\n    }\n\n    const idPrefix = genId('byid') + '-id-';\n    const nodeGettersById = new Map<string, NodeGetter[]>();\n    const nodeById = new Map<string, HTMLElement>();\n\n    function fullId(id: string): string {\n        return idPrefix + id;\n    }\n\n    function registerId(id: string, getter: NodeGetter): () => void {\n        let arr = nodeGettersById.get(id) || [];\n        if (!nodeGettersById.has(id)) {\n            nodeGettersById.set(id, arr);\n        }\n        arr.push(getter);\n\n        return () => {\n            arr = arr.filter(it => it !== getter);\n            if (!arr.length) {\n                nodeGettersById.delete(id);\n            }\n\n            const full = fullId(id);\n\n            if (nodeById.has(full)) {\n                nodeById.delete(full);\n            }\n        };\n    }\n\n    function getComponentId(id: string): string {\n        const node = nodeGettersById.get(id)?.[0]?.node();\n\n        if (node) {\n            const full = fullId(id);\n            const prev = nodeById.get(full);\n\n            if (prev && prev !== node) {\n                prev.removeAttribute('id');\n            }\n            node.setAttribute('id', full);\n            nodeById.set(full, node);\n\n            return full;\n        }\n\n        return '';\n    }\n\n    async function setState(\n        stateId: string | null | undefined,\n        componentContext: ComponentContext | undefined\n    ): Promise<void> {\n        if (!stateId) {\n            throw new Error('Missing state id');\n        }\n\n        let parts = stateId.split('/');\n        const tooltipCtx = parts.length % 2 === 0 && getTooltipContext(componentContext);\n        let ctx: ComponentContext | undefined = tooltipCtx || rootComponentContext;\n        const log = (componentContext?.logError || logError);\n\n        if (!tooltipCtx) {\n            if (ctx.states?.root) {\n                const setters = ctx.states.root;\n                if (setters.length > 1) {\n                    log(wrapError(new Error('Error resolving state. Found multiple elements that respond to path'), {\n                        additional: {\n                            stateId\n                        }\n                    }));\n                    return;\n                }\n                ctx = await setters[0](parts[0]);\n                if (!ctx) {\n                    return;\n                }\n                parts = parts.slice(1);\n            } else {\n                return;\n            }\n        }\n\n        for (let i = 0; i < parts.length; i += 2) {\n            const divId = parts[i];\n            const selectedStateId = parts[i + 1];\n\n            if (ctx.states?.[divId]) {\n                const setters: StateSetter[] = ctx.states[divId];\n                if (setters.length > 1) {\n                    log(wrapError(new Error('Error resolving state. Found multiple elements that respond to path'), {\n                        additional: {\n                            stateId\n                        }\n                    }));\n                    return;\n                }\n                ctx = await setters[0](selectedStateId);\n                if (!ctx) {\n                    return;\n                }\n            } else {\n                return;\n            }\n        }\n    }\n\n    async function callSubmit(componentContext: ComponentContext | undefined, action: MaybeMissing<ActionSubmit>) {\n        const log = (componentContext?.logError || logError);\n\n        if (!checkSubmitAction(action)) {\n            log(wrapError(new Error('Incorrect submit action'), {\n                additional: {\n                    containerId: action.container_id\n                }\n            }));\n            return;\n        }\n\n        const getters = nodeGettersById.get(action.container_id);\n\n        if (getters?.length !== 1) {\n            log(wrapError(new Error('Error resolving container. Found multiple elements that respond to id'), {\n                additional: {\n                    containerId: action.container_id\n                }\n            }));\n            return;\n        }\n\n        const ctx = getters[0].context();\n        const vals: Record<string, unknown> = {};\n\n        if (ctx.variables) {\n            for (const [key, variable] of ctx.variables) {\n                vals[key] = variable.getValue();\n            }\n        }\n\n        if (onSubmit) {\n            Promise.resolve()\n                .then(() => onSubmit(action, vals))\n                .then(() => {\n                    execAnyActions(action.on_success_actions);\n                })\n                .catch(() => {\n                    execAnyActions(action.on_fail_actions);\n                });\n\n            return;\n        }\n\n        let hasContentType = false;\n        const headers: [string, string][] = [];\n        action.request.headers?.forEach(header => {\n            headers.push([header.name, header.value]);\n            if (header.name.toLowerCase() === 'content-type') {\n                hasContentType = true;\n            }\n        });\n        if (!hasContentType) {\n            headers.push(['Content-Type', 'application/json']);\n        }\n\n        let init;\n        if (typeof fetchInit === 'function') {\n            init = fetchInit(action.request.url);\n        } else {\n            init = fetchInit;\n        }\n\n        // no await!\n        fetch(action.request.url, {\n            ...init,\n            method: action.request.method || 'post',\n            headers,\n            body: JSON.stringify(vals)\n        }).then(res => {\n            if (!res.ok) {\n                throw new Error('Response is not ok');\n            }\n            execAnyActions(action.on_success_actions);\n        }).catch(err => {\n            log(wrapError(new Error('Failed to submit'), {\n                additional: {\n                    url: action.request.url,\n                    originalError: err\n                }\n            }));\n            execAnyActions(action.on_fail_actions);\n        });\n    }\n\n    function callScrollTo(\n        componentContext: ComponentContext | undefined,\n        actionTyped: MaybeMissing<ActionScrollTo>\n    ): void {\n        const log = (componentContext?.logError || logError);\n\n        const instance = actionTyped.id && getInstance<SwitchElements>(actionTyped.id);\n        if (!instance) {\n            log(wrapError(new Error('Missing component for \"scroll_to\" action'), {\n                additional: {\n                    id: actionTyped.id\n                }\n            }));\n            return;\n        }\n        if (actionTyped.animated !== undefined && typeof actionTyped.animated !== 'boolean') {\n            log(wrapError(new Error('Missing properties for \"scroll_to\" action'), {\n                additional: {\n                    id: actionTyped.id\n                }\n            }));\n            return;\n        }\n        switch (actionTyped.destination?.type) {\n            case 'index': {\n                if (typeof actionTyped.destination.value === 'number') {\n                    instance.setCurrentItem(actionTyped.destination.value, actionTyped.animated ?? true);\n                }\n                break;\n            }\n            case 'offset': {\n                if (typeof actionTyped.destination.value === 'number') {\n                    instance.scrollToPosition?.(actionTyped.destination.value, actionTyped.animated ?? true);\n                }\n                break;\n            }\n            case 'start': {\n                instance.scrollToStart?.(actionTyped.animated ?? true);\n                break;\n            }\n            case 'end': {\n                instance.scrollToEnd?.(actionTyped.animated ?? true);\n                break;\n            }\n            default: {\n                log(wrapError(new Error('Unknown destination for \"scroll_to\" action'), {\n                    additional: {\n                        id: actionTyped.id,\n                        destination: actionTyped.destination?.type\n                    }\n                }));\n            }\n        }\n    }\n\n    function callScrollBy(\n        componentContext: ComponentContext | undefined,\n        actionTyped: MaybeMissing<ActionScrollBy>\n    ): void {\n        const log = (componentContext?.logError || logError);\n\n        const instance = actionTyped.id && getInstance<SwitchElements>(actionTyped.id);\n        if (!instance) {\n            log(wrapError(new Error('Missing component for \"scroll_by\" action'), {\n                additional: {\n                    id: actionTyped.id\n                }\n            }));\n            return;\n        }\n        if (\n            typeof actionTyped.item_count !== 'number' && actionTyped.item_count !== undefined ||\n            typeof actionTyped.offset !== 'number' && actionTyped.offset !== undefined ||\n            actionTyped.overflow !== undefined && actionTyped.overflow !== 'clamp' && actionTyped.overflow !== 'ring' ||\n            actionTyped.animated !== undefined && typeof actionTyped.animated !== 'boolean'\n        ) {\n            log(wrapError(new Error('Missing properties for \"scroll_by\" action'), {\n                additional: {\n                    id: actionTyped.id\n                }\n            }));\n            return;\n        }\n        instance.scrollCombined?.({\n            step: actionTyped.item_count,\n            offset: actionTyped.offset,\n            overflow: actionTyped.overflow,\n            animated: actionTyped.animated\n        });\n    }\n\n    function switchElementAction(\n        type: 'set_current_item' | 'set_previous_item' | 'set_next_item' | 'scroll_to_start' |\n            'scroll_to_end' | 'scroll_backward' | 'scroll_forward' | 'scroll_to_position',\n        id: string | null,\n        {\n            item,\n            step,\n            overflow,\n            animated\n        }: {\n            item?: string | null;\n            step?: string | null;\n            overflow?: string | null;\n            animated?: string | null;\n        }\n    ): void {\n        if (!id) {\n            throw new Error(`Missing id for \"${type}\" action`);\n        }\n\n        const itemVal = Number(item);\n        if (type === 'set_current_item' && Number.isNaN(itemVal)) {\n            throw new Error(`Incorrect item for \"${type}\" action`);\n        }\n\n        let stepVal = Number(step);\n        if (!step && (type === 'set_previous_item' || type === 'set_next_item')) {\n            stepVal = 1;\n        }\n        if (\n            !step && (type === 'scroll_backward' || type === 'scroll_forward' || type === 'scroll_to_position') ||\n            Number.isNaN(stepVal)\n        ) {\n            throw new Error(`Incorrect step value for \"${type}\" action`);\n        }\n\n        if (overflow && overflow !== 'clamp' && overflow !== 'ring') {\n            throw new Error(`Incorrect overflow value for \"${type}\" action`);\n        }\n        overflow = overflow || 'clamp';\n\n        const isAnimated = animated === null || animated !== '0' && animated !== 'false';\n\n        const instance = getInstance<SwitchElements>(id);\n        if (!instance) {\n            return;\n        }\n\n        switch (type) {\n            case 'set_current_item':\n                instance.setCurrentItem(itemVal, isAnimated);\n                return;\n            case 'set_previous_item':\n                instance.setPreviousItem(stepVal, overflow as Overflow, isAnimated);\n                return;\n            case 'set_next_item':\n                instance.setNextItem(stepVal, overflow as Overflow, isAnimated);\n                return;\n            case 'scroll_to_start':\n                instance.scrollToStart?.(isAnimated);\n                return;\n            case 'scroll_to_end':\n                instance.scrollToEnd?.(isAnimated);\n                return;\n            case 'scroll_backward':\n                instance.scrollCombined?.({\n                    offset: -stepVal,\n                    overflow: overflow as Overflow,\n                    animated: isAnimated\n                });\n                return;\n            case 'scroll_forward':\n                instance.scrollCombined?.({\n                    offset: stepVal,\n                    overflow: overflow as Overflow,\n                    animated: isAnimated\n                });\n                return;\n            case 'scroll_to_position':\n                instance.scrollToPosition?.(stepVal, isAnimated);\n                return;\n        }\n    }\n\n    function callVideoAction(\n        id: string | null | undefined,\n        action: string | null | undefined,\n        componentContext?: ComponentContext\n    ): void {\n        const log = (componentContext?.logError || logError);\n\n        if (id) {\n            const instance = getInstance<VideoElements>(id);\n\n            if (instance) {\n                if (action === 'start') {\n                    instance.start();\n                } else if (action === 'pause') {\n                    instance.pause();\n                } else {\n                    log(wrapError(new Error('Unknown video action'), {\n                        additional: {\n                            id,\n                            action\n                        }\n                    }));\n                }\n            } else {\n                log(wrapError(new Error('Video component is not found'), {\n                    additional: {\n                        id,\n                        action\n                    }\n                }));\n            }\n        } else {\n            log(wrapError(new Error('Missing id in video action'), {\n                additional: {\n                    action\n                }\n            }));\n        }\n    }\n\n    function applyPatchInternal(json: Patch, log: LogError, url?: string): boolean {\n        if (json.templates) {\n            for (const name in json.templates) {\n                if (!templates.hasOwnProperty(name)) {\n                    templates[name] = json.templates[name];\n                }\n            }\n        }\n        if (Array.isArray(json.patch?.changes)) {\n            if (json.patch.mode === 'transactional') {\n                const failed = json.patch.changes.find(change => {\n                    const methods = parentOfMap.get(change.id);\n                    if (!methods) {\n                        return true;\n                    }\n                    const newItemsLen = Array.isArray(change.items) ? change.items.length : 0;\n                    if (methods.isSingleMode && newItemsLen !== 1) {\n                        return true;\n                    }\n                    return false;\n                });\n                if (failed) {\n                    log(wrapError(new Error('Skipping transactional, child is not found or broken'), {\n                        additional: {\n                            url,\n                            id: failed.id\n                        }\n                    }));\n                    execAnyActions(json.patch?.on_failed_actions);\n                    return false;\n                }\n            }\n            json.patch.changes.forEach(change => {\n                const methods = parentOfMap.get(change.id);\n                if (methods) {\n                    methods.replaceWith(change.id, change.items);\n                }\n            });\n            execAnyActions(json.patch?.on_applied_actions);\n            return true;\n        }\n\n        return false;\n    }\n\n    function callDownloadAction(\n        url: string | null | undefined,\n        callbacks: MaybeMissing<DownloadCallbacks | undefined>,\n        componentContext?: ComponentContext\n    ): void {\n        const log = (componentContext?.logError || logError);\n\n        if (url) {\n            let init;\n            if (typeof fetchInit === 'function') {\n                init = fetchInit(url);\n            } else {\n                init = fetchInit;\n            }\n            fetch(url, init).then(res => {\n                if (!res.ok) {\n                    throw new Error('Response is not ok');\n                }\n                return res.json();\n            }).then((json: Patch) => {\n                if (!json) {\n                    log(wrapError(new Error('Incorrect patch'), {\n                        additional: {\n                            url\n                        }\n                    }));\n                    execAnyActions(callbacks?.on_fail_actions);\n                    return;\n                }\n                if (applyPatchInternal(json, log, url)) {\n                    execAnyActions(callbacks?.on_success_actions);\n                } else {\n                    execAnyActions(callbacks?.on_fail_actions);\n                }\n            }).catch(err => {\n                log(wrapError(new Error('Failed to download the patch'), {\n                    additional: {\n                        url,\n                        originalError: err\n                    }\n                }));\n                execAnyActions(callbacks?.on_fail_actions);\n            });\n        } else {\n            log(wrapError(new Error('Missing url in download action'), {\n                additional: {\n                    url\n                }\n            }));\n        }\n    }\n\n    function callShowTooltip(\n        id: string | null | undefined,\n        multiple: string | boolean | null | undefined,\n        componentContext?: ComponentContext\n    ): void {\n        const log = (componentContext?.logError || logError);\n\n        if (!id) {\n            log(wrapError(new Error('Missing id in show_tooltip action')));\n            return;\n        }\n        const item = tooltipMap.get(id);\n        if (!item) {\n            log(wrapError(new Error('Tooltip with the provided id is not found'), {\n                additional: {\n                    id\n                }\n            }));\n            return;\n        }\n        if ((multiple !== 'true' && multiple !== true) && shownTooltips.has(id)) {\n            return;\n        }\n        shownTooltips.add(id);\n\n        const info = {\n            internalId: ++tooltipCounter,\n            ownerNode: item.onwerNode,\n            desc: item.tooltip,\n            timeoutId: 0,\n            componentContext\n        };\n        tooltips = [...tooltips, info];\n\n        const duration = item.tooltip.duration ?? 5000;\n        if (duration) {\n            info.timeoutId = window.setTimeout(() => {\n                info.timeoutId = 0;\n                tooltips = tooltips.filter(it => it.internalId !== info.internalId);\n            }, duration);\n        }\n    }\n\n    function callHideTooltip(id: string | null | undefined, componentContext?: ComponentContext): void {\n        const log = (componentContext?.logError || logError);\n\n        if (!id) {\n            log(wrapError(new Error('Missing id in hide_tooltip action')));\n            return;\n        }\n        tooltips = tooltips.filter(it => {\n            const res = it.desc.id !== id;\n\n            if (!res && it.timeoutId) {\n                clearTimeout(it.timeoutId);\n                it.timeoutId = null;\n            }\n\n            return res;\n        });\n    }\n\n    function callSetStoredValue(\n        componentContext: ComponentContext | undefined,\n        name: string | null | undefined,\n        value: object | string | bigint | number | boolean | null | undefined,\n        type: string | null | undefined,\n        lifetime: string | number | null | undefined\n    ): void {\n        const log = componentContext?.logError || logError;\n        if (!store) {\n            log(wrapError(new Error('Store is not configured')));\n            return;\n        }\n\n        let val = value;\n\n        if (!name || !val || !type || !lifetime) {\n            log(wrapError(new Error('Missing required params for set_stored_value')));\n            return;\n        }\n        if (!AVAIL_SET_STORED_ALL_TYPES.has(type)) {\n            log(wrapError(new Error('Incorrect stored type')));\n            return;\n        }\n\n        if (type === 'boolean') {\n            val = val === 'true' || val === '1';\n        }\n\n        if (store.set) {\n            store.set(name, type as StoreAllTypes, val, Number(lifetime));\n        } else if (store.setValue) {\n            if (!AVAIL_SET_STORED_TYPES.has(type)) {\n                log(wrapError(new Error('Incorrect stored type')));\n                return;\n            }\n            if (typeof val !== 'string' && typeof val !== 'number' && typeof val !== 'boolean') {\n                log(wrapError(new Error('Incorrect stored value')));\n                return;\n            }\n            if (type === 'integer' || type === 'number') {\n                val = Number(val);\n            }\n            store.setValue(name, type as StoreTypes, val, Number(lifetime));\n        }\n    }\n\n    export function execAction(action: MaybeMissing<Action | VisibilityAction | DisappearAction>): void {\n        execActionInternal(getJsonWithVars(logError, action));\n    }\n\n    async function execActionInternal(\n        action: MaybeMissing<Action | VisibilityAction | DisappearAction>,\n        componentContext?: ComponentContext\n    ): Promise<void> {\n        const scopeId = action.scope_id;\n        const log = (componentContext?.logError || logError);\n\n        if (scopeId) {\n            const set = componentContextMap.get(scopeId);\n            if (set && set?.size > 1) {\n                log(wrapError(new Error(`Ambiguous scope id. There are ${set.size} divs with id '${scopeId}'`), {\n                    additional: {\n                        count: set.size,\n                        scopeId\n                    }\n                }));\n            } else if (set?.size === 1) {\n                const first = set.values().next().value;\n                if (first) {\n                    componentContext = first;\n                }\n            }\n        }\n\n        const actionUrl = action.url ? String(action.url) : '';\n        const actionTyped = action.typed;\n\n        if (!filterEnabledActions(action)) {\n            return;\n        }\n\n        if (actionTyped) {\n            switch (actionTyped.type) {\n                case 'set_variable': {\n                    const { variable_name: name, value } = actionTyped;\n                    if (name && value) {\n                        const variableInstance = componentContext?.getVariable(name) || variables.get(name);\n                        if (variableInstance) {\n                            const type = variableInstance.getType();\n                            if (type === value.type) {\n                                variableInstance.setValue(value.value);\n                            } else {\n                                log(wrapError(new Error('Trying to set value with invalid type'), {\n                                    additional: {\n                                        name,\n                                        type: value.type\n                                    }\n                                }));\n                            }\n                        } else {\n                            log(wrapError(new Error('Cannot find variable'), {\n                                additional: {\n                                    name\n                                }\n                            }));\n                        }\n                    } else {\n                        log(wrapError(new Error('Incorrect set_variable action'), {\n                            additional: {\n                                name\n                            }\n                        }));\n                    }\n                    break;\n                }\n                case 'array_insert_value':\n                    arrayInsert(componentContext, variables, log, actionTyped);\n                    break;\n                case 'array_remove_value':\n                    arrayRemove(componentContext, variables, log, actionTyped);\n                    break;\n                case 'array_set_value':\n                    arraySet(componentContext, variables, log, actionTyped);\n                    break;\n                case 'copy_to_clipboard':\n                    copyToClipboard(log, actionTyped);\n                    break;\n                case 'focus_element': {\n                    const methods = actionTyped.element_id && focusableMap.get(actionTyped.element_id);\n                    if (methods) {\n                        methods.focus();\n                    } else {\n                        log(wrapError(new Error('Incorrect focus_element action'), {\n                            additional: {\n                                elementId: actionTyped.element_id\n                            }\n                        }));\n                    }\n                    break;\n                }\n                case 'clear_focus': {\n                    try {\n                        if (document.activeElement instanceof HTMLElement) {\n                            document.activeElement.blur();\n                        }\n                    } catch (err) {\n                        // do nothing\n                    }\n                    break;\n                }\n                case 'dict_set_value': {\n                    dictSetValue(componentContext, variables, log, actionTyped);\n                    break;\n                }\n                case 'animator_start': {\n                    const animatorDef = actionTyped.animator_id &&\n                        componentContext?.getAnimator(actionTyped.animator_id);\n\n                    if (!animatorDef) {\n                        log(wrapError(new Error('Missing animator'), {\n                            additional: {\n                                animator_id: actionTyped.animator_id\n                            }\n                        }));\n\n                        return;\n                    }\n\n                    const {\n                        duration,\n                        start_delay,\n                        interpolator,\n                        direction,\n                        repeat_count,\n                        start_value: start_value_typed,\n                        end_value: end_value_typed\n                    } = actionTyped;\n\n                    const evalledDef = componentContext ?\n                        componentContext.getJsonWithVars(animatorDef) :\n                        getJsonWithVars(logError, animatorDef);\n\n                    const props = {\n                        ...evalledDef,\n                        end_actions: animatorDef.end_actions,\n                        cancel_actions: animatorDef.cancel_actions,\n                        duration: duration !== undefined ? duration : evalledDef.duration,\n                        start_delay: start_delay !== undefined ? start_delay : evalledDef.start_delay,\n                        interpolator: interpolator !== undefined ? interpolator : evalledDef.interpolator,\n                        direction: direction !== undefined ? direction : evalledDef.direction,\n                        repeat_count: repeat_count !== undefined ? repeat_count : evalledDef.repeat_count,\n                        start_value_typed,\n                        end_value_typed\n                    };\n\n                    const instance = animatorDef.variable_name &&\n                        (\n                            componentContext?.getVariable(animatorDef.variable_name) ||\n                            variables.get(animatorDef.variable_name)\n                        );\n                    if (!instance) {\n                        return;\n                    }\n\n                    const prevAnimator = animators.get(animatorDef.id as string);\n                    if (prevAnimator) {\n                        prevAnimator.stop();\n                    }\n\n                    const animator = createAnimator(props, instance, () => {\n                        animators.delete(animatorDef.id as string);\n                    }, (actions, opts) => {\n                        const fn = componentContext?.execAnyActions || execAnyActions;\n                        const evalled = componentContext ?\n                            componentContext.getJsonWithVars(actions) :\n                            getJsonWithVars(logError, actions);\n\n                        return fn(evalled, opts);\n                    });\n                    if (animator) {\n                        animators.set(animatorDef.id as string, animator);\n                    }\n\n                    break;\n                }\n                case 'animator_stop': {\n                    const animator = animators.get(actionTyped.animator_id as string);\n                    if (animator) {\n                        animator.stop();\n                        animators.delete(actionTyped.animator_id as string);\n                    }\n\n                    break;\n                }\n                case 'show_tooltip': {\n                    callShowTooltip(actionTyped.id, actionTyped.multiple, componentContext);\n                    break;\n                }\n                case 'hide_tooltip': {\n                    callHideTooltip(actionTyped.id, componentContext);\n                    break;\n                }\n                case 'timer': {\n                    if (timersController) {\n                        timersController.execTimerAction(actionTyped.id, actionTyped.action);\n                    } else {\n                        log(wrapError(new Error('Incorrect timer action'), {\n                            additional: {\n                                id: actionTyped.id,\n                                action: actionTyped.action\n                            }\n                        }));\n                    }\n                    break;\n                }\n                case 'download': {\n                    callDownloadAction(actionTyped.url, actionTyped, componentContext);\n                    break;\n                }\n                case 'video': {\n                    callVideoAction(actionTyped.id, actionTyped.action, componentContext);\n                    break;\n                }\n                case 'set_stored_value': {\n                    callSetStoredValue(\n                        componentContext,\n                        actionTyped.name,\n                        actionTyped.value?.value,\n                        actionTyped.value?.type,\n                        actionTyped.lifetime\n                    );\n                    break;\n                }\n                case 'set_state': {\n                    await setState(actionTyped.state_id, componentContext);\n                    break;\n                }\n                case 'submit': {\n                    await callSubmit(componentContext, actionTyped);\n                    break;\n                }\n                case 'scroll_to': {\n                    callScrollTo(componentContext, actionTyped);\n                    break;\n                }\n                case 'scroll_by': {\n                    callScrollBy(componentContext, actionTyped);\n                    break;\n                }\n                default: {\n                    log(wrapError(new Error('Unknown type of action'), {\n                        additional: {\n                            type: actionTyped.type\n                        }\n                    }));\n                }\n            }\n        } else if (actionUrl) {\n            try {\n                const url = actionUrl.replace(/div-action:\\/\\//, '');\n                const parts = /([^?]+)\\?(.+)/.exec(url);\n                if (!parts) {\n                    return;\n                }\n                const params = new URLSearchParams(parts[2]);\n\n                switch (parts[1]) {\n                    case 'set_state':\n                        await setState(params.get('state_id'), componentContext);\n                        break;\n                    case 'set_current_item':\n                    case 'set_previous_item':\n                    case 'set_next_item':\n                    case 'scroll_to_start':\n                    case 'scroll_to_end':\n                    case 'scroll_backward':\n                    case 'scroll_forward':\n                    case 'scroll_to_position':\n                        switchElementAction(parts[1], params.get('id'), {\n                            item: params.get('item'),\n                            step: params.get('step'),\n                            overflow: params.get('overflow'),\n                            animated: params.get('animated')\n                        });\n                        break;\n                    case 'set_variable':\n                        const name = params.get('name');\n                        const value = params.get('value');\n\n                        if (name && value !== null) {\n                            const variableInstance = componentContext?.getVariable(name) || variables.get(name);\n                            if (variableInstance) {\n                                variableInstance.set(value);\n                            } else {\n                                log(wrapError(new Error('Cannot find variable'), {\n                                    additional: {\n                                        name\n                                    }\n                                }));\n                            }\n                        } else {\n                            log(wrapError(new Error('Incorrect set_variable_action'), {\n                                additional: {\n                                    url\n                                }\n                            }));\n                        }\n                        break;\n                    case 'timer':\n                        const timerAction = params.get('action');\n                        const id = params.get('id');\n\n                        if (timersController) {\n                            timersController.execTimerAction(id, timerAction);\n                        } else {\n                            log(wrapError(new Error('Incorrect timer action'), {\n                                additional: {\n                                    id,\n                                    action: timerAction\n                                }\n                            }));\n                        }\n                        break;\n                    case 'video':\n                        callVideoAction(params.get('id'), params.get('action'), componentContext);\n                        break;\n                    case 'download':\n                        callDownloadAction(params.get('url'), action.download_callbacks, componentContext);\n                        break;\n                    case 'show_tooltip':\n                        callShowTooltip(params.get('id'), params.get('multiple'), componentContext);\n                        break;\n                    case 'hide_tooltip':\n                        callHideTooltip(params.get('id'), componentContext);\n                        break;\n                    case 'set_stored_value': {\n                        callSetStoredValue(componentContext, params.get('name'), params.get('value'), params.get('type'), params.get('lifetime'));\n                        break;\n                    }\n                    default:\n                        log(wrapError(new Error('Unknown type of action'), {\n                            additional: {\n                                url: actionUrl\n                            }\n                        }));\n                }\n            } catch (err: any) {\n                log(wrapError(err, {\n                    additional: {\n                        url: actionUrl\n                    }\n                }));\n            }\n        }\n    }\n\n    async function execAnyActions(\n        actions: MaybeMissing<Action[]> | undefined,\n        opts: {\n            componentContext?: ComponentContext;\n            processUrls?: boolean;\n            node?: HTMLElement;\n            logType?: string;\n        } = {}\n    ): Promise<void> {\n        if (!actions || !Array.isArray(actions)) {\n            return;\n        }\n\n        const filtered = actions.filter(filterEnabledActions);\n\n        for (let i = 0; i < filtered.length; ++i) {\n            let action = filtered[i];\n\n            const actionUrl = action.url;\n            const actionTyped = action.typed;\n            if (actionUrl) {\n                const schema = getUrlSchema(actionUrl);\n                if (schema) {\n                    if (isBuiltinSchema(schema, builtinSet)) {\n                        if (opts.processUrls) {\n                            if (action.target === '_blank') {\n                                const win = window.open('', '_blank');\n                                if (win) {\n                                    win.opener = null;\n                                    win.location = actionUrl;\n                                }\n                            } else {\n                                location.href = actionUrl;\n                            }\n                        }\n                    } else if (schema === 'div-action') {\n                        await execActionInternal(action, opts.componentContext);\n                        await tick();\n                    } else if (action.log_id) {\n                        execCustomAction(action as Action & { url: string });\n                        await tick();\n                    }\n                }\n            } else if (actionTyped) {\n                await execActionInternal(action, opts.componentContext);\n            } else if (opts.node && Array.isArray(action.menu_items) && action.menu_items.length) {\n                menu = {\n                    items: action.menu_items,\n                    node: opts.node,\n                    componentContext: opts.componentContext\n                };\n            }\n        }\n        filtered.forEach(action => {\n            if (action.log_id) {\n                logStat(opts.logType || 'click', action as Action);\n            }\n        });\n    }\n\n    function execCustomAction(action: (Action | VisibilityAction) & { url: string }): void {\n        onCustomAction?.(action);\n    }\n\n    function processVariableTriggers(\n        componentContext: ComponentContext | undefined,\n        variableTriggers: MaybeMissing<VariableTrigger>[] | undefined\n    ): (() => void) | undefined {\n        const log = componentContext?.logError || logError;\n\n        if (!Array.isArray(variableTriggers) || !variableTriggers.length) {\n            return;\n        }\n        if (!process.env.ENABLE_EXPRESSIONS) {\n            log(wrapError(new Error('variable_trigger is not supported')));\n            return;\n        }\n\n        const list: (() => void)[] = [];\n\n        variableTriggers.forEach(trigger => {\n            let prevConditionResult = false;\n\n            if (typeof trigger.condition !== 'string') {\n                log(wrapError(new Error('variable_trigger has a condition that is not a string'), {\n                    additional: {\n                        condition: trigger.condition\n                    }\n                }));\n                return;\n            }\n\n            if (!Array.isArray(trigger.actions)) {\n                log(wrapError(new Error('variable_trigger has no actions'), {\n                    additional: {\n                        condition: trigger.condition\n                    }\n                }));\n                return;\n            }\n\n            const mode = trigger.mode || 'on_condition';\n\n            if (mode !== 'on_variable' && mode !== 'on_condition') {\n                log(wrapError(new Error('variable_trigger has an unsupported mode'), {\n                    additional: {\n                        mode\n                    }\n                }));\n                return;\n            }\n\n            try {\n                const ast = parse(trigger.condition, {\n                    startRule: 'JsonStringContents'\n                });\n                const exprVars = gatherVarsFromAst(ast);\n                if (!exprVars.length) {\n                    log(wrapError(new Error('variable_trigger must have variables in the condition'), {\n                        additional: {\n                            condition: trigger.condition\n                        }\n                    }));\n                    return;\n                }\n\n                const stores = exprVars.map(name =>\n                    componentContext?.getVariable(name) ||\n                        variables.get(name) ||\n                        awaitVariableChanges(name)\n                );\n\n                const unsubscribe = derived(stores, () => {\n                    const res = componentContext ?\n                        componentContext.evalExpression(store, ast, {\n                            weekStartDay\n                        }) :\n                        evalExpression(variables, undefined, store, ast, {\n                            weekStartDay\n                        });\n\n                    res.warnings.forEach(logError);\n\n                    return res.result;\n                }).subscribe(async conditionResult => {\n                    if (conditionResult.type === 'error') {\n                        log(wrapError(new Error('variable_trigger condition execution error'), {\n                            additional: {\n                                message: conditionResult.value\n                            }\n                        }));\n                        return;\n                    }\n\n                    if (\n                        // if condition is truthy\n                        conditionResult.value &&\n                        // and trigger mode matches\n                        (mode === 'on_variable' || mode === 'on_condition' && prevConditionResult === false)\n                    ) {\n                        prevConditionResult = Boolean(conditionResult.value);\n                        const actions = (trigger.actions as Action[]).map(action =>\n                            componentContext ?\n                                componentContext.getJsonWithVars(action) :\n                                getJsonWithVars(logError, action)\n                        );\n\n                        if (componentContext) {\n                            await componentContext.execAnyActions(actions, {\n                                logType: 'trigger'\n                            });\n                        } else {\n                            await execAnyActions(actions, {\n                                logType: 'trigger'\n                            });\n                        }\n                    } else {\n                        prevConditionResult = Boolean(conditionResult.value);\n                    }\n                });\n\n                list.push(unsubscribe);\n            } catch (err) {\n                log(wrapError(new Error('Unable to parse variable_trigger'), {\n                    additional: {\n                        condition: trigger.condition\n                    }\n                }));\n            }\n        });\n\n        return () => {\n            list.forEach(cb => {\n                cb();\n            });\n        };\n    }\n\n    function isRunning(type: Running): boolean {\n        return running[type];\n    }\n\n    function setRunning(type: Running, val: boolean): void {\n        running[type] = val;\n    }\n\n    const instancesMap: Map<string, unknown> = new Map();\n    const parentOfMap: Map<string, ParentMethods> = new Map();\n    const focusableMap: Map<string, FocusableMethods> = new Map();\n    const tooltipMap: Map<string, {\n        onwerNode: HTMLElement;\n        tooltip: MaybeMissing<Tooltip>;\n    }> = new Map();\n    const componentContextMap: Map<string, Set<ComponentContext>> = new Map();\n    function registerInstance<T>(id: string, block: T, duplicateErrorLevel: 'error' | 'warn' = 'error') {\n        if (instancesMap.has(id)) {\n            logError(wrapError(new Error('Duplicate instance id'), {\n                level: duplicateErrorLevel,\n                additional: {\n                    id\n                }\n            }));\n            return;\n        }\n\n        instancesMap.set(id, block);\n    }\n    function unregisterInstance(id: string) {\n        instancesMap.delete(id);\n    }\n\n    function getInstance<T>(id: string): T | undefined {\n        if (!instancesMap.has(id)) {\n            logError(wrapError(new Error('Missing instance with id'), {\n                additional: {\n                    id\n                }\n            }));\n            return;\n        }\n\n        return instancesMap.get(id) as T;\n    }\n\n    function registerParentOf(id: string, methods: ParentMethods): void {\n        parentOfMap.set(id, methods);\n    }\n\n    function unregisterParentOf(id: string): void {\n        parentOfMap.delete(id);\n    }\n\n    function registerFocusable(id: string, methods: FocusableMethods): void {\n        focusableMap.set(id, methods);\n    }\n\n    function unregisterFocusable(id: string): void {\n        focusableMap.delete(id);\n    }\n\n    function registerTooltip(onwerNode: HTMLElement, tooltip: MaybeMissing<Tooltip>): void {\n        const id = tooltip.id;\n\n        if (!id) {\n            return;\n        }\n\n        if (tooltipMap.has(id)) {\n            logError(wrapError(new Error('Duplicate tooltip id'), {\n                additional: {\n                    id\n                }\n            }));\n        }\n\n        tooltipMap.set(id, {\n            onwerNode,\n            tooltip\n        });\n    }\n\n    function unregisterTooltip(tooltip: MaybeMissing<Tooltip>): void {\n        const id = tooltip.id;\n\n        if (!id) {\n            return;\n        }\n\n        tooltipMap.delete(id);\n\n        if (tooltips.some(it => it.desc.id === id)) {\n            tooltips = tooltips.filter(it => it.desc.id !== id);\n        }\n    }\n\n    function awaitVariableChanges(variableName: string): Readable<any> {\n        const store = awaitingGlobalVariables.get(variableName) || writable(undefined);\n\n        if (!awaitingGlobalVariables.has(variableName)) {\n            awaitingGlobalVariables.set(variableName, store);\n        }\n\n        return store;\n    }\n\n    function updateTheme(): void {\n        if (!palette) {\n            return;\n        }\n\n        const list = palette[currentTheme];\n        list.forEach(item => {\n            const varInstance = variables.get(item.name);\n\n            if (varInstance) {\n                varInstance.setValue(item.color);\n            }\n        });\n    }\n\n    function getBuiltinProtocols(): Set<string> {\n        return builtinSet;\n    }\n\n    function getExtension(id: string, params: object | undefined): DivExtension | undefined {\n        const Builder = extensions.get(id);\n        if (Builder) {\n            return new Builder(params || {});\n        }\n    }\n\n    function getExtensionContext(componentContext: ComponentContext): DivExtensionContext {\n        return {\n            variables: mergeMaps(variables, componentContext.variables),\n            derviedExpression: function<T>(t: T) {\n                return getDerivedFromVars(logError, t) as DerivedExpression<T>;\n            },\n            processExpressions: function<T>(t: T) {\n                return getJsonWithVars(\n                    logError,\n                    t\n                ) as T;\n            },\n            execAction,\n            logError,\n            getComponentProperty: function<T>(property: string): T {\n                return componentContext.getJsonWithVars((componentContext.json as any)[property]) as T;\n            },\n            direction\n        };\n    }\n\n    function prepareCustomFunctions(\n        list: MaybeMissing<DivFunction>[],\n        componentContext?: ComponentContext\n    ): CustomFunctions {\n        const customFunctions: CustomFunctions = new Map();\n        const log = (componentContext?.logError || logError);\n\n        list.forEach(desc => {\n            if (customFunctions) {\n                try {\n                    checkCustomFunction(desc);\n                } catch (err: unknown) {\n                    // Only Error thrown here\n                    log(wrapError(err as Error));\n                    return;\n                }\n                const fn = desc as DivFunction;\n                const list = customFunctions.get(fn.name) || [];\n                list.push(customFunctionWrap(fn));\n                customFunctions.set(fn.name, list);\n            }\n        });\n\n        return customFunctions;\n    }\n\n    function produceComponentContext(from?: ComponentContext | undefined): ComponentContext {\n        const ctx: ComponentContext = {\n            id: '',\n            json: {} as DivBaseData,\n            path: [],\n            templateContext: {},\n            logError(error) {\n                error.additional = error.additional || {};\n                error.additional.path = ctx.path.join('/');\n                if (process.env.DEVTOOL) {\n                    error.additional.json = ctx.json;\n                    error.additional.origJson = ctx.origJson;\n\n                    const fullpath: ComponentContext[] = [];\n                    let temp = ctx;\n                    while (temp.parent) {\n                        fullpath.push(temp);\n                        temp = temp.parent;\n                    }\n                    error.additional.fullpath = fullpath;\n                }\n                logError(error);\n            },\n            execAnyActions(actions, opts = {}) {\n                return execAnyActions(actions, {\n                    componentContext: ctx,\n                    processUrls: opts.processUrls,\n                    node: opts.node,\n                    logType: opts.logType\n                });\n            },\n            getDerivedFromVars(jsonProp, additionalVars, keepComplex = false) {\n                return getDerivedFromVars(\n                    ctx.logError,\n                    jsonProp,\n                    mergeMaps(ctx.variables, additionalVars),\n                    keepComplex,\n                    ctx.customFunctions\n                );\n            },\n            getJsonWithVars(jsonProp, additionalVars, keepComplex = false) {\n                return getJsonWithVars(\n                    ctx.logError,\n                    jsonProp,\n                    mergeMaps(ctx.variables, additionalVars),\n                    keepComplex,\n                    ctx.customFunctions\n                );\n            },\n            evalExpression(store, expr, opts) {\n                return evalExpression(mergeMaps(variables, ctx.variables), ctx.customFunctions, store, expr, opts);\n            },\n            produceChildContext(div, opts = {}) {\n                const componentContext = produceComponentContext(ctx);\n\n                let childJson: MaybeMissing<DivBaseData> = div;\n                let childContext: TemplateContext = ctx.templateContext;\n\n                const {\n                    templateContext: childProcessedContext,\n                    json: childProcessedJson\n                } = processTemplate(childJson, childContext);\n\n                componentContext.json = childProcessedJson;\n                componentContext.templateContext = childProcessedContext;\n                componentContext.origJson = div;\n                componentContext.id = opts.id || childProcessedJson.id || '';\n\n                if (componentContext.id) {\n                    let set = componentContextMap.get(componentContext.id);\n                    if (!set) {\n                        set = new Set();\n                        componentContextMap.set(componentContext.id, set);\n                    }\n\n                    set.add(componentContext);\n                }\n\n                if (opts.path !== undefined/*  && !res.isRootState */) {\n                    componentContext.path.push(String(opts.path));\n                }\n                if (div.type && !opts.isRootState) {\n                    componentContext.path.push(div.type);\n                }\n                if (opts.isTooltipRoot) {\n                    componentContext.isTooltipRoot = true;\n                }\n\n                let localVars: Map<string, Variable> | undefined;\n\n                if (Array.isArray(childProcessedJson.variables)) {\n                    localVars = new Map();\n                    childProcessedJson.variables.forEach(desc => {\n                        const varInstance = constructVariable(desc);\n                        if (varInstance && localVars) {\n                            localVars.set(varInstance.getName(), varInstance);\n                        }\n                    });\n                }\n                componentContext.variables = mergeMaps(\n                    ctx.variables,\n                    mergeMaps(localVars, opts.variables)\n                );\n                if (process.env.DEVTOOL && localVars) {\n                    componentContext.selfVariables = new Set([...localVars.keys()]);\n                }\n\n                let localCustomFunctions: CustomFunctions | undefined;\n                if (Array.isArray(childProcessedJson.functions)) {\n                    localCustomFunctions = prepareCustomFunctions(childProcessedJson.functions, ctx);\n                }\n                componentContext.customFunctions = mergeCustomFunctions(ctx.customFunctions, localCustomFunctions);\n\n                if (Array.isArray(childProcessedJson.animators)) {\n                    ctx.animators = childProcessedJson.animators.reduce<Record<string, MaybeMissing<Animator>>>(\n                        (acc, item) => {\n                            if (item.id) {\n                                acc[item.id] = item;\n                            }\n                            return acc;\n                        },\n                        {}\n                    );\n                }\n\n                if (opts.fake) {\n                    componentContext.fakeElement = true;\n                }\n                if (opts.isRootState) {\n                    componentContext.isRootState = true;\n                }\n\n                return componentContext;\n            },\n            getVariable(varName, type) {\n                const variable = ctx.variables?.get(varName) || variables.get(varName);\n\n                if (variable) {\n                    const foundType = variable.getType();\n\n                    if (type && foundType !== type) {\n                        ctx.logError(wrapError(new Error(`Variable should have type \"${type}\"`), {\n                            additional: {\n                                name: varName,\n                                foundType\n                            }\n                        }));\n                        return;\n                    }\n                }\n\n                return variable;\n            },\n            getAnimator(name) {\n                return ctx.animators?.[name] || ctx.parent?.getAnimator(name) || undefined;\n            },\n            registerState(stateId, setState) {\n                const stateCtx = getStateContext(ctx.parent);\n\n                if (stateCtx) {\n                    stateCtx.states = stateCtx.states || {};\n                    stateCtx.states[stateId] = stateCtx.states[stateId] || [];\n                    stateCtx.states[stateId].push(setState);\n                }\n\n                return () => {\n                    if (stateCtx?.states?.[stateId]) {\n                        stateCtx.states[stateId] = stateCtx.states[stateId].filter(it => it !== setState);\n                        if (!stateCtx.states[stateId].length) {\n                            delete stateCtx.states[stateId];\n                        }\n                    }\n                };\n            },\n            registerPager(pagerId) {\n                const targetCtx = ctx.parent;\n\n                if (!targetCtx) {\n                    return {\n                        // eslint-disable-next-line @typescript-eslint/no-empty-function\n                        update() {},\n                        // eslint-disable-next-line @typescript-eslint/no-empty-function\n                        destroy() {}\n                    };\n                }\n\n                targetCtx.pagers = targetCtx.pagers || new Map();\n                if (targetCtx.pagers.has(pagerId)) {\n                    return {\n                        // eslint-disable-next-line @typescript-eslint/no-empty-function\n                        update() {},\n                        // eslint-disable-next-line @typescript-eslint/no-empty-function\n                        destroy() {}\n                    };\n                }\n\n                targetCtx.pagers.set(pagerId, null);\n\n                return {\n                    update(data) {\n                        if (targetCtx.pagers) {\n                            targetCtx.pagers.set(pagerId, data);\n                        }\n\n                        const listeners = pagerId ? targetCtx.pagerListeners?.get(pagerId) : undefined;\n                        const listeners2 = targetCtx.pagerListeners?.get(undefined);\n                        const totalListeners = [...(listeners || []), ...(listeners2 || [])];\n\n                        if (totalListeners) {\n                            totalListeners.forEach(listener => {\n                                listener(data);\n                            });\n                        }\n                    },\n                    destroy() {\n                        if (targetCtx.pagers) {\n                            targetCtx.pagers.delete(pagerId);\n                        }\n                    }\n                };\n            },\n            listenPager(pagerId, listener) {\n                let targetCtx = ctx.parent;\n\n                while (\n                    targetCtx &&\n                    !(targetCtx.pagers && (pagerId ? targetCtx.pagers.get(pagerId) : targetCtx.pagers?.size))\n                ) {\n                    targetCtx = targetCtx.parent;\n                }\n\n                if (!targetCtx) {\n                    // eslint-disable-next-line @typescript-eslint/no-empty-function\n                    return () => {};\n                }\n\n                targetCtx.pagerListeners = ctx.pagerListeners || new Map();\n                const list = targetCtx.pagerListeners.get(pagerId) || [];\n                if (!targetCtx.pagerListeners.has(pagerId)) {\n                    targetCtx.pagerListeners.set(pagerId, list);\n                }\n                list.push(listener);\n\n                const targetPagerId = pagerId ? pagerId : (targetCtx.pagers?.keys().next().value || undefined);\n                const data = targetCtx.pagers?.get(targetPagerId);\n                if (data) {\n                    listener(data);\n                }\n\n                return () => {\n                    if (!targetCtx.pagerListeners) {\n                        return;\n                    }\n\n                    let list = targetCtx.pagerListeners.get(targetPagerId);\n                    if (list) {\n                        list = list.filter(it => it !== listener) || [];\n                        if (list.length) {\n                            targetCtx.pagerListeners.set(pagerId, list);\n                        } else {\n                            targetCtx.pagerListeners.delete(pagerId);\n                        }\n                    }\n                };\n            },\n            destroy() {\n                const set = componentContextMap.get(ctx.id);\n                if (set) {\n                    set.delete(ctx);\n                    if (!set.size) {\n                        componentContextMap.delete(ctx.id);\n                    }\n                }\n            },\n        };\n\n        if (from) {\n            ctx.parent = from;\n            ctx.path = from.path.slice();\n\n            if (from.fakeElement) {\n                ctx.fakeElement = true;\n            }\n        } else {\n            ctx.json = {\n                type: 'root'\n            };\n            ctx.isRootState = true;\n        }\n\n        return ctx;\n    }\n\n    function registerTimeout(timeout: number): void {\n        if (isMounted) {\n            timeouts.push(timeout);\n        } else {\n            clearTimeout(timeout);\n        }\n    }\n\n    setContext<RootCtxValue>(ROOT_CTX, {\n        logStat,\n        hasTemplate,\n        genId,\n        genClass,\n        execCustomAction,\n        processVariableTriggers,\n        isRunning,\n        setRunning,\n        pagerChildrenClipEnabled,\n        registerInstance,\n        unregisterInstance,\n        registerParentOf,\n        unregisterParentOf,\n        registerTooltip,\n        unregisterTooltip,\n        onTooltipClose,\n        tooltipRoot,\n        registerFocusable,\n        unregisterFocusable,\n        addSvgFilter,\n        removeSvgFilter,\n        registerId,\n        getComponentId,\n        preparePrototypeVariables,\n        getCustomization,\n        getBuiltinProtocols,\n        getExtension,\n        getExtensionContext,\n        registerTimeout,\n        typefaceProvider,\n        isDesktop,\n        isPointerFocus,\n        customComponents,\n        direction: directionStore,\n        videoPlayerProvider,\n        componentDevtool: process.env.DEVTOOL ? componentDevtoolReal : undefined\n    });\n\n    setContext<ActionCtxValue>(ACTION_CTX, {\n        hasAction(): boolean {\n            return false;\n        }\n    });\n\n    setContext<StateCtxValue>(STATE_CTX, {\n        runVisibilityTransition(\n            _json: DivBaseData,\n            _componentContext: ComponentContext,\n            _transitions: AppearanceTransition,\n            _node: HTMLElement,\n            _direction: 'in' | 'out'\n        ) {\n            return Promise.resolve();\n        },\n        registerChildWithTransitionIn(\n            _json: DivBaseData,\n            _componentContext: ComponentContext,\n            _transitions: AppearanceTransition,\n            _node: HTMLElement\n        ) {\n            return Promise.resolve();\n        },\n        registerChildWithTransitionOut(\n            _json: DivBaseData,\n            _componentContext: ComponentContext,\n            _transitions: AppearanceTransition,\n            _node: HTMLElement\n        ) {\n            return Promise.resolve();\n        },\n        registerChildWithTransitionChange(\n            _json: DivBaseData,\n            _componentContext: ComponentContext,\n            _transitions: TransitionChange,\n            _node: HTMLElement\n        ) {\n            return Promise.resolve();\n        },\n        hasTransitionChange(_id?: string): boolean {\n            return false;\n        },\n        // eslint-disable-next-line @typescript-eslint/no-empty-function\n        registerChild(_id: string) {\n        },\n        // eslint-disable-next-line @typescript-eslint/no-empty-function\n        unregisterChild(_id: string) {\n        }\n    });\n\n    setContext<EnabledCtxValue>(ENABLED_CTX, {\n        isEnabled: constStore(true)\n    });\n\n    function hasVariableWithType(name: string, type: VariableType): boolean {\n        const instance = variables.get(name);\n\n        return instance?.getType() === type;\n    }\n\n    function setVariableValue(name: string, value: unknown): void {\n        const variableInstance = variables.get(name);\n        if (variableInstance) {\n            variableInstance.setValue(value);\n        } else {\n            logError(wrapError(new Error('Cannot find variable'), {\n                additional: {\n                    name\n                }\n            }));\n        }\n    }\n\n    function constructVariable(variable: MaybeMissing<DivVariable>): Variable | undefined {\n        if (!variable.type || !variable.name || !(variable.type in TYPE_TO_CLASS)) {\n            // Skip unknown types (from the future versions maybe)\n            return;\n        }\n\n        if (\n            variable.type === 'integer' && typeof variable.value === 'number' &&\n            (variable.value > Number.MAX_SAFE_INTEGER || variable.value < Number.MIN_SAFE_INTEGER)\n        ) {\n            logError(wrapError(new Error('The value of the integer variable could lose accuracy'), {\n                level: 'warn',\n                additional: {\n                    name: variable.name,\n                    value: variable.value\n                }\n            }));\n        }\n\n        try {\n            return createVariable(variable.name, variable.type, variable.value);\n        } catch (err: any) {\n            logError(wrapError(err, {\n                additional: {\n                    name: variable.name\n                }\n            }));\n        }\n    }\n\n    function declVariable(variable: DivVariable): void {\n        const varInstance = constructVariable(variable);\n\n        if (varInstance) {\n            localVariables.set(variable.name, varInstance);\n            variables.set(variable.name, varInstance);\n        }\n    }\n\n    const startVariables = json?.card?.variables;\n    if (Array.isArray(startVariables)) {\n        startVariables.forEach(variable => {\n            if (variable && variable.name) {\n                if (localVariables.has(variable.name)) {\n                    logError(wrapError(new Error('Duplicate variable'), {\n                        additional: {\n                            name: variable.name\n                        }\n                    }));\n\n                    return;\n                }\n\n                declVariable(variable);\n            }\n        });\n    }\n\n    $: if (json?.card?.variables && Array.isArray(json.card.variables) && json.card.variables !== startVariables) {\n        json.card.variables.forEach(variable => {\n            if (variable && variable.name && !localVariables.has(variable.name)) {\n                declVariable(variable);\n            }\n        });\n    }\n\n    const palette = json.palette;\n    if (palette) {\n        const list = palette[currentTheme];\n        list.forEach(item => {\n            if (localVariables.has(item.name)) {\n                logError(wrapError(new Error('Duplicate variable'), {\n                    additional: {\n                        name: item.name\n                    }\n                }));\n\n                return;\n            }\n\n            try {\n                const varInstance = createVariable(item.name, 'color', item.color);\n\n                localVariables.set(item.name, varInstance);\n                variables.set(item.name, varInstance);\n            } catch (err: any) {\n                logError(wrapError(err, {\n                    additional: {\n                        name: item.name\n                    }\n                }));\n            }\n        });\n    }\n\n    for (const [varName, variable] of globalVariables) {\n        if (!variables.has(varName)) {\n            variables.set(varName, variable);\n        }\n    }\n\n    globalVariablesStore.subscribe(newVarName => {\n        if (newVarName && !variables.has(newVarName)) {\n            const varInstance = globalVariables.get(newVarName) as Variable;\n            variables.set(newVarName, varInstance);\n\n            const awaitingStore = awaitingGlobalVariables.get(newVarName);\n\n            if (awaitingStore) {\n                let counter = 0;\n                varInstance.subscribe(() => {\n                    awaitingStore.set(++counter);\n                });\n            }\n        }\n    });\n\n    const initVariableTriggers = () => {\n        processVariableTriggers(undefined, json?.card?.variable_triggers);\n    };\n\n    const timers = json?.card?.timers;\n    if (timers && typeof document !== 'undefined') {\n        const controller = timersController = new TimersController({\n            logError,\n            applyVars: json => getJsonWithVars(logError, json),\n            hasVariableWithType,\n            setVariableValue,\n            execAnyActions\n        });\n        timers.forEach(timer => controller.createTimer(timer));\n    }\n\n    $: states = json?.card?.states;\n    const rootComponentContext = produceComponentContext();\n    if (Array.isArray(json.card?.functions)) {\n        rootComponentContext.customFunctions = prepareCustomFunctions(json.card.functions);\n    }\n\n    let rootStateComponentContext: ComponentContext | undefined;\n    $: if (states && !hasError && !hasIdError) {\n        const rootStateDiv: DivBaseData = {\n            type: 'state',\n            id: 'root',\n            width: {\n                type: 'match_parent',\n            },\n            height: {\n                type: 'match_parent',\n            },\n            states: states.map(state => ({\n                state_id: state.state_id.toString(),\n                div: state.div\n            }))\n        } as DivBaseData;\n\n        rootStateComponentContext = rootComponentContext.produceChildContext(rootStateDiv, {\n            isRootState: true\n        });\n    }\n\n    function onTooltipClose(internalId: number): void {\n        tooltips = tooltips.filter(it => it.internalId !== internalId);\n    }\n\n    /**\n     * Fix for the :active pseudo-class on iOS\n     */\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    function emptyTouchstartHandler() {}\n\n    onMount(() => {\n        rootInstancesCount++;\n\n        if (rootInstancesCount === 1) {\n            window.addEventListener('keydown', onWindowKeyDown);\n            window.addEventListener('pointerdown', onWindowPointerDown);\n        }\n\n        // delay for children components initialization\n        tick().then(() => {\n            if (isMounted) {\n                initVariableTriggers();\n            }\n        });\n    });\n\n    onDestroy(() => {\n        isMounted = false;\n        rootInstancesCount--;\n\n        if (!rootInstancesCount) {\n            window.removeEventListener('keydown', onWindowKeyDown);\n            window.removeEventListener('pointerdown', onWindowPointerDown);\n        }\n\n        for (const [_id, instance] of animators) {\n            instance.stop();\n        }\n\n        if (timersController) {\n            timersController.destroy();\n        }\n\n        tooltips.forEach(info => {\n            if (info.timeoutId) {\n                clearTimeout(info.timeoutId);\n                info.timeoutId = null;\n            }\n        });\n\n        timeouts.forEach(timeout => {\n            clearTimeout(timeout);\n        });\n\n        if (!globalVariablesController) {\n            cleanControllerStore(variablesController);\n        }\n    });\n</script>\n\n{#if !hasError && !hasIdError && rootStateComponentContext}\n    <div\n        class=\"{css.root}{$isDesktop ? ` ${css.root_platform_desktop}` : ''}{mix ? ` ${mix}` : ''}\"\n        on:touchstart={emptyTouchstartHandler}\n        dir={$directionStore}\n    >\n        <RootSvgFilters {svgFiltersMap} />\n\n        <Unknown\n            componentContext={rootStateComponentContext}\n        />\n\n        {#if tooltips}\n            {#each tooltips as item (item.internalId)}\n                <TooltipView\n                    ownerNode={item.ownerNode}\n                    data={item.desc}\n                    internalId={item.internalId}\n                    parentComponentContext={item.componentContext || rootStateComponentContext}\n                />\n            {/each}\n        {/if}\n\n        {#if menu}\n            <Menu\n                ownerNode={menu.node}\n                items={menu.items}\n                parentComponentContext={menu.componentContext || rootStateComponentContext}\n                on:close={() => menu = undefined}\n            />\n        {/if}\n    </div>\n{/if}\n","import Root from './components/Root.svelte';\nimport type { Customization, Direction, DivJson, ErrorCallback, Platform, TypefaceProvider, VideoPlayerProviderServer } from '../typings/common';\nimport type { GlobalVariablesController } from './expressions/globalVariablesController';\nimport type { CustomComponentDescription } from '../typings/custom';\nimport type { Store } from '../typings/store';\n\nexport function render(opts: {\n    json: DivJson;\n    id: string;\n    globalVariablesController?: GlobalVariablesController;\n    mix?: string;\n    customization?: Customization;\n    builtinProtocols?: string[];\n    onError?: ErrorCallback;\n    typefaceProvider?: TypefaceProvider;\n    platform?: Platform;\n    customComponents?: Map<string, CustomComponentDescription> | undefined;\n    direction?: Direction;\n    store?: Store;\n    weekStartDay?: number;\n    pagerChildrenClipEnabled?: boolean;\n    videoPlayerProvider?: VideoPlayerProviderServer;\n}) {\n    // Root has client-side typings, not a server one\n    return (Root as any).render(opts).html;\n}\n\nexport {\n    createGlobalVariablesController\n} from './expressions/globalVariablesController';\n\nexport {\n    createVariable\n} from './expressions/variable';\n"],"names":["noop","identity","x","run","fn","blank_object","run_all","fns","is_function","thing","safe_not_equal","a","b","subscribe","store","callbacks","callback","unsub","get_store_value","value","_","custom_event","type","detail","bubbles","cancelable","current_component","set_current_component","component","get_current_component","onDestroy","createEventDispatcher","event","setContext","key","context","getContext","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","update_scheduled","schedule_update","flush","tick","add_render_callback","seen_callbacks","flushidx","saved_component","update","e","i","$$","dirty","ensure_array_like","array_like_or_iterator","_boolean_attributes","boolean_attributes","ATTR_REGEX","CONTENT_REGEX","escape","is_attr","str","pattern","escaped","last","ch","void_element_names","is_void","name","invalid_attribute_name_character","spread","args","attrs_to_add","attributes","classes_to_add","styles_to_add","style_object_to_string","merge_ssr_styles","style_attribute","style_directive","style_object","individual_style","colon_index","escape_attribute_value","escape_object","obj","result","each","items","missing_component","validate_component","on_destroy","create_ssr_component","$$render","props","bindings","slots","parent_component","html","$$slots","css","add_attribute","boolean","assignment","add_styles","styles","subscriber_queue","readable","start","writable","stop","subscribers","set","new_value","run_queue","subscriber","invalidate","derived","stores","initial_value","single","stores_array","auto","started","values","pending","cleanup","sync","unsubscribers","ROOT_CTX","wrapError","error","params","wrapped","makeStyle","res","pxToEm","casted","pxToEmWithUnits","padLeft","val","count","correctColor","color","alpha","defaultColor","parsedColor","parseColor","stringifyColorToCss","correctColorWithAlpha","it","colorMatch","r","g","redPart","greenPart","bluePart","alphaPart","htmlFilter","str2","Truthy","getBackground","bgs","solidUnique","bg","solid","gradient","image","radial","acc","item","opts","colorMapToList","colorMap","_a","_b","colors","_c","_d","list","RELATIVE_SIZE_MAP","radialCenterToCss","center","sizeVal","size","centerX","centerY","imageSize","imagePos","scale","hpos","vpos","correctNonNegativeNumber","defaultVal","num","checkPercentage","isVisibility","filterActions","visibilityAction","node","visibilityActions","disappearActions","rootCtx","componentContext","visibilityStatus","calcedList","index","observer","status","totalStore","filtered","callAction","calcedAction","unsubscribe","map","thresholds","observerCallback","entries","entry","calcedParams","percentage","nowVisible","limit","push","genClassName","mods","cssKey","STATE_CTX","edgeInsertsToCss","edgeInsets","direction","top","right","bottom","left","isNumber","isNonNegativeNumber","correctEdgeInserts","correctAlpha","hasOwnProperty","isDeepEqual","keysA","keysB","assignIfDifferent","newVal","correctVisibility","visibility","correctCSSInterpolator","interpolator","correctNumber","flattenAnimation","animation","correctEdgeInsertsObject","sumEdgeInsets","side","aVal","bVal","correctBorderRadiusObject","cornersRadius","borderRadius","defaultRadius","fontSize","shadowToCssBoxShadow","shadow","_e","_f","shadowToCssFilter","filterEnabledActions","action","media","isPrefersReducedMotion","MAX_ITERATIONS","layoutProvider","currentNode","widthVariable","heightVariable","counter","sizeHistory","setVariable","variableName","instance","err","recalcProps","bbox","widthRes","heightRes","ENABLED_CTX","correctBooleanInt","composeAccessibilityDescription","accessibility","doNothing","ACTION_CTX","getUrlSchema","url","match","isBuiltinSchema","schema","builtinSchemas","SUPPORTED_ACCESSIBILITY_TYPES","$$props","id","actions","doubleTapActions","longTapActions","pressStartActions","pressEndActions","hoverStartActions","hoverEndActions","cls","style","attrs","use","customAction","isNativeActionAnimation","hasInnerFocusable","customAccessibility","captureFocusOnAction","actionCtx","href","target","startCoords","hasJSAction","role","isChecked","ariaHidden","onPointerMove","onPointerUp","rootCss","isPositiveNumber","getCssFilter","filters","logError","filter","background","radius","stl","HORIZONTAL_ALIGN_TO_GENERAL_LTR","HORIZONTAL_ALIGN_TO_GENERAL_RTL","VERTICAL_ALIGN_TO_GENERAL","stateChangeErrorMessage","prop","hasNativeAnimation","layoutParams","customDescription","customPaddings","customActions","additionalPaddings","heightByAspect","parentOf","parentOfSimpleMode","replaceItems","stateCtx","isEnabled","extensions","prevChilds","borderStyle","borderElemStyle","hasBorder","strokeWidth","strokeColor","cornerRadius","backgroundRadius","selfPadding","margin","widthMods","width","widthMin","widthMax","widthNum","widthFlexGrow","widthFlexShrink","widthFill","hasWidthError","heightMods","height","heightMin","heightMax","heightNum","heightFlexGrow","heightFlexShrink","heightFill","hasHeightError","opacity","backgroundStyle","hasSeparateBg","jsonTransitionTriggers","hasStateChangeTrigger","hasVisibilityChangeTrigger","stateChangingInProgress","visibilityChangingInProgress","transitionChangeInProgress","focusActions","blurActions","actionAnimationList","actionAnimationTransition","animationOpacityStart","animationOpacityEnd","animationScaleStart","animationScaleEnd","isVisibilityInited","pivotXNum","pivotYNum","transformOrigin","transform","layoutProviderResizeObserver","hasCustomFocus","prevExtensionsVal","prevTriggersUnsubscribe","registred","idUnregister","rebind","useAction","$isEnabled","replaceWith","newItems","parseActionAnimation","startValue","endValue","delay","duration","onVisibilityChange","nextVisibility","transition","unmountExtensions","ctx","visAction","tooltip","focusHandler","get","blurHandler","origJson","$$subscribe_jsonFocus","jsonFocus","$$subscribe_jsonBorder","jsonBorder","$$subscribe_jsonPaddings","jsonPaddings","$$subscribe_jsonMargins","jsonMargins","$$subscribe_jsonWidth","jsonWidth","$$subscribe_jsonAlignmentHorizontal","jsonAlignmentHorizontal","$$subscribe_jsonHeight","jsonHeight","$$subscribe_jsonAlignmentVertical","jsonAlignmentVertical","$$subscribe_jsonAlpha","jsonAlpha","$$subscribe_jsonAccessibility","jsonAccessibility","$$subscribe_jsonBackground","jsonBackground","$$subscribe_jsonAction","jsonAction","$$subscribe_jsonActions","jsonActions","$$subscribe_jsonDoubleTapActions","jsonDoubleTapActions","$$subscribe_jsonLongTapActions","jsonLongTapActions","$$subscribe_jsonPressStartActions","jsonPressStartActions","$$subscribe_jsonPressEndActions","jsonPressEndActions","$$subscribe_jsonHoverStartActions","jsonHoverStartActions","$$subscribe_jsonHoverEndActions","jsonHoverEndActions","$$subscribe_jsonActionAnimation","jsonActionAnimation","$$subscribe_jsonVisibility","jsonVisibility","$$subscribe_jsonTransform","jsonTransform","$$subscribe_jsonCaptureFocusOnAction","jsonCaptureFocusOnAction","border","$jsonFocus","$jsonBorder","newBorderStyle","newBorderElemStyle","newHasBorder","newBackgroundRadius","strokeStyle","biasedRadius","corner","$jsonPaddings","padding","$direction","$jsonMargins","widthType","newWidth","newWidthMin","newWidthMax","newWidthMods","newFlexGrow","newFlexShrink","newWidthFill","newWidthError","$jsonWidth","leftMargin","rightMargin","totalWidth","align","$jsonAlignmentHorizontal","heightType","newHeight","newHeightMin","newHeightMax","newHeightMods","newHeightFill","newHeightError","_g","$jsonHeight","topMargin","_h","bottomMargin","_i","totalHeight","$jsonAlignmentVertical","parentOverlapMod","gridArea","$jsonAlpha","$jsonAccessibility","descr","$jsonBackground","newActions","$jsonActions","$jsonAction","newDoubleTapActions","$jsonDoubleTapActions","newLongTapActions","$jsonLongTapActions","newFocusActions","newBlurActions","newPressStartActions","$jsonPressStartActions","newPressEndActions","$jsonPressEndActions","newHoverStartActions","$jsonHoverStartActions","newHoverEndActions","$jsonHoverEndActions","$jsonActionAnimation","$jsonCaptureFocusOnAction","prevVisibility","$jsonVisibility","exts","$jsonTransform","pivotX","pivotXCSSValue","pivotY","pivotYCSSValue","flexBasis","correctPositiveNumber","fontWeightToCss","fontWeight","correctFontWeight","fontWeightValue","edgeInsertsMultiply","multiply","text","rootFontSize","textStyles","singleline","cloudBg","cloudBgId","customLineHeight","cloudFilterId","decoration","lineHeight","letterSpacing","fontFamily","colorOverride","verticalAlign","maskAnimated","maskColor","maskSize","maskDensity","newDecoration","topOffset","hasCloudBg","cloudPadding","mask","hasMask","sizeEm","density","customVerticalAlign","correctAlignmentHorizontal","orientation","correctAlignmentVertical","propToString","correctTintMode","tintMode","debounce","timeout","timer","maxHeight","lineClamp","multiline","halign","valign","rootTextColor","focusTextColor","selectable","renderList","wholeTextCloudBgId","wholeTextCloudBgOpacity","usedTintColors","rootTextStyles","updateRenderList","textRanges","textImages","newRenderList","mode","content","ranges","images","prevIndex","activeRanges","range","rangeStart","rangeEnd","rangeWithExplicitProps","textStyles2","imageWidth","imageHeight","wrapperStyle","svgFilterId","tintColor","a11yAttrs","description","$$subscribe_jsonText","jsonText","$$subscribe_jsonRanges","jsonRanges","$$subscribe_jsonImages","jsonImages","$$subscribe_jsonRootTextStyles","jsonRootTextStyles","$$subscribe_jsonTextSize","jsonTextSize","$$subscribe_jsonLineHeight","jsonLineHeight","$$subscribe_jsonMaxLines","jsonMaxLines","$$subscribe_jsonHAlign","jsonHAlign","$$subscribe_jsonVAlign","jsonVAlign","$$subscribe_jsonTextColor","jsonTextColor","$$subscribe_jsonFocusTextColor","jsonFocusTextColor","$$subscribe_jsonTruncate","jsonTruncate","$$subscribe_jsonTextGradient","jsonTextGradient","$$subscribe_jsonSelectable","jsonSelectable","$$subscribe_jsonAutoEllipsize","jsonAutoEllipsize","$jsonText","newGradient","$jsonTextGradient","$jsonRootTextStyles","$jsonTextSize","newLineHeight","$jsonLineHeight","$jsonMaxLines","newMaxHeight","newLineClamp","newMultiline","lines","$jsonAutoEllipsize","$jsonHAlign","$jsonVAlign","isAllTextSameColor","$jsonRanges","isOnlyOneColorDefined","$jsonTextColor","newRootTextColor","$jsonFocusTextColor","truncate","$jsonTruncate","$jsonSelectable","$jsonImages","innerMods","prepareMargins","margins","setAdditionalPadding","insets","separator","crossAxis","hMargin","vMargin","calcAdditionalPaddings","lineSeparator","calcItemsGap","vals","separatorHMargins","separatorVMargins","lineSeparatorHMargins","lineSeparatorVMargins","isWidthMatchParent","isHeightMatchParent","correctContainerOrientation","calcRoundedRectangleSize","shape","calcCircleSize","calcDrawableStyle","old","stroke","borderColor","borderWidth","bgColor","correctDrawableStyle","drawable","availShapes","defaultValue","hasGapSupport","flex","correctContentAlignmentVertical","correctContentAlignmentHorizontal","voidUnsubscribe","constStore","cb","getItemsFromItemBuilder","data","builder","prototypes","additionalVars","div","prototype","simpleThrottle","runTs","prevRes","awaits","now","getMarginBox","elem","computed","THROTTLE_TIMEOUT","appendSeparator","separators","separatorStyle","box0","box1","containingBox","appendSeparators","boxes","contentBox","lastBox","contentHAlign","contentVAlign","throttledUpdated","updateSeparators","mounted","mutationObserver","resizeObserver","mutationObserverCallback","records","record","classList","parentElement","parentBbox","computedStyle","children","outerCss","rows","row","firstChild","first","rowBoxes","rowBox","HALIGN_MAP","VALIGN_MAP","AVAIL_SEPARATOR_SHAPES","childStore","aspect","childLayoutParams","prevContext","jsonItems","jsonItemBuilderData","$$subscribe_jsonOrientation","jsonOrientation","$$subscribe_jsonLayoutMode","jsonLayoutMode","$$subscribe_jsonContentVAlign","jsonContentVAlign","$$subscribe_jsonContentHAlign","jsonContentHAlign","$$subscribe_jsonSeparator","jsonSeparator","$$subscribe_jsonLineSeparator","jsonLineSeparator","$$subscribe_jsonAspect","jsonAspect","$$subscribe_jsonClipToBounds","jsonClipToBounds","$jsonItemBuilderData","unusedContexts","jsonToContextMap","found","$jsonOrientation","wrap","$jsonLayoutMode","supportWidthWrapContent","supportHeightWrapContent","stretchWidth","$childStore","stretchHeight","$jsonContentVAlign","$jsonContentHAlign","$jsonSeparator","$jsonLineSeparator","newRatio","$jsonAspect","newChildLayoutParams","isWidthWrapContent","isHeightWrapContent","$jsonClipToBounds","correctGeneralOrientation","$$subscribe_jsonDelimiterStyle","jsonDelimiterStyle","$jsonDelimiterStyle","hasContent","correctImagePosition","prepareBase64","FALLBACK_IMAGE","EMPTY_IMAGE","DEFAULT_PLACEHOLDER_COLOR","STATE_LOADING","STATE_LOADED","STATE_ERROR","img","state","isEmpty","placeholderColor","hasError","imageUrl","backgroundImage","position","aspectPaddingBottom","animationInterpolator","animationFadeStart","animationDelay","animationDuration","filterClipPath","isRTLMirror","highPriorityPreview","highPrority","updateImageUrl","_url","updatePosition","pos","$$subscribe_jsonImageUrl","jsonImageUrl","$$subscribe_jsonGifUrl","jsonGifUrl","$$subscribe_jsonPreview","jsonPreview","$$subscribe_jsonPlaceholderColor","jsonPlaceholderColor","$$subscribe_jsonScale","jsonScale","$$subscribe_jsonPosition","jsonPosition","$$subscribe_jsonA11y","jsonA11y","$$subscribe_jsonTintColor","jsonTintColor","$$subscribe_jsonTintMode","jsonTintMode","$$subscribe_jsonAppearanceAnimation","jsonAppearanceAnimation","$$subscribe_jsonFilters","jsonFilters","$$subscribe_jsonPreloadRequired","jsonPreloadRequired","$$subscribe_jsonHighPriorityPreviewShow","jsonHighPriorityPreviewShow","$jsonGifUrl","$jsonImageUrl","img2","$jsonHighPriorityPreviewShow","isWidthContent","isHeightContent","preview","$jsonPreview","$jsonPlaceholderColor","$jsonScale","$jsonPosition","alt","$jsonA11y","$jsonTintColor","newTintColor","newTintMode","$jsonTintMode","$jsonAppearanceAnimation","newFilter","newClipPath","$jsonFilters","$jsonPreloadRequired","isSpannedWeight","weight","formatWeight","gridCalcTemplates","weights","minSizes","length","allTracksHasWeight","minSize","totalWeight","template","minTrackSize","columnCount","resultItems","columnsWeight","rowsWeight","columnsMinWidth","rowsMinHeight","rowCount","$$subscribe_jsonColumnCount","jsonColumnCount","$jsonColumnCount","$$subscribe_childStore","used","y","childInfo","colSpan","rowSpan","widthWeight","heightWeight","isFree","OUTER","j","correctAlignment","joinTemplateSizes","sizes","temp","nonNegativeModulo","mod","rebuildItemsGrid","info","columns","column","wasFirstVisibleItem","scroller","galleryItemsWrappers","itemsGridElem","prevId","gridGap","itemSpacing","crossGridGap","crossSpacing","lastPaddingSize","templateSizes","scrollerStyle","scrollSnap","isDesktop","updateArrowsVisibility","updateArrowsVisibilityDebounced","getItems","maxLen","scrollTo","offset","animated","scrollDirection","scrollToGalleryItem","galleryElements","extraOffset","overflow","isHorizontal","elementOffset","scrollWrapperSize","maxOffset","scrollOffset","directionMultiplier","currentOffset","newOffset","checkIsIntersecting","checkIsFullyIntersecting","calculateCurrentElementIndex","scrollerRect","firstFullyVisibleElement","el","visibleElementsMap","firstVisibleElement","$$subscribe_jsonCrossContentAlignment","jsonCrossContentAlignment","$$subscribe_jsonItemSpacing","jsonItemSpacing","$$subscribe_jsonCrossSpacing","jsonCrossSpacing","$$subscribe_jsonScrollMode","jsonScrollMode","$$subscribe_jsonRestrictParentScroll","jsonRestrictParentScroll","$$subscribe_jsonScrollbar","jsonScrollbar","$$subscribe_jsonDefaultItem","jsonDefaultItem","shouldCheckArrows","$isDesktop","$jsonCrossContentAlignment","$jsonItemSpacing","$jsonCrossSpacing","calcedSize","gridTemplate","itemSize","itemsGrid","newScrollerStyle","$jsonScrollMode","scrollPadding","gridStyle","columnStyle","$jsonScrollbar","step","currentElementIndex","previousItem","isEdgeScroll","nextItem","$jsonRestrictParentScroll","itemsRow","rowIndex","correctTabDelimiterStyle","correctBorderRadius","enabled","enabledStore","instId","tabsElem","panelsWrapper","swiperElem","tabFontSize","tabPaddings","tabLineHeight","tabLetterSpacing","tabBorderRadius","tabActiveFontWeight","tabActiveFontFamily","tabInactiveFontWeight","tabInactiveFontFamily","tabActiveTextColor","tabInactiveTextColor","tabActiveBackground","tabInactiveBackground","tabItemSpacing","separatorBackground","separatorMargins","titlePadding","isSwipeInitialized","isAnimated","previousSelected","showedPanels","visiblePanels","hidePanelsTimeout","delimitierStyle","animationType","selectedTabStyles","updateItems","selected","setSelected","focus","initTabsSwipe","changeTab","updateSlideAnimation","selectItem","_event","updateTransform","updateShowedPanels","updateWrapperHeight","hideNonVisiblePanels","around","end","activePanel","clampIndex","parentOfItems","jsonSelectedTab","$$subscribe_jsonTabStyle","jsonTabStyle","$$subscribe_jsonSeparatorColor","jsonSeparatorColor","$$subscribe_jsonSeparatorPaddings","jsonSeparatorPaddings","jsonSwipeEnabled","$$subscribe_jsonTitlePaddings","jsonTitlePaddings","part","newLayoutParams","tabStyle","$jsonTabStyle","paddings","adjustedPaddings","$jsonSeparatorColor","$jsonSeparatorPaddings","$jsonTitlePaddings","isSelected","childComponentContext","cubicInOut","t","cubicIn","cubicOut","f","interpolateEasing","table","p0","p1","t2","ease","spring","EASING","linear","getEasing","lerp","animationRoot","transitionChangeBoxes","childrenIds","animationList","childrenWithTransitionIn","childrenWithTransitionOut","childrenWithTransitionChange","stateUnregister","selectedId","selectedComponentContext","inited","selectState","selectedState","states","changed","setState","stateId","child","newState","stateVariable","json","parentComponentContext","transitions","resolve","initDefaultState","jsonDefaultStateId","stateVariableName","Unknown","SIZE_MAP","getItemMods","leftClass","rightClass","pagerItemsWrapper","currentItem","prevSelectedItem","hasLayoutModeError","paddingObj","crossAxisAlignment","scrollAxisAlignment","scrollPaddings","registerData","pagerDataUpdate","scrollToPagerItem","runSelectedActions","behavior","setPreviousItem","setNextItem","init","$$subscribe_jsonItemBuilderData","$$subscribe_jsonCrossAxisAlignment","jsonCrossAxisAlignment","$$subscribe_jsonScrollAxisAlignment","jsonScrollAxisAlignment","gridSizeProp","$jsonScrollAxisAlignment","paddingStart","paddingEnd","neighbourPageWidth","pageWidth","$jsonCrossAxisAlignment","defaultItem","hasScrollLeft","hasScrollRight","arrowsCss","AVAIL_SHAPES","activeStyle","inactiveStyle","placement","spaceBetweenCenters","maxVisibleItems","indicatorItemsWrapper","pagerData","pagerDataUnsubscribe","onPagerDataUpdate","pagerId","$$subscribe_jsonShape","jsonShape","$$subscribe_jsonActiveItemColor","jsonActiveItemColor","$$subscribe_jsonInactiveItemColor","jsonInactiveItemColor","$$subscribe_jsonActiveItemSize","jsonActiveItemSize","$$subscribe_jsonActiveShape","jsonActiveShape","$$subscribe_jsonInactiveShape","jsonInactiveShape","$$subscribe_jsonSpaceBetweenCenters","jsonSpaceBetweenCenters","$$subscribe_jsonItemsPlacement","jsonItemsPlacement","$jsonActiveShape","$jsonInactiveShape","$jsonShape","activeSize","$jsonActiveItemSize","$jsonInactiveItemColor","$jsonActiveItemColor","$jsonItemsPlacement","$jsonSpaceBetweenCenters","isActiveItem","correctSliderTextStyle","textStyle","convertedColor","clamp","min","max","toBigIntNoCheck","MAX_INT","MIN_INT","toBigInt","bigIntZero","absBigInt","signBigInt","Variable","__publicField","converted","StringVariable","IntegerVariable","NumberVariable","BooleanVariable","ColorVariable","UrlVariable","DictVariable","ArrayVariable","TYPE_TO_CLASS","createVariable","constSubscribe","constSetter","ConstStringVariable","ConstNumberVariable","ConstIntegerVariable","ConstBooleanVariable","ConstColorVariable","ConstUrlVariable","ConstDictVariable","ConstArrayVariable","ConstDatetimeVariable","CONST_TYPE_TO_CLASS","Class","createConstVariable","variableToValue","variable","DEFAULT_DRAWABLE_STYLE","THUMB_MARK_SHAPES","TRACK_SHAPES","fillTicks","from","to","minValue","maxValue","inside","input","tracksInner","thumbStyle","thumbSecondaryStyle","trackInactiveStyle","trackActiveStyle","markActiveTicks","markActiveStyle","markInactiveTicks","markInactiveStyle","textSecondaryStyle","secondaryDescription","renderRanges","$valueVariable","value2","$value2Variable","trackActiveOffset","trackActivePart","parts","pushParts","intersectionStart","selfStyle","prev","next","total","rangeLeft","rangeRight","firstVariable","secondVariable","$$subscribe_valueVariable","valueVariable","$$subscribe_value2Variable","value2Variable","$$subscribe_jsonMinValue","jsonMinValue","$$subscribe_jsonMaxValue","jsonMaxValue","$$subscribe_jsonThumbStyle","jsonThumbStyle","$$subscribe_jsonThumbSecondaryStyle","jsonThumbSecondaryStyle","$$subscribe_jsonTrackInactiveStyle","jsonTrackInactiveStyle","$$subscribe_jsonTrackActiveStyle","jsonTrackActiveStyle","$$subscribe_jsonMarkActiveStyle","jsonMarkActiveStyle","$$subscribe_jsonMarkInactiveStyle","jsonMarkInactiveStyle","$$subscribe_jsonTextStyle","jsonTextStyle","$$subscribe_jsonSecondaryTextStyle","jsonSecondaryTextStyle","jsonSecondaryAccessibility","$$subscribe_jsonIsEnabled","jsonIsEnabled","$jsonMinValue","$jsonMaxValue","newVal2","$jsonThumbStyle","$jsonThumbSecondaryStyle","$jsonTrackInactiveStyle","$jsonTrackActiveStyle","newStyle","$jsonMarkActiveStyle","$jsonMarkInactiveStyle","$jsonTextStyle","$jsonSecondaryTextStyle","$jsonIsEnabled","$jsonSecondaryAccessibility","newHasError","maxThumbWidth","maxThumbHeight","trackPart","trackSecondaryPart","textDiff","diff","leftIndex","rightIndex","lengthDiff","MaskCharStatic","char","MaskCharDynamic","placeholder","BaseInputMask","initialMaskData","maskChar","newMaskData","restoreValue","previousRawValue","maskKey","regexp","mappingItem","newRawValue","newValue","tailStart","body","tail","fehi","maxShift","dynamicLeft","initialInsertableSubstring","holder","positionByDiff","substring","moveToAndGetNextHolderFilter","maskCharFilter","trimmedSubstring","insertableCharIndex","FixedLengthInputMask","exception","updateFixedMask","oldValue","maskData","CurrencyInputMask","locale","currentValue","forValue","formatted","decoding","parsed","oldSeparatorIndex","newSeparatorIndex","needInvalidateMask","clearedValue","rawValue","localeDigit","separatorOutOfDiffIndex","replaceCharInDiff","maxSeparatorOffset","leftToInsert","oldSeparatorLeft","containsSeparator","separatorInserted","canInsertSeparator","updateCurrencyMask","UNIVERSAL_MASK","COUNTRY_CODE_END_MARKER","EXTRA_NUMBERS","DEFAULT_DECODING","PhoneInputMask","phoneMaskPattern","oldRawValue","newPattern","rawValueDiff","dynamicDestination","dynamicCounter","currentPattern","resolveObject","current","countryCodeInd","digit","updatePhoneMask","isSupportInputMode","KEYBOARD_MAP","inputMask","contentEditableValue","hintColor","textColor","highlightColor","alignmentHorizontal","alignmentVertical","keyboardType","inputType","inputMode","verticalPadding","maxLength","autocapitalization","enterKeyType","describedBy","validatorsFirstRun","updateMaskData","runRawValueMask","runValidators","isFirstRun","validators","describeList","validator","isValid","htmlId","rawVariable","$$subscribe_rawValueVariable","rawValueVariable","$$subscribe_jsonHintText","jsonHintText","$$subscribe_jsonHintColor","jsonHintColor","$$subscribe_jsonFontSize","jsonFontSize","$$subscribe_jsonFontWeight","jsonFontWeight","$$subscribe_jsonFontWeightValue","jsonFontWeightValue","$$subscribe_jsonFontFamily","jsonFontFamily","$$subscribe_jsonLetterSpacing","jsonLetterSpacing","$$subscribe_jsonHighlightColor","jsonHighlightColor","$$subscribe_jsonKeyboardType","jsonKeyboardType","$$subscribe_jsonMask","jsonMask","$$subscribe_jsonVisibleMaxLines","jsonVisibleMaxLines","$$subscribe_jsonSelectAll","jsonSelectAll","$$subscribe_jsonMaxLength","jsonMaxLength","$$subscribe_jsonAutocapitalization","jsonAutocapitalization","$$subscribe_jsonEnterKeyType","jsonEnterKeyType","$$subscribe_jsonValidators","jsonValidators","$jsonMask","$jsonMaxLength","$rawValueVariable","$jsonValidators","$jsonHintText","$jsonHintColor","$jsonFontSize","$jsonFontWeight","$jsonFontWeightValue","$jsonFontFamily","$jsonLetterSpacing","$jsonHighlightColor","$jsonKeyboardType","isMultiline","$jsonVisibleMaxLines","$jsonAutocapitalization","$jsonEnterKeyType","paddingStl","verticalPaddingStl","$$value","select","selectText","prevWarnValue","filteredItems","innerStl","selectStl","correctVideoSource","videoSize","videoPlayerProvider","videoElem","videoParentElem","sources","loop","autoplay","muted","preload","poster","isAbsolute","elapsedVariableUnsubscriber","providedVideoTemplate","customVideoInstance","shouldUseVideoProvider","provider","calcVideoProviderData","evalled","repeatable","autostart","preloadRequired","variableListener","pause","elapsedVariableName","elapsedVariable","$$subscribe_jsonSource","jsonSource","$$subscribe_jsonRepeatable","jsonRepeatable","$$subscribe_jsonAutostart","jsonAutostart","$$subscribe_jsonMuted","jsonMuted","$$subscribe_jsonPreload","jsonPreload","$jsonSource","$jsonRepeatable","$jsonAutostart","$jsonMuted","$jsonPreload","source","booleanInt","onColor","onSubColor","$$subscribe_jsonOnColor","jsonOnColor","$jsonOnColor","customElem","desc","templateContent","templateAttrs","hasItemsError","variables","varaible","tag","TYPE_MAP","Text","Container","Separator","Image","Grid","Gallery","Tabs","State","Pager","Indicator","Slider","Input","Select","Video","Switch","Custom","childJson","errorText","$$result","svgFiltersMap","filterKey","filterColor","filterMode","applyTemplate","templateContext","templates","newContext","copyTemplated","base","extender","keys","simpleKeys","templateKeys","newJson","MAX_INT32","MIN_INT32","MAX_NUMBER","MIN_NUMBER","STRING","INTEGER","NUMBER","BOOLEAN","COLOR","URL","DATETIME","DICT","ARRAY","walk","ast","visitors","valToInternal","dateToString","date","valToString","stringifyColor","safeConvertColor","valToPreview","typeToString","roundInteger","_ctx","checkIntegerOverflow","gatherVarsFromAst","evalError","msg","details","transformColorValue","integerToNumber","integerValue","EVAL_TYPE_TO_JS_TYPE","convertJsValueToDivKit","evalType","jsType","funcs","funcByArgs","methods","methodByArgs","registerFunc","arr","funcKey","registerMethod","matchFuncArgs","func","hasOverloads","minArgs","maxArgs","conversions","lastArg","funcArg","findBestMatchedFunc","funcName","firstError","bestFunc","convertArgs","arg","funcToKey","toString","toNumber","toIntegerNumber","toIntegerString","toIntegerBoolean","toBooleanInteger","intVal","toBooleanString","toColor","toUrl","encodeUri","decodeUri","getValueForced","varName","fallback","getValue","getColorValue","getUrlValue","registerStd","formatNumber","len","formatters","token","getter","era","month","weekday","hours","fixed","_token","timeOffset","fullOffset","formattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","unescapedLatinCharacterRegExp","msInDay","cleanEscapedString","matched","getWeekFirstDay","isUTC","weekStartDay","weekDay","getFirstWeekFirstDay","firstDay","dayDiff","date0","date1","getIOSWeekYear","week","firstWeekFirstDay","nextYearDate","nextYearFirstWeekFirstDay","isBeforeFirstWeek","isAfterLastWeek","year","dayOfYear","formatDate","format","field","firstWeekday","dayOfMonth","firstCharacter","getMaxDate","copy","parseUnixTime","parseUnixTimeAsLocal","nowLocal","addMillis","datetime","milliseconds","setYear","setMonth","setDay","day","setHours","setMinutes","minutes","setSeconds","seconds","setMillis","millis","method","makeFormat","getYear","getMonth","getDay","getDayOfWeek","getHours","getMinutes","getSeconds","getMillis","formatAsLocal","formatAsUTC","registerDatetime","escapeRegExp","contains","wholeStr","partStr","replaceAll","what","replacer","lastIndex","trim","trimLeft","trimRight","toUpperCase","toLowerCase","calcPad","pad","padStart","prefix","padEnd","suffix","testRegex","regex","re","encodeRegex","registerStrings","divInteger","arg0","arg1","divNumber","modInteger","modNumber","mulInteger","mulNumber","subInteger","subNumber","sumInteger","sumNumber","absInteger","absNumber","maxInt","maxNum","minInt","minNum","maxNumber","minNumber","maxInteger","minInteger","round","sign","floor","ceil","signumInteger","signumNumber","copySignInteger","copySignNumber","registerMath","colorGetter","_vars","colorSetter","getColorAlpha","getColorRed","getColorGreen","getColorBlue","setColorAlpha","setColorRed","setColorGreen","setColorBlue","rgb","red","green","blue","argb","registerColors","getDuration","delimiter","whole","MS_IN_SECOND","SECONDS_IN_MINUTE","MS_IN_MINUTE","MINUTES_IN_HOUR","MS_IN_HOUR","HOURS_IN_DAY","MS_IN_DAY","MS_IN_WEEK","getIntervalSeconds","getIntervalTotalSeconds","getIntervalMinutes","getIntervalTotalMinutes","getIntervalHours","getIntervalTotalHours","getIntervalTotalDays","getIntervalTotalWeeks","registerInterval","getProp","path","dictGetter","dict","optWrapper","fallbackType","getDictString","getDictNumber","getDictInteger","getDictBoolean","getDictColor","getDictUrl","getDictArray","getDictDict","getDictOptString","getDictOptNumber","getDictOptInteger","getDictOptBoolean","getDictOptColor","getDictOptUrl","getDictOptArray","getDictOptDict","containsKey","_ext","registerDict","STRING_VARARG","arrayGetter","runtimeType","array","getArrayString","getArrayNumber","getArrayInteger","getArrayBoolean","getArrayColor","getArrayUrl","getArrayArray","getArrayDict","getArrayOptString","getArrayOptNumber","getArrayOptInteger","getArrayOptBoolean","getArrayOptColor","getArrayOptUrl","getArrayOptArray","getArrayOptDict","registerArray","getStored","expectedType","registerStored","pi","toRadians","degrees","toDegrees","radians","sin","rad","cos","tan","cot","atan","asin","acos","registerTrigonometry","register","evalStringLiteral","expr","evalNumberLiteral","evalIntegerLiteral","evalBooleanLiteral","evalUnary","evalAny","mul","evalConditional","test","evalTry","evalTemplateLiteral","evalLogicalExpression","evalBinaryEquality","operator","evalBinaryCompare","leftVal","rightVal","evalBinarySum","evalBinaryFactor","evalBinaryExpression","argsToStr","evalCallExpression","findRes","builtInFindRes","logFunctionMatchError","argsType","expectedArgs","evalMethodExpression","methodName","methodKey","evalVariable","EVAL_MAP","evalExpression","vars","customFunctions","buildConditionalExpression","buildTryExpression","buildBinaryExpression","head","element","buildLogicalExpression","buildMethodCall","buildVariableOrBoolean","txt","buildString","convertToInt64","escapeChar","peg$subclass","parent","C","peg$SyntaxError","message","expected","location","self","peg$padEnd","targetLength","padString","src","k","s","offset_s","loc","filler","line","hatLen","DESCRIBE_EXPECTATION_FNS","expectation","literalEscape","escapedParts","classEscape","hex","describeExpectation","describeExpected","descriptions","describeFound","peg$parse","options","peg$FAILED","peg$source","peg$startRuleFunctions","peg$parsestart","peg$parseJsonStringContents","peg$startRuleFunction","peg$c0","peg$c1","peg$c2","peg$c3","peg$c4","peg$c5","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","peg$c11","peg$c12","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","peg$c25","peg$c26","peg$c27","peg$r0","peg$r1","peg$r2","peg$r3","peg$r4","peg$r5","peg$e0","peg$literalExpectation","peg$e1","peg$e2","peg$e3","peg$e4","peg$anyExpectation","peg$e5","peg$classExpectation","peg$e6","peg$e7","peg$e8","peg$e9","peg$e10","peg$e11","peg$e12","peg$e13","peg$e14","peg$e15","peg$e16","peg$e17","peg$e18","peg$e19","peg$e20","peg$e21","peg$e22","peg$e23","peg$e24","peg$e25","peg$e26","peg$e27","peg$otherExpectation","peg$e28","peg$e29","peg$e30","peg$e31","peg$e32","peg$e33","peg$e34","peg$e35","peg$e36","peg$e37","peg$e38","peg$f0","peg$f1","peg$f2","peg$f3","peg$f4","peg$f5","peg$f6","peg$f7","peg$f8","peg$f9","peg$f10","peg$f11","peg$f12","peg$f13","peg$f14","peg$f15","peg$f16","peg$f17","peg$f18","peg$f19","peg$f20","op","peg$f21","peg$f22","peg$f23","peg$f24","peg$f25","peg$f26","peg$f27","peg$f28","peg$f29","peg$f30","peg$f31","peg$f32","peg$f33","peg$f34","peg$f35","peg$f36","peg$f37","peg$f38","peg$f39","peg$f40","peg$currPos","peg$savedPos","peg$posDetailsCache","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","peg$result","ignoreCase","inverted","peg$endExpectation","peg$computePosDetails","p","peg$computeLocation","startPos","endPos","startPosDetails","endPosDetails","peg$fail","peg$buildStructuredError","s0","s2","peg$parse_","peg$parseExpression","s1","peg$parseJsonStringChar","s3","s5","s4","s6","s7","s8","s9","s10","peg$parseTry","peg$parseOr","peg$parseAnd","peg$parseEqual","peg$parseComparison","peg$parseSum","peg$parseFactor","peg$parseUnaryExpression","peg$parseNumber","peg$parseInteger","peg$parseDoubleUnaryExpressionCatch","peg$parseMethod","s11","s12","s13","s14","peg$parseCall","peg$parseStrictIdentifier","peg$parseArguments","peg$parsePrimaryExpression","peg$parseIdentifierOrBoolean","peg$parseString","peg$parseStringContents","peg$parseStringChar","MAX_ENTRIES","cache","latestItem","cacheGet","cacheSet","supportedTypes","checkCustomFunction","argumentsNames","customFunctionWrap","parse","warn","mergeCustomFunctions","map0","map1","merged","defined","simpleCheckInput","card","templateName","uniq","ExpressionBinding","keepComplex","hasExpressions","prepareVarsObj","jsonProp","propVars","applyVars","prepareVars","root","controllerToStore","controllerToVars","getControllerStore","controller","cleanControllerStore","getControllerVars","GlobalVariablesController","createGlobalVariablesController","AVAIL_ACTIONS_NAMES","AVAIL_ACTIONS","TimersController","_id","actionTyped","startTick","actionsWithExpressions","arrayInsert","handle","variableInstance","newList","arrayRemove","arraySet","dictSetValue","newDict","copyToClipboard","correctDirection","createAnimator","animator","onEnd","execAnyActions","parsedStart","parsedEnd","easing","repeatCount","animationTime","localTime","maxTime","mix","iterationNumber","dir","getTooltipContext","getStateContext","checkString","allowedMethods","checkMethod","checkHeaders","headers","header","checkSubmitAction","hasDialogSupport","ownerNode","internalId","tooltipNode","visible","tooltipX","tooltipY","tooltipWidth","tooltipHeight","modal","prevFocusedElement","$$subscribe_offsetX","offsetX","$$subscribe_offsetY","offsetY","animationIn","animationOut","popupMix","itemMix","dispatch","menuNode","menuX","menuY","menuWidth","menuHeight","onItemAction","isPointerFocus","rootInstancesCount","onWindowKeyDown","onWindowPointerDown","AVAIL_SET_STORED_TYPES","AVAIL_SET_STORED_ALL_TYPES","mergeMaps","variables0","variables1","platform","theme","globalVariablesController","customization","builtinProtocols","onError","onStat","onSubmit","onCustomAction","onComponent","typefaceProvider","_fontFamily","fetchInit","tooltipRoot","customComponents","pagerChildrenClipEnabled","isMounted","touchQuery","currentTheme","themeQuery","directionStore","themeQueryListener","setTheme","newTheme","getDebugVariables","getDebugAllVariables","setData","applyPatch","applyPatchInternal","builtinSet","hasIdError","running","variablesController","globalVariablesStore","globalVariables","localVariables","awaitingGlobalVariables","timersController","animators","tooltipCounter","tooltips","shownTooltips","menu","timeouts","getCustomization","getDerivedFromVars","prepared","awaitVariableChanges","getJsonWithVars","preparePrototypeVariables","indexVar","logStat","hasTemplate","processTemplate","usedTypes","idCounter","genId","genClass","svgFilterUsages","addSvgFilter","filterId","removeSvgFilter","idPrefix","nodeGettersById","nodeById","fullId","registerId","full","getComponentId","tooltipCtx","rootComponentContext","log","setters","divId","selectedStateId","callSubmit","getters","hasContentType","callScrollTo","getInstance","callScrollBy","switchElementAction","itemVal","stepVal","callVideoAction","failed","change","parentOfMap","newItemsLen","json2","callDownloadAction","callShowTooltip","multiple","tooltipMap","callHideTooltip","callSetStoredValue","lifetime","execAction","execActionInternal","scopeId","componentContextMap","actionUrl","focusableMap","animatorDef","start_delay","repeat_count","start_value_typed","end_value_typed","evalledDef","prevAnimator","timerAction","win","execCustomAction","processVariableTriggers","variableTriggers","trigger","prevConditionResult","exprVars","conditionResult","isRunning","setRunning","instancesMap","registerInstance","block","duplicateErrorLevel","unregisterInstance","registerParentOf","unregisterParentOf","registerFocusable","unregisterFocusable","registerTooltip","onwerNode","unregisterTooltip","updateTheme","palette","varInstance","getBuiltinProtocols","getExtension","Builder","getExtensionContext","property","prepareCustomFunctions","list2","produceComponentContext","childContext","childProcessedContext","childProcessedJson","localVars","constructVariable","localCustomFunctions","foundType","targetCtx","listeners","listeners2","listener","targetPagerId","registerTimeout","onTooltipClose","_json","_componentContext","_transitions","_node","_direction","hasVariableWithType","setVariableValue","declVariable","startVariables","newVarName","awaitingStore","timers","rootStateComponentContext","initialError","rootStateDiv","$directionStore","RootSvgFilters","render","Root"],"mappings":";;;;;;;;AACO,SAASA,IAAO;AAAA;AAEhB,MAAMC,KAAW,CAACC,MAAMA;AAoCxB,SAASC,GAAIC,GAAI;AACvB,SAAOA,EAAI;AACZ;AAEO,SAASC,KAAe;AAC9B,SAAO,uBAAO,OAAO,IAAI;AAC1B;AAMO,SAASC,GAAQC,GAAK;AAC5B,EAAAA,EAAI,QAAQJ,EAAG;AAChB;AAMO,SAASK,GAAYC,GAAO;AAClC,SAAO,OAAOA,KAAU;AACzB;AAGO,SAASC,GAAeC,GAAGC,GAAG;AACpC,SAAOD,KAAKA,IAAIC,KAAKA,IAAID,MAAMC,KAAMD,KAAK,OAAOA,KAAM,YAAa,OAAOA,KAAM;AAClF;AAiEO,SAASE,EAAUC,MAAUC,GAAW;AAC9C,MAAID,KAAS,MAAM;AAClB,eAAWE,KAAYD;AACtB,MAAAC,EAAS,MAAS;AAEnB,WAAOhB;AAAAA,EACT;AACC,QAAMiB,IAAQH,EAAM,UAAU,GAAGC,CAAS;AAC1C,SAAOE,EAAM,cAAc,MAAMA,EAAM,YAAa,IAAGA;AACxD;AAUO,SAASC,GAAgBJ,GAAO;AACtC,MAAIK;AACJ,SAAAN,EAAUC,GAAO,CAACM,MAAOD,IAAQC,CAAE,EAAG,GAC/BD;AACR;AC21BO,SAASE,GAAaC,GAAMC,GAAQ,EAAE,SAAAC,IAAU,IAAO,YAAAC,IAAa,GAAO,IAAG,IAAI;AACxF,SAAO,IAAI,YAAYH,GAAM,EAAE,QAAAC,GAAQ,SAAAC,GAAS,YAAAC,GAAY;AAC7D;ACr/BO,IAAIC;AAGJ,SAASC,GAAsBC,GAAW;AAChD,EAAAF,KAAoBE;AACrB;AAEO,SAASC,KAAwB;AACvC,MAAI,CAACH,GAAmB,OAAM,IAAI,MAAM,kDAAkD;AAC1F,SAAOA;AACR;AAwDO,SAASI,GAAU1B,GAAI;AAC7B,EAAAyB,GAAuB,EAAC,GAAG,WAAW,KAAKzB,CAAE;AAC9C;AAyBO,SAAS2B,KAAwB;AACvC,QAAMH,IAAYC,GAAuB;AACzC,SAAO,CAACP,GAAMC,GAAQ,EAAE,YAAAE,IAAa,GAAO,IAAG,OAAO;AACrD,UAAMV,IAAYa,EAAU,GAAG,UAAUN,CAAI;AAC7C,QAAIP,GAAW;AAGd,YAAMiB,IAAQX;AAAA;AAAA,QAAoCC;AAAA,QAAOC;AAAA,QAAQ,EAAE,YAAAE,EAAU;AAAA,MAAE;AAC/E,aAAAV,EAAU,MAAK,EAAG,QAAQ,CAACX,MAAO;AACjC,QAAAA,EAAG,KAAKwB,GAAWI,CAAK;AAAA,MAC5B,CAAI,GACM,CAACA,EAAM;AAAA,IACjB;AACE,WAAO;AAAA,EACP;AACF;AAeO,SAASC,GAAWC,GAAKC,GAAS;AACxC,SAAAN,GAAqB,EAAG,GAAG,QAAQ,IAAIK,GAAKC,CAAO,GAC5CA;AACR;AAWO,SAASC,GAAWF,GAAK;AAC/B,SAAOL,GAAqB,EAAG,GAAG,QAAQ,IAAIK,CAAG;AAClD;AC1IO,MAAMG,KAAmB,CAAE,GAErBC,KAAoB,CAAE;AAEnC,IAAIC,KAAmB,CAAE;AAEzB,MAAMC,KAAkB,CAAE,GAEpBC,KAAmC,wBAAQ,QAAS;AAE1D,IAAIC,KAAmB;AAGhB,SAASC,KAAkB;AACjC,EAAKD,OACJA,KAAmB,IACnBD,GAAiB,KAAKG,EAAK;AAE7B;AAGO,SAASC,KAAO;AACtB,SAAAF,GAAiB,GACVF;AACR;AAGO,SAASK,GAAoB1C,GAAI;AACvC,EAAAmC,GAAiB,KAAKnC,CAAE;AACzB;AAyBA,MAAM2C,KAAiB,oBAAI,IAAK;AAEhC,IAAIC,KAAW;AAGR,SAASJ,KAAQ;AAIvB,MAAII,OAAa;AAChB;AAED,QAAMC,IAAkBvB;AACxB,KAAG;AAGF,QAAI;AACH,aAAOsB,KAAWX,GAAiB,UAAQ;AAC1C,cAAMT,IAAYS,GAAiBW,EAAQ;AAC3C,QAAAA,MACArB,GAAsBC,CAAS,GAC/BsB,GAAOtB,EAAU,EAAE;AAAA,MACvB;AAAA,IACG,SAAQuB,GAAG;AAEX,YAAAd,GAAiB,SAAS,GAC1BW,KAAW,GACLG;AAAA,IACT;AAIE,SAHAxB,GAAsB,IAAI,GAC1BU,GAAiB,SAAS,GAC1BW,KAAW,GACJV,GAAkB,SAAQ,CAAAA,GAAkB,IAAG,EAAI;AAI1D,aAASc,IAAI,GAAGA,IAAIb,GAAiB,QAAQa,KAAK,GAAG;AACpD,YAAMpC,IAAWuB,GAAiBa,CAAC;AACnC,MAAKL,GAAe,IAAI/B,CAAQ,MAE/B+B,GAAe,IAAI/B,CAAQ,GAC3BA,EAAU;AAAA,IAEd;AACE,IAAAuB,GAAiB,SAAS;AAAA,EAC1B,SAAQF,GAAiB;AAC1B,SAAOG,GAAgB;AACtB,IAAAA,GAAgB,IAAG,EAAI;AAExB,EAAAE,KAAmB,IACnBK,GAAe,MAAO,GACtBpB,GAAsBsB,CAAe;AACtC;AAGA,SAASC,GAAOG,GAAI;AACnB,MAAIA,EAAG,aAAa,MAAM;AACzB,IAAAA,EAAG,OAAQ,GACX/C,GAAQ+C,EAAG,aAAa;AACxB,UAAMC,IAAQD,EAAG;AACjB,IAAAA,EAAG,QAAQ,CAAC,EAAE,GACdA,EAAG,YAAYA,EAAG,SAAS,EAAEA,EAAG,KAAKC,CAAK,GAC1CD,EAAG,aAAa,QAAQP,EAAmB;AAAA,EAC7C;AACA;ACpHO,SAASS,GAAkBC,GAAwB;AACzD,UAAOA,KAAA,gBAAAA,EAAwB,YAAW,SACvCA,IACA,MAAM,KAAKA,CAAsB;AACrC;ACTA,MAAMC;AAAA;AAAA,EAA4C;AAAA,IACjD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,GAQaC,KAAqB,oBAAI,IAAI,CAAC,GAAGD,EAAmB,CAAC,GClC5DE,KAAa,UACbC,KAAgB;AAQf,SAASC,GAAO1C,GAAO2C,IAAU,IAAO;AAC9C,QAAMC,IAAM,OAAO5C,CAAK,GAClB6C,IAAUF,IAAUH,KAAaC;AACvC,EAAAI,EAAQ,YAAY;AACpB,MAAIC,IAAU,IACVC,IAAO;AACX,SAAOF,EAAQ,KAAKD,CAAG,KAAG;AACzB,UAAMX,IAAIY,EAAQ,YAAY,GACxBG,IAAKJ,EAAIX,CAAC;AAChB,IAAAa,KAAWF,EAAI,UAAUG,GAAMd,CAAC,KAAKe,MAAO,MAAM,UAAUA,MAAO,MAAM,WAAW,SACpFD,IAAOd,IAAI;AAAA,EACb;AACC,SAAOa,IAAUF,EAAI,UAAUG,CAAI;AACpC;ACrBA,MAAME,KACL;AAcM,SAASC,GAAQC,GAAM;AAC7B,SAAOF,GAAmB,KAAKE,CAAI,KAAKA,EAAK,YAAW,MAAO;AAChE;ACVO,MAAMC,KACZ;AAKM,SAASC,GAAOC,GAAMC,GAAc;AAC1C,QAAMC,IAAa,OAAO,OAAO,CAAE,GAAE,GAAGF,CAAI;AAC5C,MAAIC,GAAc;AACjB,UAAME,IAAiBF,EAAa,SAC9BG,IAAgBH,EAAa;AACnC,IAAIE,MACCD,EAAW,SAAS,OACvBA,EAAW,QAAQC,IAEnBD,EAAW,SAAS,MAAMC,IAGxBC,MACCF,EAAW,SAAS,OACvBA,EAAW,QAAQG,GAAuBD,CAAa,IAEvDF,EAAW,QAAQG;AAAA,MAClBC,GAAiBJ,EAAW,OAAOE,CAAa;AAAA,IAChD;AAAA,EAGL;AACC,MAAId,IAAM;AACV,gBAAO,KAAKY,CAAU,EAAE,QAAQ,CAACL,MAAS;AACzC,QAAIC,GAAiC,KAAKD,CAAI,EAAG;AACjD,UAAMnD,IAAQwD,EAAWL,CAAI;AAC7B,IAAInD,MAAU,KAAM4C,KAAO,MAAMO,IACxBZ,GAAmB,IAAIY,EAAK,YAAa,CAAA,IAC7CnD,MAAO4C,KAAO,MAAMO,KACdnD,KAAS,SACnB4C,KAAO,IAAIO,CAAI,KAAKnD,CAAK;AAAA,EAE5B,CAAE,GACM4C;AACR;AAGO,SAASgB,GAAiBC,GAAiBC,GAAiB;AAClE,QAAMC,IAAe,CAAE;AACvB,aAAWC,KAAoBH,EAAgB,MAAM,GAAG,GAAG;AAC1D,UAAMI,IAAcD,EAAiB,QAAQ,GAAG,GAC1Cb,IAAOa,EAAiB,MAAM,GAAGC,CAAW,EAAE,KAAM,GACpDjE,IAAQgE,EAAiB,MAAMC,IAAc,CAAC,EAAE,KAAM;AAC5D,IAAKd,MACLY,EAAaZ,CAAI,IAAInD;AAAA,EACvB;AACC,aAAWmD,KAAQW,GAAiB;AACnC,UAAM9D,IAAQ8D,EAAgBX,CAAI;AAClC,IAAInD,IACH+D,EAAaZ,CAAI,IAAInD,IAErB,OAAO+D,EAAaZ,CAAI;AAAA,EAE3B;AACC,SAAOY;AACR;AAEO,SAASG,GAAuBlE,GAAO;AAG7C,SADsB,OAAOA,KAAU,YAAaA,KAAS,OAAOA,KAAU,WACvD0C,GAAO1C,GAAO,EAAI,IAAIA;AAC9C;AAGO,SAASmE,GAAcC,GAAK;AAClC,QAAMC,IAAS,CAAE;AACjB,aAAWtD,KAAOqD;AACjB,IAAAC,EAAOtD,CAAG,IAAImD,GAAuBE,EAAIrD,CAAG,CAAC;AAE9C,SAAOsD;AACR;AAGO,SAASC,GAAKC,GAAOtF,GAAI;AAC/B,EAAAsF,IAAQnC,GAAkBmC,CAAK;AAC/B,MAAI3B,IAAM;AACV,WAAS,IAAI,GAAG,IAAI2B,EAAM,QAAQ,KAAK;AACtC,IAAA3B,KAAO3D,EAAGsF,EAAM,CAAC,GAAG,CAAC;AAEtB,SAAO3B;AACR;AAEO,MAAM4B,KAAoB;AAAA,EAChC,UAAU,MAAM;AACjB;AAEO,SAASC,GAAmBhE,GAAW0C,GAAM;AACnD,MAAI,CAAC1C,KAAa,CAACA,EAAU;AAC5B,UAAI0C,MAAS,uBAAoBA,KAAQ,gBACnC,IAAI;AAAA,MACT,IAAIA,CAAI,qMAAqMA,CAAI;AAAA,IACjN;AAEF,SAAO1C;AACR;AASA,IAAIiE;AAGG,SAASC,GAAqB1F,GAAI;AACxC,WAAS2F,EAASP,GAAQQ,GAAOC,GAAUC,GAAO/D,GAAS;AAC1D,UAAMgE,IAAmBzE,IACnB2B,IAAK;AAAA,MACV,YAAAwC;AAAA,MACA,SAAS,IAAI,IAAI1D,MAAYgE,IAAmBA,EAAiB,GAAG,UAAU,CAAA,EAAG;AAAA;AAAA,MAEjF,UAAU,CAAE;AAAA,MACZ,eAAe,CAAE;AAAA,MACjB,cAAc,CAAE;AAAA,MAChB,WAAW9F,GAAY;AAAA,IACvB;AACD,IAAAsB,GAAsB,EAAE,IAAA0B,GAAI;AAC5B,UAAM+C,IAAOhG,EAAGoF,GAAQQ,GAAOC,GAAUC,CAAK;AAC9C,WAAAvE,GAAsBwE,CAAgB,GAC/BC;AAAA,EACT;AACC,SAAO;AAAA,IACN,QAAQ,CAACJ,IAAQ,CAAE,GAAE,EAAE,SAAAK,IAAU,IAAI,SAAAlE,IAAU,oBAAI,MAAO,IAAG,OAAO;AACnE,MAAA0D,KAAa,CAAE;AACf,YAAML,IAAS,EAAE,OAAO,IAAI,MAAM,IAAI,KAAK,oBAAI,MAAO,GAChDY,IAAOL,EAASP,GAAQQ,GAAO,CAAE,GAAEK,GAASlE,CAAO;AACzD,aAAA7B,GAAQuF,EAAU,GACX;AAAA,QACN,MAAAO;AAAA,QACA,KAAK;AAAA,UACJ,MAAM,MAAM,KAAKZ,EAAO,GAAG,EACzB,IAAI,CAACc,MAAQA,EAAI,IAAI,EACrB,KAAK;AAAA,CAAI;AAAA,UACX,KAAK;AAAA;AAAA,QACL;AAAA,QACD,MAAMd,EAAO,QAAQA,EAAO;AAAA,MAC5B;AAAA,IACD;AAAA,IACD,UAAAO;AAAA,EACA;AACF;AAGO,SAASQ,EAAcjC,GAAMnD,GAAOqF,GAAS;AACnD,MAAIrF,KAAS,QAASqF,EAAoB,QAAO;AACjD,QAAMC,IAA8C,KAAK5C,GAAO1C,GAAO,EAAI,CAAC;AAC5E,SAAO,IAAImD,CAAI,GAAGmC,CAAU;AAC7B;AAQA,SAAS3B,GAAuBI,GAAc;AAC7C,SAAO,OAAO,KAAKA,CAAY,EAC7B,OAAO,CAAChD,MAAQgD,EAAahD,CAAG,KAAK,QAAQgD,EAAahD,CAAG,MAAM,EAAE,EACrE,IAAI,CAACA,MAAQ,GAAGA,CAAG,KAAKmD,GAAuBH,EAAahD,CAAG,CAAC,CAAC,GAAG,EACpE,KAAK,GAAG;AACX;AAGO,SAASwE,GAAWxB,GAAc;AACxC,QAAMyB,IAAS7B,GAAuBI,CAAY;AAClD,SAAOyB,IAAS,WAAWA,CAAM,MAAM;AACxC;AC7KA,MAAMC,KAAmB,CAAE;AAWpB,SAASC,GAAS1F,GAAO2F,GAAO;AACtC,SAAO;AAAA,IACN,WAAWC,GAAS5F,GAAO2F,CAAK,EAAE;AAAA,EAClC;AACF;AAWO,SAASC,GAAS5F,GAAO2F,IAAQ9G,GAAM;AAE7C,MAAIgH;AAEJ,QAAMC,IAAc,oBAAI,IAAK;AAI7B,WAASC,EAAIC,GAAW;AACvB,QAAIzG,GAAeS,GAAOgG,CAAS,MAClChG,IAAQgG,GACJH,IAAM;AAET,YAAMI,IAAY,CAACR,GAAiB;AACpC,iBAAWS,KAAcJ;AACxB,QAAAI,EAAW,CAAC,EAAG,GACfT,GAAiB,KAAKS,GAAYlG,CAAK;AAExC,UAAIiG,GAAW;AACd,iBAAShE,IAAI,GAAGA,IAAIwD,GAAiB,QAAQxD,KAAK;AACjD,UAAAwD,GAAiBxD,CAAC,EAAE,CAAC,EAAEwD,GAAiBxD,IAAI,CAAC,CAAC;AAE/C,QAAAwD,GAAiB,SAAS;AAAA,MAC/B;AAAA,IACA;AAAA,EAEA;AAMC,WAAS1D,EAAO9C,GAAI;AACnB,IAAA8G,EAAI9G,EAAGe,CAAK,CAAC;AAAA,EACf;AAOC,WAASN,EAAUV,GAAKmH,IAAatH,GAAM;AAE1C,UAAMqH,IAAa,CAAClH,GAAKmH,CAAU;AACnC,WAAAL,EAAY,IAAII,CAAU,GACtBJ,EAAY,SAAS,MACxBD,IAAOF,EAAMI,GAAKhE,CAAM,KAAKlD,IAE9BG,EAAIgB,CAAK,GACF,MAAM;AACZ,MAAA8F,EAAY,OAAOI,CAAU,GACzBJ,EAAY,SAAS,KAAKD,MAC7BA,EAAM,GACNA,IAAO;AAAA,IAER;AAAA,EACH;AACC,SAAO,EAAE,KAAAE,GAAK,QAAAhE,GAAQ,WAAArC,EAAW;AAClC;AAsCO,SAAS0G,GAAQC,GAAQpH,GAAIqH,GAAe;AAClD,QAAMC,IAAS,CAAC,MAAM,QAAQF,CAAM,GAE9BG,IAAeD,IAAS,CAACF,CAAM,IAAIA;AACzC,MAAI,CAACG,EAAa,MAAM,OAAO;AAC9B,UAAM,IAAI,MAAM,sDAAsD;AAEvE,QAAMC,IAAOxH,EAAG,SAAS;AACzB,SAAOyG,GAASY,GAAe,CAACP,GAAKhE,MAAW;AAC/C,QAAI2E,IAAU;AACd,UAAMC,IAAS,CAAE;AACjB,QAAIC,IAAU,GACVC,IAAUhI;AACd,UAAMiI,IAAO,MAAM;AAClB,UAAIF;AACH;AAED,MAAAC,EAAS;AACT,YAAMxC,IAASpF,EAAGsH,IAASI,EAAO,CAAC,IAAIA,GAAQZ,GAAKhE,CAAM;AAC1D,MAAI0E,IACHV,EAAI1B,CAAM,IAEVwC,IAAUxH,GAAYgF,CAAM,IAAIA,IAASxF;AAAAA,IAE1C,GACKkI,IAAgBP,EAAa;AAAA,MAAI,CAAC7G,GAAOsC,MAC9CvC;AAAA,QACCC;AAAA,QACA,CAACK,MAAU;AACV,UAAA2G,EAAO1E,CAAC,IAAIjC,GACZ4G,KAAW,EAAE,KAAK3E,IACdyE,KACHI,EAAM;AAAA,QAEP;AAAA,QACD,MAAM;AACL,UAAAF,KAAW,KAAK3E;AAAA,QACrB;AAAA,MACA;AAAA,IACG;AACD,WAAAyE,IAAU,IACVI,EAAM,GACC,WAAgB;AACtB,MAAA3H,GAAQ4H,CAAa,GACrBF,EAAS,GAITH,IAAU;AAAA,IACV;AAAA,EACH,CAAE;AACF;;;;;;;;;;;;GC5KaM,KAAW,OAAO,MAAM;ACH9B,SAASC,EAAUC,GAAcC,IAGpC,IAAkB;AAClB,QAAMC,IAAUF;AAER,SAAAE,EAAA,QAAQD,EAAO,SAAS,SAE5BA,EAAO,eACPC,EAAQ,aAAaD,EAAO,aAGzBC;AACX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfO,SAASC,GAAU7B,GAA0E;AAChG,MAAI,CAACA;AACM;AAGX,MAAI8B,IAAM;AACV,aAAWvG,KAAOyE;AACV,QAAAA,EAAO,eAAezE,CAAG,GAAG;AAC5B,UAAI,CAACyE,EAAOzE,CAAG,KAAKyE,EAAOzE,CAAG,MAAM;AAChC;AAEJ,MAAIuG,MACOA,KAAA,MAEXA,KAAOvG,IAAM,MAAM,OAAOyE,EAAOzE,CAAG,CAAC;AAAA,IAAA;AAG7C,SAAOuG,KAAO;AAClB;AClBO,SAASC,GAAOvH,GAAuB;AAC1C,MAAI,OAAOA,KAAU,YAAY,OAAOA,KAAU,YAAY,CAACA;AACpD,WAAA;AAGL,QAAAwH,IAAS,OAAOxH,CAAK;AAEvB,SAAA,OAAO,MAAMwH,CAAM,IACZ,MAGH,KAAK,KAAKA,IAAS,GAAI,IAAI,MAAS;AAChD;AAEO,SAASC,GAAgBzH,GAAuB;AAC/C,MAAAsH,IAAMC,GAAOvH,CAAK;AAEtB,SAAIsH,MAAQ,QACDA,KAAA,OAGJA;AACX;AC3BgB,SAAAI,GAAQC,GAAaC,GAAuB;AACjD,SAAAD,EAAI,SAASC;AAChB,IAAAD,IAAM,MAAMA;AAET,SAAAA;AACX;ACIO,SAASE,GAAaC,GAA2BC,IAAQ,GAAGC,IAAe,eAAuB;AAGrG,MAFAF,KAAS,OAAOA,KAAU,YAAYA,KAAS,IAAI,YAAY,GAE3DA,EAAM,OAAO,CAAC,MAAM;AACb,WAAAE;AAGL,QAAAC,IAAcC,GAAWJ,CAAK;AACpC,SAAIG,KACAA,EAAY,KAAKF,GACVI,GAAoBF,CAAW,KAGnCD;AACX;AAEO,SAASI,GAAsBN,GAA2BC,GAAeC,IAAe,eAAuB;AAGlH,MAFAF,KAAS,OAAOA,KAAU,YAAYA,KAAS,IAAI,YAAY,GAE3DA,EAAM,OAAO,CAAC,MAAM;AACb,WAAAE;AAGL,QAAAC,IAAcC,GAAWJ,CAAK;AACpC,SAAIG,KACAA,EAAY,IAAIF,GACTI,GAAoBF,CAAW,KAGnCD;AACX;AASO,SAASG,GAAoBL,GAA4B;AACxD,SAAAA,EAAM,MAAM,MACL,IAAI,CAACA,EAAM,GAAGA,EAAM,GAAGA,EAAM,CAAC,EAAE,IAAI,CAAMO,MACtCX,GAAQ,KAAK,MAAMW,CAAE,EAAE,SAAS,EAAE,GAAG,CAAC,CAChD,EAAE,KAAK,EAAE,CAAC,KAGR,QAAQP,EAAM,CAAC,IAAIA,EAAM,CAAC,IAAIA,EAAM,CAAC,KAAKA,EAAM,IAAI,KAAK,QAAQ,CAAC,CAAC;AAC9E;AAEO,SAASI,GAAWJ,GAAmC;AACpD,QAAAQ;AAAA;AAAA,IAEFR,EAAM,MAAM,0DAA0D;AAAA,IAEtEA,EAAM,MAAM,8CAA8C;AAAA,IAE1DA,EAAM,MAAM,6CAA6C;AAAA,IAEzDA,EAAM,MAAM,oCAAoC;AAAA;AAGpD,MAAIQ,GAAY;AAER,QAAAA,EAAW,WAAW,GAAG;AACzB,YAAM,CAACrI,GAAGT,GAAG+I,GAAGC,GAAG/I,CAAC,IAAI6I,GAClBG,IAAUF,EAAE,WAAW,IAAIA,IAAIA,IAAIA,GACnCG,IAAYF,EAAE,WAAW,IAAIA,IAAIA,IAAIA,GACrCG,IAAWlJ,EAAE,WAAW,IAAIA,IAAIA,IAAIA,GACpCmJ,IAAYpJ,EAAE,WAAW,IAAIA,IAAIA,IAAIA;AAEpC,aAAA;AAAA,QACH,GAAG,SAASoJ,GAAW,EAAE;AAAA,QACzB,GAAG,SAASH,GAAS,EAAE;AAAA,QACvB,GAAG,SAASC,GAAW,EAAE;AAAA,QACzB,GAAG,SAASC,GAAU,EAAE;AAAA,MAC5B;AAAA,IAAA;AAGJ,UAAM,CAAC1I,GAAGsI,GAAGC,GAAG/I,CAAC,IAAI6I,GACfG,IAAUF,EAAE,WAAW,IAAIA,IAAIA,IAAIA,GACnCG,IAAYF,EAAE,WAAW,IAAIA,IAAIA,IAAIA,GACrCG,IAAWlJ,EAAE,WAAW,IAAIA,IAAIA,IAAIA;AAEnC,WAAA;AAAA,MACH,GAAG;AAAA,MACH,GAAG,SAASgJ,GAAS,EAAE;AAAA,MACvB,GAAG,SAASC,GAAW,EAAE;AAAA,MACzB,GAAG,SAASC,GAAU,EAAE;AAAA,IAC5B;AAAA,EAAA;AAGG,SAAA;AACX;AChGO,SAASE,GAAWjG,GAAqB;AACxC,MAAAkG,IAAO,OAAOlG,CAAG;AAErB,SAAIkG,EAAK,QAAQ,GAAG,IAAI,OACbA,IAAAA,EAAK,QAAQ,MAAM,OAAO,IAEjCA,EAAK,QAAQ,GAAG,IAAI,OACbA,IAAAA,EAAK,QAAQ,MAAM,MAAM,IAEhCA,EAAK,QAAQ,GAAG,IAAI,OACbA,IAAAA,EAAK,QAAQ,MAAM,MAAM,IAEhCA,EAAK,QAAQ,GAAG,IAAI,OACbA,IAAAA,EAAK,QAAQ,MAAM,QAAQ,IAG/BA;AACX;ACtBO,MAAMC,KAAS;ACiBf,SAASC,GAAcC,GAK5B;AACE,MAAIA,EAAI,WAAW,KAAKA,EAAI,CAAC,EAAE,SAAS;AACpC,WAAOC,GAAY;AAAA,MACf,IAAID,EAAI,CAAC;AAAA,IAAA,CACZ;AAGC,QAAA3B,IAAM2B,EACP,IAAI,CAAME,MAAA;AACH,QAAAA,EAAG,SAAS;AACZ,aAAOC,GAAM;AAAA,QACT,IAAAD;AAAA,MAAA,CACH;AACL,QAAWA,EAAG,SAAS;AACnB,aAAOE,GAAS;AAAA,QACZ,IAAAF;AAAA,MAAA,CACH;AACL,QAAWA,EAAG,SAAS;AACnB,aAAOG,GAAM;AAAA,QACT,IAAAH;AAAA,MAAA,CACH;AACL,QAAWA,EAAG,SAAS;AACnB,aAAOI,GAAO;AAAA,QACV,IAAAJ;AAAA,MAAA,CACH;AAAA,EACL,CACH,EACA,OAAOJ,EAAM,EACb,QACA,EAAA,OAAO,SAASS,GAAKC,GAAM;AACpB,WAAAD,EAAA,MAAM,KAAKC,EAAK,KAAK,GACzBD,EAAI,KAAK,KAAKC,EAAK,QAAQ,MAAM,GACjCD,EAAI,SAAS,KAAKC,EAAK,OAAO,SAAS,GAEhCD;AAAA,EAAA,GACR;AAAA,IACC,OAAO,CAAC;AAAA,IACR,MAAM,CAAC;AAAA,IACP,UAAU,CAAA;AAAA,EAAC,CACd;AAEE,SAAA;AAAA,IACH,OAAOlC,EAAI,MAAM,KAAK,GAAG;AAAA,IACzB,MAAMA,EAAI,KAAK,KAAK,GAAG;AAAA,IACvB,UAAUA,EAAI,SAAS,KAAK,GAAG;AAAA,EACnC;AACJ;AAEA,SAAS8B,GAAMM,GAMb;AACE,QAAM5B,IAAQD,GAAa6B,EAAK,GAAG,SAAS,aAAa;AAElD,SAAA;AAAA,IACH,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO,6BAA6B5B,CAAK,IAAIA,CAAK;AAAA,EACtD;AACJ;AAEA,SAASoB,GAAYQ,GAMnB;AAGS,SAAA;AAAA,IACH,OAHU7B,GAAa6B,EAAK,GAAG,SAAS,aAAa;AAAA,IAIrD,MAAM;AAAA,IACN,UAAU;AAAA,EACd;AACJ;AAEA,SAASC,GAAeC,GAAkE;AACtF,SAAKA,EAAS,MAAM,CAAMvB,MAAAA,EAAG,SAAS,OAAOA,EAAG,YAAa,YAAYA,EAAG,YAAY,KAAKA,EAAG,YAAY,CAAC,IAI9FuB,EAKa,KAAK,CAACpK,GAAGC,MAC7B,KAAK,IAAID,EAAE,WAAWC,EAAE,QAAQ,IAAI,OAC7B,IAEJD,EAAE,WAAWC,EAAE,QACzB,EAGI,IAAI,CAAAqI,MAAS,GAAGD,GAAaC,EAAM,KAAK,CAAC,KAAKA,EAAM,WAAW,KAAK,QAAQ,CAAC,CAAC,GAAG,EACjF,KAAK,GAAG,IAjBT;AAkBR;AAEA,SAASuB,GAASK,GAMJ;;AACV,MAAI,CAAC,MAAM,SAAQG,IAAAH,EAAK,OAAL,gBAAAG,EAAS,MAAM,KAAK,CAAC,MAAM,SAAQC,IAAAJ,EAAK,OAAL,gBAAAI,EAAS,SAAS;AACpE;AAGJ,QAAMC,KAASC,IAAAN,EAAK,GAAG,WAAR,gBAAAM,EAAgB,OAAOjB;AACtC,MAAI,EAACgB,KAAA,QAAAA,EAAQ,WAAU,GAACE,IAAAP,EAAK,OAAL,QAAAO,EAAS;AAC7B;AAGAX,MAAAA;AACA,MAAAI,EAAK,GAAG,WAAW;AACnB,UAAMQ,IAAOP,GAAeD,EAAK,GAAG,SAAS;AAC7C,QAAI,CAACQ;AACD;AAGJZ,IAAAA,IAAQ,sBACH,KAAK,OAAOI,EAAK,GAAG,SAAS,CAAC,IAAI,SACnC,MACAQ,IACA;AAAA,EAAA,OACD;AACH,QAAI,CAACH;AACD;AAGJT,IAAAA,IAAQ,sBACH,KAAK,OAAOI,EAAK,GAAG,SAAS,CAAC,IAAI,SACnC,MACAK,EACK,IAAI,OAASlC,GAAaC,CAAK,CAAC,EAChC,KAAK,GAAG,IACb;AAAA,EAAA;AAGD,SAAA;AAAA,IACH,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAAwB;AAAAA,EACJ;AACJ;AAEA,MAAMa,KAAoB;AAAA,EACtB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,eAAe;AACnB;AAEA,SAASC,GAAkBC,GAAgE;AACnF,MAAAA,KAAU,OAAOA,KAAW,YAAY,UAAUA,KAAUA,EAAO,UAAU,QAAW;AACpF,QAAAA,EAAO,SAAS;AACT,aAAA5C,GAAgB4C,EAAO,KAAK;AACvC,QAAWA,EAAO,SAAS;AACvB,aAAO,GAAG,OAAOA,EAAO,KAAK,IAAI,GAAG;AAAA,EACxC;AAGG,SAAA;AACX;AAEA,SAASd,GAAOG,GAMF;;AACV,MAAI,CAAC,MAAM,SAAQG,IAAAH,EAAK,OAAL,gBAAAG,EAAS,MAAM,KAAK,CAAC,MAAM,SAAQC,IAAAJ,EAAK,OAAL,gBAAAI,EAAS,SAAS;AACpE;AAGJ,QAAMC,KAASC,IAAAN,EAAK,GAAG,WAAR,gBAAAM,EAAgB,OAAOjB;AACtC,MAAI,EAACgB,KAAA,QAAAA,EAAQ,WAAU,GAACE,IAAAP,EAAK,OAAL,QAAAO,EAAS;AAC7B;AAGA,MAAAC;AAQJ,MAPIR,EAAK,GAAG,YACDQ,IAAAP,GAAeD,EAAK,GAAG,SAAS,IAChCK,MACAG,IAAAH,EACF,IAAI,CAASjC,MAAAD,GAAaC,CAAK,CAAC,EAChC,KAAK,GAAG,IAEb,CAACoC;AACD;AAGE,QAAAI,IAAUZ,EAAK,GAAG;AACpB,MAAAa;AACA,EAAAD,KAAW,OAAOA,KAAY,YAAY,UAAUA,KAAWA,EAAQ,UAAU,WAC7EA,EAAQ,SAAS,UACVC,IAAA9C,GAAgB6C,EAAQ,KAAK,IAC7BA,EAAQ,SAAS,eACjBC,IAAAJ,GAAkBG,EAAQ,KAAK;AAI9C,QAAME,IAAUJ,GAAkBV,EAAK,GAAG,QAAQ,GAC5Ce,IAAUL,GAAkBV,EAAK,GAAG,QAAQ;AAE3C,SAAA;AAAA,IACH,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OACI,0BACUa,KAAQ,iBAAiB,OAAOC,CAAO,IAAIC,CAAO,MAE5DP,IACA;AAAA,EACR;AACJ;AAEA,SAASZ,GAAMI,GAMD;;AACJJ,QAAAA,KAAQO,IAAAH,EAAK,OAAL,gBAAAG,EAAS;AAEvB,MAAKP;AAIE,WAAA;AAAA,MACH,MAAMoB,GAAUhB,EAAK,GAAG,KAAK;AAAA,MAC7B,KAAKiB,GAASjB,EAAK,EAAE;AAAA,MACrB,OAAO,UAAUb,GAAWS,CAAK,IAAI;AAAA,IACzC;AACJ;AAEO,SAASoB,GAAUE,GAA4B;AAClD,SAAIA,MAAU,QACH,YACAA,MAAU,YACV,SACAA,MAAU,aACV,SAIJ;AACX;AAEO,SAASD,GAASvG,GAGd;AACH,MAAAyG,GACAC;AAEA,SAAA1G,EAAI,iCAAiC,SAC9ByG,IAAA,OACAzG,EAAI,iCAAiC,UACrCyG,IAAA,SAEAA,IAAA,OAGPzG,EAAI,+BAA+B,QAC5B0G,IAAA,OACA1G,EAAI,+BAA+B,WACnC0G,IAAA,SAEAA,IAAA,OAGJD,IAAO,MAAMC;AACxB;AC9SgB,SAAAC,GAAyBpD,GAAyBqD,GAA4B;AACpF,QAAAC,IAAM,OAAOtD,CAAG;AACtB,SAAI,OAAO,MAAMsD,CAAG,KAAKA,IAAM,IACpBD,IAEJC;AACX;ACuBA,SAASC,GAAgBC,GAAuBxD,GAAyBqD,GAA4B;AAC7F,SAAA,OAAOrD,KAAQ,aAEXwD,KAAgBxD,IAAM,KAAKA,KAAO,OAClC,CAACwD,KAAgBxD,KAAO,KAAKA,IAAM,OAE5BA,IAGRqD;AACX;AAEA,SAASI,GAAc/C,GAA6C;AAChE,SAAOA,EAAG,eAAe,KAAKA,EAAG,eAAe,MAASA,EAAG,UAAU;AAC1E;AAEO,SAASgD,GAAiBC,GAAmB;AAAA,EAChD,mBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,kBAAAC;AACJ,GAKG;AACC,QAAMC,IAAuC,CAAC;AAE9C,EAAIJ,KACAA,EAAkB,QAAQ,CAAMlD,MAAA;AAC5B,IAAAsD,EAAiB,KAAK;AAAA,MAClB,MAAM;AAAA,MACN,OAAOA,EAAiB;AAAA,MACxB,QAAQtD;AAAA,MACR,SAAS;AAAA,MACT,OAAO;AAAA,MACP,UAAU;AAAA,IAAA,CACb;AAAA,EAAA,CACJ,GAGDmD,KACAA,EAAiB,QAAQ,CAAMnD,MAAA;AAC3B,IAAAsD,EAAiB,KAAK;AAAA,MAClB,MAAM;AAAA,MACN,OAAOA,EAAiB;AAAA,MACxB,QAAQtD;AAAA;AAAA,MAER,SAAS;AAAA,MACT,OAAO;AAAA,MACP,UAAU;AAAA,IAAA,CACb;AAAA,EAAA,CACJ;AAGL,QAAMuD,IAAuCD,EAAiB,IAAI,CAACtD,GAAIwD,MAAU;AACvE,UAAAV,IAAe9C,EAAG,SAAS;AAEjC,WAAOqD,EAAiB,mBAAmB;AAAA,MACvC,OAAAG;AAAA,MACA,uBAAuBxD,EAAG,OAAO;AAAA,MACjC,qBAAqB8C,IAChB9C,EAAG,OAA4B,sBAC/BA,EAAG,OAA2B;AAAA,MACnC,WAAWA,EAAG,OAAO;AAAA,MACrB,YAAYA,EAAG,OAAO;AAAA,IAAA,GACvB,QAAW,EAAI;AAAA,EAAA,CACrB;AAEG,MAAAyD;AACJ,QAAMjF,IAAU,MAAM;AAClB,IAAIiF,KACAA,EAAS,WAAW,GAGxBH,EAAiB,QAAQ,CAAUI,MAAA;AAC/B,MAAIA,EAAO,SACP,aAAaA,EAAO,KAAK;AAAA,IAC7B,CACH;AAAA,EACL,GAEMC,IAAa5F,GAAQwF,GAAY,CAAAjF,MAAUA,CAAM;AACnD,MAAAsF;AAEE,QAAAC,IAAa,CAACH,MAA6B;AACvC,UAAAZ,IAAeY,EAAO,SAAS,cAC/BI,IAAeT,EAAiB,gBAAgBK,EAAO,MAAM;AAElD,IAAAL,EAAA,eAAe,CAACS,CAAY,GAAG;AAAA,MAC5C,SAAShB,IAAe,YAAY;AAAA,MACpC,MAAAG;AAAA,MACA,aAAa;AAAA,IAAA,CAChB;AAAA,EACL,GAEMc,IAAcJ,EAAW,UAAU,CAAUrF,MAAA;AACpC,IAAAsF,IAAAtF,EAAO,OAAOyE,EAAa;AAEtC,UAAMiB,IAA2C,CAAC;AAClD,IAAAJ,EAAS,QAAQ,CAAM5D,MAAA;AACf,MAAAgE,EAAAhE,EAAG,KAAK,IAAIA;AAAA,IAAA,CACnB,GAEOxB,EAAA;AAER,UAAMyF,IAAa,CAAC,GAAG,IAAI,IAAIL,EAAS,IAAI,CAAM5D,MAAA;AAC9C,YAAM8C,IAAeQ,EAAiBtD,EAAG,KAAK,EAAE,SAAS;AAElD,aAAA6C;AAAA,QACHC;AAAA,QACA9C,EAAG;AAAA,QACH8C,IAAe,KAAK;AAAA,MAAA,IACpB;AAAA,IACP,CAAA,CAAC,CAAC;AAEC,QAAA,CAACmB,EAAW;AACZ;AAGE,UAAAC,IAAmB,CAACC,MAA+C;AACrE,MAAAA,EAAQ,QAAQ,CAASC,MAAA;AACrB,QAAAR,EAAS,QAAQ,CAAgBS,MAAA;AACvB,gBAAAX,IAASJ,EAAiBe,EAAa,KAAK,GAC5CvB,KAAeY,EAAO,SAAS,cAC/BY,KAAazB;AAAA,YACfC;AAAA,YACAuB,EAAa;AAAA,YACbvB,KAAe,KAAK;AAAA,UACxB;AAEI,cAAAyB;AACJ,UAAID,OAAe,IACfC,KAAaH,EAAM,qBAAqB,QAE3BG,KAAAH,EAAM,qBAAsBE,KAAa,MAGvCxB,KACf,CAACY,EAAO,WAAWa,KACnBb,EAAO,WAAW,CAACa,MAMdb,EAAO,aACDA,EAAA,QAAQ,WAAW,MAAM;AAC5B,cAAEA,EAAO;AAET,kBAAMc,KAAQH,EAAa,cAAc,IAAI,QAAYA,EAAa,aAAa;AAC/E,YAAAX,EAAO,SAASc,OAChBd,EAAO,WAAW,KAGtBG,EAAWH,CAAM;AAAA,UAClB,GAAAhB,GAAyB2B,EAAa,qBAAqB,GAAG,CAAC,MAftDvB,KAChB,CAACyB,KACDA,OAgBIb,EAAO,SACP,aAAaA,EAAO,KAAK,GAGjCA,EAAO,UAAUa;AAAA,QAAA,CACpB;AAAA,MAAA,CACJ;AAAA,IACL;AAEW,IAAAd,IAAA,IAAI,qBAAqBS,GAAkB;AAAA,MAClD,WAAWD;AAAA,IAAA,CACd,GAEDR,EAAS,QAAQR,CAAI;AAAA,EAAA,CACxB;AAEM,SAAA;AAAA,IACH,UAAU;AACN,MAAAW,KAAA,QAAAA,EAAU,QAAQ,CAAgBE,MAAA;AACxB,cAAAJ,IAASJ,EAAiBQ,EAAa,KAAK;AAE9C,QAAA,CAACJ,KAAUA,EAAO,SAAS,eAAe,CAACA,EAAO,WAAWA,EAAO,YAIhEN,EAAA,gBAAgB,OAAO,WAAW,MAAM;AAC5C,UAAAS,EAAWH,CAAM;AAAA,QAAA,GAClBI,EAAa,mBAAmB,CAAC;AAAA,MAAA,IAGhCtF,EAAA,GAEIuF,EAAA;AAAA,IAAA;AAAA,EAEpB;AACJ;AC9NA,SAASU,GAAK5C,GAAgBvC,GAA+B;AACzD,EAAIA,KACAuC,EAAK,KAAKvC,CAAG;AAErB;AAEgB,SAAAoF,GACZtM,GACA0E,GACA6H,GACM;AACN,QAAM1F,IAAgB,CAAC;AAElB,EAAAwF,GAAAxF,GAAKnC,EAAI1E,CAAS,CAAC;AAExB,aAAWM,KAAOiM;AACV,QAAAA,EAAK,eAAejM,CAAG,GAAG;AACpB,YAAA4G,IAAMqF,EAAKjM,CAAG;AACpB,UAAI4G,GAAK;AACC,cAAAsF,IAAS,GAAGxM,CAAS,IAAIM,CAAG,MAAM,OAAO4G,KAAQ,WAAW,IAAIA,CAAG,KAAK;AAEzE,QAAAmF,GAAAxF,GAAKnC,EAAI8H,CAAM,CAAC;AAAA,MAAA;AAAA,IACzB;AAID,SAAA3F,EAAI,KAAK,GAAG;AACvB;ACxBa,MAAA4F,KAAY,OAAO,OAAO;ACAvB,SAAAC,GACZC,GACAC,GACM;;AACA,QAAAC,IAAMF,EAAW,OAAO,GACxBG,MAAU1D,IAAAwD,MAAc,QAAQD,EAAW,MAAMA,EAAW,UAAlD,OAAAvD,IAA4DuD,EAAW,UAAU,GAC3FI,IAASJ,EAAW,UAAU,GAC9BK,MAAS3D,IAAAuD,MAAc,QAAQD,EAAW,QAAQA,EAAW,QAApD,OAAAtD,IAA4DsD,EAAW,SAAS;AAE/F,SAAIE,MAAQ,KAAKC,MAAU,KAAKC,MAAW,KAAKC,MAAS,IAC9C,KAGJlG,GAAO+F,CAAG,IACb,MACA/F,GAAOgG,CAAK,IACZ,MACAhG,GAAOiG,CAAM,IACb,MACAjG,GAAOkG,CAAI;AACnB;ACzBO,SAASC,GAAS/F,GAAwC;AAC7D,MAAI,OAAOA,KAAQ,YAAY,OAAOA,KAAQ;AACnC,WAAA;AAGL,QAAAsD,IAAM,OAAOtD,CAAG;AAEf,SAAA,CAAC,OAAO,MAAMsD,CAAG;AAC5B;ACNO,SAAS0C,GAAoBhG,GAAwC;AACjE,SAAA+F,GAAS/F,CAAG,KAAKA,KAAO;AACnC;ACCgB,SAAAiG,GACZR,GACAC,GACArC,GACM;;AACN,MAAI,CAACoC;AACM,WAAApC;AAGX,QAAMd,IAAO;AAAA,IACTkD,EAAW;AAAA,KACVvD,IAAAwD,MAAc,QAAQD,EAAW,MAAMA,EAAW,UAAlD,OAAAvD,IAA4DuD,EAAW;AAAA,IACxEA,EAAW;AAAA,KACVtD,IAAAuD,MAAc,QAAQD,EAAW,QAAQA,EAAW,QAApD,OAAAtD,IAA4DsD,EAAW;AAAA,EAC5E;AAEA,WAASnL,IAAI,GAAGA,IAAIiI,EAAK,QAAQ,EAAEjI;AAC3B,QAAAiI,EAAKjI,CAAC,KAAK,CAAC0L,GAAoBzD,EAAKjI,CAAC,CAAC;AAChC,aAAA+I;AAIR,SAAAmC,GAAiBC,GAAYC,CAAS;AACjD;AC1BgB,SAAAQ,GAAalG,GAAyBqD,GAA4B;AAC9E,SAAI,CAAC2C,GAAoBhG,CAAG,KAAKA,MAAQ,UAAaA,IAAM,IACjDqD,IAEJ,OAAOrD,CAAG;AACrB;ACPA,MAAMmG,KAAiB,OAAO,UAAU;AAExB,SAAAC,GAAkBvO,GAAMC,GAAe;AACnD,MAAI,OAAO,GAAGD,GAAGC,CAAC;AACP,WAAA;AAIP,MAAA,OAAOD,KAAM,YACbA,MAAM,QACN,OAAOC,KAAM,YACbA,MAAM;AAEC,WAAA,OAAO,GAAGD,GAAGC,CAAC;AAGnB,QAAAuO,IAAQ,OAAO,KAAKxO,CAAC,GACrByO,IAAQ,OAAO,KAAKxO,CAAC;AAEvB,MAAAuO,EAAM,WAAWC,EAAM;AAChB,WAAA;AAGX,WAAShM,IAAI,GAAGA,IAAI+L,EAAM,QAAQ/L,KAAK;AAC7B,UAAAlB,IAAMiN,EAAM/L,CAAC;AAEnB,QAAI,CAAC6L,GAAe,KAAKrO,GAAGsB,CAAG,KAAK,CAACgN,GAAYvO,EAAEuB,CAAc,GAAGtB,EAAEsB,CAAc,CAAC;AAC1E,aAAA;AAAA,EACX;AAGG,SAAA;AACX;AC9BgB,SAAAmN,GAAwBC,GAAWnD,GAAsB;AACjE,SAAA+C,GAAYI,GAAQnD,CAAU,IACvBA,IAEJmD;AACX;ACLgB,SAAAC,GAAkBC,GAAgCrD,GAAoC;AAClG,SACIqD,MAAe,aACfA,MAAe,eACfA,MAAe,SAERA,IAGJrD;AACX;ACVgB,SAAAsD,GACZC,GACAvD,GACa;AAET,SAAAuD,MAAiB,YACjBA,MAAiB,UACjBA,MAAiB,iBACjBA,MAAiB,aACjBA,MAAiB,aAEVA,IAGJvD;AACX;ACjBgB,SAAAwD,GAAc7G,GAAyBqD,GAA4B;AACzE,QAAAC,IAAM,OAAOtD,CAAG;AAClB,SAAA,OAAO,MAAMsD,CAAG,IACTD,IAEJC;AACX;ACHO,SAASwD,GAAiBC,GAAkE;AAC/F,QAAMpH,IAAoC,CAAC;AAEvC,SAAAoH,EAAU,SAAS,SAClBA,EAAU,SAAS,CAAC,GAAG,QAAQ,CAAQjF,MAAA;AACpC,IAAAnC,EAAI,KAAK,GAAGmH,GAAiBhF,CAAI,CAAC;AAAA,EAAA,CACrC,IAEDnC,EAAI,KAAKoH,CAAuC,GAG7CpH;AACX;ACZgB,SAAAqH,GACZvB,GACApC,GACC;AACD,MAAI,CAACoC,KAAc,OAAOA,KAAe;AAC9B,WAAApC;AAGX,QAAMd,IAAO;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAEA,WAAS,IAAI,GAAG,IAAIA,EAAK,QAAQ,EAAE;AAC/B,QAAIkD,EAAWlD,EAAK,CAAC,CAAC,KAAK,CAACyD,GAAoBP,EAAWlD,EAAK,CAAC,CAAC,CAAC;AACxD,aAAAc;AAIR,SAAAoC;AACX;ACvBgB,SAAAwB,GAAcpP,GAAsBC,GAAkC;AAC9E,MAAA,CAACD,KAAK,CAACC;AACP,WAAO,CAAC;AAGZ,MAAI,CAACA;AACM,WAAAD;AAGX,MAAI,CAACA;AACM,WAAAC;AAGX,QAAM6H,IAAkB,CAAC;AAExB;AAAA,IACG;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACQ,QAAQ,CAAQuH,MAAA;AAClB,UAAAC,IAAOtP,EAAEqP,CAAI;AACnB,IAAIC,MACAxH,EAAIuH,CAAI,IAAIC;AAEV,UAAAC,IAAOtP,EAAEoP,CAAI;AACnB,IAAIE,MACAzH,EAAIuH,CAAI,KAAKvH,EAAIuH,CAAI,KAAK,KAAKE;AAAA,EACnC,CACH,GAEMzH;AACX;ACjCgB,SAAA0H,GACZC,GACAjE,GACa;AACb,QAAMd,IAAO;AAAA,IACT+E,EAAc,UAAU;AAAA,IACxBA,EAAc,WAAW;AAAA,IACzBA,EAAc,cAAc;AAAA,IAC5BA,EAAc,aAAa;AAAA,EAC/B;AAEA,WAAS,IAAI,GAAG,IAAI/E,EAAK,QAAQ,EAAE;AAC3B,QAAAA,EAAK,CAAC,KAAK,CAACyD,GAAoBzD,EAAK,CAAC,CAAC;AAChC,aAAAc;AAIR,SAAAiE;AACX;AClBO,SAASC,GAAaD,GAA8BE,IAAgB,GAAGC,IAAW,IAAY;AAC1F,SAAA;AAAA,IACHH,EAAc,UAAU;AAAA,IACxBA,EAAc,WAAW;AAAA,IACzBA,EAAc,cAAc;AAAA,IAC5BA,EAAc,aAAa;AAAA,EAC/B,EACK,IAAI,CAAA5G,MAAMd,IAAQc,KAAM8G,KAAiBC,IAAW,EAAE,CAAC,EACvD,KAAK,GAAG;AACjB;ACFO,SAASC,GAAqBC,GAAsC;;AACvE,SAAO/H,KAAOuC,KAAAD,IAAAyF,EAAO,WAAP,gBAAAzF,EAAe,MAAf,gBAAAC,EAAkB,UAAS,CAAC,IAAI,MAC1CvC,KAAO0C,KAAAD,IAAAsF,EAAO,WAAP,gBAAAtF,EAAe,MAAf,gBAAAC,EAAkB,UAAS,CAAC,IAAI,MACvC1C,IAAOgI,IAAAD,EAAO,SAAP,OAAAC,IAAe,CAAC,IAAI,MAC3B1H,GAAayH,EAAO,SAAS,YAAWE,IAAAF,EAAO,UAAP,OAAAE,IAAgB,IAAI;AACpE;AAQgB,SAAAC,GAAkBH,GAA8BF,GAA0B;;AACtF,SAAO,iBACHvH,GAAayH,EAAO,SAAS,YAAWzF,IAAAyF,EAAO,UAAP,OAAAzF,IAAgB,IAAI,IAAI,MAChEtC,MAAQyC,KAAAF,IAAAwF,EAAO,WAAP,gBAAAxF,EAAe,MAAf,gBAAAE,EAAkB,UAAS,KAAK,KAAKoF,CAAQ,IAAI,MACzD7H,MAAQgI,KAAAtF,IAAAqF,EAAO,WAAP,gBAAArF,EAAe,MAAf,gBAAAsF,EAAkB,UAAS,KAAK,KAAKH,CAAQ,IAAI,MACzD7H,KAAQiI,IAAAF,EAAO,SAAP,OAAAE,IAAe,KAAK,KAAKJ,CAAQ,IAAI;AACrD;AC1BO,SAASM,GAAqBC,GAA4E;AAC7G,SAAOA,EAAO,eAAe,KAAKA,EAAO,eAAe;AAC5D;ACLA,IAAIC;AAEG,SAASC,KAAkC;AAC1C,SAAA,OAAO,aAAe,MACf,MAGND,OACOA,KAAA,OAAO,WAAW,0BAA0B,IAGjDA,GAAM;AACjB;ACRA,MAAME,KAAiB,GAEVC,KAAiB,CAC1BC,GACAtE,GACAuE,GACAC,MAC6B;AACzB,MAAApE;AAEJ,UAAKmE,KAAiBC,MAAmB,OAAO,iBAAmB,QACpDpE,IAAA,IAAI,eAAe,YAAW;AACrC,QAAIqE,IAAU;AACd,UAAMC,IAA2C,CAAC,GAE5CC,IAAc,CAACC,GAAkCtQ,MAA2B;AAC9E,UAAIsQ,GAAc;AACd,cAAMC,IAAW7E,EAAiB,YAAY4E,GAAc,SAAS;AACrE,YAAIC;AAMA,cALQvQ,IAAA,KAAK,MAAMA,CAAK,GAEnBoQ,EAAYE,CAAY,MACbF,EAAAE,CAAY,IAAI,oBAAI,IAAI,IAEpC,CAACF,EAAYE,CAAY,EAAE,IAAItQ,CAAK;AACpC,mBAAAuQ,EAAS,SAASvQ,CAAK,GACXoQ,EAAAE,CAAY,EAAE,IAAItQ,CAAK,GAC5B;AAAA,eAER;AACG,gBAAAwQ,IAAoB,IAAI,MAAM,kBAAkB;AACtD,UAAAA,EAAI,QAAQ,SACZA,EAAI,aAAa;AAAA,YACb,cAAAF;AAAA,UACJ,GACA5E,EAAiB,SAAS8E,CAAG;AAAA,QAAA;AAAA,MACjC;AAGG,aAAA;AAAA,IACX,GAEMC,IAAc,MAAM;AACtB,UAAI,CAACT;AACM,eAAA;AAGL,YAAAU,IAAOV,EAAY,sBAAsB,GACzCW,IAAWN,EAAYJ,GAAeS,EAAK,KAAK,GAChDE,IAAYP,EAAYH,GAAgBQ,EAAK,MAAM;AAEzD,aAAOC,KAAYC;AAAA,IACvB;AAEA,WAAOH,OAAe;AACd,UAAA,EAAEN,IAAUL,IAAgB;AACtB,cAAAU,IAAoB,IAAI,MAAM,mCAAmC;AACvE,QAAAA,EAAI,QAAQ,QACZA,EAAI,aAAa;AAAA,UACb,mBAAmBP;AAAA,UACnB,oBAAoBC;AAAA,QACxB,GACAxE,EAAiB,SAAS8E,CAAG;AAC7B;AAAA,MAAA;AAEJ,YAAM9O,GAAK;AAAA,IAAA;AAAA,EACf,CACH,GACDoK,EAAS,QAAQkE,CAAW,IAGzBlE;AACX,GC1Ea+E,KAAc,OAAO,SAAS;ACF3B,SAAAC,GAAkBnJ,GAAmCqD,GAA8B;AAC/F,SAAIrD,MAAQ,KAAKA,MAAQ,KAAKA,MAAQ,MAASA,MAAQ,KAC5C,EAAQA,IAEZqD;AACX;ACFO,SAAS+F,GAAgCC,GAAoD;AACzF,SAAA;AAAA,IACHA,EAAc;AAAA,IACdA,EAAc;AAAA,IACdA,EAAc;AAAA,EAChB,EAAA,OAAO,OAAO,EAAE,KAAK,IAAI;AAC/B;;;;ACRO,SAASC,KAAkB;AAAC;ACDtB,MAAAC,KAAa,OAAO,QAAQ;ACAlC,SAASC,GAAaC,GAAqB;AAC1C,MAAAA,EAAI,WAAW,MAAM;AACd,WAAA;AAGL,QAAAC,IAAQ,gBAAgB,KAAKD,CAAG;AAE/B,SAAAC,KAASA,EAAM,CAAC,KAAK;AAChC;AAEgB,SAAAC,GAAgBC,GAAgBC,GAAsC;AAC3E,SAAAA,EAAe,IAAID,CAAM;AACpC;ACPU,MAAAE,KAAA,oBAAoC,IACtC,CAAA,UACA,SACA,YACA,SACA,QAAA,CAAA;AAqBO,MAAA,EAAA,kBAAA/F,EAAA,IAAAgG,KACA,IAAAC,IAAK,GAAA,IAAAD,KACL,SAAAE,IAA8C,OAAA,IAAAF,KAC9C,kBAAAG,IAAuD,OAAA,IAAAH,KACvD,gBAAAI,IAAqD,OAAA,IAAAJ,KACrD,mBAAAK,IAAwD,OAAA,IAAAL,KACxD,iBAAAM,IAAsD,OAAA,IAAAN,KACtD,mBAAAO,IAAwD,OAAA,IAAAP,KACxD,iBAAAQ,IAAsD,OAAA,IAAAR,KACtD,KAAAS,IAAM,GAAA,IAAAT,KACN,OAAAU,IAAuB,KAAA,IAAAV,KACvB,OAAAW,IAAwD,OAAA,IAAAX,KACxD,KAAAY,IAAoDrB,GAAA,IAAAS,KACpD,cAAAa,IAAmD,KAAA,IAAAb,KACnD,yBAAAc,IAA0B,GAAA,IAAAd,KAC1B,mBAAAe,IAAoB,GAAA,IAAAf,KACpB,qBAAAgB,IAA+D,OAAA,IAAAhB,KAC/D,sBAAAiB,KAAuB,GAAA,IAAAjB;AAE5B,QAAAjG,KAAUxK,GAAyB+F,EAAQ,GAC3C4L,KAAY3R,GAA2BiQ,EAAU;AAEvD,EAAApQ,GAA2BoQ,IAAA;AAAA,IACvB,YAAA;AACW,aAAA,GAAQ0B,GAAU,UAAe,KAAAhB,KAAA,QAAAA,EAAS,WAAUc,KAAA,gBAAAA,EAAqB,UAAS;AAAA;;AAI7F,MAAApH,IACAuH,IAAO,IACPC,IAGAC,KAA6B,MAE7BC,KAAc,IAIdC,IACAC,IACAC,KAAa;WA2NRC,GAAcvS,IAAA;AAAA;WAadwS,GAAYxS,IAAA;IACb+R,GAAU;;AAyElB,EAAAjS,GAAA,MAAA;WACe,SAAW,QAClB,OAAO,oBAAoB,eAAeyS,EAAa,GACvD,OAAO,oBAAoB,aAAaC,EAAW,GACnD,OAAO,oBAAoB,iBAAiBA,EAAW,IAGvD1B,KAAO,CAAAc,KACPhH,GAAQ,oBAAoBkG,CAAE;AAAA,0+CAvTlCwB,MAAaT,KAAA,gBAAAA,EAAqB,UAAS;;QAIvC,MAAM,QAAQd,CAAO,MAAKA,KAAA,QAAAA,EAAS;eAC1B3P,KAAI,GAAGA,KAAI2P,EAAQ,QAAU,EAAA3P,IAAA;cAC5BmP,KAAMQ,EAAQ3P,EAAC,EAAE;AAEnB,YAAAmP,IAAA;AACA,UAAAyB,IAAOzB,IACP0B,KAASlB,EAAQ3P,EAAC,EAAE,UAAU;;;;AAM1C,IAAA+Q,KAAc,EAAQT,IACjBM,KAAQ,MAAM,QAAQjB,CAAO,MAAKA,KAAA,QAAAA,EAAS,aAAYgB,GAAU,UAAe,KAAAO,OACjFN,IAAO,IACPnH,EAAiB,SAASzE,EAAc,IAAA,MAAM,sGAAsG,GAChJ,EAAA,OAAO,QACP,YACI,EAAA,SAAA2K,EAAA,EAAA,CAAA,CAAA,KAGDiB,KAAA,CAASvB,GAAgBH,GAAa0B,CAAI,GAAGpH,GAAQ,oBAAA,CAAA,KAC5DoH,IAAO,IACPG,KAAc,MACN,CAAAH,KAAQ,MAAM,QAAQjB,CAAO,MAAKA,KAAA,QAAAA,EAAS,YACnDoB,KAAc,IACTpB,EAAQ,KAAK,CAAAjC,OAAUA,GAAO,OAAOA,GAAO,SAASA,GAAO,UAAU,KACvEjE,EAAiB,SAASzE,EAAc,IAAA,MAAM,sEAAsE,GAChH,EAAA,OAAO,QACP,YACI,EAAA,SAAA2K,EAAA,EAAA,CAAA,CAAA;AAAA;AAQZ,SAAAc,KAAA,QAAAA,EAAqB,QAAQjB,GAA8B,IAAIiB,EAAoB,IAAI,IACnFA,EAAoB,SAAS,WAC7BO,KAAO,YAEPA,KAAOP,EAAoB,OAExBG,IACPI,KAAO,SACAD,OACPC,KAAO,YAGNA,OAAS,cAAcA,OAAS,YAAmB,QAAAP,KAAA,gBAAAA,EAAqB,eAAe,YACxFQ,KAAYR,EAAoB,aAEhCQ,KAAY,WAyQnBL;;;;;;;2BAQiBK,EAAS;AAAA;;kBACff,GAAG,EAAA,IAAA,MAAAzP,GAAG4Q,GAAQ,mBAAmB,GAAA,EAAA,IAAA,MAAA5Q;AAAA,UAAI8P,IAA0Bc,GAAQ,kBAAkBA,GAAQ,+BAA+B;AAAA;;UAAIxB,KAAA,QAAAA,EAAgB,SAASwB,GAAQ,4BAA4B,IAAI;AAAA;;;SAKzMjB,CAAK;AAAA;;gBAZE/G,IAAI,CAAA,CAAA,IAAAvG,EAAA,UAAAA,EAAA,QAAA,CAAA,CAAA,IAAA,EAAA,YAgBbiO;;;QAIM,OAAAtQ,GAAAyP,kBAAMhN,GAAI,oBAAqB,EAAA,IAAA,MAAAzC,GAAA4Q,GAAQ,mBAAmB,GAAA,EAAA,IAAA5Q;AAAA,cAAO8P,IAA0Bc,GAAQ,kBAAkBA,GAAQ,+BAA+B,CAAK,IAAAA,GAAQ,kBAAkB;AAAA;;UAAMxB,KAAA,QAAAA,EAAgB,SAASwB,GAAQ,4BAA4B,IAAI;AAAA;;;;;;2BAG5PJ,EAAS;AAAA;;SAMnBb,CAAK;AAAA;;gBAXE/G,IAAI,CAAA,CAAA,IAAAvG,EAAA,UAAAA,EAAA,QAAA,CAAA,CAAA,IAAA,EAAA;;;kBAmBPoN,GAAG,EAAA,IAAA,MAAAzP;AAAA,UAAGoP,KAAA,QAAAA,EAAgB,SAASwB,GAAQ,4BAA4B,IAAI;AAAA;QAAK,IAAA,MAAA5Q,GAA+C,IAAE,EAAA;AAAA;;;;2BAGvHwQ,EAAS;AAAA;;QACV,eAAAhP,GAAAiP,MAAc,MAAS;AAAA;SAKhCd,CAAK;AAAA;;gBAXE/G,IAAI,CAAA,CAAA,IAAAvG,EAAA,UAAAA,EAAA,QAAA,CAAA,CAAA,IAAA,EAAA,SAAA,EAAA;;;;;;;AChbhB,SAASwO,GAAiB5L,GAAwC;AAC9D,SAAA+F,GAAS/F,CAAG,KAAKA,IAAM;AAClC;ACEgB,SAAA6L,GACZC,GACAC,GACM;AACC,SAAAD,EAAQ,IAAI,CAAUE,MAAA;AACzB,QAAI,CAACA,GAAQ;AACT,MAAAD,EAASzM,EAAU,IAAI,MAAM,kBAAkB,GAAG;AAAA,QAC9C,OAAO;AAAA,MAAA,CACV,CAAC;AACF;AAAA,IAAA;AAEA,QAAA0M,EAAO,SAAS;AACZ,UAAAJ,GAAiBI,EAAO,MAAM;AAC9B,eAAO,QAAQlM,GAAgBkM,EAAO,SAAS,CAAC,CAAC;AAAA,WAEzD;AAAA,UAAWA,EAAO,SAAS;AAEvB;AAEA,MAAAD,EAASzM,EAAU,IAAI,MAAM,gBAAgB,GAAG;AAAA,QAC5C,OAAO;AAAA,QACP,YAAY;AAAA,UACR,QAAQ0M,EAAO;AAAA,QAAA;AAAA,MACnB,CACH,CAAC;AAAA;AAAA,EAET,CAAA,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAC/B;;SCrBe,EAAA,WAAAtG,EAAA,IAAAqE,GACA,EAAA,kBAAAhG,EAAA,IAAAgG,GACA,EAAA,YAAAkC,IAAA,CAAA,EAAA,IAAAlC,KACA,QAAAmC,IAAS,GAAA,IAAAnC;4TAEjBlM,IAASoO,EAAW,IAAI,CAAAzK,MAAA;AACjB,UAAA2K,IAAA,CAAA,GACA1P,IAAA,EAIF,OAAO0P,EAAA;QAGP3K,EAAG,SAAS,sBAAsBA,EAAG;AACrC,MAAA2K,EAAI,cAAc,YAAY3K,EAAG,SAAS,MAAMA,EAAG,OAAO,OAAO,CAAC,IAAIA,EAAG,OAAO,SAAS,CAAC,IAAIA,EAAG,OAAO,UAAU,CAAC,IAAIA,EAAG,OAAO,QAAQ,CAAC,SAC1I2K,EAAI,oBAAoB,IAAI;AAAA;AAEtB,YAAAxM,IAAM0B,IAAeG,CAAE,CAAA;AAEzB,MAAAA,EAAG,SAAS,YACZ2K,EAAI,kBAAkB,IAAIxM,EAAI,QAE9B6B,EAAG,SAAS,eACZ2K,EAAI,kBAAkB,IAAIxM,EAAI,QAE9B6B,EAAG,SAAS,YACZ2K,EAAI,UAAU,OAAO3K,EAAG,KAAK,GAC7B/E,EAAI,YAAY+E,EAAG,WACnB2K,EAAI,YAAY,IAAIxM,EAAI,MACxBwM,EAAI,iBAAiB,IAAIxM,EAAI,UAEzB,MAAM,QAAQ6B,EAAG,OAAO,KAAKA,EAAG,QAAQ,WACxC2K,EAAI,SAASN,GAAarK,EAAG,SAASuC,EAAiB,QAAQ,GAE3D2B,MAAc,SAASlE,EAAG,QAAQ,KAAK,CAAAd,MAAMA,EAAG,SAAS,YAAY,MACrEyL,EAAI,YAAY;AAAA;AAMzB,WAAA1P;AAAA,MAWJ,QAAAgB,EAAA,SAAAD,GAAI,kBAAkB,KAAK0O,IAAS,MAAM1O,GAAI,uBAAuB,IAAI,KAC3D,CAAA,CAAA,GAAAI,GAAA,EAAA,iBAAAsO,WAEdrO,GAAM,CAAAiE,MACJ,GAAAA,EAAK,4BAEGA,EAAK,WAAS,CAAA,CAAA,6DAAArE,EAAA,SAKZD,GAAI,wBAAwB,GAAA,CAAA,CAAA,GAAAC,EAAA,SAC5BiC,GAAUoC,EAAK,KAAK,GAAA,CAAA,CAAA,MAEV,QAAArE,EAAA,SAAAD,GAAI,wBAAwB,GAAA,CAAA,CAAA,GAAAC,EAAA,SAAUiC,GAAUoC,EAAK,KAAK,GAAA,CAAA,CAAA,UAAA;IC9EjFsK,KAAA;AAAA,EACF,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,KAAK;GAGHC,KAAA;AAAA,EACF,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,KAAK;GAGHC,KAAA;AAAA,EACF,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;GAGRC,KAA2B,CAAAC,oCACCA,CAAI;SAyvB7BC,GAAmBlK,GAAA;AACjB,SAAAA,EAAK,KAAK,CAAA7B,MAAMA,EAAG,SAAS,QAAQ;;;;+9CA/rBpC,EAAA,kBAAAqD,EAAA,IAAAgG,KACA,KAAAS,KAAM,GAAA,IAAAT,KACN,OAAAU,KAA2B,OAAA,IAAAV,GAC3B,EAAA,cAAA2C,IAAA,CAAA,EAAA,IAAA3C,KACA,mBAAA4C,KAAoB,GAAA,IAAA5C,KACpB,gBAAA6C,KAAiB,GAAA,IAAA7C,KACjB,eAAA8C,IAAgB,GAAA,IAAA9C,KAChB,oBAAA+C,KAAwC,KAAA,IAAA/C,KACxC,gBAAAgD,KAAiB,GAAA,IAAAhD,KACjB,UAAAiD,KAGO,OAAA,IAAAjD,KACP,oBAAAkD,KAA0C,OAAA,IAAAlD,KAC1C,cAAAmD,KAAyF,OAAA,IAAAnD,KACzF,mBAAAe,KAAoB,GAAA,IAAAf;AAEzB,QAAAjG,IAAUxK,GAAyB+F,EAAQ,GAC3C8N,KAAW7T,GAA0BiM,EAAS,GAC5C,EAAA,WAAA6H,GAAA,IAAc9T,GAA4B4P,EAAW;;AACvD,QAAAxD,KAAY5B,EAAQ;;AAEtB,MAAAuE,IACAqC,GACA2C,KAAoC,MAEpCC,KAAA,CAAA,GAEAC,KAAA,CAAA,GACAC,KAAA,CAAA,GACAC,KAAY,IACZC,KAAc,GACdC,KAAc,eACdC,KAAe,GACftG,KAAA;AAAA,IACA,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,eAAe;AAAA,KAEfuG,IAAmB,IAEnBC,KAAiC,MACjCC,IAAS,IAETC,IAAA,CAAA,GACAC,GACAC,GACAC,GACAC,IAAW,GACXC,KAAgB,GAChBC,KAAkB,GAClBC,KAAY,IACZC,KAAgB,IAEhBC,KAAA,CAAA,GACAC,IACAC,IACAC,IACAC,KAAY,GACZC,KAAiB,GACjBC,KAAmB,GACnBC,KAAa,IACbC,KAAiB,IAEjB7O,KAAQ,GACR8O,IAEAjD,IACAkD,IACAC,IAEAC,KAAA,CAAA,GACAC,IAAwB,IACxBC,IAA6B,IAE7BC,GACAC,GACAC,GAEAzF,IAAA,CAAA,GACAC,KAAA,CAAA,GACAC,KAAA,CAAA,GACAwF,KAAA,CAAA,GACAC,KAAA,CAAA,GACAxF,KAAA,CAAA,GACAC,KAAA,CAAA,GACAC,KAAA,CAAA,GACAC,KAAA,CAAA,GAEAsF,KAAA,CAAA,GACAC,KAA4B,IAC5BC,IACAC,IACAC,IACAC,IAEAC,KAAqB,IACrBzJ,KAAyB,WAEzB0J,KAAY,GACZC,KAAY,GACZC,IACAC,IAEAC,IAEAC,KAAiB,IACjBzF,KAAuB,IAEvB0F,IACAC,IAEAC,IAIAC;AAIK,WAAAC,KAAA;AACL,IAAAhD,KAAc,MACdC,IAAS,IACT3N,KAAQ,GACR+P,KAAqB,IACrBzJ,KAAa,WACb0J,KAAY,GACZC,KAAY,GACZC,KAAkB,QAClBC,KAAY,QACZvF,KAAuB,IAEvBqE,KAAyBtL,EAAiB,mBAErCA,EAAiB,KAAK,uBAAwB,CAAA,gBAAgB,mBAAmB,GACtFuL,IAAgCD,GAAuB,QAAQ,cAAc,UAC7EE,IAAqCF,GAAuB,QAAQ,mBAAmB,UAEnFhH,MACA0I,GAAU1I,EAAW,GAGzBsI,MAAA,QAAAA,MACIK,OACAL,KAA0B7M,EAAQ,wBAC9BC,GACAA,EAAiB,KAAK,iBAAA;AAAA;AA+EzB,WAAAkN,GAAYjH,GAAYpN,IAAA;AAKzB,SAJC,MAAM,QAAQoQ,EAAQ,KAAM,CAAAE,MAI7BD,OACoB,MAAM,QAAQrQ,EAAK,IAAIA,GAAM,SAAS,OACtC;;AAKlB,UAAAsH,KAAQ8I,GAAS,UAAU,CAAAlL,QAAQA,MAAA,gBAAAA,GAAM,QAAOkI,CAAE,GAClDkH,KAAWlE,GAAS,MAAA;AAC1B,IAAAkE,GAAS,OAAOhN,IAAO,GAAO,IAAAtH,MAAA,IAA0B,IAAI,CAAA8D,QACxD,EAAA,MAAMA,IACN,IAAIA,MAAA,gBAAAA,GAAI,GAAA,EAAA,CAAA,GAGZsM,KAAWkE,IAEXhE,GAAagE,GAAS,IAAI,CAAAxQ,OAAMA,MAAA,gBAAAA,GAAI,IAAI,CAAA;AAAA;WA2cnCyQ,GAAqBpK,GAAA;UACpBqK,KAAavK,GAAcE,EAAU,aAAa,CAAC,GACnDsK,KAAWxK,GAAcE,EAAU,WAAW,CAAC,GAC/CuK,KAAQlO,GAAyB2D,EAAU,aAAa,CAAC,GACzDwK,KAAWrJ,GAAA,IAA2B,IAAI9E,GAAyB2D,EAAU,UAAU,GAAG,GAC1FH,KAAeD,GAAuBI,EAAU,cAAc,aAAa,EAAE,QAAQ,MAAM,GAAG;YAE5FA,EAAU,MAAA;AAAA,MACT,KAAA;AACD,eAAAgJ,KAAwBqB,IACxBpB,KAAsBqB,eACJE,EAAQ,MAAM3K,EAAY,IAAI0K,EAAK;AAAA,MACpD,KAAA;AACD,eAAArB,KAAsBmB,IACtBlB,KAAoBmB,iBACAE,EAAQ,MAAM3K,EAAY,IAAI0K,EAAK;AAAA,MACtD,KAAA;AAAA,MACA,KAAA;AACM,eAAA;AAAA;AAEP,eAAAvN,EAAiB,SAASzE,EAAc,IAAA,MAAM,+BAA+B,GAAA;AAAA,UACzE,YAAA,EACI,WAAWyH,EAAU,KAAA;AAAA,aAGtB;AAAA;;iBAqBJyK,GAAmBC,GAAA;AAC9B,IAAA/K,KAAa+K;UAEP/L,KAAY+L,MAAmB,YAAY,OAAO,OAClDC,KAAahM,OAAc,OAAO3B,EAAiB,KAAK,gBAAgBA,EAAiB,KAAK;QAGhGwL,KACAmC,IAAA;AAEI,UAAA3I;MACA0I,MAAmB,WACnB1I,KAAOV,GAAY,sBAAA,IAGjB,MAAAtO,GAAA,GAEF2L,OAAc,SACd+J,IAA+B,KAEnCtC,GAAS;AAAA;aAEEpJ,EAAiB;AAAA,UACpB,YAAY;AAAA;QAEhBA;AAAA,QACA2N;AAAA,QACArJ;AAAA,QACA3C;AAAAA,QACAqD;AAAA,MACF,EAAA,KAAA,MAAA;QACMrD,OAAc,SACd+J,IAA+B;AAAA,SAEpC,MAAM,CAAApV,OAAA;cACDqL,OAAc,SACd+J,IAA+B,KAE7BpV;AAAA;;;AAKT,WAAAsX,KAAA;QACDtE,MAAchF,IAAA;YACRuJ,IAAM9N,EAAQ,oBAAoBC,CAAgB;AACxD,MAAAsJ,GAAW,QAAQ,CAAA3M,OAAA;;AACf,SAAAwB,KAAAxB,GAAG,gBAAH,QAAAwB,GAAA,KAAAxB,IAAiB2H,IAAauJ;AAAA,UAElCvE,KAAa;AAAA;;WAgHZ0D,GAAUpN,GAAA;;AACf,IAAAiN,MAAA,QAAAA,GAAW,WAEXvI,KAAc1E,GACV2L,KAAyBvL,EAAiB,KAAK,kBAC3CA,EAAiB,KACjBoJ,GAAS,8BACLpJ,EAAiB,MACjBA,GACAA,EAAiB,KAAK,eACtBJ,CACF,EAAA,KAAA,MAAA;AACE,MAAA6L,IAA0B;AAAA,OAC3B,MAAM,CAAAnV,OAAA;AACL,YAAAmV,IAA0B,IACpBnV;AAAA,SAGV0J,EAAiB,SAASzE,EAAc,IAAA,MAAMiN,GAAwB,eAAe,MACjF,OAAO,OAAA,CAAA,CAAA,IAIf+C,KAAyBvL,EAAiB,KAAK,mBAC3CA,EAAiB,KACjBoJ,GAAS,+BACLpJ,EAAiB,MACjBA,GACAA,EAAiB,KAAK,gBACtBJ,CAAA,IAGJI,EAAiB,SAASzE,EAAc,IAAA,MAAMiN,GAAwB,gBAAgB,MAClF,OAAO,OAAA,CAAA,CAAA,IAIdxI,EAAiB,gBACdA,EAAiB,KAAK,sBAAsBA,EAAiB,MAC7DA,EAAiB,SAASzE,EAAc,IAAA,MAAMiN,GAAwB,mBAAmB,MACrF,OAAO,OAAA,CAAA,CAAA,GAGfY,GAAS,kCACLpJ,EAAiB,MACjBA,GACAA,EAAiB,KAAK,mBACtBJ,CACF,EAAA,KAAA,MAAA;AACE,MAAA+L,IAA6B;AAAA,OAC9B,MAAM,CAAArV,OAAA;AACL,YAAAqV,IAA6B,IACvBrV;AAAA;AAIR,UAAAuJ,KAAoBG,EAAiB,mBAGnCA,EAAiB,KAAK,sBACtBA,EAAiB,KAAK,qBAAsB,CAAAA,EAAiB,KAAK,iBAAiB,GAGrFF,KAAmBE,EAAiB,mBAAmBA,EAAiB,KAAK;AAE/E,QAAA8N;KAIA,MAAM,QAAQjO,EAAiB,KAAKA,GAAkB,UACtD,MAAM,QAAQC,EAAgB,KAAKA,GAAiB,YAEpDgO,KAAYnO,GAAiBC,GAAA;AAAA,MACzB,mBAAAC;AAAA,MACA,kBAAAC;AAAA,MACA,SAAAC;AAAA,MACA,kBAAAC;AAAA;AAIF,UAAAiG,KAAKjG,EAAiB;AACxB,WAAAiG,OACA6G,MAAA,QAAAA,MACAA,KAAe/M,EAAQ,WAAWkG,IAAA;AAAA,MAC9B,SAAe,MAAAjG;AAAA,MACf,MAAY,MAAAsE;AAAA,QAEhB8E,GAAS,cAAcnD,EAAE,KAG7B9H,KAAA6B,EAAiB,KAAK,aAAtB,QAAA7B,GAAgC,QAAQ,CAAA4P,OAAA;AACpC,MAAAhO,EAAQ,gBAAgBH,GAAMmO,EAAO;AAAA,QAGrCtB,OACAA,GAA6B,WAAA,GAC7BA,KAA+B,SAEnCA,KAA+BpI,GAC3BC,IACAtE,IACA5B,KAAA4B,EAAiB,KAAK,oBAAtB,gBAAA5B,GAAuC,sBACvCE,KAAA0B,EAAiB,KAAK,oBAAtB,gBAAA1B,GAAuC,oBAAA,GAO3CuO,KAAA;AAAA,MACI,UAAA;AACQ,QAAAC,OACAA,GAAA,GACAA,KAAe,SAEf7G,MACAmD,GAAS,gBAAgBnD,EAAE,GAE3B6H,MACAA,GAAU,QAAA;AAAA;OAQfjB;AAAA;AAGF,WAAAmB,KAAA;AACA,IAAAhO,EAAiB,KAAK,UAItBiO,GAAIlO,EAAQ,cAAc,MAC3B2M,KAAiB,KAGrB1M,EAAiB,eAAe4L,EAAY;AAAA;AAGvC,WAAAsC,KAAA;AACA,IAAAlO,EAAiB,KAAK,UAI3B0M,KAAiB,IACjB1M,EAAiB,eAAe6L,EAAW;AAAA;AAK/C,EAAA5W,GAAA,MAAA;;AACI,IAAAsU,GAAW,QAAQ,CAAAtD,OAAA;AACf,MAAAlG,EAAQ,mBAAmBkG,EAAE;AAAA,QAEjCsD,KAAA,CAAA,GAEIkD,OACAA,GAA6B,WAAA,GAC7BA,KAA+B,UAGnCtO,IAAA6B,EAAiB,KAAK,aAAtB,QAAA7B,EAAgC,QAAQ,CAAA4P,OAAA;AACpC,MAAAhO,EAAQ,kBAAkBgO,EAAO;AAAA,QAGrCnB,MAAA,QAAAA,MAEAgB,GAAA;AAAA,qmCAp8BDO,IAAWnO,EAAiB,UAmCxBmO,KACHpB,GAAA,GAGGE,MACHL,MAAA,QAAAA,MACAA,KAA0B7M,EAAQ,wBAC9BC,GACAA,EAAiB,KAAK,iBAAA,KAG1B4M,MAAA,QAAAA,MAGDwB,GAAAC,IAAYrO,EAAiB,mBAAmBA,EAAiB,KAAK,KAAK,CAAA,GAC3EsO,GAAAC,IAAavO,EAAiB,mBAAmBA,EAAiB,KAAK,MAAM,CAAA,GAC7EwO,GAAAC,IAAezO,EAAiB,mBAAmBA,EAAiB,KAAK,QAAQ,CAAA,GACjF0O,GAAAC,IAAc3O,EAAiB,mBAAmBA,EAAiB,KAAK,OAAO,CAAA,GAC/E4O,GAAAC,IAAY7O,EAAiB,mBAAmBA,EAAiB,KAAK,KAAK,CAAA,GAC3E8O,GAAAC,IAA0B/O,EAAiB,mBAAmBA,EAAiB,KAAK,oBAAoB,CAAA,GACxGgP,GAAAC,IAAajP,EAAiB,mBAAmBA,EAAiB,KAAK,MAAM,CAAA,GAC7EkP,GAAAC,IAAwBnP,EAAiB,mBAAmBA,EAAiB,KAAK,kBAAkB,CAAA,GACpGoP,GAAAC,IAAYrP,EAAiB,mBAAmBA,EAAiB,KAAK,KAAK,CAAA,GAC3EsP,GAAAC,IAAoBvP,EAAiB,mBAAmBA,EAAiB,KAAK,aAAa,CAAA,GAC3FwP,GAAAC,IAAiBzP,EAAiB,mBAAmBA,EAAiB,KAAK,UAAU,CAAA,GACrF0P,GAAAC,IAAa3P,EAAiB,mBAC7BA,EAAiB,KAAK,gBAAmB,EAAA,CAAA,GAE1C4P,GAAAC,IAAc7P,EAAiB,mBAC9BA,EAAiB,KAAK,iBAAoB,EAAA,CAAA,GAE3C8P,GAAAC,IAAuB/P,EAAiB,mBACvCA,EAAiB,KAAK,2BAA8B,EAAA,CAAA,GAErDgQ,GAAAC,IAAqBjQ,EAAiB,mBACrCA,EAAiB,KAAK,yBAA4B,EAAA,CAAA,GAEnDkQ,GAAAC,IAAwBnQ,EAAiB,mBACxCA,EAAiB,KAAK,6BAAgC,EAAA,CAAA,GAEvDoQ,GAAAC,KAAsBrQ,EAAiB,mBACtCA,EAAiB,KAAK,2BAA8B,EAAA,CAAA,GAErDsQ,GAAAC,KAAwBvQ,EAAiB,mBACxCA,EAAiB,KAAK,6BAAgC,EAAA,CAAA,GAEvDwQ,GAAAC,KAAsBzQ,EAAiB,mBACtCA,EAAiB,KAAK,2BAA8B,EAAA,CAAA,GAErD0Q,GAAAC,KAAsB3Q,EAAiB,mBAAmBA,EAAiB,KAAK,gBAAgB,CAAA,GAChG4Q,GAAAC,IAAiB7Q,EAAiB,mBAAmBA,EAAiB,KAAK,UAAU,CAAA,GACrF8Q,EAAAC,KAAgB/Q,EAAiB,mBAAmBA,EAAiB,KAAK,SAAS,CAAA,GACnFgR,GAAAC,KAA2BjR,EAAiB,mBAAmBA,EAAiB,KAAK,uBAAuB,CAAA,GAG3GuJ,GAAW,QAAQ,CAAAtD,MAAA;AACf,IAAAlG,EAAQ,mBAAmBkG,CAAE;AAAA,MAEjCsD,KAAA,CAAA,GACIN,MACAA,GAAS,QAAQ,CAAAlL,MAAA;IACTA,KAAA,QAAAA,EAAM,OACNwL,GAAW,KAAKxL,EAAK,EAAE,GACvBgC,EAAQ,iBAAiBhC,EAAK,IAAA;AAAA,MAC1B,aAAAmP;AAAA,MACA,cAAc,EAAQhE;AAAA;;;AAgChC,UAAAgI,IAASxE,OAAkByE,MAAA,QAAAA,GAAY,UAASA,GAAW,SAASC;AACtE,QAAAC,KAAA,CAAA,GACAC,KAAA,CAAA,GACAC,KAAe,IACfC,KAAsB;AAEtB,QAAAN,GAAA;UACI9L,GAAkB8L,EAAO,YAAY,EAAK,GAAA;AACpC,cAAAtN,KAASsN,EAAO;AAClB,QAAAtN,KACAyN,GAAe,YAAY,IAAI1N,GAAqBC,EAAM,IAE1DyN,GAAe,YAAY,IAAI;AAAA;UAGnCH,EAAO,QAAA;AACP,QAAAK,KAAe,IACf5H,KAActK,GAAyB6R,EAAO,OAAO,OAAOvH,EAAW,GACvEC,KAAczN,GAAa+U,EAAO,OAAO,OAAO,GAAGtH,EAAW;cACxD6H,OAActT,KAAA+S,EAAO,OAAO,UAAd,gBAAA/S,GAAqB,UAAS,WAAW,WAAW;AACxE,QAAAmT,GAAmB,iBAAiB,OAAOzV,GAAO8N,KAAc,CAAC,CAAK,IAAA8H,EAAW,IAAI7H,EAAW;AAAA;UAEhGsH,EAAO,kBAAA,OAAyBA,EAAO,kBAAmB,UAAA;AAC1D,QAAA3N,KAAgBD,GAA0B4N,EAAO,gBAAgB3N,EAAa,GAC9E8N,GAAe,eAAe,IAAI7N,GAAaD,EAAa;AACtD,cAAAmO,KAAA,CAAA;SAEF,YACA,aACA,gBACA,aAAA,EACQ,QAAQ,CAAAC,OAAA;AAChB,UAAAD,GAAaC,EAAM,KAAKpO,GAAcoO,EAAM,KAAK,KAAK;AAAA,YAE1DL,GAAmB,wBAAwB,IAAI9N,GAAakO,EAAY;AAAA,aACjER,EAAO,kBACdrH,KAAexK,GAAyB6R,EAAO,eAAerH,EAAY,GAC1EtG,KAAA;AAAA,QACI,YAAYsG;AAAA,QACZ,aAAaA;AAAA,QACb,gBAAgBA;AAAA,QAChB,eAAeA;AAAA,SAEnBwH,GAAe,eAAe,IAAIxV,GAAOgO,EAAY,GACrDyH,GAAmB,wBAAwB,IAAIzV,GAAOgO,KAAe,CAAC;UAItE0H,MAAgB5H,OAAgBuH,EAAO,kBAAkBA,EAAO,gBAAA;YAC5D/I,KAA6B,EAAA,GAAA5E,GAAA;SAG7B,YACA,aACA,gBACA,aAAA,EACQ,QAAQ,CAAAoO,OAAA;AAChB,UAAAxJ,GAAOwJ,EAAM,KAAKxJ,GAAOwJ,EAAM,KAAK,KAAKhI,KAAc;AAAA,YAG3D6H,KAAsBhO,GAAa2E,EAAM;AAAA;;AAGjD,IAAAqB,KAAchH,GAAkB6O,IAAgB7H,EAAW,GAC3DC,KAAkBjH,GAAkB8O,IAAoB7H,EAAe,GACvEC,KAAY6H,IACZzH,IAAmB0H;AAAA;AAInB,EAAAzH,KAAc9G;AAAA,IACT2O,MAAkB,CAAA/I,KACf+I,KACA;AAAA,IACJ7H;AAAA,KAIL8H,KAAUpQ,GAAiByB,GAAc6G,IAAahB,EAAkB,GAAG+I,EAAU,GAGpF9H,IAAS9H,GAAmB6P,GAAcD,IAAY9H,CAAM;;QAGxDgI,GACAC,IACAC,IACAC,IACAC,KAAA,CAAA,GACAC,KAAc,GACdC,KAAgB,GAChBC,KAAe,IACfC,KAAgB;UAEd/d,MAAO2J,KAAA4B,EAAiB,KAAK,UAAtB,gBAAA5B,GAA6B;QAEtC3J,OAAS;AACT,MAAA4V,IAAWhL,GAA0BoT,KAAA,gBAAAA,EAA0B,OAAOpI,CAAQ,GAC9E4H,KAAWpW,GAAOwO,CAAQ;AAAA,aAE1B5V,OAAS,mBACRA,OAAS,kBAAmB,CAAAA,OAASkU,EAAa,6BAAA;UAEnDqJ,IAAY,YAERvd,OAAS,mBAAmBge,KAAA,QAAAA,EAAgC,iBAC3Dhe,OAAS,kBAAA,CAAmBA,OAASkU,EAAa,iCAEnDyJ,GAAa,mBAAmB,IAAI,IAChCzJ,EAAa,+BAA+B,iBAC5C2J,KAAgB,KAIpB7d,OAAS,gBAAA;cACHyV,KAAQuI;AACVvI,QAAAA,GAAM,YAAYjI,GAAoBiI,GAAM,SAAS,KAAK,MAC1DgI,KAAcrW,GAAOqO,GAAM,SAAS,KAAK,IAEzCA,GAAM,YAAYjI,GAAoBiI,GAAM,SAAS,KAAK,MAC1DiI,KAActW,GAAOqO,GAAM,SAAS,KAAK;AAAA;AAI7C,OAAAzV,OAAS,kBAAmB,CAAAA,OAC5BuL,EAAiB,SAASzE,EAAA,IAAc,MAAM,kHAAkH,KAC5J,OAAO,OAAA,CAAA,CAAA;AAAA,eAIfyW,IAAY,UACRrJ,EAAa,+BAA+B,cAAcA,EAAa,wBACvE6J,KAAgB,IAChBxS,EAAiB,SAASzE,EAAA,IAAc,MAAM,6DAA6D,KACvG,OAAO,QAAA,CAAA,CAAA,IAGXoN,EAAa,4BAA4B,cAAcA,EAAa,cAAA;AAC9D,YAAA+J,MAAcnU,MAAAD,KAAAwT,OAAe,QAAQC,KAAA,gBAAAA,EAAc,QAAQA,KAAA,gBAAAA,EAAc,QAA3D,OAAAzT,KAChByT,KAAA,gBAAAA,EAAc,SADE,OAAAxT,KAEhB,GACEoU,MAAe7O,MAAAD,KAAAiO,OAAe,QAAQC,KAAA,gBAAAA,EAAc,MAAMA,KAAA,gBAAAA,EAAc,UAAzD,OAAAlO,KACjBkO,KAAA,gBAAAA,EAAc,UADG,OAAAjO,KAEjB,GACE8O,KAA4B,eAAA7W,GAAgB2W,KAAaC,EAAW,CAAA;MAEtEhK,EAAa,gBAEbsJ,KAAW,KACXC,KAAcU,MAEdX,KAAWW;AAAA,IAER,MAAA,CAAAjK,EAAa,+BAA+B,iBACnD0J,KAAcI,KAAc,YAAYA,KAAcA,EAAW,UAAU,GACvE9J,EAAa,wBACb4J,KAAe;QAKvBP,MAAc;AACd,MAAAI,GAAa,aAAa,IAAI;AAAA;YAExBS,KAAQC;AACV,MAAAD,OAAU,UAAUA,OAAU,YAAYA,OAAU,WAAWA,OAAU,WAAWA,OAAU,QAC9FT,GAAa,aAAa,KACtBN,OAAe,QACXzJ,KACAC,IACNuK,EAAK,IAEPT,GAAa,aAAa,IAAIzJ,EAAa,gBAAgB;AAAA;AAI/D,IAAAqJ,MACAI,GAAa,QAAQJ,IAGzB9H,IAAQ+H,IACR9H,IAAW+H,IACX9H,IAAW+H,IACX7H,KAAgB+H,IAChB9H,KAAkB+H,IAClBrI,IAAYzH,GAAkB4P,IAAcnI,CAAS,GACrDO,KAAY+H,IACZ9H,KAAgB+H;AAAA;;QAIZO,GACAC,IACAC,IACAC,IACAC,KAAA,CAAA,GACAd,KAAc,GACdC,KAAgB,GAChBc,KAAgB,IAChBC,KAAiB;UAEf5e,MAAO6e,KAAAtT,EAAiB,KAAK,WAAtB,gBAAAsT,GAA8B;AAEvC,QAAA,CAAAtK,QAGOvU,OAAS;AAChB,MAAAqW,KAAYzL,GAA0BkU,MAAA,gBAAAA,GAA2B,OAAOzI,EAAS,GACjFkI,KAAYnX,GAAOiP,EAAS;AAAA,aACrBrW,OAAS,mBAAmBkU,EAAa;UAChDoK,IAAa,UACTpK,EAAa,+BAA+B,gBAAgBA,EAAa,wBACzE0K,KAAiB,IACjBrT,EAAiB,SAASzE,EAAA,IAAc,MAAM,6DAA6D,KACvG,OAAO,QAAA,CAAA,CAAA,IAGXoN,EAAa,4BAA4B,gBAAgBA,EAAa,eAAA;AAChE,cAAA6K,MAAYC,KAAA1B,KAAA,gBAAAA,EAAc,QAAd,OAAA0B,KAAqB,GACjCC,MAAeC,KAAA5B,KAAA,gBAAAA,EAAc,WAAd,OAAA4B,KAAwB,GACvCC,KAA6B,eAAA7X,GAAgByX,KAAYE,EAAY,CAAA;QAEvE/K,EAAa,iBAEbqK,KAAY,KACZC,KAAeW,MAEfZ,KAAYY;AAAA,MAET,MAAA,CAAAjL,EAAa,+BAA+B,eACnD0J,MAAekB,MAAA,gBAAAA,GAAiC,WAAU,GACtD5K,EAAa,wBACbyK,KAAgB;AAAA;UAIxBL,IAAa,YAETte,OAAS,mBAAmB8e,MAAA,QAAAA,GAAiC,gBAC7D9e,OAAS,kBAAkBkU,EAAa,+BAExCwK,GAAc,oBAAoB,IAAI,IAClCxK,EAAa,+BAA+B,eAC5C2J,KAAgB,KAIpB7d,OAAS,gBAAA;cACHkW,KAAS4I;AACX5I,QAAAA,MAAAA,QAAAA,GAAQ,YAAY1I,GAAoB0I,GAAO,SAAS,KAAK,MAC7DsI,KAAepX,GAAO8O,GAAO,SAAS,KAAK,IAE3CA,MAAAA,QAAAA,GAAQ,YAAY1I,GAAoB0I,GAAO,SAAS,KAAK,MAC7DuI,KAAerX,GAAO8O,GAAO,SAAS,KAAK;AAAA;MAI/ClW,OAAS,kBACTuL,EAAiB,SAASzE,EAAA,IAAc,MAAM,kHAAkH,KAC5J,OAAO,OAAA,CAAA,CAAA;AAAA;QAKfwX,MAAe;AACf,MAAAI,GAAc,aAAa,IAAI;AAAA;YAEzBN,KAAQgB;MAEVhB,OAAU,SACVA,OAAU,YACVA,OAAU,YACVA,OAAU,cAAclK,EAAa,+BAA+B,eAEpEwK,GAAc,aAAa,IAAI5K,GAA0BsK,EAAK,IAE9DM,GAAc,aAAa,IAAIxK,EAAa,gBAAgB;AAAA;AAIhE,IAAAoK,MACAI,GAAc,SAASJ,IAG3BpI,KAASqI,IACTpI,KAAYqI,IACZpI,KAAYqI,IACZnI,KAAiBsH,IACjBrH,KAAmBsH,IACnB5H,KAAalI,GAAkB2Q,IAAezI,EAAU,GACxDO,KAAamI,IACblI,KAAiBmI;AAAA;MAGlBS,KAAmBnL,EAAa,gBAAgB,KAAO,QAEvDoL,KAAWpL,EAAa,WACpB,GAAAA,EAAa,SAAS,IAAI,CAAC,IAAIA,EAAa,SAAS,IAAI,CAAC,SAASA,EAAa,SAAS,OAAO,SAASA,EAAa,SAAS,OAAO,KACzI,QAGAtM,KAAQ8F,GAAa6R,IAAY3X,EAAK,GACtC8O,KAAU9O,OAAU,aAAgBA,IAIpCsK,IAAQ,QACJsN,MAAuB,CAAArL,IAAA;AACjB,UAAAsL,IAAQ7O,GAAgC4O,EAAkB;AAC5D,IAAAC,MACAvN,IAAA,CAAA,GACAA,EAAM,YAAY,IAAIuN;AAAA;AAS1B,MAHJhM,KAAawE,OAAkByE,MAAA,QAAAA,GAAY,cAAaA,GAAW,aAAagD,GAChF/I,KAAA,CAAA,GACAC,KAAgB,IACZ,MAAM,QAAQnD,EAAU,MACxBmD,KACInD,GAAW,KAAK,CAAAvL,MAAMA,EAAG,SAAS,WAAWA,EAAG,SAAS,kBAAkB,KAC3E,EAAQmN,GAEP,CAAAuB,KAAA;AACK,UAAAzP,IAAM0B,GAAc4K,EAAU;AACpC,IAAAkD,GAAgB,kBAAkB,IAAIxP,EAAI,OAC1CwP,GAAgB,kBAAkB,IAAIxP,EAAI,OAC1CwP,GAAgB,iBAAiB,IAAIxP,EAAI,MACzCwP,GAAgB,qBAAqB,IAAIxP,EAAI,UAC7CwP,GAAgB,mBAAmB,IAAI;AAAA;AAM/C,EAAAK,IAA0B,QACtBF,KAAyBvL,EAAiB,MAAMA,EAAiB,KAAK,iBAAiBD,EAAQ,UAAU,aAAa,MACtH0L,IAA0B,KAI9BE,IAA6B,QAEzBJ,KACAvL,EAAiB,MACjBD,EAAQ,UAAU,aAAa,KAAKqJ,GAAS,oBAAoBpJ,EAAiB,EAAE,MAEpF2L,IAA6B;;QAK7ByI,IAAaC,MAAgBC,OAAgBA,EAAW,KAAA,CAAA,GACxDC,KAAsBC,MAAA,CAAA,GACtBC,KAAoBC,MAAA,CAAA,GACpBC,MAAkBxD,MAAA,gBAAAA,GAAY,aAAA,CAAA,GAC9ByD,MAAiBzD,MAAA,gBAAAA,GAAY,YAAA,CAAA,GAC7B0D,KAAuBC,MAAA,CAAA,GACvBC,KAAqBC,MAAA,CAAA,GACrBC,KAAuBC,MAAA,CAAA,GACvBC,KAAqBC,MAAA,CAAA;IAErBpV,EAAiB,eACjBoU,IAAA,CAAA,GACAG,KAAA,CAAA,GACAE,KAAA,CAAA,GACAE,KAAA,CAAA,GACAC,KAAA,CAAA,MAEK,MAAM,QAAQR,CAAU,MACzBA,IAAA,CAAA,GACApU,EAAiB,SAASzE,EAAc,IAAA,MAAM,yBAAyB,CAAA,CAAA,IAEtE,MAAM,QAAQgZ,EAAmB,MAClCA,KAAA,CAAA,GACAvU,EAAiB,SAASzE,EAAc,IAAA,MAAM,kCAAkC,CAAA,CAAA,IAE/E,MAAM,QAAQkZ,EAAiB,MAChCA,KAAA,CAAA,GACAzU,EAAiB,SAASzE,EAAc,IAAA,MAAM,gCAAgC,CAAA,CAAA,IAE7E,MAAM,QAAQoZ,EAAe,MAC9BA,KAAA,CAAA,GACA3U,EAAiB,SAASzE,EAAc,IAAA,MAAM,8BAA8B,CAAA,CAAA,IAE3E,MAAM,QAAQqZ,EAAc,MAC7BA,KAAA,CAAA,GACA5U,EAAiB,SAASzE,EAAc,IAAA,MAAM,6BAA6B,CAAA,CAAA,IAE1E,MAAM,QAAQsZ,EAAoB,MACnCA,KAAA,CAAA,GACA7U,EAAiB,SAASzE,EAAc,IAAA,MAAM,mCAAmC,CAAA,CAAA,IAEhF,MAAM,QAAQwZ,EAAkB,MACjCA,KAAA,CAAA,GACA/U,EAAiB,SAASzE,EAAc,IAAA,MAAM,iCAAiC,CAAA,CAAA,IAE9E,MAAM,QAAQ0Z,EAAoB,MACnCA,KAAA,CAAA,GACAjV,EAAiB,SAASzE,EAAc,IAAA,MAAM,mCAAmC,CAAA,CAAA,IAEhF,MAAM,QAAQ4Z,EAAkB,MACjCA,KAAA,CAAA,GACAnV,EAAiB,SAASzE,EAAc,IAAA,MAAM,iCAAiC,CAAA,CAAA,MAKnF6Y,EAAW,UACXG,GAAoB,UACpBE,GAAkB,UAClBpO,GAAkB,UAClBC,GAAgB,UAChBC,GAAkB,UAClBC,GAAgB,WACfsC,MACDsL,IAAA,CAAA,GACAG,KAAA,CAAA,GACAE,KAAA,CAAA,GACApO,KAAA,CAAA,GACAC,KAAA,CAAA,GACAC,KAAA,CAAA,GACAC,KAAA,CAAA,GACAxG,EAAiB,SAASzE,EAAc,IAAA,MAAA,mCAAyCuN,CAAa,GAAA,CAAA,CAAA,IAIlG5C,IAAUkO,EAAW,OAAOpQ,EAAoB,GAChDmC,KAAmBoO,GAAoB,OAAOvQ,EAAoB,GAClEoC,KAAiBqO,GAAkB,OAAOzQ,EAAoB,GAC9D4H,KAAe+I,GAAgB,OAAO3Q,EAAoB,GAC1D6H,KAAc+I,GAAe,OAAO5Q,EAAoB,GACxDqC,KAAoBwO,GAAqB,OAAO7Q,EAAoB,GACpEsC,KAAkByO,GAAmB,OAAO/Q,EAAoB,GAChEuC,KAAoB0O,GAAqB,OAAOjR,EAAoB,GACpEwC,KAAkB2O,GAAmB,OAAOnR,EAAoB;AAAA;AAI5D,EAAAqR,OACAvJ,KAAsB/I,GAAiBsS,EAAiC,GACxEtJ,KAA4BD,GAAoB,IAAIsB,EAAoB,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI,WAI7FkI,KAA8B,cACxCrO,KAAuBqO;;UAqCjBC,IAAiB5S,IACjB+K,KAAiBhL,GAAkB8S,IAAiB7S,EAAU;IAEhE4S,MAAmB7H,OACftB,OAAuBzJ,OAAe,aAAa+K,OAAmB,aACtED,GAAmBC,EAAc,IAEjC/K,KAAa+K,KAIhBtB,OACDA,KAAqB;AAAA;AAyDtB,MAAApM,EAAiB,QAAQsE,MAAgB,CAAAjC,GAAYrC,EAAiB,KAAK,YAAY2M,EAAiB,GAAA;QACvG8I,IAAO9I,KAAoB3M,EAAiB,KAAK;AAErD,IAAAhK,GAAO,EAAA,KAAA,MAAA;AACC,UAAA,EAAAyf,MAAS9I,MAAsB,CAAArI,QAInCsJ,GAAA,GAEI,MAAM,QAAQ5N,EAAiB,KAAK,UAAU,IAAA;cACxC6N,KAAM9N,EAAQ,oBAAoBC,CAAgB;AACxD,QAAAsJ,KAAatJ,EAAiB,KAAK,WAAW,IAAI,CAAArD,OAAA;;AACxC,gBAAAsJ,KAAKtJ,GAAG;AACT,cAAA,CAAAsJ;;AAIC,gBAAApB,KAAW9E,EAAQ,aAAakG,IAAItJ,GAAG,MAAM;AAE/C,iBAAAkI,QACA1G,KAAA0G,GAAS,cAAT,QAAA1G,GAAA,KAAA0G,IAAqBP,IAAauJ,MAG/BhJ;AAAA,QACR,CAAA,EAAA,OAAOxH,EAAM;AAAA;;;AAiCpB,MAhBLiE,KAAA;AAAA,IACI,GAAA2I;AAAA,IACA,GAAAS;AAAA,IACH,kBAAkBoJ;AAAA,IAClB,eAAenL,EAAa;AAAA,IAC5B,yBAAyB8C,KACrBC,KACAC;AAAA,IACJ,YAAAhJ;AAAA,IACA,wBAAwB,EAAQoJ;AAAA,IAChC,eAAepD,EAAa,8BAA8B;AAAA,IAC1D,eAAe,EAAQA,EAAa,YAAa;AAAA,IACjD,oBAAoB,GAAQ+D,MAAkB1M,EAAiB,KAAK;AAAA,KAIhE0V,MAAkBA,GAAe,aAAa,QAAA;AACxC,UAAAC,IAASD,GAAe,WAAA,EAC1B,MAAM,oBACN,OAAO,GAAA;AAEX,IAAArJ,KAAYvJ,GAAc6S,EAAO,OAAOtJ,EAAS;AAC3C,UAAAuJ,KAAiBD,EAAO,SAAS,gBAAgB9Z,GAAOwQ,EAAS,OAAOA,EAAS,KACjFwJ,KAASH,GAAe,WAAA,EAC1B,MAAM,oBACN,OAAO,GAAA;AAEX,IAAApJ,KAAYxJ,GAAc+S,GAAO,OAAOvJ,EAAS;AAC3C,UAAAwJ,KAAiBD,GAAO,SAAS,gBAAgBha,GAAOyQ,EAAS,OAAOA,EAAS;AACvF,IAAAC,KAAqB,GAAAqJ,EAAc,IAAIE,EAAc,IACrDtJ,KAAA,UAAsBkJ,GAAe,QAAQ;AAAA;AAKlD,SAAAK,KAAavL,MAAaS,KACzB,SACEX,MAAiBS,KAAkB,IAAI,QAE1C3C,KAAA;AAAA,IACI,GAAA1B;AAAA,IACA,GAAA0E;AAAA,IACA,GAAA5B;AAAA,IACH,OAAAU;AAAA,IACA,aAAaC;AAAA,IACb,aAAaC;AAAA,IACb,QAAAO;AAAA,IACA,cAAcC;AAAA;AAAA,IAEd,cAAcC,OAAanE,MAAA,gBAAAA,GAAQ;AAAA,IACnC,aAAaqN;AAAA,IACb,SAAAlC;AAAA,IACA,QAAA7H;AAAA,IACA,SAAAmB;AAAA,IACA,YAAYY;AAAA,IACZ,oBAAoBQ;AAAA,IACpB,WAAAC;AAAA,IACA,aAAalC,MAAiBS,MAAkB;AAAA,IAChD,eAAgBR,MAAmBS,KAAoB,IAAI;AAAA,IAC3D,cAAc+K;AAAA,IACd,oCAAoC/J;AAAA,IACpC,kCAAkCC;AAAA,IAClC,kCAAkCC;AAAA,IAClC,gCAAgCC;AAAA,yJAiLlC,GAAA,CAAA1B,OAAkBS;;;;UAGZlL,EAAiB,KAAK;AAAA,WACrBgN;AAAA,MACC,KAAAvG,WAAMpF,GAAa,SAAS5H,IAAK6H,EAAI;AAAA,MACpC,OAAA3F,GAAUyM,EAAG;AAAA;;;;;;;;;MAUM,yBAAA,CAAA0D,GAAoB,UAAUpD,GAAmBoD,EAAmB;AAAA,2BACzEmI;AAAA;;;;yBAMhB5I;;;;qBAA6DyG;AAAA,UAAwB,YAAA5J;AAAA,kBAAoB4B;AAAA;;;;;;;gBAAoFJ,KAAuB,QAAAhQ,EAAA,SAAAD,GAAI,eAAsB,CAAA,CAAA,GAAAC,EAAA,SAAAiC,GAAU8N,EAAe,GAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1qCpQ,SAAAuM,GAAsB/Z,GAAyBqD,GAA4B;AACjF,QAAAC,IAAM,OAAOtD,CAAG;AACtB,SAAI,OAAO,MAAMsD,CAAG,KAAKA,KAAO,IACrBD,IAEJC;AACX;ACJO,SAAS0W,GAAgBC,GAAyD;AACrF,MACIA,MAAe,WACfA,MAAe,YACfA,MAAe,UACfA,MAAe;AAEf,WAAIA,MAAe,WACR,MACAA,MAAe,SACf,MACAA,MAAe,UACf,MAGJ;AAEf;AChBgB,SAAAC,GACZD,GACAE,GACA9W,GACkB;AAClB,SAAI,OAAO8W,KAAoB,YAAYA,IAAkB,IAClDA,IAEJH,GAAgBC,CAAU,KAAK5W;AAC1C;ACTgB,SAAA+W,GACZ3U,GACA4U,GACwB;AACxB,MAAI,CAAC5U;AACD,WAAO,CAAC;AAGZ,QAAM9F,IAAkB,CAAC;AAEd,aAAAvG,KAAO,CAAC,QAAQ,OAAO,SAAS,UAAU,SAAS,KAAK,GAAY;AACrE,UAAA4G,IAAMyF,EAAWrM,CAAG;AAC1B,IAAI4G,MACIL,EAAAvG,CAAG,IAAI4G,IAAMqa;AAAA,EACrB;AAGG,SAAA1a;AACX;;;oCCEe,EAAA,kBAAAoE,EAAA,IAAAgG,GACA,EAAA,MAAAuQ,EAAA,IAAAvQ,GACA,EAAA,cAAAwQ,EAAA,IAAAxQ,GACA,EAAA,YAAAyQ,IAAA,CAAA,EAAA,IAAAzQ,KACA,YAAA0Q,IAAa,GAAA,IAAA1Q,KACb,SAAAE,IAA8C,OAAA,IAAAF,KAC9C,SAAA2Q,IAAU,GAAA,IAAA3Q,KACV,WAAA4Q,KAAY,GAAA,IAAA5Q,KACZ,kBAAA6Q,KAAkC,KAAA,IAAA7Q;AAEvC,QAAAjG,KAAUxK,GAAyB+F,EAAQ,GAC3CqG,KAAY5B,GAAQ;;AAEpB,QAAA+W,IAAgBH,KAAWC,MAAa7W,GAAQ,MAAM,YAAY,KAAK;MAEzEgX,KAAa,QACbrT,KAAW,IACXsT,KAAa,MACbC,KAAgB,IAChBf,IACAgB,KAAa,IACb9a,KAAQ,IACR+a,IACAjG,KAIO,MACPkG,IACAlP,GACAmP,KAAe,IACfC,IACAC,IACAC;qrBAEGxX,EAAiB,SACpB+W,KAAa,QACbrT,KAAW,IACXsT,KAAa,MACbC,KAAgB,IAChBf,KAAa,QACbgB,KAAa,IACb9a,KAAQ,IACR+a,KAAgB,QAChBjG,KAAS,MACTkG,KAAgB,QAChBlP,IAAa,QACbmP,KAAe,IACfC,KAAY,QACZC,KAAW,QACXC,IAAc;;QAIVC,KAAgB;AAEhB,KAAAhB,EAAW,aAAaA,EAAW,YAC/BA,EAAW,cAAc,YAAYA,EAAW,WAAW,WAC3DgB,KAAgB,SACThB,EAAW,cAAc,WAChCgB,KAAgB,cACThB,EAAW,WAAW,aAC7BgB,KAAgB,YAIxBV,KAAaU;AAAA;AAIb,EAAA/T,KAAWsS,GAAsBS,EAAW,WAAW/S,EAAQ,GAI3DmE,GAAiB4O,EAAW,WAAW,MACvCO,KAAa,OAAOP,EAAW,WAAW,IAAI/S,KAK9CzB,GAAoBwU,EAAW,cAAc,MAC7CQ,KAAgBpb,GAAO4a,EAAW,cAAc,IAKpDP,KAAaC,GAAkBM,EAAW,aAAaA,EAAW,mBAAmBP,EAAU,UACpFO,EAAW,eAAgB,YAAYA,EAAW,cACzDS,KAAanX,GAAQ,iBAAiB0W,EAAW,aAAA,EAC7C,YAAYP,MAAc,KAAA,IAG9BgB,KAAa,IAKjB9a,KAAQD,GAAasa,EAAW,YAAY,GAAGra,EAAK,GAGrDsb,IAAYjB,EAAW,aAAa5a,GAAO4a,EAAW,UAAU,IAAI,IAEpEkB,MAAaxZ,KAAAsY,EAAW,eAAX,gBAAAtY,GAAuB,UAAS,SAE7CyZ,MAAexZ,KAAAqY,EAAW,eAAX,gBAAArY,GAAuB,UAAS,UAAUqY,EAAW,WAAW,WAAW;;AAGnF,UAAAoB,KAAOpB,EAAW,MAClBqB,KAAU,GACZD,OACCA,GAAK,SAAS,WAAWA,GAAK,SAAS,gBACxCA,GAAK,eAAe,MAASA,GAAK;AAalC,QAVAlB,KAAWmB,KACXX,KAAgB,gBAEhBA,KAAgB,QAGpBE,KAAe,IACfC,KAAY,QACZC,KAAW,QACXC,IAAc,QACVb;AACI,MAAAgB,IACAzP,IAAaxL,GAAuB+Z,EAAW,WAA+B,OAAO,KAAK,aAAa,IAEvGvO,IAAa;AAAA,aAEV2P,MAAQC;AACX,UAAAD,GAAK,SAAS;AACd,QAAA3P,IAAa/L,GAAa0b,GAAK,KAAK;AAAA,eAC7BA,GAAK,SAAS,aAAA;AACf,cAAAhZ,KAAOmX,IAAsB1X,KAAAuZ,GAAK,kBAAL,gBAAAvZ,GAAoB,OAAO,CAAC,GACzDyZ,KAASlc,GAAOgD,KAAO,KAAK6E,EAAQ,GACpCsU,KAAUhC,GAAsB6B,GAAK,SAAS,GAAE,GAChDzb,KAAQD,GAAa0b,GAAK,KAAK;AAErC,QAAA3P,IAAa,QACboP,KAAYlb,IACZmb,KAAWQ,IACXP,IAAc,OAAOQ,EAAO,GAC5BX,KAAeQ,GAAK,gBAAgB;AAAA;UAEjC,GAAAtZ,KAAAkY,EAAW,eAAX,gBAAAlY,GAAuB,UAAS,UACvC2J,IAAa5K,GAAA,CAAemZ,EAAW,UAAU,CAAG,EAAA,QAEpDvO,IAAa;AAAA;UAKjBrE,KAAA4S,EAAW,WAAX,QAAA5S,GAAmB,UACnB4S,EAAW,OAAO,OAAO,SACzBta,GAAasa,EAAW,OAAO,OAAO,KAAK,MAAM,iBACjD5O,GAAiB4O,EAAW,OAAO,OAAO,KAAK,OAC/C3S,KAAA2S,EAAW,eAAX,gBAAA3S,GAAuB,UAAS,UAEhCoN,KAAA;AAAA,IACI,OAAOuF,EAAW,OAAO,OAAO;AAAA,IAChC,OAAOA,EAAW,OAAO,OAAO;AAAA,IAChC,eAAeA,EAAW,OAAO;AAAA,MAGrCvF,KAAS,MAIV1N,IAAemT,IACbgB,KAAclB,EAAW,WAA+B,iBAAiB,IACzEvF,KAAS8E,GAAsB9E,GAAO,eAAe,CAAC,IAAI,GAE5DtN,IAAS6S,EAAW,cAAc1S,GAAkB0S,EAAW,aAAa/S,EAAQ,IAAI,QAG5E,OAAA+S,EAAW,mBAAoB,aACtCW,KAAgBX,EAAW,kBAIhCwB,IAAA,OAA6BxB,EAAW,mBAAoB,WAAW,SAAYA,EAAW,oBAE9FnV,IAAA;AAAA,IACC,YAAAoV;AAAA,IACA,YAAAK;AAAA,IACA,OAAOkB;AAAA,IACP,OAAON;AAAA,IACP,2BAA2B,GAAQd,MAAoBO;AAAA,IACvD,sBAAsB,EAAQE;AAAA,IAC9B,iBAAiBD;AAAA,KAGlB3Q,IAAA;AAAA,IACC,aAAa7K,GAAQ6H,KAAW,KAAM8S,CAAY;AAAA,IAClD,eAAeyB,IAAsB,WAAWjB;AAAA,IAChD,kBAAkBC;AAAA,IAClB,eAAef;AAAA,IACf,eAAegB;AAAA,IACf,kBAAmBL,MAAoBO,OAAkB,SAAa,SAAYvb,GAAOub,KAAgB,KAAK1T,EAAQ;AAAA,IACtH,KAAMmT,MAAoBO,OAAkB,SAAavb,GAAQ,CAAAub,KAAgB,KAAK1T,EAAQ,IAAI;AAAA,IAClG,QAAQkU,IACJnW,GAAiB4U,GAAoBuB,GAAA,MAAoBlU,EAAQ,GAAGoO,CAAU,IAC9E;AAAA,IACJ,SAAS8F,IACLnW,GAAiB4U,GAAoBuB,GAAc,KAAKlU,EAAQ,GAAGoO,CAAU,IAC7E;AAAA,IACJ,QAAQ6E,KAAWgB,KAAe,CAAAf,aAAoBE,CAAa,MAAMlT;AAAA,IACzE,OAAOuT,MAAiB/a;AAAA,IACxB,YAAA8L;AAAA,IACA,SAASyO,KAAWgB,KAAe,CAAAf,OAC9BnD,MAAAH,KAAA9W,GAAYia,EAAW,WAA+B,KAAK,MAA3D,gBAAAnD,GAA8D,MAA9D,OAAAG,KAAmE,OAAO,MAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMJ,cAAcvC,KAAwB,eAAArV,GAAOqV,GAAO,QAAQ,KAAKxN,EAAQ,CAAA,IAAKwN,GAAO,KAAK,KAAK;AAAA,IAC/F,iBAAiB1N,IAAe3H,GAAO2H,IAAe,KAAKE,EAAQ,IAAI;AAAA,IACvE,yBAAyB+S,EAAW,yBAAyB;AAAA,IAC7D,4BAA4Ba;AAAA,IAC5B,2BAA2BC;AAAA,IAC3B,8BAA8BC;AAAA,UAIjC,GAAAb,KAAWgB,sBAAuBle,GAAI,uBAAuB,GAAqB,CAAA,CAAA,iBAAAC,EAAA,MAAAod,iNAAgN,IAAItT,GAAY,EAAA,IAAA,OAAAxM,GAAIwM,GAAY,EAAA,CAAA,yGACvTkU,uBAAuBje,GAAI,wBAAwB,GAAA,CAAA,CAAA,GAAAI,GAAA,EAAA,cAAqB6d,EAAS,CAAA,CAAA;;;;MAExF,KAAArW,GAAa,cAAc5H,IAAK6H,CAAI;AAAA;MAElC,OAAA3F,GAAU+K,CAAK;AAAA;;;wBACgB4Q,uBAAsB7d,GAAI,4BAA4B,GAAqB,CAAA,CAAA,cAAAC,EAAA,SAAAD,GAAI,4BAA4B,GAAA,CAAA,CAAA,cAAAC,EAAA,SAAqBD,GAAI,4BAA4B,8BAAqBA,GAAI,4BAA4B,GAAqB,CAAA,CAAA,cAAAC,EAAA,SAAAD,GAAI,4BAA4B,GAAA,CAAA,CAAA,cAAAC,EAAA,SAAqBD,GAAI,4BAA4B,GAAA,CAAA,CAAA,YAAe,EAAA,GAAAzC,GAAAuf,KAAQ,GAAG,CAAA;AAAA;;;AC7PnX,SAAA2B,GACZC,GACAxW,GACArC,GACmB;AAEf,SAAA6Y,MAAgB,UAChBA,MAAgB,YAChBA,MAAgB,WAChBA,MAAgB,WAChBA,MAAgB,QAEZA,MAAgB,SACTxW,MAAc,QAAQ,UAAU,QAChCwW,MAAgB,UAChBxW,MAAc,QAAQ,QAAQ,UAElCwW,IAGJ7Y;AACX;ACtBgB,SAAA8Y,GACZD,GACA7Y,GACuB;AACvB,SACI6Y,MAAgB,SAChBA,MAAgB,YAChBA,MAAgB,YAChBA,MAAgB,aAEZA,MAAgB,QACT,UACAA,MAAgB,WAChB,QAEJA,IAGJ7Y;AACX;ACnBO,SAAS+Y,GAAapc,GAAwC;AAG1D,SAFa,OAAOA,KAAA,OAAAA,IAAO,EAAE;AAGxC;ACJgB,SAAAqc,GAAgBC,GAAgCjZ,GAAgC;AAExF,SAAAiZ,MAAa,eACbA,MAAa,iBACbA,MAAa,YACbA,MAAa,aACbA,MAAa,cACbA,MAAa,WAENA,IAGJjZ;AACX;ACZgB,SAAAkZ,GAAmCjlB,GAAOklB,GAAuC;AACzF,MAAAC;AAEJ,SAAO,YAAwC9gB,GAAqB;AAChE,IAAI8gB,MAAU,QACV,aAAaA,CAAK,GAGtBA,IAAQ,WAAW,MAAM;AAClB,MAAAnlB,EAAA,MAAM,MAAMqE,CAAI,GACX8gB,IAAA;AAAA,OACTD,CAAO;AAAA,EACd;AACJ;;mjCCoBe,EAAA,kBAAAzY,GAAA,IAAAgG,KACA,cAAA2C,KAAyC,OAAA,IAAA3C;AAE9C,QAAAjG,KAAUxK,GAAyB+F,EAAQ,GAE3CqG,KAAY5B,GAAQ;;MAEtBwW,KAAO,IACP7S,KAAW,IACXsT,KAAa,MACbH,KAAkC,MAClC8B,KAAY,IAEZC,KAA6B,IAC7BC,IAAY,IACZC,KAA8B,SAC9BC,KAAkC,SAClCC,KAAgB,IAChBC,KAAiB,IACjBtb,KAAW,IACXub,KAAa,IAsBbC,KAAA,CAAA,GACAxB,IAAa,IACbyB,KAAqB,IACrBC,IACAC,KAAA,CAAA,GACAC,KAAA,CAAA;WAmKKC,GACLjD,IACAkD,IACAC,IACAH,IAAAA;;AAEI,QAAAI,IAAA,CAAA;QAEJL,GAAe,QAAA,CAAA,CAAUld,IAAOwd,EAAI,MAAA;AAChC,MAAA7Z,GAAQ,gBAAgB3D,IAAOwd,EAAI;AAAA,QAEvCN,KAAA,CAAA,KAGI,MAAM,QAAQG,EAAU,KAAKA,GAAW,UACxC,MAAM,QAAQC,EAAU,KAAKA,GAAW,UAAUnD,KAAAA;AAElD,MAAA4C,KAAA,CAAA;;;UAIEU,IAAUtD;AACZ,QAAAuD,KAASL,MAEL,CAAA,EAAA,OAAO,GACP,KAAKI,EAAQ,QAAA,GAGjBE,KAASL,MAAA,CAAA,GACTM,IAAY,GACZC,KAAA,CAAA,GACAzb,KAAA,CAAA;AAkBJ,IAAAsb,GAAO,QAAQ,CAAAI,OAAA;AACL,YAAAC,KAAaD,GAAM,SAAS,GAC5BE,KAAWF,GAAM,OAAO3D,GAAK,QAC7B8D,KAAA;AAAA,QACF,YAAY;AAAA,QACT,GAAAH;AAAA,QACH,OAAOC;AAAA,QACP,KAAKC;AAAA;AAET,MAAA5b,GAAK,KAAA;AAAA,QACD,OAAO2b;AAAA,QACP,OAAOE;AAAA,QAIP,MAAM;AAAA,QACN,SAAS;AAAA,UAEb7b,GAAK,KAAA;AAAA,QACD,OAAO4b;AAAA,QACP,OAAOC;AAAA,QAIP,MAAM;AAAA;QAGdN,GAAO,SAASnc,IAAOuC,OAAA;AACf,MAAAvC,GAAM,oBAAuBA,GAAM,OAAOA,GAAM,SAASic,EAAQ,UACjErb,GAAK,KAAA;AAAA,QACD,OAAOZ,GAAM,uBAAuB,aAAa2Y,GAAK,SAAS3Y,GAAM,QAAQA,GAAM;AAAA,QACnF,OAAAA;AAAA,QAIA,MAAM;AAAA,QACN,YAAYuC;AAAA;QAIxB3B,GAAK,MAAM1K,IAAGC,OACND,GAAE,UAAUC,GAAE,QACVD,GAAE,SAASC,GAAE,OACTD,GAAE,SAAS,UACJ,KACAC,GAAE,SAAS,UACX,IAGJD,GAAE,OAAOC,GAAE,OAAA,KAAY,IACvBD,GAAE,SAAS,WAAWC,GAAE,SAAS,UACjCA,GAAE,aAAaD,GAAE,aACjBA,GAAE,SAAS,gBAAgBC,GAAE,SAAS,eACtCD,GAAE,MAAM,MAAMC,GAAE,MAAM,MACtBD,GAAE,SAAS,eACX,IACAC,GAAE,SAAS,eACX,KAEPD,GAAE,SAAS,WAAWC,GAAE,SAAS,UAC1BD,GAAE,MAAM,QAAQC,GAAE,MAAM,QAE5B,IAGJD,GAAE,QAAQC,GAAE,QAEvByK,GAAK,QAAQ,CAAAT,OAAA;;AACL,UAAAmc,KAAQnc,GAAK,SAAS,UAAU,OAAOA,GAAK,OAC5CoC,KAAQpC,GAAK;UAEboC,KAAQ6Z,GAAA;YACJvD,KAAa,OAAO,OAAY8C,EAAAA,GAAAA,GAAAA,GAAAA,GAAqBU,EAAqB;AAC1E,QAAAA,GAAa,UAAUA,GAAaA,GAAa,SAAS,CAAC,EAAE,UAAUD,MACvEvD,GAAW,aAAa,IAE5BkD,EAAc,KAAA;AAAA,UACV,MAAME,EAAQ,UAAUG,GAAW7Z,EAAK;AAAA,UACxC,YAAAsW;AAAA,UACA,SAAS1Y,GAAK,SAAS,gBAAcK,MAAAD,KAAAJ,GAAK,UAAL,gBAAAI,GAAY,YAAZ,gBAAAC,GAAqB,OAAO4F,QAAyB;AAAA;;AAI9F,UAAAjG,GAAK,SAAS,gBAAgBmc;AAC9B,QAAAD,GAAa,KAAKC,EAAK;AAAA,eAChBnc,GAAK,SAAS;AACrB,QAAAkc,KAAeA,GAAa,OAAOC,CAAAA,OAASA,OAAUnc,GAAK,KAAK;AAAA,eACzDA,GAAK,SAAS,SAAA;YACjBuc,KAAc,OAAO,OAAYf,EAAAA,GAAAA,GAAAA,GAAAA,GAAqBU,EAAqB,GAC3EM,KAAa1e,IACVkC,GAAK,MAAM,SAASA,GAAK,MAAM,MAAM,SAAU,MAAM,MAAOuc,GAAY,aAAa,GAAA,GAExFE,KAAc3e,IACXkC,GAAK,MAAM,UAAUA,GAAK,MAAM,OAAO,SAAU,MAAM,MAAOuc,GAAY,aAAa,GAAA;AAExF,cAAAG,IAAA;AAAA,UACF,aAAa5e,IAAS,OAAOye,GAAY,SAAS,KAAK,MAAM,KAAM5W,EAAQ;AAAA;YAG3EgX,KAAc;AACZ,cAAAC,KAAY5c,GAAK,MAAM,YACvBwa,KAAWD,GAAgBva,GAAK,MAAM,WAAW,WAAW;AAC9D,YAAA4c,IAAA;gBACMve,KAAQD,GAAa4B,GAAK,MAAM,UAAU;AAChD,UAAA2c,KAAc3a,GAAQ,aAAa3D,IAAOmc,EAAQ,GAClDe,GAAe,KAAA,CAAMld,IAAOmc,EAAQ,CAAA;AAAA;AAGlC,cAAAqC,KAAA,CAAA,GACAnmB,MAAO6J,IAAAP,GAAK,MAAM,kBAAX,gBAAAO,EAA0B,MACjCuc,OAActc,KAAAR,GAAK,MAAM,kBAAX,gBAAAQ,GAA0B,gBAAe;SACxD9J,OAAS,YAAYA,OAAS,YAAYomB,KAC3CD,GAAU,OAAOnmB,MACT,CAAAomB,MAAepmB,OAAS,YAChCmmB,GAAU,aAAa,IAAI,SAG/BjB,EAAc,KAAA;AAAA,UACV,OAAA;AAAA,YACI,KAAK5b,GAAK,MAAM;AAAA,YAChB,OAAOwc;AAAA,YACP,QAAQC;AAAA,YACR,cAAAC;AAAA,YACA,aAAAC;AAAA,YACA,iBAAiB,EAAQ3c,GAAK,MAAM;AAAA,YACpC,eAAeA,GAAK,MAAM;AAAA,YAC1B,aAAA8c;AAAA,YACA,WAAAD;AAAA;;;AAKZ,MAAAZ,IAAY7Z;AAAA,QAGZ6Z,IAAYH,EAAQ,UACpBF,EAAc,KAAA;AAAA,MACV,MAAME,EAAQ,UAAUG,CAAS;AAAA,MACjC,YAAiBT,EAAAA,GAAAA,GAAAA;AAAAA,QAIzBJ,KAAaQ,GACbhC,IAAagC,EAAc,KAAK,CAAAhd;;AAAM,uBAAUA,QAAMwB,KAAAxB,GAAG,WAAW,eAAd,gBAAAwB,GAA0B,UAAS;AAAA,KAAO,GAEhGib,KAAsBzB,KAAcgC,EAAc,WAAW,IAAK5Z,GAAQ,MAAM,eAAe,IAAI,IACnGsZ,KAA0BD,OAElBhb,MAAAD,IAAA3B,GACMmd,EAAc,CAAC,EAAqB,WAAW,WAA+B,KAAA,MADpF,gBAAAxb,EAEG,MAFH,OAAAC,KAEQ,OACR,MACJ;AAAA;AAwCR,EAAAnJ,GAAA,MAAA;AACI,IAAAqkB,GAAe,QAAA,CAAA,CAAUld,IAAOwd,EAAI,MAAA;AAChC,MAAA7Z,GAAQ,gBAAgB3D,IAAOwd,EAAI;AAAA;0LApZpC5Z,GAAiB,SACpB0D,KAAW,IACXsT,KAAa,MACbH,KAAmB,MACnB8B,KAAY,IAEZC,KAAY,IACZC,IAAY,IACZC,KAAS,SACTC,KAAS,SACTC,KAAgB,IAChBrb,KAAW,IACXub,KAAa,KAGd4B,GAAAC,IAAW/a,GAAiB,mBAAmBA,GAAiB,KAAK,IAAI,CAAA,GACzEgb,GAAAC,IAAajb,GAAiB,mBAAmBA,GAAiB,KAAK,MAAM,CAAA,GAC7Ekb,GAAAC,IAAanb,GAAiB,mBAAmBA,GAAiB,KAAK,MAAM,CAAA,GAC7Eob,GAAAC,IAAqBrb,GAAiB,mBAAA;AAAA,IACrC,WAAWA,GAAiB,KAAK;AAAA,IACjC,gBAAgBA,GAAiB,KAAK;AAAA,IACtC,aAAaA,GAAiB,KAAK;AAAA,IACnC,mBAAmBA,GAAiB,KAAK;AAAA,IACzC,aAAaA,GAAiB,KAAK;AAAA,IACnC,YAAYA,GAAiB,KAAK;AAAA,IAClC,WAAWA,GAAiB,KAAK;AAAA,IACjC,QAAQA,GAAiB,KAAK;AAAA,IAC9B,aAAaA,GAAiB,KAAK;AAAA,IACnC,aAAaA,GAAiB,KAAK;AAAA,IACnC,uBAAuBA,GAAiB,KAAK;AAAA,OAE9Csb,GAAAC,IAAevb,GAAiB,mBAAmBA,GAAiB,KAAK,SAAS,CAAA,GAClFwb,GAAAC,IAAiBzb,GAAiB,mBAAmBA,GAAiB,KAAK,WAAW,CAAA,GACtF0b,GAAAC,IAAe3b,GAAiB,mBAAmBA,GAAiB,KAAK,SAAS,CAAA,GAClF4b,EAAAC,IAAa7b,GAAiB,mBAAmBA,GAAiB,KAAK,yBAAyB,CAAA,GAChG8b,GAAAC,IAAa/b,GAAiB,mBAAmBA,GAAiB,KAAK,uBAAuB,CAAA,GAC9Fgc,GAAAC,IAAgBjc,GAAiB,mBAAmBA,GAAiB,KAAK,UAAU,CAAA,GACpFkc,GAAAC,IAAqBnc,GAAiB,mBAAmBA,GAAiB,KAAK,kBAAkB,CAAA,GACjGoc,GAAAC,IAAerc,GAAiB,mBAAmBA,GAAiB,KAAK,QAAQ,CAAA,GACjFsc,GAAAC,IAAmBvc,GAAiB,mBAAmBA,GAAiB,KAAK,aAAa,CAAA,GAC1Fwc,GAAAC,IAAiBzc,GAAiB,mBAAmBA,GAAiB,KAAK,UAAU,CAAA,GACrF0c,GAAAC,IAAoB3c,GAAiB,mBAAmBA,GAAiB,KAAK,cAAc,CAAA,GAC5FwO,GAAAC,IAAezO,GAAiB,mBAAmBA,GAAiB,KAAK,QAAQ,CAAA,GAGrE,OAAAA,GAAiB,KAAK,QAAS,WACtCuW,KAAO8B,GAAauE,EAAS,KAE7BrG,KAAO,IACPvW,GAAiB,SAASzE,EAAc,IAAA,MAAM,2BAA2B,CAAA,CAAA;;QAgGzEshB,KAAc;AAEd,QAAAC,IAAA;AACM,YAAArf,KAAKH,IAAewf,EAAiB,CAAA;MACvCrf,GAAG,UACHof,KAAcpf,GAAG;AAAA;AAIzB,IAAAE,KAAWkf;AAAA;AApGX,EAAAtD,KAAiB5b,KACV,EAAA,GAAAof,IACH,YAAY,GAAA,IACZA,IAIJrZ,KAAWsS,GAAsBgH,IAAetZ,EAAQ;;UAIlDuZ,KAAgBC;AAClB,IAAArV,GAAiBoV,EAAa,KAC9BjG,KAAa,OAAOiG,EAAa,IAAIvZ,IACrCmT,KAAmBG,MAEnBH,KAAmB;AAAA;AAIxB,EAAAH,IAAayG,OAAkB;;QAE1BC,KAAe,IAEfC,KAAgC,IAChCC,KAAe;AAEf,QAAAH,MAAiBA,KAAgB,GAAA;AAC3B,YAAAI,KAAQ,OAAOJ,EAAa;AAElC,MAAAC,KAAeG,KAAQvG,KAAa,MAEpCqG,KAAeE,IACfD,KAAe;AAAA,IACR,MAAA,CAAAE,MAAsBL,OAAkB,MAC/CG,KAAe;AAGnB,IAAA3E,KAAYyE,IAEZxE,KAAYyE,IACZxE,IAAYyE;AAAA;AAIZ,EAAAxE,KAASZ,GAA2BuF,IAAa3L,IAAYgH,EAAM,GAInEC,KAASX,GAAyBsF,IAAa3E,EAAM,GAGtD4E,KAAA,CACEC,KAEGrH,MAAQqH,EAAY,WAAW,KAAKA,EAAY,CAAC,MAAA,CAE5CA,EAAY,CAAC,EAAE,SAASA,EAAY,CAAC,EAAE,UAAU,OAAA,CAGjDA,EAAY,CAAC,EAAE,OAAA,OACTA,EAAY,CAAC,EAAE,OAAQ,YAAYA,EAAY,CAAC,EAAE,OAAOrH,GAAK,SAK9EsH,KAAwB,GAAS,CAAAlgB,MAAYmgB,OAC5C,GAAQF,KAAeA,EAAY,CAAC,KAAKA,EAAY,CAAC,EAAE;;QAGpDG,KAAmB;AAEnB,IAAAZ,MAAiBQ,MAAsBE,OAEvCE,KAAmB5hB,GACd2hB,MAAmBF,KAAeA,EAAY,CAAC,KAAKA,EAAY,CAAC,EAAE,YACpE,GACA5E,EAAA,IAIRA,KAAgB+E;AAAA;AAIhB,SAAA9E,KAAiB9c,GAAa6hB,IAAqB,GAAG/E,EAAc,GAGrEgF,KAAWC,OAAkB,SAAS,SAAS,IAgB9ChF,KAAa9T,GAAkB+Y,IAAiBjF,EAAU,GA+M3DM,GAAiBjD,IAAMqH,GAAaQ,IAAa7E,EAAc,GAE/DjY,KAAA;AAAA,IACC,YAAAoV;AAAA,IACA,WAAAmC;AAAA,IACA,QAAAC;AAAA,IACA,QAAAC;AAAA,IACA,UAAAkF;AAAA,IACA,mBAAmB,EAAQhF;AAAA,KAG5BoF,IAAA;AAAA,IACC,UAAU,EAAQ1gB;AAAA,IAClB,gBAAgBga;AAAA,KAGjBjR,KAAA;AAAA,IACC,aAAa7K,GAAO6H,EAAQ;AAAA,IAC5B,eAAesT;AAAA,IACf,cAAc2B;AAAA,IACd,sBAAsBC;AAAA,IACtB,OAAOI;AAAA,IACP,oBAAoBrb;AAAA,IACpB,6BAA6Bsb;AAAA,KAG9BrB,KAAenW,GACd4U,GAAoBpT,GAAyB2O,IAA0B,EAAA,KAAA,IAAA,KAAKlO,EAAQ,GACpFoO,EAAA;;;MAiBE,KAAAzQ,GAAa,QAAQ5H,IAAK6H,EAAI,WAAI4X,KAAatR,GAAQ,mBAAmBA,GAAQ;AAAA;;;;;wBAInF+P,uBAEUtW,GAAa,eAAe5H,SAC5B4kB,GACH,YAAY,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA3kB;AAAA;QAETiC,GAAS;AAAA,aACT+K;AAAA,UACH,SAASkR;AAAA,UACT,QAAQwB,aAA6BA,EAAkB,MAAM;AAAA,UAC7D,SAASC;AAAA;;cAGNF,IAAU,CAAApb,OACR,GAAA,UAAUA,KACN,GAAAA,GAAK;;;;UAGI,MAAAA,GAAK;AAAA,wBACG2F;AAAA,UACF,YAAA3F,GAAK;AAAA;;qBAGNqb;AAAA;;;mBAGb,GAAArb,GAAK,QACE,QAAArE,EAAA,SAAAiC,GAAUoC,GAAK,MAAM,YAAY,GAAA,CAAA,CAAA,SAAArE;AAAA;QAAgB2H,GAAa,uBAAuB5H,IAAG;AAAA,UACjG,OAAOsE,GAAK,MAAM;AAAA,UAClB,MAAM8Y,OAAqB;AAAA;;;;QACpBlb,GAAS;AAAA,UAChB,OAAOoC,GAAK,MAAM;AAAA,UAClB,QAAS8Y,MAAoB9Y,GAAK,MAAM,kBAAkB,aAAc8Y,KAAmB,OAAO;AAAA;;8CAO3G,EAAA,SAAAnd,EAAA,SAAA2H,GAAa,eAAe5H,IAAK4kB,CAAS,GAC1C,CAAA,CAAA,GAAA3kB,EAAA,SAAAiC,GAAU+K,EAAK,GAOjB,CAAA,CAAA,IAAAyS,GAAW,eACLA,IAAU,CAAApb,OACR,GAAA,UAAUA,KACN,GAAAA,GAAK;;;;UAGI,MAAAA,GAAK;AAAA,wBACG2F;AAAA,UACF,YAAA3F,GAAK;AAAA;UAER,SAAAA,GAAK;AAAA;;;;mBAIhB,GAAAA,GAAK,QACE,QAAArE,EAAA,SAAAiC,GAAUoC,GAAK,MAAM,YAAY,GAAA,CAAA,CAAA,SAAArE;AAAA;QAAgB2H,GAAa,uBAAuB5H,IAAG;AAAA,UACjG,OAAOsE,GAAK,MAAM;AAAA,UAClB,MAAM8Y,OAAqB;AAAA;;;;QACpBlb,GAAS;AAAA,UAChB,OAAOoC,GAAK,MAAM;AAAA,UAClB,QAAS8Y,MAAoB9Y,GAAK,MAAM,kBAAkB,aAAc8Y,KAAmB,OAAO;AAAA;;;;;YAE3F,OAAAre,GAAAiB,GAAI,WAAW;AAAA;;oBACjBsE,GAAK,MAAM,GAAG;AAAA;;YACV,SAAAvF,GAAAuF,GAAK,MAAM,kBAAkB,UAAU,MAAM;AAAA;;;oBAEjDA,GAAK,MAAM,WAAW;AAAA;aACvBA,GAAK,MAAM,SAAS;AAAA;sBACjBpC,GAAS;AAAA,cACZ,QAAQoC,GAAK,MAAM;AAAA,cACnB,QAAQA,GAAK,MAAM,sBAAsBA,GAAK,MAAM,WAAW,MAAM;AAAA;;;;;;;;;wBAUnE2F;AAAA,sBACF6V;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpjBrB,SAAS+E,GAAeC,GAAuC;AAC3D,SAAA;AAAA,IACH,KAAK,OAAOA,KAAA,gBAAAA,EAAS,GAAG,KAAK;AAAA,IAC7B,OAAO,OAAOA,KAAA,gBAAAA,EAAS,KAAK,KAAK;AAAA,IACjC,QAAQ,OAAOA,KAAA,gBAAAA,EAAS,MAAM,KAAK;AAAA,IACnC,MAAM,OAAOA,KAAA,gBAAAA,EAAS,IAAI,KAAK;AAAA,EACnC;AACJ;AAEA,SAASC,GACLC,GACAC,GACAC,GACI;AACJ,QAAMC,MAAWF,KAAA,gBAAAA,EAAW,QAAQ,SAAQ,OAAMA,KAAA,gBAAAA,EAAW,QAAQ,UAAS,IACxEG,MAAWH,KAAA,gBAAAA,EAAW,QAAQ,QAAO,OAAMA,KAAA,gBAAAA,EAAW,QAAQ,WAAU;AAE9E,EAAIA,KAAA,QAAAA,EAAW,kBACPC,IACOF,EAAA,MAAMC,EAAU,MAAM,SAASG,IAE/BJ,EAAA,OAAOC,EAAU,MAAM,QAAQE,IAI1CF,KAAA,QAAAA,EAAW,gBACPC,IACOF,EAAA,SAASC,EAAU,MAAM,SAASG,IAElCJ,EAAA,QAAQC,EAAU,MAAM,QAAQE;AAGnD;AAEgB,SAAAE,GACZ3G,GACAuG,GACAK,GACF;AACE,QAAMnjB,IAAkB,CAAC;AAEJ,SAAA4iB,GAAA5iB,GAAK8iB,GAAWvG,MAAgB,UAAU,GAC1CqG,GAAA5iB,GAAKmjB,GAAe5G,MAAgB,YAAY,GAE9Dvc;AACX;AAEgB,SAAAojB,GACZ7G,GACAuG,GACAK,GACM;AACF,MAAAE;AACJ,QAAMC,MAAqBR,KAAA,gBAAAA,EAAW,QAAQ,SAAQ,OAAMA,KAAA,gBAAAA,EAAW,QAAQ,UAAS,IAClFS,MAAqBT,KAAA,gBAAAA,EAAW,QAAQ,QAAO,OAAMA,KAAA,gBAAAA,EAAW,QAAQ,WAAU,IAClFU,MAAyBL,KAAA,gBAAAA,EAAe,QAAQ,SAAQ,OAAMA,KAAA,gBAAAA,EAAe,QAAQ,UAAS,IAC9FM,MAAyBN,KAAA,gBAAAA,EAAe,QAAQ,QAAO,OAAMA,KAAA,gBAAAA,EAAe,QAAQ,WAAU;AAEpG,SAAI5G,MAAgB,eACT8G,IAAA;AAAA,IACHF,KAAA,QAAAA,EAAe,eAAgBA,EAAc,MAAM,SAASM,IAAyB;AAAA,IACrFX,KAAA,QAAAA,EAAW,eAAgBA,EAAU,MAAM,QAAQQ,IAAqB;AAAA,EAC5E,IAEOD,IAAA;AAAA,IACHP,KAAA,QAAAA,EAAW,eAAgBA,EAAU,MAAM,SAASS,IAAqB;AAAA,IACzEJ,KAAA,QAAAA,EAAe,eAAgBA,EAAc,MAAM,QAAQK,IAAyB;AAAA,EACxF,GAGGH,EAAK,IAAIpjB,EAAM,EAAE,KAAK,GAAG;AACpC;AAOO,SAASyjB,GAAmBvhB,GAA0B;;AACnD,QAAAtJ,KAAO0J,IAAAJ,EAAK,UAAL,gBAAAI,EAAY;AAElB,SAAA1J,MAAS,kBAAkBA,MAAS;AAC/C;AAEO,SAAS8qB,GAAoBxhB,GAA0B;;AAG1D,WAFaI,IAAAJ,EAAK,WAAL,gBAAAI,EAAa,UAEV;AACpB;AC7GgB,SAAAqhB,GACZrH,GACA7Y,GACoB;AACpB,SACI6Y,MAAgB,cAChBA,MAAgB,gBAChBA,MAAgB,YAETA,IAGJ7Y;AACX;ACQA,SAASmgB,GAAyBC,GAAqD;;AAC5E,SAAA;AAAA,IACH,OAAOrgB,IAAyBlB,IAAAuhB,EAAM,eAAN,gBAAAvhB,EAAkB,OAAO,EAAE;AAAA,IAC3D,QAAQkB,IAAyBjB,IAAAshB,EAAM,gBAAN,gBAAAthB,EAAmB,OAAO,EAAE;AAAA,IAC7D,QAAQiB,IAAyBf,IAAAohB,EAAM,kBAAN,gBAAAphB,EAAqB,OAAO,CAAC;AAAA,EAClE;AACJ;AAEA,SAASqhB,GAAeD,GAA2C;;AAC/D,QAAM7gB,IAAOQ,IAAyBlB,IAAAuhB,EAAM,WAAN,gBAAAvhB,EAAc,OAAO,EAAE,IAAI;AAE1D,SAAA;AAAA,IACH,OAAOU;AAAA,IACP,QAAQA;AAAA,IACR,QAAQA;AAAA,EACZ;AACJ;AAEA,SAAS+gB,GACL/gB,GACA6gB,GACAG,GAIa;;AACb,QAAMzX,IAA8B,CAAC,GAE/B0X,IAASJ,EAAM,WAAUG,KAAA,gBAAAA,EAAK,SAC9BE,IAAcD,KAAA,QAAAA,EAAQ,QAAQ3jB,GAAa2jB,EAAO,KAAK,IAAI,IAC3DE,IAAcF,KAAA,QAAAA,EAAQ,QAAQ,QAAO3hB,IAAA2hB,EAAO,UAAP,OAAA3hB,IAAgB,CAAC,IAAI;AAEhE,EAAAiK,EAAI,QAAQvJ,EAAK,OACjBuJ,EAAI,SAASvJ,EAAK,QAClBuJ,EAAI,eAAevJ,EAAK;AAElB,QAAAohB,IAAUP,EAAM,qBAAoBG,KAAA,gBAAAA,EAAK;AAC3C,SAAAzX,EAAA,aAAajM,GAAa8jB,CAAO,GAEjCF,KAAeC,MACf5X,EAAI,YAAY,eAAevM,GAAOmkB,CAAW,CAAC,IAAID,CAAW,KAG9D3X;AACX;AAEgB,SAAA8X,GACZC,GACAC,GACAC,GACC;AACD,MACI,CAACF,KAAY,CAACA,EAAS,SACvB,CAACA,EAAS,MAAM,QAAQ,CAACC,EAAY,SAASD,EAAS,MAAM,IAAI,KACjEA,EAAS,SAAS;AAEX,WAAAE;AAEP,MAAAxhB;AACA,MAAAshB,EAAS,MAAM,SAAS;AACjB,IAAAthB,IAAA4gB,GAAyBU,EAAS,KAAK;AAAA,WACvCA,EAAS,MAAM,SAAS;AACxB,IAAAthB,IAAA8gB,GAAeQ,EAAS,KAAK;AAAA;AAE7B,WAAAE;AAGJ,SAAAT,GAAkB/gB,GAAMshB,EAAS,OAAO;AAAA,IAC3C,OAAOA,EAAS;AAAA,IAChB,QAAQA,EAAS;AAAA,EAAA,CACpB;AACL;AC9FA,IAAIvkB;AAOG,SAAS0kB,KAAyB;AAKrC,MAJI,OAAO,WAAa,QACd1kB,KAAA,KAGNA,OAAQ;AACD,WAAAA;AAGL,QAAA2kB,IAAO,SAAS,cAAc,KAAK;AACzC,SAAAA,EAAK,MAAM,WAAW,YACtBA,EAAK,MAAM,UAAU,QACrBA,EAAK,MAAM,gBAAgB,UAC3BA,EAAK,MAAM,MAAM,OAEjBA,EAAK,YAAY,SAAS,cAAc,KAAK,CAAC,GAC9CA,EAAK,YAAY,SAAS,cAAc,KAAK,CAAC,GAErC,SAAA,KAAK,YAAYA,CAAI,GAC9B3kB,KAAM2kB,EAAK,iBAAiB,GACnB,SAAA,KAAK,YAAYA,CAAI,GAEvB3kB;AACX;ACzBgB,SAAA4kB,GACZrI,GACA7Y,GAC8B;AAC9B,SACI6Y,MAAgB,SAChBA,MAAgB,YAChBA,MAAgB,YAChBA,MAAgB,cAChBA,MAAgB,mBAChBA,MAAgB,kBAChBA,MAAgB,iBAEZA,MAAgB,QACT,UACAA,MAAgB,WAChB,QAEJA,IAGJ7Y;AACX;ACpBgB,SAAAmhB,GACZtI,GACAxW,GACArC,GACgC;AAChC,SACI6Y,MAAgB,UAChBA,MAAgB,YAChBA,MAAgB,WAChBA,MAAgB,mBAChBA,MAAgB,kBAChBA,MAAgB,kBAChBA,MAAgB,WAChBA,MAAgB,QAEZA,MAAgB,SACTxW,MAAc,QAAQ,UAAU,QAChCwW,MAAgB,UAChBxW,MAAc,QAAQ,QAAQ,UAElCwW,IAGJ7Y;AACX;AC5BA,SAASohB,KAAkB;AAC3B;AAEO,SAASC,GAAc1kB,GAAqB;AACxC,SAAA;AAAA,IACH,UAAU2kB,GAAI;AACV,aAAAA,EAAG3kB,CAAG,GACCykB;AAAA,IAAA;AAAA,EAEf;AACJ;ACNO,SAASG,GACZC,GACA/gB,GACAC,GACA+gB,GACF;AACE,QAAMloB,IAIA,CAAC,GACDmoB,IAAaD,EAAQ;AAE3B,SAAIC,KACKF,EAAA,QAAQ,CAACnkB,GAAIwD,MAAU;AACxB,QAAIxD,MAAO,QAAQ,OAAOA,KAAO;AAC7B;AAEJ,UAAMskB,IAAiBlhB,EAAQ,0BAA0BghB,EAAQ,qBAAqB,MAAMpkB,GAA+BwD,CAAK;AAE5H,QAAA+gB,GACAjb;AACJ,aAAS1P,IAAI,GAAGA,IAAIyqB,EAAW,QAAQ,EAAEzqB,GAAG;AAClC,YAAA4qB,IAAYH,EAAWzqB,CAAC;AAC1B,UAAA,CAAC4qB,EAAU;AACX;AAEA,UAAAA,EAAU,aAAa,QAAW;AAClC,QAAAD,IAAMC,EAAU,KAChBlb,IAAKjG,EAAiB,gBAAgBmhB,EAAU,IAAIF,CAAc;AAClE;AAAA,MAAA;AAIJ,UADoBjhB,EAAiB,gBAAgBmhB,EAAU,UAAUF,CAAc,GACtE;AACb,QAAAC,IAAMC,EAAU,KAChBlb,IAAKjG,EAAiB,gBAAgBmhB,EAAU,IAAIF,CAAc;AAClE;AAAA,MAAA;AAAA,IACJ;AAGJ,IAAIC,KACAroB,EAAM,KAAK;AAAA,MACP,KAAAqoB;AAAA,MACA,IAAAjb;AAAA,MACA,MAAMgb;AAAA,IAAA,CACT;AAAA,EACL,CACH,GAGEpoB;AACX;;;;;;AC3DgB,SAAAuoB,GAAiD7tB,GAAOklB,GAAoB;AACxF,MAAI4I,IAAQ,GACRC,GACAC,IAAS;AAEb,SAAO,WAAoB;AACjB,UAAAC,IAAM,KAAK,IAAI;AAErB,WAAI,CAACH,KAAS,KAAK,IAAIG,IAAMH,CAAK,IAAI5I,KAC1B4I,IAAAG,GAGAF,IAAU/tB,EAAG,MAAM,MAAM,SAA6B,MAG7DguB,MACQA,IAAA,IACT,WAAW,MAAM;AACJ,MAAAA,IAAA,IAECD,IAAA/tB,EAAG,MAAM,MAAM,SAA6B;AAAA,OACvDklB,CAAO,IAGP6I;AAAA,EACX;AACJ;ACnBO,SAASG,GAAaC,GAAwB;AAC3C,QAAA1c,IAAO0c,EAAK,sBAAsB,GAClCC,IAAW,iBAAiBD,CAAI;AAE/B,SAAA;AAAA,IACH,KAAK1c,EAAK,MAAM,WAAW2c,EAAS,SAAS;AAAA,IAC7C,OAAO3c,EAAK,QAAQ,WAAW2c,EAAS,WAAW;AAAA,IACnD,QAAQ3c,EAAK,SAAS,WAAW2c,EAAS,YAAY;AAAA,IACtD,MAAM3c,EAAK,OAAO,WAAW2c,EAAS,UAAU;AAAA,EACpD;AACJ;MChBUC,KAAmB;AAmFhB,SAAAC,GACLC,GACAC,GACAC,GACAC,GACAC,GACAvD,GAAA;AAEM,QAAAjM,IAAaqP,EAAe,QAAQ,MACpCpP,IAAcoP,EAAe,QAAQ,OACrCvO,IAAYuO,EAAe,QAAQ,KACnCrO,IAAeqO,EAAe,QAAQ;AAExC,EAAApD,IACAmD,EAAW,KAAA;AAAA,IACP,KAAKE,EAAK,SAASxO;AAAA,IACnB,MAAM0O,EAAc,OAAOxP;AAAA,IAC3B,OAAO,KAAK,IAAI,GAAGwP,EAAc,QAAQA,EAAc,OAAOxP,IAAaC,CAAW;AAAA,IACtF,QAAQsP,EAAK,MAAMD,EAAK,SAASxO,IAAYE;AAAA,IAC7C,OAAOqO,EAAe;AAAA,OAG1BD,EAAW,KAAA;AAAA,IACP,KAAKI,EAAc,MAAM1O;AAAA,IACzB,MAAMwO,EAAK,QAAQtP;AAAA,IACnB,OAAOuP,EAAK,OAAOD,EAAK,QAAQtP,IAAaC;AAAA,IAC7C,QAAQ,KAAK,IAAI,GAAGuP,EAAc,SAASA,EAAc,MAAM1O,IAAYE,CAAY;AAAA,IACvF,OAAOqO,EAAe;AAAA;;AAMzB,SAAAI,GACLL,GACApD,GACA0D,GACAzD,GACA9L,GACAwP,GAAA;AAOM,QAAAH,IAAA;AAAA,IACF,KAAK,KAAK,IAAO,GAAAE,EAAM,IAAI,CAAAzlB,MAAMA,EAAG,GAAG,CAAA;AAAA,IACvC,OAAO,KAAK,IAAO,GAAAylB,EAAM,IAAI,CAAAzlB,MAAMA,EAAG,KAAK,CAAA;AAAA,IAC3C,QAAQ,KAAK,IAAO,GAAAylB,EAAM,IAAI,CAAAzlB,MAAMA,EAAG,MAAM,CAAA;AAAA,IAC7C,MAAM,KAAK,IAAO,GAAAylB,EAAM,IAAI,CAAAzlB,MAAMA,EAAG,IAAI,CAAA;AAAA;MAGzC+hB,KAAAA,QAAAA,EAAW,eAAA;AACP,QAAA7c,GACAC;AACA,IAAA+Q,MAAU,kBAAkBA,MAAU,kBACtChR,IAAQwgB,EAAW,OAAO3D,EAAU,MAAM,OAC1C5c,IAASugB,EAAW,MAAM3D,EAAU,MAAM,WAE1C7c,IAAQugB,EAAM,CAAC,EAAE,OAAO1D,EAAU,MAAM,QAAQA,EAAU,QAAQ,OAAOA,EAAU,QAAQ,OAC3F5c,IAASsgB,EAAM,CAAC,EAAE,MAAM1D,EAAU,MAAM,SAASA,EAAU,QAAQ,MAAMA,EAAU,QAAQ,SAE/FmD;AAAA,MACIC;AAAAA,MACApD;AAAAA;AAAAA,QAGI,KAAK,GACL,OAAA7c,GACA,QAAAC,GACA,MAAM,EAAA;AAAA,MAEVsgB,EAAM,CAAC;AAAA,MACPF;AAAA,MACAvD;AAAA;;MAGJD,KAAAA,QAAAA,EAAW;AACF,aAAAnoB,IAAI,GAAGA,IAAI6rB,EAAM,SAAS,GAAK,EAAA7rB;AACpC,MAAAsrB,GACIC,GACApD,GACA0D,EAAM7rB,CAAC,GACP6rB,EAAM7rB,IAAI,CAAC,GACX2rB,GACAvD,CAAA;MAIRD,KAAAA,QAAAA,EAAW,aAAA;UACL4D,IAAUF,EAAMA,EAAM,SAAS,CAAC;AAClC,QAAAxgB,GACAG;AACA,IAAA8Q,MAAU,kBAAkBA,MAAU,kBACtCjR,IAAMygB,EAAW,SAAS3D,EAAU,MAAM,QAC1C3c,IAAOsgB,EAAW,QAAQ3D,EAAU,MAAM,UAE1C9c,IAAM0gB,EAAQ,SAAS5D,EAAU,MAAM,SAASA,EAAU,QAAQ,MAAMA,EAAU,QAAQ,QAC1F3c,IAAOugB,EAAQ,QAAQ5D,EAAU,MAAM,QAAQA,EAAU,QAAQ,OAAOA,EAAU,QAAQ,QAG9FmD;AAAA,MACIC;AAAAA,MACApD;AAAAA,MACA4D;AAAA;AAAA,QAGI,KAAA1gB,GACA,OAAO,GACP,QAAQ,GACR,MAAAG,EAAA;AAAA,MAEJmgB;AAAA,MACAvD;AAAA;;;;SAnLD,EAAA,aAAAxG,EAAA,IAAAnS,GACA,EAAA,WAAA0Y,EAAA,IAAA1Y,GACA,EAAA,eAAA+Y,EAAA,IAAA/Y,GACA,EAAA,eAAAuc,EAAA,IAAAvc,GACA,EAAA,eAAAwc,EAAA,IAAAxc,GACA,EAAA,WAAArE,EAAA,IAAAqE;QAELyc,IAAmBrB,GAAesB,GAAkBd,EAAgB;AAStE,MAAAE,IAAA,CAAA,GACAliB,GAEA+iB,IAAU,IACVC,IAA4C,MAC5CC,IAAwC;WAgCnCC,EAAyBC,GAAA;AAC1B,IAAAA,EAAQ,KAAK,CAAAC,MAAA;;AACP,YAAAC,MAAa9kB,KAAA6kB,EAAO,WAAP,gBAAA7kB,GAA+B;AAE1C,aAAA,EAAA8kB,MAAA,QAAAA,GAAW,SAASxpB,GAAI,4BAA4B,SACvDwpB,MAAA,QAAAA,GAAW,SAASxpB,GAAI,qBAAqB;AAAA,UAElDgpB,EAAA;AAAA;AA4HC,WAAAC,IAAA;AACA,QAAA,CAAAQ;;AAIC,UAAAC,IAAaD,EAAc,sBAAA,GAC3BE,IAAgB,OAAO,iBAAiBF,CAAa,GACrDb,KAAA;AAAA,MACF,KAAKc,EAAW,MAAM,WAAWC,EAAc,UAAU;AAAA,MACzD,OAAOD,EAAW,QAAQ,WAAWC,EAAc,YAAY;AAAA,MAC/D,QAAQD,EAAW,SAAS,WAAWC,EAAc,aAAa;AAAA,MAClE,MAAMD,EAAW,OAAO,WAAWC,EAAc,WAAW;AAAA;AAGhE,IAAAtB,IAAA,CAAA;AAEI,QAAAuB,KAAA,CAAA,GAAeH,EAAc,QAAQ,EACpC,OAAO,CAAAvmB,MAAMA,MAAOiD,KACjBjD,aAAc,eAAA,CACbA,EAAG,UAAU,SAAS2mB,GAAS,aAAa,KAC7C,iBAAiB3mB,CAAE,EAAE,YAAY,MAAA,GAErC4mB,KAAA,CAAA;WAEGF,GAAS,UAAA;AACN,YAAAG,IAAA,CAAA,GACAC,KAAaJ,GAAS,MAAA;AAC5B,MAAAG,EAAI,KAAKC,EAAU;AAEf,UAAAze,KAAOye,GAAW,sBAAA,GAClB1hB,KAAOiD,GAAK,MACZnD,KAAQmD,GAAK,OACblD,KAASkD,GAAK;aAEXqe,GAAS,UAAA;AACR,YAAAK,KAAQL,GAAS,CAAC,GAClBre,KAAO0e,GAAM,sBAAA;YAEbvL,MAAgB;AACZnT,cAAAA,GAAK,MAAMlD;;mBAGRH,MAAc,QAASqD,GAAK,OAAOnD,KAAUmD,GAAK,QAAQjD;;AAIrE,QAAAF,KAAQ,KAAK,IAAIA,IAAOmD,GAAK,KAAK,GAClCjD,KAAO,KAAK,IAAIA,IAAMiD,GAAK,IAAI,GAC/BlD,KAAS,KAAK,IAAIA,IAAQkD,GAAK,MAAM,GACrCwe,EAAI,KAAKE,EAAK,GACdL,GAAS,MAAA;AAAA;AAGb,MAAAE,GAAK,KAAKC,CAAG;AAAA;AAGX,UAAAG,KAAA,CAAA;AACN,IAAAJ,GAAK,QAAQ,CAAAC,MAAA;AACH,YAAApB,KAAQoB,EAAI,IAAI,CAAA7mB,OAAM8kB,GAAa9kB,EAAE,CAAA;AAEvC,MAAAgF,MAAc,SAASwW,MAAgB,gBACvCiK,GAAM,QAAA,GAGN1D,KACAyD;AAAA,QACIL;AAAA,QACApD;AAAA,QACA0D;AAAA,QACAjK,MAAgB;AAAA,QAChBA,MAAgB,aAAaqK,IAAgBD;AAAA,QAC7CF;AAAA;AAIF,YAAAuB,KAAA;AAAA,QACF,KAAK,KAAK,IAAO,GAAAxB,GAAM,IAAI,CAAAzlB,OAAMA,GAAG,GAAG,CAAA;AAAA,QACvC,OAAO,KAAK,IAAO,GAAAylB,GAAM,IAAI,CAAAzlB,OAAMA,GAAG,KAAK,CAAA;AAAA,QAC3C,QAAQ,KAAK,IAAO,GAAAylB,GAAM,IAAI,CAAAzlB,OAAMA,GAAG,MAAM,CAAA;AAAA,QAC7C,MAAM,KAAK,IAAO,GAAAylB,GAAM,IAAI,CAAAzlB,OAAMA,GAAG,IAAI,CAAA;AAAA;AAE7C,MAAAgnB,GAAS,KAAKC,EAAM;AAAA,QAGpBjiB,MAAc,SAASwW,MAAgB,cACvCwL,GAAS,QAAA,GAET5E,KACAoD;AAAA,MACIL;AAAA,MACA/C;AAAA,MACA4E;AAAA,MACAxL,MAAgB;AAAA,MAChBA,MAAgB,aAAaoK,IAAgBC;AAAA,MAC7CH;AAAA,OAIRP,EAAW,QAAQpD,CAAAA,MAAAA;AACfA,MAAAA,EAAU,OAAOyE,EAAW,KAC5BzE,EAAU,QAAQyE,EAAW;AAAA;;AAQrC,SAAAluB,GAAA,MAAA;AACI,IAAA0tB,IAAU;AAAA,seAnRXO,IAAuC,OAKnCP,KAAWO,KAAiBN,KAAoBC,OAC/CD,MACAA,EAAiB,WAAA,GACjBA,IAAmB,OAEnBC,MACAA,EAAe,WAAA,GACfA,IAAiB,OAEjBF,KAAWO,aACA,mBAAqB,QAC5BN,IAAA,IAAuB,iBAAiBE,CAAwB,GAChEF,EAAiB,QAAQM,GAAA;AAAA,IACrB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS;AAAA,cAGN,iBAAmB,QAC1BL,IAAA,IAAqB,eAAeJ,CAAgB,GACpDI,EAAe,QAAQK,CAAa,MAKzCP,KAAWO,KACdT,EAAA,GAyPqB,QAAA/oB,EAAA,SAAAD,GAAI,qBAAqB,GAAtC,CAAA,CAAA,GAAAC,EAAA,QAAAkG,YACLkiB,GAAU,CAAA/jB,MAEF,OAAArE,EAAA,SAAAD,GAAI,2BAA2B,GAAA,CAAA,CAAA,GAAAI,GAAA;AAAA,IACzB,MAAA,GAAAkE,EAAK,IAAI;AAAA,IACV,KAAA,GAAAA,EAAK,GAAG;AAAA,IACN,OAAA,GAAAA,EAAK,KAAK;AAAA,IACT,QAAA,GAAAA,EAAK,MAAM;AAAA,EAGf,CAAA,CAAA,QAAArE,EAAA,SAAAD,GAAI,4BAA4B,GAAA,CAAA,CAAA,GAAAI,GAAA;AAAA,cACzBkE,EAAK,MAAM,KAAK;AAAA,eACfA,EAAK,MAAM,MAAM;AAAA,wBACVA,EAAK,MAAM,YAAY;AAAA,gBAC1BA,EAAK,MAAM;AAAA,kBACXA,EAAK,MAAM;AAAA;IC5UpC8lB,KAAA;AAAA,EACF,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA;AAAA,EAEL,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,gBAAgB;GAGdC,KAAA;AAAA,EACF,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,UAAU;AAAA;AAAA,EAEV,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,gBAAgB;GAGdC,KAAA,CACF,qBACA,QAAA;;6xBAmCO,EAAA,kBAAA/jB,GAAA,IAAAgG,KACA,cAAA2C,KAAyC,OAAA,IAAA3C;AAE9C,QAAAjG,KAAUxK,GAAyB+F,EAAQ,GAE3CqG,KAAY5B,GAAQ;;AAEtB,MAAAikB,IACA7L,KAAoC,YACpCqK,KAAgD,SAChDD,KAAkD,SAClD7D,KAAmC,MACnCK,KAAuC,MACvCkF,GACAC,KAAA,CAAA;AAIK,WAAAnX,KAAA;AACL,IAAAoL,KAAc,YACdqK,KAAgB,SAChBD,KAAgB,SAChB0B,IAAS;AAAA;WAwBJ9a,GAAatQ,GAAAA;AAClB,IAAAmH,KAAmBmkB,KAAA;AAAA,MACZ,GAAAnkB;AAAA,MACH,MAAA;AAAA,WACOA,GAAiB;AAAA,QACpB,OAAOnH,EAAM,OAAOwE,EAAM;AAAA;;;AAKlC,MAAAxE,KAAA,CAAA,GACAsrB;AA+MJ,EAAAlvB,GAAA,MAAA;AACI,IAAA4D,GAAM,QAAQ,CAAAvD,MAAA;AACV,MAAAA,EAAQ,QAAA;AAAA;0LA1Pb6Y,IAAWnO,GAAiB,UASxBmO,KACHpB,GAAA,GAGDqX,IAAYpkB,GAAiB,KAAK,SAElCqkB,IAA6B,SAAAlmB,KAAA6B,GAAiB,KAAK,iBAAtB,gBAAA7B,GAAoC,SAAS,WAAW6B,GAAiB,oBACrG5B,KAAA4B,GAAiB,KAAK,iBAAtB,gBAAA5B,GAAoC,cAAiB,EAAA,KACpDE,KAAA0B,GAAiB,KAAK,iBAAtB,QAAA1B,GAAoC,OAAOqiB,GAAW3gB,GAAiB,KAAK,aAAa,IAAI,IAAI,MAAA,GAEnGskB,GAAAC,IAAkBvkB,GAAiB,mBAAmBA,GAAiB,KAAK,WAAW,CAAA,GACvFwkB,GAAAC,IAAiBzkB,GAAiB,mBAAmBA,GAAiB,KAAK,WAAW,CAAA,GACtF0kB,GAAAC,IAAoB3kB,GAAiB,mBAAmBA,GAAiB,KAAK,0BAA0B,CAAA,GACxG4kB,GAAAC,IAAoB7kB,GAAiB,mBAAmBA,GAAiB,KAAK,4BAA4B,CAAA,GAC1G8kB,GAAAC,IAAgB/kB,GAAiB,mBAAmBA,GAAiB,KAAK,SAAS,CAAA,GACnFglB,GAAAC,IAAoBjlB,GAAiB,mBAAmBA,GAAiB,KAAK,cAAc,CAAA,GAC5FklB,EAAAC,IAAanlB,GAAiB,mBAAmBA,GAAiB,KAAK,MAAM,CAAA,GAC7E4O,GAAAC,IAAY7O,GAAiB,mBAAmBA,GAAiB,KAAK,KAAK,CAAA,GAC3EgP,GAAAC,IAAajP,GAAiB,mBAAmBA,GAAiB,KAAK,MAAM,CAAA,GAC7EolB,GAAAC,IAAmBrlB,GAAiB,mBAAmBA,GAAiB,KAAK,cAAc,CAAA;;AAgBtF,QAAAmN,IAAA,CAAA;QAMAnN,GAAiB,KAAK,gBACtB,MAAM,QAAQslB,EAAoB,KAClC,MAAM,QAAQtlB,GAAiB,KAAK,aAAa,UAAU,GAAA;AAErD,YAAA+gB,KAAU/gB,GAAiB,KAAK;AACtC,MAAAmN,IAAW0T,GAAwByE,IAAsBvlB,IAASC,IAAkB+gB,EAAO;AAAA;AAE3F,MAAA5T,KAAY,MAAM,QAAQiX,CAAS,KAAKA,SAAiB,IAAI,CAAAznB,UAErD,KAAKA,GAAA;AAKX,UAAA4oB,KAAA,IAAqB,IAAI1sB,EAAK,GAC9B2sB,KAAuB,oBAAA,IAAA;IAEzBrB,OAAgBnkB,MAChBnH,GAAM,QAAQ,CAAAvD,OAAA;AACV,MAAAkwB,GAAiB,IAAIlwB,GAAQ,MAAMA,EAAO;AAAA,QAIlDuD,KAAQsU,EAAS,KAAKpP,IAAMoC,OAAA;YAClBslB,KAAQD,GAAiB,IAAIznB,GAAK,GAAG;AACvC,aAAA0nB,MACAF,GAAe,OAAOE,EAAK,GACpBA,MAGJzlB,GAAiB,oBAAoBjC,GAAK,KAAA;AAAA,QAC7C,MAAMoC;AAAA,QACN,WAAWpC,GAAK;AAAA,QAChB,IAAIA,GAAK;AAAA;;eAIN8P,MAAO0X;AACd,MAAA1X,GAAI,QAAA;AAER,IAAAsW,KAAcnkB;AAAA;;AAIV,QAAAqjB,IAAA,CAAA;AAEJ,IAAAxqB,GAAM,QAAQ,CAAAkF,OAAA;AACV,MAAAslB,EAAS,KACLrjB,GAAiB,mBAAA;AAAA,QACb,OAAOjC,GAAK,KAAK;AAAA,QACjB,QAAQA,GAAK,KAAK;AAAA;WAM9BimB,KAAatpB,GAAQ2oB,GAAU,CAAApnB,OAAA,CAAA,GAAWA,EAAG,CAAA,CAAA;AAAA;MAI7Ckc,KAAcqH,GAA4BkG,IAAkBvN,EAAW,GAGxEwN,IAAOC,OAAoB,QAE3BC,IAA0B1N,OAAgB,gBAAiB,CAAAwN,GAC3DG,IAA2B3N,OAAgB,cAAe,CAAAwN,GAE1DI,IAAe5N,OAAgB,aAAA,CAAc6N,GAAY,MAAM1G,EAAkB,GACjF2G,KAAgB9N,OAAgB,aAAA,CAAc6N,GAAY,MAAMzG,EAAmB,GAGlFiD,KAAgBhC,GAAgC0F,IAAoB1D,EAAa,GAIjFD,KAAgB9B,GAAkC0F,IAAoBrU,IAAYyQ,EAAa,GAI3F6D,KAAA,QAAAA,EAAgB,SAASjO,OAAgB,aAAamI,GAAA,GAAA;AAChD5Z,UAAAA,IAAQwZ,GACVkG,EAAe,OACfrC,KACArF,MAAA,gBAAAA,GAAW,UAAS,IAAA;AAGpBhY,IAAAA,IACAgY,KAAA;AAAA,MACI,eAAe,IAAQngB,KAAA6nB,EAAe,kBAAf,QAAA7nB;AAAA,MACvB,aAAa,IAAQsF,KAAAuiB,EAAe,gBAAf,QAAAviB;AAAA,MACrB,cAAc,IAAQC,KAAAsiB,EAAe,iBAAf,QAAAtiB;AAAA,MACtB,OAAA4C;AAAAA,MACA,SAAS4X,GAAe8H,EAAe,OAAO;AAAA,QAGlD1H,KAAY;AAAA;AAGhB,IAAAA,KAAY;MAKZ2H,MAAA,QAAAA,GAAoB,SAASlO,OAAgB,aAAamI,GAAA,GAAA;AACpD5Z,UAAAA,IAAQwZ,GACVmG,GAAmB,OACnBtC,KACAhF,MAAA,gBAAAA,GAAe,UAAS,IAAA;AAGxBrY,IAAAA,IACAqY,KAAA;AAAA,MACI,eAAe,IAAQzL,KAAA+S,GAAmB,kBAAnB,QAAA/S;AAAA,MACvB,aAAa,IAAQG,KAAA4S,GAAmB,gBAAnB,QAAA5S;AAAA,MACrB,cAAc,IAAQE,KAAA0S,GAAmB,iBAAnB,QAAA1S;AAAA,MACtB,OAAAjN;AAAAA,MACA,SAAS4X,GAAe+H,GAAmB,OAAO;AAAA,QAGtDtH,KAAgB;AAAA;AAGpB,IAAAA,KAAgB;AAIrB,EAAAhW,KAAsB2V,MAAaK,KAClCD,GAAuB3G,IAAauG,IAAWK,EAAa,IAC5D;;AAGM,UAAAuH,IAAWC,MAAA,gBAAAA,GAAa;AAC1B,IAAAD,KAAYze,GAAiBye,CAAQ,IACrCrC,IAASqC,IAETrC,IAAS;AAAA;;AAMT,QAAAuC,IAAA,CAAA;IAEArO,OAAgB,cAChBqO,EAAqB,gBAAgB,KAErCrO,OAAgB,iBAChBqO,EAAqB,eAAeb,IAAO,UAAU9B,GAAWtB,EAAa,IAE7EpK,OAAgB,eAChBqO,EAAqB,eAAeb,IAAO,UAAU7B,GAAWtB,EAAa;AAE3E,UAAAiE,MACFhU,MAAA,gBAAAA,GAAY,UAAS,mBACrBA,MAAA,gBAAAA,GAAY,UAAS,mBAAkB9J,MAAA,gBAAAA,GAAc,8BAEnD+d,KAAA,CACDnT,MACDA,GAAY,SAAS,kBACrBA,GAAY,SAAS,mBAAkB5K,MAAA,gBAAAA,GAAc;KAEpDkd,KAA2BY,OAC5BD,EAAqB,8BAA8B,KAElD,CAAAvC,KAAA,CAAW6B,KAA4BY,OACxCF,EAAqB,4BAA4B,KAErDA,EAAqB,eAAeT,GACpCS,EAAqB,gBAAgBP,IACjC9N,OAAgB,iBAChBqO,EAAqB,6BAA6B,eAElDrO,OAAgB,eAChBqO,EAAqB,6BAA6B,aAElDb,MACAa,EAAqB,sBAAsB,KAG/CtC,KAAoB1hB,GAAkBgkB,GAAsBtC,EAAiB;AAAA;AAG9E,SAAA5iB,KAAA;AAAA,IACC,aAAA6W;AAAA,IACA,QAAQqK;AAAA,IACR,QAAQD;AAAA,IACR,MAAAoD;AAAA,IACA,UAAWgB,MAAsB,MAASA,MAAsB,IAAK,YAAY;AAAA,KAGlFjgB,KAAA;AAAA,IACC,KAAMgY,MAAaK,KACfC,GAAa7G,IAAauG,IAAWK,EAAa,IAClD;AAAA,IACJ,gBAAgBkF;AAAA;;;MAWf,KAAA5iB,GAAa,aAAa5H,IAAK6H,EAAI;AAAA;;;;MAKxB,gBAAA,EAAQ2iB;AAAA,gBACdprB;AAAA;;;;2BAGHA,IAAK,CAAAkF;;;4BAEcA;AAAA,wBACJmmB;AAAA;;;SAIjB,CAAA,IAAAxF,MAAaK;;;qBAECjN;AAAA;;;;;;;;;;;;;;;;;AC3VP,SAAA8U,GACZzO,GACA7Y,GACW;AAEP,SAAA6Y,MAAgB,cAChBA,MAAgB,eAETA,IAGJ7Y;AACX;;iFCAe,EAAA,kBAAAU,EAAA,IAAAgG,KACA,cAAA2C,IAAyC,OAAA,IAAA3C,GAEhDmS,IAA2B,cAE3BjQ,IAAa;AAIR,WAAA6E,IAAA;AACL,IAAAoL,IAAc,cACdjQ,IAAa;AAAA;yLAJdiG,IAAWnO,EAAiB,UAOxBmO,KACHpB,EAAA,GAGD8Z,EAAAC,IAAqB9mB,EAAiB,mBAAmBA,EAAiB,KAAK,eAAe,CAAA,GAG7FmY,IAAcyO,GAA0BG,KAAA,gBAAAA,EAAqB,aAAa5O,CAAW,GAItF6O,IAAA,EACCD,KAAA,QAAAA,EAAqB,UAEjBA,EAAoB,UAAU,iBAE1BA,EAAoB,MAAM,WAAW,KACrCA,EAAoB,MAAM,QAAQ,KAAK,MAAM,KAMrD7e,IAAa/L,GAAa4qB,KAAA,gBAAAA,EAAqB,OAAO,GAAG7e,CAAU,GAGpEgC,IAAQiO,MAAgB,eAAe,SAAStc,GAAO,CAAC,GACxD8O,IAASwN,MAAgB,eAAetc,GAAO,CAAC,IAAI,QAEpD6K,IAAA,EACC,YAAAwB,GACA,OAAAgC,GACA,QAAAS,EAAA,GAGDrJ,IACC,EAAA,aAAA6W,EAAA;;;MAKC,KAAA9W,GAAa,aAAa5H,IAAK6H,CAAI;AAAA;;;;;wBAInC0lB,IACY,QAAAttB,EAAA,SAAAD,GAAI,kBAAyB,CAAA,CAAA,GAAAC,EAAA,SAAAiC,GAAU+K,CAAK,GAAA,CAAA,CAAA;;;;;;;;;;;;;;;;ACtEjD,SAAAugB,GAAqBvuB,GAGlCiJ,GAAsBrC,GAA4B;AACjD,MAAIwZ,IAASpgB,EAAI;AACjB,QAAMqgB,IAASrgB,EAAI;AAQnB,SANIogB,MAAW,UACFA,IAAAnX,MAAc,QAAQ,SAAS,UACjCmX,MAAW,UACTA,IAAAnX,MAAc,QAAQ,UAAU,SAIzCmX,KAAUA,MAAW,UAAUA,MAAW,YAAYA,MAAW,WACjEC,KAAUA,MAAW,SAASA,MAAW,YAAYA,MAAW,WAEzDzZ,IAGJL,GAAS;AAAA,IACZ,8BAA8B6Z;AAAA,IAC9B,4BAA4BC;AAAA,EAAA,CAC/B;AACL;AC1BO,SAASmO,GAAcpG,GAAsB;AAC5C,SAAAA,EAAK,WAAW,OAAO,IAChB3jB,GAAW2jB,CAAI,IAEnB,yBAAyB3jB,GAAW2jB,CAAI,CAAC;AACpD;MCNUqG,KAAiB,kFACjBC,KAAc,YAEdC,KAA4B,oBAE5BC,KAAgB,GAChBC,KAAe,GACfC,KAAc;4iCA6BT,EAAA,kBAAAxnB,OAAAgG,KACA,cAAA2C,KAAyC,OAAA,IAAA3C;AAE9C,QAAAjG,KAAUxK,GAAyB+F,EAAQ,GAE3CqG,KAAY5B,GAAQ;;AAEtB,MAAA0nB,IACAC,KAAQJ,IACRK,KAAU,IACVC,KAAmBP,IAEnBQ,KAAW,IACXC,IACAC,KAAkB,IAElB7oB,KAAQ,QACR8oB,IAAW,WACXC,KAAsB,KACtBtN,IACApC,KAAqB,aACrBmC,KAAc,IACdwN,KAAwB,IACxBC,KAAqB,GACrBC,KAAiB,GACjBC,IAAoB,GACpBpgB,KAAS,IACTqgB,KAAiB,IACjBC,KAAc,IACdC,KAAsB,IACtBC,KAAc;AAIT,WAAA1b,KAAA;AACG,IAAA7N,KAAA,QACG8oB,IAAA,WACAzP,KAAA,aACWiQ,KAAA,IACRC,KAAA;AAAA,EAAA;WAqCTC,GAAeC,IAAA;AACZ,IAAAjB,KAAAJ;AAAA,EAAA;WA2CHsB,GAAeC,IAAA;AAIT,IAAAb,IAAAf,GAAqB4B,IAAK/W,IAAYkW,CAAQ;AAAA,EAAA;AAyF7D,EAAA/yB,GAAA,MAAA;AACY,IAAA8K,GAAA,gBAAgB4a,IAAWpC,EAAQ;AAAA,EAAA,wLAtL5CpK,IAAWnO,GAAiB,UAUxBmO,KACHpB,GAAA,GAGD+b,GAAAC,IAAe/oB,GAAiB,mBAAmBA,GAAiB,KAAK,SAAS,CAAA,GAClFgpB,GAAAC,IAAajpB,GAAiB,mBAAmBA,GAAiB,KAAK,OAAO,CAAA,GAC9E4O,GAAAC,IAAY7O,GAAiB,mBAAmBA,GAAiB,KAAK,KAAK,CAAA,GAC3EgP,GAAAC,IAAajP,GAAiB,mBAAmBA,GAAiB,KAAK,MAAM,CAAA,GAC7EkpB,GAAAC,IAAcnpB,GAAiB,mBAAmBA,GAAiB,KAAK,OAAO,CAAA,GAC/EopB,GAAAC,IAAuBrpB,GAAiB,mBAAmBA,GAAiB,KAAK,iBAAiB,CAAA,GAClGspB,GAAAC,IAAYvpB,GAAiB,mBAAmBA,GAAiB,KAAK,KAAK,CAAA,GAC3EwpB,GAAAC,IAAezpB,GAAiB,mBAAA;AAAA,IAC/B,8BAA8BA,GAAiB,KAAK;AAAA,IACpD,4BAA4BA,GAAiB,KAAK;AAAA,EAAA,KAEnD0pB,GAAAC,IAAW3pB,GAAiB,mBAAmBA,GAAiB,KAAK,aAAa,CAAA,GAClFklB,GAAAC,IAAanlB,GAAiB,mBAAmBA,GAAiB,KAAK,MAAM,CAAA,GAC7E4pB,GAAAC,IAAgB7pB,GAAiB,mBAAmBA,GAAiB,KAAK,UAAU,CAAA,GACpF8pB,EAAAC,IAAe/pB,GAAiB,mBAAmBA,GAAiB,KAAK,SAAS,CAAA,GAClFgqB,GAAAC,IAA0BjqB,GAAiB,mBAAmBA,GAAiB,KAAK,oBAAoB,CAAA,GACxGkqB,GAAAC,IAAcnqB,GAAiB,mBAAmBA,GAAiB,KAAK,OAAO,CAAA,GAC/EoqB,GAAAC,IAAsBrqB,GAAiB,mBAAmBA,GAAiB,KAAK,gBAAgB,CAAA,GAChGsqB,GAAAC,IACCvqB,GAAiB,mBAAmBA,GAAiB,KAAK,0BAA0B,CAAA;;QAGhFynB,KAAMznB,GAAiB,KAAK,SAAS,QAAQwqB,KAAcC;AAC/D,IAAA9C,KAAUF,OAAQL,IACdO,OACM+C,KAAAvD,KAECM,KAAAA;AAAAA,EAAAA;AAMZ,EAAAiB,GAAuB,GAGAF,KAAApjB,GAAkBulB,IAA8BnC,EAAmB,GAIpFV,KAIUD,KAAA,MAHAA,KAAA,IACX7nB,GAAiB,SAASzE,EAAA,IAAc,MAAkB,YAAAyE,GAAiB,KAAK,SAAS,QAAQ,YAAY,WAAW,UAAUA,GAAiB,KAAK,IAAI,GAAA,CAAA,CAAA,IAMjK4qB,MAAiBnY,MAAA,gBAAAA,GAAY,UAAS,gBAEtCoY,MAAkBtX,MAAA,gBAAAA,GAAa,UAAS;;UAGjCuX,KAAUC;KAEXrD,OAAUJ,MAAiBI,OAAUF,MAAeG,OAAYmD,MACjE/C,KAAA,QAA0Bb,GAAc4D,EAAO,CAAA,MACjCrC,KAAAD,OAEIT,KAAA,IACJU,KAAA;AAAA;EAIff,OAAUJ,MAAiBI,OAAUF,MAAeG,KACpCC,KAAAzrB,GAAa6uB,IAAuB,GAAGpD,EAAgB,IAEvDA,KAAA,IAIX1oB,KAAAF,GAAUisB,EAAU,KAAK/rB,IASlC0pB,GAAesC,EAAa,GAE5BC,MAAMC,MAAA,gBAAAA,GAAW,gBAAe;;AAGzB,UAAA9E,KAAWC,KAAA,gBAAAA,EAAa;AAC1B,IAAAD,MAAYze,GAAiBye,EAAQ,IACrC2B,MAAuB,MAAM,OAAO3B,EAAQ,GAAG,QAAQ,CAAC,IAElC2B,KAAA;AAAA;;UAKpBhsB,KAAMovB,IACNC,IAAervB,KAAME,GAAaF,EAAG,IAAI,QACzCsvB,IAAcjT,GAAgBkT,IAAejT,EAAQ;AACvD,KAAA+S,MAAiB3Q,MAAa4Q,MAAgBhT,QACtCxY,GAAA,gBAAgB4a,IAAWpC,EAAQ,GAC3CmC,KAAc4Q,IAAevrB,GAAQ,aAAaurB,GAAcC,CAAW,IAAI,IACnE5Q,KAAA2Q,GACD/S,KAAAgT;AAAA;AAIZ,MAAAE,MAA4BA,GAAyB,SAAS,QAAA;UAC3DzoB,KAAYyoB;AAElB,IAAAvD,KAAwBtlB,GAAuBI,GAAU,cAAc,aAAa,EAAE,QAAQ,MAAM,GAAG,GACnFqlB,IAAAhpB,GAAyB2D,GAAU,UAAU,GAAG,GACnDolB,KAAA/oB,GAAyB2D,GAAU,aAAa,CAAC,GAC7CmlB,KAAA9oB,GAAyB2D,GAAU,OAAO,CAAC;AAAA,EAAA;;QAI5D0oB,KAAY,IACZC,IAAc;IACd,MAAM,QAAQC,EAAY,KAAKA,GAAa,WAChCF,KAAA5jB,GAAa8jB,IAAc5rB,GAAiB,QAAQ,IAEhE0rB,OACcC,IAAA,gDAET1jB,KAAAyjB,IACQpD,KAAAqD,GACHpD,KAAAzW,OAAe,SAAS,MAAM,QAAQ8Z,EAAY,KAAKA,GAAa,KAAK,CAAAjvB,MAAMA,EAAG,SAAS,YAAY;AAAA,EAAA;AAGtH,SAAA2E,KAAA;AAAA,IACC,QAAQ2mB,OAAwB;AAAA,IAChC,oBAAoB2C;AAAA,IACpB,qBAAqBC;AAAA,IACrB,QAAQnD,OAAUH;AAAA,IAClB,qBAAqB,EAAQW,MAA0BR,OAAUJ;AAAA,IACjE,iBAAiBiB;AAAA,KAGlB7hB,IAAA;AAAA;AAAA,IAEC,oBAAoBqhB;AAAA,IACpB,oBAAoBA,cAA8BH;AAAA,IAClD,mBAAmB1oB;AAAA,IACnB,aAAaopB,MAAkB;AAAA,IAC/B,cAAcppB;AAAA,IACd,mBAAmB8oB;AAAA,IACnB,QAAA;AAAA,MACIN,OAAUH,MAAgB7M,aAAsBA,EAAW,MAAM;AAAA,MACjEzS;AAAA,IACF,EAAA,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IAC1B,oCAAoCigB,MAAyB;AAAA,IAC7D,kCAAkCA,KAAwBC,KAAqB;AAAA,IAC/E,6BAA6BD,KAAA,GAA2BE,EAAc,OAAO;AAAA,IAC7E,gCAAgCF,QAA2BG,CAAiB,OAAO;AAAA,6GAoBrFR;;;MAEO,KAAAxmB,GAAa,SAAS5H,IAAK6H,EAAI;AAAA;;yBAGjB;AAAA;;;qBAIV,IAAAA,GAAK,SACO,QAAA5H,EAAA,SAAAD,GAAI,uBAAuB,GAAA,CAAA,CAAA,GAAAI,GAAA;AAAA,6BAA0BouB,EAAmB;AAAA,MAGtE,CAAA,CAAA,QAAAvuB,EAAA,SAAAD,GAAI,cACN,CAAA,CAAA,GAAAC,EAAA,OAAAguB,OAAUF,KAAcL,KAAiBW,IACpC,CAAA,CAAA,GAAApuB,EAAA,WAAAmyB,KAAwBpD,KAAe,UAAU,QAAM,CAAA,CAAA,GAAA/uB,EAAA,YACvD+uB,KAAc,SAAS,yBAC1B9sB,GAAU+K,CAAK,GAAA,CAAA,CAAA,GAAAhN,EAAA,OAAAyxB,IAAA,CAAA,CAAA,GAAAzxB,EAAA,eAETyxB,KAAM,OAAO,uBAPf1D,IAAG,CAAA,CAAA,aAeX,OAAA/tB,EAAA,SAAAD,GAAI,cACN,CAAA,CAAA,GAAAC,EAAA,OAAAguB,OAAUF,KAAcL,KAAiBW,IACpC,CAAA,CAAA,GAAApuB,EAAA,WAAAmyB,KAAwBpD,KAAe,UAAU,QAAM,CAAA,CAAA,GAAA/uB,EAAA,YACvD+uB,KAAc,SAAS,yBAC1B9sB,GAAU+K,CAAK,GAAA,CAAA,CAAA,GAAAhN,EAAA,OAAAyxB,IAAA,CAAA,CAAA,GAAAzxB,EAAA,eAETyxB,KAAM,OAAO,uBAPf1D,IAAG,CAAA,CAAA,GAAA;AAAA;;;;;;;;;;;ACnRlC,SAASqE,GAAgBC,GAAyB;AACvC,SAAAA,IAAS,KAAKA,IAAS;AAClC;AAEA,SAASC,GAAaD,GAAwB;AAC1C,SAAO,OAAO,KAAK,KAAKA,IAAS,GAAI,IAAI,GAAI;AACjD;AAEgB,SAAAE,GAAkBC,GAAmBC,GAAoBC,GAAwB;AAEzF,MAAAF,EAAQ,KAAKJ,EAAe,GAAG;AAC/B,UAAMxV,IAAW,KAAK,IAAI,GAAG4V,EAAQ,OAAOJ,EAAe,EAAE,IAAI,CAAAC,MAAU,IAAIA,CAAM,CAAC;AACtF,IAAAG,IAAUA,EAAQ,IAAI,CAAUH,MAAAA,IAASzV,CAAQ;AAAA,EAAA;AAG/C,QAAA+V,IAAqBH,EAAQ,MAAM,OAAO;AAChD,MAAII,IAAU,GACVC,IAAc;AAClB,QAAMC,IAAqB,CAAC;AAE5B,MAAIH,GAAoB;AACpB,IAAAE,IAAcL,EAAQ,OAAO,CAACpuB,GAAKC,MACxBD,IAAMC,GACd,CAAC;AAEJ,aAASxH,IAAI,GAAGA,IAAI61B,GAAQ,EAAE71B,GAAG;AACzB,UAAA,CAAC41B,EAAS51B,CAAC;AACX;AAGJ,YAAMk2B,IAAgBN,EAAS51B,CAAC,IAAI21B,EAAQ31B,CAAC,IAAKg2B;AAElD,MAAIE,IAAeH,MACLA,IAAAG;AAAA,IACd;AAAA,EACJ;AAGJ,WAASl2B,IAAI,GAAGA,IAAI61B,GAAQ,EAAE71B;AAC1B,IAAI+1B,IACAE,EAASj2B,CAAC,IACN,UAAUsF,GAAQywB,IAAUJ,EAAQ31B,CAAC,IAAKg2B,CAAW,CAAC,IAAIP,GAAaE,EAAQ31B,CAAC,CAAC,CAAC,QAC/E21B,EAAQ31B,CAAC,IAChBi2B,EAASj2B,CAAC,IAAI,GAAGy1B,GAAaE,EAAQ31B,CAAC,CAAC,CAAC,OAEzCi2B,EAASj2B,CAAC,IAAI;AAIf,SAAAi2B,EAAS,KAAK,GAAG;AAC5B;;0QC/Be,EAAA,kBAAAxsB,MAAAgG,KACA,cAAA2C,KAAyC,OAAA,IAAA3C;AAI9C,QAAArE,KAFUpM,GAAyB+F,EAAQ,EAEvB;;MAEtBusB,KAAW,IACX6E,KAAc,GACd1I,IACA2I,IAIAC,KAAA,CAAA,GACAC,KAAA,CAAA,GACAC,KAAA,CAAA,GACAC,IAAA,CAAA,GACAC,KAAW,GACXxK,KAAyC,SACzCD,KAAqC,SACrC1pB,IAAA,CAAA,GACAsrB;AAIK,WAAApX,KAAA;AACM,IAAA8a,KAAA,IACG6E,KAAA,GACElK,KAAA,SACAD,KAAA;AAAA,EAAA;WAoDXpZ,GAAatQ,IAAAA;AAClB,IAAAmH,IAAmBmkB,KAAA;AAAA,MACZ,GAAAnkB;AAAA,MACH,MAAA;AAAA,WACOA,EAAiB;AAAA,QACpB,OAAOnH,GAAM,OAAOwE,EAAM;AAAA,MAAA;AAAA;;AA8ItC,EAAApI,GAAA,MAAA;AACI,IAAA4D,EAAM,QAAQ,CAAAvD,OAAA;AACV,MAAAA,GAAQ,QAAA;AAAA,IAAA;wLA/Mb6Y,IAAWnO,EAAiB,UASxBmO,KACHpB,GAAA,GAGWqX,IAAA,MAAM,QAAQpkB,EAAiB,KAAK,KAAK,KAAKA,EAAiB,KAAK,SAAA,CAAA,GAEhFitB,GAAAC,IAAkBltB,EAAiB,mBAAmBA,EAAiB,KAAK,YAAY,CAAA,GACxF0kB,EAAAC,IAAoB3kB,EAAiB,mBAAmBA,EAAiB,KAAK,0BAA0B,CAAA,GACxG4kB,EAAAC,IAAoB7kB,EAAiB,mBAAmBA,EAAiB,KAAK,4BAA4B,CAAA,GAG3F0sB,KAAA1W,GAAsBmX,IAAkBT,EAAW,GAE7DA,KAAc,KACH7E,KAAA,IACX7nB,EAAiB,SAASzE,EAAc,IAAA,MAAM,iCAAiC,CAAA,CAAA,KAEpEssB,KAAA;;AAKT,UAAAtC,KAAA,IAAqB,IAAI1sB,CAAK,GAC9B2sB,yBAAuB,IAAA;IAEzBrB,OAAgBnkB,KAChBnH,EAAM,QAAQ,CAAAvD,OAAA;AACO,MAAAkwB,GAAA,IAAIlwB,GAAQ,MAAMA,EAAO;AAAA,IAAA,IAIlDuD,IAAQurB,EAAU,KAAKrmB,IAAMoC,OAAA;AACnB,YAAAslB,KAAQD,GAAiB,IAAIznB,EAAI;AACnC,aAAA0nB,MACAF,GAAe,OAAOE,EAAK,GACpBA,MAGJzlB,EAAiB,oBAAoBjC,MACxC,MAAMoC,IAAA;AAAA,IAAA;eAIH0N,MAAO0X;AACd,MAAA1X,GAAI,QAAA;AAEM,IAAAsW,KAAAnkB;AAAA,EAAA;;AAoBV,QAAAqjB,KAAA,CAAA;AAEJ,IAAAxqB,EAAM,QAAQ,CAAAkF,OAAA;AACD,MAAAslB,GAAA,KACLrjB,EAAiB,mBAAA;AAAA,QACb,SAASjC,GAAK,KAAK;AAAA,QACnB,YAAYA,GAAK,KAAK;AAAA,QACtB,OAAOA,GAAK,KAAK;AAAA,QACjB,QAAQA,GAAK,KAAK;AAAA,MAAA;QAM9BqvB,GAAApJ,KAAatpB,GAAQ2oB,IAAU,CAAApnB,OAAA,CAAA,GAAWA,EAAG,CAAA,CAAA;AAAA,EAAA;;AAIvC,UAAAoxB,KAAA,CAAA;QACFh6B,KAAI,GACJi6B,KAAI;AACR,IAAAV,KAAA,CAAA,GACAC,KAAA,CAAA,GACAC,KAAA,CAAA,GACAC,IAAA,CAAA,GAEAJ,KAAc9zB,EAAM,KAAKkF,IAAMoC,OAAA;;AACrB,YAAAotB,KAAYvH,EAAY7lB,EAAK,GAC7BqtB,KAAU,KAAK,IAAId,IAAa,OAAOa,GAAU,UAAU,KAAK,CAAC,GACjEE,KAAU,OAAOF,GAAU,OAAO,KAAK,GAEvCG,OACFvvB,KAAAovB,GAAU,UAAV,gBAAApvB,GAAiB,UAAS,iBACtB,OAAOovB,GAAU,MAAM,UAAU,CAAC,IAAIC,KACtC,GACFG,OACFvvB,KAAAmvB,GAAU,WAAV,gBAAAnvB,GAAkB,UAAS,iBACvB,OAAOmvB,GAAU,OAAO,UAAU,CAAC,IAAIE,KACvC,GACFtjB,KACFqjB,OAAY,OAAKlvB,KAAAivB,GAAU,UAAV,gBAAAjvB,GAAiB,UAAS,WAAWivB,GAAU,MAAM,QAClE,OAAOA,GAAU,MAAM,KAAK,IAAIC,KAChC,GACF5iB,KACF6iB,OAAY,OAAKlvB,KAAAgvB,GAAU,WAAV,gBAAAhvB,GAAkB,UAAS,WAAWgvB,GAAU,OAAO,QACpE,OAAOA,GAAU,OAAO,KAAK,IAAIE,KACjC;AAGD,iBAAA;YACCG,KAAS;AACb,QAAAC,YAAgBt3B,IAAIlD,IAAGkD,IAAIlD,KAAIm6B,IAAW,EAAAj3B;mBAC7Bu3B,KAAIR,IAAGQ,KAAIR,KAAIG,IAAW,EAAAK;gBAC3BT,GAAK92B,IAAI,MAAMu3B,EAAC,GAAA;AACP,cAAAF,KAAA;AACH,oBAAAC;AAAA,YAAA;AAKd,YAAAD;;AAIF,UAAAv6B,IAEEA,KAAIq5B,KAAcc,OACdn6B,KAAA,GACF,EAAAi6B;AAAA;YAIJvZ,KACF,EAAA,GAAA1gB,IACA,GAAAi6B,IACA,SAAAE,IACA,SAAAC,GAAA;eAGKl3B,KAAIlD,IAAGkD,KAAIlD,KAAIm6B,IAAW,EAAAj3B;iBACtBu3B,IAAIR,IAAGQ,IAAIR,KAAIG,IAAW,EAAAK;AAC1B,UAAAT,GAAA92B,KAAI,MAAMu3B,CAAC,IAAI,KAEf,CAAAlB,GAAcr2B,EAAC,KAAKq2B,GAAcr2B,EAAC,IAAIm3B,QACxCd,GAAcr2B,EAAC,IAAIm3B,MAGlB,CAAAb,GAAWiB,CAAC,KAAKjB,GAAWiB,CAAC,IAAIH,QAClCd,GAAWiB,CAAC,IAAIH,MAGf,CAAAb,GAAgBv2B,EAAC,KAAKu2B,GAAgBv2B,EAAC,IAAI4T,QAC5C2iB,GAAgBv2B,EAAC,IAAI4T,MAGpB,CAAA4iB,EAAce,CAAC,KAAKf,EAAce,CAAC,IAAIljB,QACxCmiB,EAAce,CAAC,IAAIljB;;QAM3B,kBAAkB7M;AAAA,QAClB,cACI,EAAA,UAAAgW,GAAA;AAAA;QAKZiZ,KAAWM,KAAI;AAAA,EAAA;AAIC,SAAA9K,KAAApK,GAAyB8N,GAAoB1D,EAAa,GAI1DD,KAAArK,GAA2BiO,GAAoBrU,GAAYyQ,EAAa,GAGzFjhB,IAAA;AAAA,IACC,QAAQkhB;AAAA,IACR,QAAQD;AAAA,KAGT7b,IAAA;AAAA,IACC,yBAAyBulB,GAAkBW,IAAeE,IAAiBJ,EAAW;AAAA,IACtF,sBAAsBT,GAAkBY,IAAYE,GAAeC,EAAQ;AAAA,kCAU7EnF;;;MAEO,KAAAxmB,GAAa,QAAQ5H,IAAK6H,CAAI;AAAA;;;gBAIzBzI;AAAA;;;;2BAGH8zB,IAAW,CAAA5uB;;;UAEQ,kBAAAA,GAAK;AAAA,UACT,cAAAA,GAAK;AAAA;;;;;;;;;;;;;;;;;;;;;;;AC/QnB,SAAAgwB,GACZ5V,GACA7Y,GACK;AACL,SACI6Y,MAAgB,WAChBA,MAAgB,YAChBA,MAAgB,QAETA,IAGJ7Y;AACX;ACfO,SAAS0uB,GAAkBC,GAAyB;AACvD,QAAMt1B,IAAmB,CAAC;AACtB,MAAAu1B,IAAOD,EAAM,CAAC,GACdxpB,IAAU;AAEd,WAASlO,IAAI,GAAGA,KAAK03B,EAAM,QAAQ13B;AAC3B,IAAA03B,EAAM13B,CAAC,MAAM23B,KACNv1B,EAAA,KAAK8L,IAAU,IAAI,UAAUA,CAAO,KAAKypB,CAAI,MAAMA,CAAI,GAC9DA,IAAOD,EAAM13B,CAAC,GACJkO,IAAA,KAEVA;AAID,SAAA9L,EAAO,KAAK,GAAG;AAC1B;AChBgB,SAAAw1B,GAAkB75B,GAAe85B,GAAqB;AAClE,MAAIxyB,IAAMtH,IAAQ85B;AAClB,SAAIxyB,IAAM,MACCA,KAAAwyB,IAEJxyB;AACX;ACsMa,SAAAyyB,GAAiBx1B,GAA2By1B,GAAmBC,GAAAA;MAChEC,IAAS,GACT5yB,IAAA,CAAA,GACA6yB,IAAA,CAAA;WAEKl4B,IAAI,GAAGA,IAAIsC,EAAM,QAAU,EAAAtC;AAC3B,IAAAqF,EAAI4yB,CAAM,MACX5yB,EAAI4yB,CAAM,IAAA,CAAA,IAEd5yB,EAAI4yB,CAAM,EAAE,KAAA;AAAA,MACR,OAAOj4B;AAAA,MACP,cAAck4B,EAAoBD,CAAM,KAAKF,EAAK/3B,CAAC,EAAE,eAAe;AAAA,MACpE,kBAAkBsC,EAAMtC,CAAC;AAAA,QAExB,CAAAk4B,EAAoBD,CAAM,KAAKF,EAAK/3B,CAAC,EAAE,eAAe,WACvDk4B,EAAoBD,CAAM,IAAI,OAE5BA,KAAUD,MACZC,IAAS;AAIV,SAAA5yB;;;;kxBA5LA,EAAA,kBAAAoE,EAAA,IAAAgG,KACA,cAAA2C,KAAyC,OAAA,IAAA3C;AAa9C,QAAAjG,KAAUxK,GAAyB+F,EAAQ,GAE3CqG,KAAY5B,GAAQ;;AAEtB,MAAA2uB,IACAC,KAAA,CAAA,GAIA9L,KAAwC,MACxC+L,IACAjM,KAAU;AAEI,EAAA5iB,GAAQ,iBAAiB,kBAAkB,GAC1CA,GAAQ,iBAAiB,mBAAmB;AAE3D,MAAA8uB,IACAN,KAAU,GACVpW,IAA2B,cAC3BtF,KAAe,SACfic,IACAC,KAAc,GACdC,IACAC,IACApd,KAAU,IACVqd,IAOAC,KAAA,CAAA,GACAnL,IACAoL,KAAA,CAAA,GACAC,KAAa,IACbnL,KAAA,CAAA;AAKK,WAAAnX,KAAA;AACL,IAAAwhB,KAAU,GACVpW,IAAc,cACdtF,KAAQ,SACRkc,KAAc,GACdld,KAAU;AAAA;WAwBL1I,GAAatQ,GAAAA;AAClB,IAAAmH,IAAmBmkB,KAAA;AAAA,MACZ,GAAAnkB;AAAA,MACH,MAAA;AAAA,WACOA,EAAiB;AAAA,QACpB,OAAOnH,EAAM,OAAOwE,EAAM;AAAA;;;AAKhC,QAAAiyB,IAAYvvB,GAAQ;;AACtB,MAAAlH,KAAA,CAAA,GACAsrB;AAyNK,WAAAoL,KAAA;AAAA;QAqBHC,KAAkChX,GAAS+W,IAAwB,EAAE;AAalE,WAAAE,KAAA;AACD,QAAA7zB,IAAA,CAAA,GACA8zB,IAASf,GAAqB,CAAC,EAAE,SAAS;aAErCb,KAAI,GAAGA,KAAI4B,GAAQ5B,MAAK;eACpBv3B,KAAI,GAAGA,KAAIg4B,IAAW,EAAAh4B,IAAA;AACrB,cAAAmrB,IAAOiN,GAAqBp4B,EAAC,EAAE,SAASu3B,EAAC;AAC3C,QAAApM,KACA9lB,EAAI,KAAK8lB,CAAI;AAAA;AAKlB,WAAA9lB;AAAA;AAGF,WAAA+zB,GAASC,GAAgBC,IAAW,IAAA;AAEnC,UAAAC,KADe3X,MAAgB,eACyB,SAAS;AAEvE,IAAAuW,GAAS,OAAA;AAAA,MACJ,CAAAoB,EAAe,GAAGF;AAAA,MACnB,UAAUC,IAAW,WAAW;AAAA;;AAI/B,WAAAE,GAAoBC,GAAgC7vB,KACzD,UAAA0vB,KAAW,IACX,aAAAI,KAAc,GACd,UAAAC,IAAW,YAAA,CAAA;AAML,UAAAC,KAAehY,MAAgB,cAC/BiY,KAAmCD,KAAe,eAAe;AAMnE,IAAAhwB,IAAQ6vB,EAAgB,SAAS,IACjC7vB,IAAQ+vB,MAAa,SAAS/B,GAAkBhuB,GAAO6vB,EAAgB,MAAM,IAAIA,EAAgB,SAAS,IACnG7vB,IAAQ,MACfA,IAAQ+vB,MAAa,SAAS/B,GAAkBhuB,GAAO6vB,EAAgB,MAAM,IAAI;AAG/E,UAAAtO,IAAOsO,EAAgB7vB,CAAK;AAE9B,QAAAuhB,GAAA;AACI,UAAAkO;AACA,UAAA9d,OAAe,SAAU,CAAAqe;AACzB,QAAAP,KAASlO,EAAK0O,EAAa,IAAI,OAAMrB,KAAc;AAAA;AAE7C,cAAAsB,KAAoB3B,GAAS;AACnC,QAAAkB,KAAUlO,EAAK0O,EAAa,IAAI1O,EAAK,cAAc,OAAMqN,KAAc,IAAKsB;AAAA;AAG5E,UAAAJ,IAAA;AACA,QAAAL,MAAUK;cAEJK,KAAYH,KACdzB,GAAS,cAAcA,GAAS,cAChCA,GAAS,eAAeA,GAAS;QACjCkB,KAASU,OACLJ,MAAa,UACbN,KAASU,KACFJ,MAAa,WACpBN,KAASzB,GAAkByB,IAAQU,EAAS,KAGhDV,KAAS,MACLM,MAAa,UACbN,KAAS,IACFM,MAAa,WACpBN,KAASzB,GAAkByB,IAAQU,EAAS;AAAA;AAKxD,MAAAX,GAASC,IAAQC,EAAQ;AAAA;;WAIxBU,EAAaX,GAAA,EAClB,UAAAM,IAAW,SACX,UAAAL,KAAW,GAAA,IAAA,IAAA;AAKL,UAAAM,KAAehY,MAAgB,cAC/BqY,IAAuB1e,OAAe,SAAU,CAAAqe,KAAgB,IAAI,IACpEM,KAAgBN,KAClBzB,GAAS,aACTA,GAAS,WACP4B,KAAYH,KACdzB,GAAS,cAAcA,GAAS,cAChCA,GAAS,eAAeA,GAAS;AACjC,QAAAgC,IAAYD,KAAgBD,IAAsBZ;IAClDc,IAAYJ,KACRJ,MAAa,UACbQ,IAAYJ,KACLJ,MAAa,WACpBQ,IAAYvC,GAAkBuC,GAAWJ,EAAS,KAE/CI,IAAY,MACfR,MAAa,UACbQ,IAAY,IACLR,MAAa,WACpBQ,IAAYvC,GAAkBuC,GAAWJ,EAAS,KAG1DX,GAASe,IAAYF,GAAqBX,EAAQ;AAAA;AAG7C,WAAAc,GAAoBjC,GAAmB3wB,GAAA;WACxCoa,MAAgB,eACTpa,EAAK,QAAQ2wB,EAAS,QAAQA,EAAS,QAAQ3wB,EAAK,OAGxDA,EAAK,SAAS2wB,EAAS,OAAOA,EAAS,SAAS3wB,EAAK;AAAA;AAGvD,WAAA6yB,GAAyBlC,GAAmB3wB,GAAA;WAC7Coa,MAAgB,eACTpa,EAAK,QAAQ2wB,EAAS,QAAQ3wB,EAAK,SAAS2wB,EAAS,QAGzD3wB,EAAK,OAAO2wB,EAAS,OAAO3wB,EAAK,UAAU2wB,EAAS;AAAA;WAGtDmC,GAA6B5sB,GAAA;UAC5B+rB,IAAkBP,GAAA,GAClBqB,KAAepC,GAAS,sBAAA,GAGxBqC,KAA2Bf,EAAgB,UAAU,CAAAgB,OACvDJ,GAAyBE,IAAcE,GAAG,sBAAA,CAAA,CAAA;QAG1CD,OAA6B;AACtB,aAAAA;AAML,UAAAE,IAAqBjB,EAAgB,IAAI,CAAAgB,OAC3CL,GAAoBG,IAAcE,GAAG,sBAAA,CAAA,CAAA,GAEnCE,KAAsBD,EAAmB,UAAU,OAAO;WAE5DC,OAAwB,KAEOjtB,MAAW,UAAUgtB,EAAmB,OAAO,OAAO,EAAE,WAAW,IAClEC,KAAsB,IAAIA,KAGvDjtB,MAAW,SAAS,IAAI+rB,EAAgB,SAAS;AAAA;AAwF5D,EAAA/6B,GAAA,MAAA;AACI,IAAA0tB,KAAU,IAEV9pB,GAAM,QAAQ,CAAAvD,MAAA;AACV,MAAAA,EAAQ,QAAA;AAAA,QAGRu5B,MAAA,CAAW7uB,EAAiB,gBAC5BD,GAAQ,mBAAmB8uB,EAAM,GACjCA,KAAS;AAAA,wLAviBd1gB,IAAWnO,EAAiB,UAUxBmO,KACHpB,GAAA,GAGDqX,IAAY,MAAM,QAAQpkB,EAAiB,KAAK,KAAK,KAAKA,EAAiB,KAAK,SAAA,CAAA,MAEhFqkB,IAA6B,SAAAlmB,KAAA6B,EAAiB,KAAK,iBAAtB,gBAAA7B,GAAoC,SAAS,WAAW6B,EAAiB,oBACrG5B,KAAA4B,EAAiB,KAAK,iBAAtB,gBAAA5B,GAAoC,cAAiB,EAAA,KACpDE,KAAA0B,EAAiB,KAAK,iBAAtB,QAAA1B,GAAoC,OAAOqiB,GAAW3gB,EAAiB,KAAK,aAAa,IAAI,IAAI,MAAA,GAEnGitB,GAAAC,IAAkBltB,EAAiB,mBAAmBA,EAAiB,KAAK,YAAY,CAAA,GACxFskB,GAAAC,IAAkBvkB,EAAiB,mBAAmBA,EAAiB,KAAK,WAAW,CAAA,GACvFmxB,GAAAC,IAA4BpxB,EAAiB,mBAAmBA,EAAiB,KAAK,uBAAuB,CAAA,GAC7GqxB,GAAAC,IAAkBtxB,EAAiB,mBAAmBA,EAAiB,KAAK,YAAY,CAAA,GACxFuxB,GAAAC,IAAmBxxB,EAAiB,mBAAmBA,EAAiB,KAAK,aAAa,CAAA,GAC1FwO,GAAAC,IAAezO,EAAiB,mBAAmBA,EAAiB,KAAK,QAAQ,CAAA,GACjFyxB,GAAAC,IAAiB1xB,EAAiB,mBAAmBA,EAAiB,KAAK,WAAW,CAAA,GACtF2xB,GAAAC,IAA2B5xB,EAAiB,mBAAmBA,EAAiB,KAAK,sBAAsB,CAAA,GAC3G6xB,GAAAC,IAAgB9xB,EAAiB,mBAAmBA,EAAiB,KAAK,SAAS,CAAA,GACnF+xB,GAAAC,IAAkBhyB,EAAiB,mBAAmBA,EAAiB,KAAK,YAAY,CAAA;;AAiBnF,QAAAmN,IAAA,CAAA;QAMAnN,EAAiB,KAAK,gBACtB,MAAM,QAAQslB,EAAoB,KAClC,MAAM,QAAQtlB,EAAiB,KAAK,aAAa,UAAU,GAAA;AAErD,YAAA+gB,KAAU/gB,EAAiB,KAAK;AACtC,MAAAmN,IAAW0T,GAAwByE,IAAsBvlB,IAASC,GAAkB+gB,EAAO;AAAA;AAE3F,MAAA5T,KAAY,MAAM,QAAQiX,CAAS,KAAKA,SAAiB,IAAI,CAAAznB,UAErD,KAAKA,GAAA;AAKX,UAAA4oB,IAAA,IAAqB,IAAI1sB,EAAK,GAC9B2sB,KAAuB,oBAAA,IAAA;IAEzBrB,OAAgBnkB,KAChBnH,GAAM,QAAQ,CAAAvD,OAAA;AACV,MAAAkwB,GAAiB,IAAIlwB,GAAQ,MAAMA,EAAO;AAAA,QAIlDuD,KAAQsU,EAAS,KAAKpP,IAAMoC,MAAA;YAClBslB,KAAQD,GAAiB,IAAIznB,GAAK,GAAG;AACvC,aAAA0nB,MACAF,EAAe,OAAOE,EAAK,GACpBA,MAGJzlB,EAAiB,oBAAoBjC,GAAK,KAAA;AAAA,QAC7C,MAAMoC;AAAA,QACN,WAAWpC,GAAK;AAAA,QAChB,IAAIA,GAAK;AAAA;;eAIN8P,MAAO0X;AACd,MAAA1X,GAAI,QAAA;AAER,IAAAsW,KAAcnkB;AAAA;AAGf,EAAAiyB,IAAoBC,MAAcvP,IAC9BsP,WACQ,iBAAmB,QAE1BpP,KAAqB,IAAA,eAAA,MAAA;AACjB,IAAA2M,GAAA;AAAA,MAEJ3M,GAAe,QAAQ+L,EAAa,KAEjC/L,OACPA,GAAe,WAAA,GACfA,KAAiB,OAIjB0L,KAAUvY,GAAsBmX,IAAkBoB,EAAO,GA6BzDpW,IAAcyO,GAA0BlB,IAAkBvN,CAAW,GAIrEtF,KAAQkb,GAAiBoE,IAA4Btf,EAAK,GAI1Dkc,KAAc1vB,GAAyB+yB,IAAkBrD,EAAW,GACpED,KAAUjzB,GAAOkzB,EAAW,GAI5BE,KAAe5vB,GAAyBgzB,IAAmBtD,EAAW,GACtEC,KAAenzB,GAAOozB,EAAY;;AAIlC,IAAApd,KAAU3P,GAAmB0P,GAAeE,IAAYD,EAAO;AACzD,UAAAhT,IAAOsZ,MAAgB,gBACxBtU,MAAAtF,KAAAqT,KAAA,gBAAAA,EAAe,QAAf,OAAArT,KAAsBqT,KAAA,gBAAAA,EAAiBE,OAAe,QAAQ,UAAU,YAAxE,OAAAjO,KAAoF,KACpFC,KAAA8N,KAAA,gBAAAA,EAAe,WAAf,OAAA9N,KAAyB,GACxBwuB,IAAaz2B,GAAOgD,CAAI;AAC9B,IAAAqwB,KAAA;AAAA,MACI,OAAO/W,MAAgB,eAAema,IAAa;AAAA,MACnD,QAAQna,MAAgB,eAAe,QAAQma;AAAA,MAC/C,gBAAgBna,MAAgB,gBAAgBrG,OAAe,QAAQ,MAAMwgB,IAAa;AAAA,MAC1F,eAAena,MAAgB,gBAAgBrG,OAAe,QAAQ,MAAMwgB,IAAa;AAAA,MACzF,iBAAiBna,MAAgB,aAAa,MAAMma,IAAa;AAAA;;AAItE,EAAAC,IAAepa,MAAgB,eAAe,0BAA0B;;AAEnE,QAAAkL,IAAA,CAAA;AAEJ,IAAAxqB,GAAM,QAAQ,CAAAkF,MAAA;YACJy0B,KAAWra,MAAgB,eAAe,UAAU;AAC1D,MAAAkL,EAAS,KAAKrjB,EAAiB,mBAAA;AAAA,QAC3B,MAAMjC,EAAK,KAAKy0B,EAAQ;AAAA,QACxB,YAAYz0B,EAAK,KAAK;AAAA;WAK9BimB,KAAatpB,GAAQ2oB,GAAU,CAAApnB,MAAA,CAAA,GAAWA,CAAG,CAAA,CAAA;AAAA;AAG9C,EAAAw2B,IAAYpE,GAAiBx1B,IAAOmtB,IAAauI,EAAO,GAGvDY,KAAA,CAAA,GACIZ,KAAU,KAIVvI,GAAY,SAASuH,GAAWptB,MAAA;;AACxB,IAAAotB,EAAU,eAAe,WAIvB,CAAAA,EAAU,QAAQpV,MAAgB,kBAAiBha,KAAAovB,EAAU,SAAV,gBAAApvB,GAAgB,UAAS,iBAC9EgxB,GAAc,KAAK,MAAM,IAEzBA,GAAc,KAAK,aAAa,GAGhChvB,IAAQ,IAAI6lB,GAAY,UACxBmJ,GAAc,KAAK,MAAM;AAAA,MAGjCA,GAAc,KAAK,MAAM;;AAKvB,UAAAuD,IAAA,CAAA;AACF,QAAAlM,IAAA,CAAA;QACJ6I,KAAa,IAETlX,MAAgB,eAChBqO,EAAqB,eAAe3T,KAEpC2T,EAAqB,eAAe3T,IAGpC8f,OAAoB,UAAA;AACpB,MAAAtD,KAAa,IACb7I,EAAqB,aAAa;AAC5B,YAAAoM,KAAgBza,MAAgB,eAAe,wBAAwB;AAC7E,MAAAua,EAAiBE,EAAa,IAAI/2B,GAAOkzB,KAAc,CAAC;AAAA;IAIxDR,OAAY,MACZ/H,EAAqB,0BAA0BrO,IAGnDiX,KAAgB5sB,GAAkBkwB,GAAkBtD,EAAa,GACjElL,KAAoB1hB,GAAkBgkB,GAAsBtC,EAAiB;AAAA;AAG9E,SAAA2O,IAAA,EACC,SAAAhhB,IACA,YAAYmd,GAAA,GAGb8D,KAAA;AAAA,KACEP,CAAY,GAAGvE,GAAkBmB,EAAa;AAAA,KAGhD7tB,KAAA;AAAA,IACC,aAAA6W;AAAA,IACA,eAAekX;AAAA,IACf,WAAW0D,OAAmB,SAAS,SAAS;AAAA,KA8B7C/yB,EAAiB,QACpBwvB,GAAA,GA6KGxvB,EAAiB,SAChB6uB,OACA9uB,GAAQ,mBAAmB8uB,EAAM,GACjCA,KAAS,SAGT7uB,EAAiB,OAAOA,EAAiB,gBACzC6uB,KAAS7uB,EAAiB,IAC1BD,GAAQ,iBAAiC8uB,IAAA;AAAA,IACrC,eAAe9wB,GAAc8xB,GAAA;YACnBG,KAAkBP,GAAA;UACpB1xB,IAAO,KAAKA,IAAOiyB,GAAgB,SAAS;AAClC,cAAA,IAAA,MAAM,mDAAmD;AAGvE,MAAAD,GAAoBC,IAAiBjyB,GAAQ,EAAA,UAAA8xB,EAAA,CAAA;AAAA;IAEjD,gBAAgBmD,GAAc9C,GAAoBL,IAAA;AACxC,YAAAoD,KAAsBpC,GAA6B,MAAM,GACzDb,IAAkBP,GAAA;AACpB,UAAAyD,KAAeD,KAAsBD;AAEzC,MAAAjD,GAAoBC,GAAiBkD,MAAgB,UAAArD,IAAU,UAAAK,EAAA,CAAA;AAAA;IAEnE,YAAY8C,GAAc9C,GAAoBL,IAAA;AACpC,YAAAM,KAAehY,MAAgB,cAC/BqY,IAAuB1e,OAAe,SAAU,CAAAqe,KAAgB,IAAI,IAEpEgD,KAAehD,KACjBzB,GAAS,aAAa8B,IAAsB9B,GAAS,gBAAgBA,GAAS,cAE9EA,GAAS,YAAYA,GAAS,iBAAiBA,GAAS,cAEtDsB,KAAkBP,GAAA;AACpB,UAAA0D,MAAgBjD,MAAa,QAAA;AAC7B,QAAAH,GAAoBC,IAAiB,GAAK,EAAA,UAAAH,GAAA,CAAA;;;AAK1C,UAAAuD,KADwBvC,GAA6B,MAAM,IAC1BmC;AAErC,MAAAjD,GAAoBC,IAAiBoD,MAAY,UAAAvD,IAAU,UAAAK,EAAA,CAAA;AAAA;IAE/D,cAAcL,GAAA;AACV,MAAAF,GAAS,GAAGE,CAAQ;AAAA;IAExB,YAAYA,GAAA;AACR,MAAAF;AAAA,QAAU7d,OAAe,SAASqG,MAAgB,eAAgB,MAAM;AAAA,QAAM0X;AAAA;;IAElF,iBAAiBmD,GAAMnD,GAAA;AACnB,MAAAF;AAAA,QAAU7d,OAAe,SAASqG,MAAgB,eAAgB6a,IAAQ,CAAAA;AAAA,QAAMnD;AAAA;;IAEpF,eACI,EAAA,MAAAmD,GACA,QAAApD,GACA,UAAAM,IACA,UAAAL,GAAA,GAAA;AAEI,UAAAmD,GAAA;AAEM,cAAAI,KADsBvC,GAA6BmC,IAAO,IAAI,SAAS,MAAM,IAC5CA;AACvC,QAAAjD,GAAoBN,GAAY,GAAA2D,IAAA,EAAY,UAAAvD,IAAU,aAAaD,GAAQ,UAAAM,IAAA;AAAA,MACpE,MAAA,CAAAN,KACPW,EAAaX,KACT,UAAAM,IACA,UAAAL,GAAA,CAAA;AAAA;;;;MAoCnB,KAAAxuB,GAAa,WAAW5H,IAAK6H,EAAI;AAAA;;sBAGtB;AAAA,qBACD;AAAA,gBACLzI;AAAA;;;;qBAIE,eAAA7B,GAAAyC,GAAI,mBAAiB,EAAA,IAAA,MAAAzC;AAAA,QAAGq8B,KAA4BzrB,GAAQ,sBAAsB,IAAI;AAAA;MAGvF,CAAA,IAAAlO,EAAA,SAAAiC,GAAUyzB,EAAa,GAFnB,CAAA,CAAA,GAAA11B,EAAA,QAAAg1B,yBAMAj1B,GAAI,qBAAqB,GAAA,CAAA,CAAA,GAAAC,EAAA,SACzBiC,GAAUk3B,CAAS,GAFf,CAAA,CAAA,GAAAn5B,EAAA,QAAAk1B,aAIJ6D,GAAS,CAAAa,GAAAC,wBAED95B,GAAI,gBAAc,CAAA,CAAA,GAAAC,EAAA,SAClBiC,GAAUm3B,EAAW,GAAA,CAAA,CAAA,GAAAp5B,EAAA,QACjBi1B,GAAqB4E,CAAQ,GAAA,CAAA,CAAA,IAAA36B,GAEjC06B,GAAQ,CAAAv1B,OACN,GAAAA,GAAK,eAEK,OAAArE,EAAA,SAAAD,GAAI,cAAY,CAAA,CAAA,GAAAI,GAAA;AAAA,QACV,OAAAse,MAAgB,eAAe2W,KAAU;AAAA,QACxC,QAAA3W,MAAgB,eAAe2W,KAAU;AAAA;;;UAKzC,kBAAA/wB,GAAK;AAAA,wBACTmmB;AAAA;;;SAIV,CAAA,QAAAxqB,EAAA,SAAAiC,GAAUuzB,EAAe,GAAA,CAAA,CAAA,gBAKhD,CAAA,gBAAA/W,MAAgB,eACZ;;;;;;;;;;;;;;;;;;;;;;;;;;AC9qBG,SAAAqb,GACZ9sB,GACA2Z,GACyB;;AACrB,MAAA,CAAC3Z,KAAS,CAACA,EAAM,aAAa,OAAOA,EAAM,aAAc;AAClD,WAAA2Z;AAGX,QAAMzkB,IAAqB;AAAA,IACvB,KAAK8K,EAAM;AAAA,EACf;AAEI,WAAAvI,IAAAuI,EAAM,UAAN,gBAAAvI,EAAa,UAAS,WAAW0J,GAAiBnB,EAAM,MAAM,KAAK,MAC/D9K,EAAA,QAAQ8K,EAAM,MAAM,UAExBtI,IAAAsI,EAAM,WAAN,gBAAAtI,EAAc,UAAS,WAAWyJ,GAAiBnB,EAAM,OAAO,KAAK,MACjE9K,EAAA,SAAS8K,EAAM,OAAO,QAGvB9K;AACX;AC1BO,SAAS63B,GACZlwB,GACAE,GACAC,GACApE,GACM;AACN,QAAMd,IAAO;AAAA,IACT+E,EAAc,UAAU;AAAA,IACxBA,EAAc,WAAW;AAAA,IACzBA,EAAc,cAAc;AAAA,IAC5BA,EAAc,aAAa;AAAA,EAC/B;AAEA,WAAShN,IAAI,GAAGA,IAAIiI,EAAK,QAAQ,EAAEjI;AAC3B,QAAAiI,EAAKjI,CAAC,KAAK,CAAC0L,GAAoBzD,EAAKjI,CAAC,CAAC;AAChC,aAAA+I;AAIR,SAAAkE,GAAaD,GAAeE,GAAeC,CAAQ;AAC9D;;AChBe,MAAA,EAAA,kBAAA1D,EAAA,IAAAgG,KACA,cAAA2C,IAAyC,OAAA,IAAA3C,GACzC,EAAA,SAAA0tB,EAAA,IAAA1tB;AAEL,QAAA2tB,IAAez5B,GAASw5B,CAAO;AAErC,SAAAt+B,GAA4B+P,MACxB,WAAWwuB,EAAA,CAAA,sPAIXA,EAAa,IAAID,CAAO;;;mpBCyBjB,EAAA,kBAAA1zB,OAAAgG,KACA,cAAA2C,KAAyC,OAAA,IAAA3C;AAQ9C,QAAAjG,KAAUxK,GAAyB+F,EAAQ,GAE3CqG,KAAY5B,GAAQ;;AAEpB,QAAA6zB,KAAS7zB,GAAQ,MAAM,MAAM;AAE/B,MAAA8uB,IACAhH,KAAW,IACX7D,KAAa9pB,GAAA,EAAA;;AACb,MAAAgqB,IAAA,CAAA,GAEA2P,IACAC,IACAC,IACAzyB,KAAA,CAAA,GAEA0yB,KAAc,IACdC,KAAc,IACdC,KAAgB,IAChBC,KAAmB,IACnBC,KAAkB,IAClBC,IACAC,IAAsB,IACtBC,IACAC,KAAwB,IACxBC,KAAqB,IACrBC,KAAuB,IACvBC,KAAsB,IACtBC,KAAwB,IACxBC,KAAiB,GACjBC,KAAsB,IACtBC,KAAmB,IACnBC,KAAkC,MAClCC,KAAqB,IACrBC,KAAa,IACbC,IACAC,KAAA,CAAA,GACAC,IAAA,CAAA,GACAC,KAAmC,MAQnCC,IACAC,KAAwC,SACxCnN,IACAoN,IACAtR;AAIK,WAAApX,KAAA;AACS,IAAAinB,KAAA,IACAC,KAAA,IACIG,KAAA,IACIC,KAAA,QACAC,IAAA,IACEC,KAAA,QACAC,KAAA,IACHC,KAAA,IACEC,KAAA,IACDC,KAAA,IACEC,KAAA,IACPC,KAAA,GACKC,KAAA,IACHC,KAAA,IACJC,KAAA,MACGO,KAAA,QACFC,KAAA,SACInN,KAAA,KACAoN,KAAA;AAAA,EAAA;WAwDftsB,EAAatQ,GAAAA;AACb,IAAAmH,GAAiB,KAAK,UAI3BA,KAAmBmkB,KAAA;AAAA,MACZ,GAAAnkB;AAAA,MACH,MAAA;AAAA,WACOA,GAAiB;AAAA,QACpB,OAAOA,GAAiB,KAAK,MAAM,IAAA,CAAKrD,IAAIwD,aAEjCxD,IACH,KAAK9D,EAAMsH,EAAK,EAAA;;;;WAgM3Bu1B,GAAY78B,GAAAA;AACb,QAAAgvB;;UAIEtC,KAAqB,IAAA,IAAI6P,GAAa,OAAO/3B,EAAM,CAAA,GACnDmoB,yBAAuB,IAAA;IAEzBrB,OAAgBnkB,MAChBo1B,GAAa,QAAQ,CAAA9/B,MAAA;AACb,MAAAA,KACiBkwB,GAAA,IAAIlwB,EAAQ,MAAMA,CAAO;AAAA,QAKtD8/B,KAAev8B,EAAM,KAAKkF,GAAMxH,OAAA;AACvB,WAAAA,OAAMo/B,KAAYP,GAAa7+B,EAAC,OAAMwH,KAAA,QAAAA,EAAM,MAAA;cACvC0nB,KAAQD,GAAiB,IAAIznB,EAAK,GAAG;AACvC,eAAA0nB,MACAF,GAAe,OAAOE,EAAK,GACpBA,MAGJzlB,GAAiB,oBAAoBjC,EAAK,KAAA,EAC7C,MAAMxH,IAAA;AAAA,MAAA;AAAA,QAIlB8+B,IAAgBx8B,EAAM,IAAA,CAAKtE,GAAGgC,OAAMA,OAAMo/B,CAAQ;eAEvC9nB,KAAO0X;AACd,MAAA1X,EAAI,QAAA;AAEM,IAAAsW,KAAAnkB;AAAA,EAAA;AAIH,iBAAA41B,GAAY35B,GAAa45B,IAAgBhG,IAAA;AACjC,IAAAsF,KAAAQ,GACRA,IAAA15B,GACX65B,GAAA,GACAC,GAAUlG,EAAQ,GAElBmG,EAAA;AAAA;AAgCK,WAAAC,GAAWC,GAAe/1B,IAAA;WAC3Bw1B,MAAax1B,MACDy1B,GAAAz1B,IAAO,IAAO,EAAI,GAEvB,MAGJ;AAAA,EAAA;AAGF,WAAA41B,GAAUlG,IAAW,IAAA;AACb,IAAAqF,KAAArF,GACbsG,GAAA,CAAiBR,IAAW,GAAG,GAC/BS,GAAA,GACAC,GAAA,GACAC,GAAA,GACA,CAAoBX,IAAW7B,GAAc;AAAA,EAAA;iBAGlCqC,GAAgB3pB,GAAA;AACrB,UAAAxW,GAAA,GACK+9B,GAAA,MAAM,2BAA2BvnB,CAAS;AAAA,EAAA;AAGhD,WAAA4pB,GAAmBG,IAAS,IAAA;UAC3Bt8B,KAAQs8B,IACV,KAAK,IAAI,GAAGZ,IAAW,CAAC,IACxB,KAAK,IAAIA,GAAUR,MAAA,OAAAA,KAAoBQ,CAAQ,GAC7Ca,KAAMD,IACR,KAAK,IAAI19B,EAAM,SAAS,GAAG88B,IAAW,CAAC,IACvC,KAAK,IAAIA,GAAUR,MAAA,OAAAA,KAAoBQ,CAAQ;AAEnD,IAAAP,GAAa,QAAQp1B,CAAAA,MAAAA;AACjBA,MAAAA,KAAAA,QAAAA,EAAkB;AAAA,IAAA,IAGtBo1B,KAAeA,GAAa,KAAK9/B,GAAS6K,OAAA;;AAClC,UAAA7K;AACO,eAAAA;AAEL,YAAA4rB,MAAM/iB,KAAAtF,EAAMsH,EAAK,MAAX,gBAAAhC,GAAc;UACtBgC,MAASlG,MAASkG,MAASq2B,MAAOtV;eAC3BlhB,GAAiB,oBAAoBkhB,MACxC,MAAM/gB,IAAA;AAAA,IAGP,IAEKk1B,IAAAA,EAAc,IAAK,CAAA9gC,GAAG4L,OAAUA,MAASlG,MAASkG,MAASq2B,EAAG;AAAA,EAAA;AAGnE,iBAAAH,KAAA;AACP,SAAA9iB,MAAA,gBAAAA,GAAa,UAAS;;AAIpB,UAAAvd,GAAA;AACA,UAAAygC,IAAc,SAAS,eAAA,GAAkB7C,EAAM,UAAU+B,CAAQ,EAAA;AAEnE,IAAAc,MACA3C,GAAc,MAAM,SAASj4B,GAAO46B,EAAY,YAAY;AAAA;AAI3D,WAAAH,KAAA;AACD,IAAAhB,MACA,aAAaA,EAAiB,GAElCA,KAAoB,OAAO;AAAA;AACvB,QAAAD,IAAgBx8B,EAAM,IAAA,CAAKtE,GAAGgC,OAAMA,OAAMo/B,CAAQ;AAAA;MACnD;AAAA;;AA4BE,WAAAG,KAAA;AACD,IAAAb,OAIiBA,KAAA,IACrBnB,GAAc,MAAM,SAASj4B,GAAOi4B,GAAc,YAAY,GAC9DC,GAAW,MAAM,YAAA,eAAA,EAA6BoB,MAAA,OAAAA,KAAoBQ,KAAY,GAAG;AAAA,EAAA;AAuG5E,WAAAe,EAAWv2B,GAAe+vB,IAAA;AAC3B,WAAA/vB,IAAQtH,EAAM,SAAS,IAChBq3B,OAAa,SAAS/B,GAAkBhuB,GAAOtH,EAAM,MAAM,IAAIA,EAAM,SAAS,IAErFsH,IAAQ,IACD+vB,OAAa,SAAS/B,GAAkBhuB,GAAOtH,EAAM,MAAM,IAAI,IAGnEsH;AAAA,EAAA;AAGF,WAAA61B,IAAA;IACDR,OAAkB,WAIfx/B,GAAA,EAAA,KAAA,MAAA;AAAA;;MAwEXf,GAAA,MAAA;AACI,IAAAmgC,GAAa,QAAQp1B,CAAAA,MAAAA;AACjBA,MAAAA,KAAAA,QAAAA,EAAkB;AAAA,IAAA,IAGlB6uB,OACA9uB,GAAQ,mBAAmB8uB,EAAM,GACxBA,KAAA;AAAA,0LAppBd1gB,IAAWnO,GAAiB,UAwBxBmO,KACHpB,GAAA,GAGOlU,IAAA,MAAM,QAAQmH,GAAiB,KAAK,KAAK,KAAKA,GAAiB,KAAK,SAAA,CAAA,GAC5D22B,IAAA99B,EAAM,IAAI,CAAA8D,MAAA;;AAErB,WAAA,EAAA,MAAMA,EAAG,KACT,KAAIwB,KAAAxB,EAAG,QAAH,gBAAAwB,GAAQ,GAAA;AAAA,EAAA,IAIjByQ,GAAAC,IAAY7O,GAAiB,mBAAmBA,GAAiB,KAAK,KAAK,CAAA,GAC3EgP,GAAAC,IAAajP,GAAiB,mBAAmBA,GAAiB,KAAK,MAAM,CAAA,GAC7E42B,IAAkB52B,GAAiB,gBAAgBA,GAAiB,KAAK,YAAY,GACrF62B,GAAAC,IAAe92B,GAAiB,mBAAmBA,GAAiB,KAAK,eAAe,CAAA,GACxF8kB,GAAAC,IAAgB/kB,GAAiB,mBAAmBA,GAAiB,KAAK,aAAa,CAAA,GACvF+2B,GAAAC,IAAqBh3B,GAAiB,mBAAmBA,GAAiB,KAAK,eAAe,CAAA,GAC9Fi3B,GAAAC,IAAwBl3B,GAAiB,mBAAmBA,GAAiB,KAAK,kBAAkB,CAAA,KACpGm3B,IAAmBn3B,GAAiB,mBACnCA,GAAiB,KAAK,oCAAA,CAAA,GAEvB2xB,GAAAC,IAA2B5xB,GAAiB,mBAAmBA,GAAiB,KAAK,sBAAsB,CAAA,GAC3Go3B,GAAAC,IAAoBr3B,GAAiB,mBAAmBA,GAAiB,KAAK,cAAc,CAAA,GAC5F6mB,GAAAC,IAAqB9mB,GAAiB,mBAAmBA,GAAiB,KAAK,mBAAmB,CAAA,GAEvF21B,IAAAiB,KAAmB,OAAOA,CAAe,KAAK,GAErD,MAAM,QAAQ/9B,CAAK,KAAKA,EAAM,QAAA;AAC7B,QAAAwqB,IAAA,CAAA;AAEE,IAAAxqB,EAAA,SAASkF,IAAMoC,OAAA;AACX,YAAAm3B,IAAOt3B,GAAiB,gBAAA;AAAA,QAC1B,OAAAG;AAAA,QACA,OAAOpC,GAAK;AAAA,QACZ,oBAAoBA,GAAK;AAAA,MAAA;MAEzBu5B,EAAK,SAAA,OAAgBA,EAAK,SAAU,WACpCjU,EAAS,KAAKiU,CAAiB,IAE/Bt3B,GAAiB,SAASzE,EAAA,IAAc,MAAM,6BAA6B,KACvE,YACI,EAAA,OAAA4E,GAAA,EAAA,CAAA,CAAA;AAAA,QAMhB6jB,GAAW,IAAIX,CAAQ;AAAA,EAAA;AAEZ,IAAAW,GAAA,IAAA,EAAA;EAuBNgC,MAAA,QAAAA,GAAa,SAIH6B,KAAA,MAHAA,KAAA,IACX7nB,GAAiB,SAASzE,EAAc,IAAA,MAAM,gDAAgD,CAAA,CAAA;;AAO9F,QAAAg8B,IAAA,EACA,4BAA4B,aAAA;AAG5B,KAAA9kB,MAAA,gBAAAA,GAAY,UAAS,mBACrB8kB,EAAgB,8BAA8B,MAE7C,CAAAhkB,MAAeA,GAAY,SAAS,oBACrCgkB,EAAgB,4BAA4B,KAG5BrT,IAAA1hB,GAAkB+0B,GAAiBrT,CAAiB;AAAA,EAAA;AA6BpE,OA1BA2D,OAAa8N,IAAW,KAAKA,KAAY98B,EAAM,YACnDmH,GAAiB,SAASzE,EAAc,IAAA,MAAM,8CAA8C,GAAA;AAAA,IACxF,YAAA;AAAA,MACI,UAAUyE,GAAiB,KAAK;AAAA,MAChC,QAAQnH,EAAM;AAAA,IAAA;AAAA,OAGtB88B,IAAWA,IAAW,IAAI,IAAI98B,EAAM,SAAS,IAGzC,CAAAgvB,MAAA,CAAa7B,GAAY,KAAK,CAAMrpB,MAAAg5B,MAAah5B,EAAG,KAAK,MAC7DqD,GAAiB,SAASzE,EAAc,IAAA,MAAM,8CAA8C,GAAA;AAAA,IACxF,YAAA;AAAA,MACI,UAAUyE,GAAiB,KAAK;AAAA,IAAA;AAAA,OAG7B21B,MAAAx3B,KAAA6nB,GAAY,CAAC,MAAb,gBAAA7nB,GAAgB,UAAS,IAGrCq5B,IAAWC,MAAA,CAAA,GAGIzD,KAAAhe,GAAsBwhB,EAAS,WAAWxD,EAAW,GAI/DwD,EAAS,aAAaA,EAAS,UAAA;AACzB,UAAAE,IAAuBF,EAAS,cAClC,KAAK,GACL,OAAO,GACP,QAAQ,GACR,MAAM,EAAA,GAGJG,KAAA;AAAA,MACF,MAAM,OAAOD,EAAS,GAAG,KAAK,KAAK1D,KAAc;AAAA,MACjD,QAAQ,OAAOliB,OAAe,QAAQ4lB,EAAS,MAAMA,EAAS,KAAK,KAAK,OAAOA,EAAS,KAAK,KAAK,KAAK1D,KAAc;AAAA,MACrH,SAAS,OAAO0D,EAAS,MAAM,KAAK,KAAK1D,KAAc;AAAA,MACvD,OAAO,OAAOliB,OAAe,QAAQ4lB,EAAS,QAAQA,EAAS,GAAG,KAAK,OAAOA,EAAS,IAAI,KAAK,KAAK1D,KAAc;AAAA;AAGzG,IAAAC,KAAA/xB,GAAmBy1B,IAAkB7lB,IAAYmiB,EAAW;AAAA,EAAA;;AAKxE,UAAAjd,IAAawgB,EAAS;IACxBxgB,MAAe,UAAanP,GAAiBmP,CAAU,MACvCkd,KAAAr4B,GAAOmb,IAAagd,KAAc,EAAE;AAAA;;AAKlD,UAAA/c,IAAgBugB,EAAS;IAC3BvgB,MAAkB,UAAahV,GAAoBgV,CAAa,MAC7Ckd,KAAAt4B,GAAOob,IAAgB+c,KAAc,EAAE;AAAA;MAK1DwD,EAAS,iBAAiBA,EAAS,kBAAkBA,EAAS,WAAA;AACxD,UAAA/zB,KAAgBrF,KAAAo5B,EAAS,kBAAT,OAAAp5B,KAA0B;IAE5Co5B,EAAS,iBACTpD,KAAkBX,GACd+D,EAAS,gBACT/zB,GACAuwB,IACAI,EAAA,IAEGnyB,GAAoBwB,CAAa,MACtB2wB,KAAAv4B,GAAO4H,IAAgBuwB,KAAc,EAAE;AAAA;AAMjE,SAAAK,KAAsBle,GAClBqhB,EAAS,sBAAsBA,EAAS,qBAExCnD,EAAA,GAEAmD,EAAS,eAAA,OAAsBA,EAAS,eAAgB,WAClClD,IAAAv0B,GAAQ,iBAAiBy3B,EAAS,aAAA,EACpD,YAAYnD,MAAuB,KAAA,IAGjBC,IAAA,IAK1BC,KAAwBpe,GACpBqhB,EAAS,wBAAwBA,EAAS,qBAE1CjD,EAAA,GAEAiD,EAAS,eAAA,OAAsBA,EAAS,eAAgB,WAChChD,KAAAz0B,GAAQ,iBAAiBy3B,EAAS,aAAA,EACtD,YAAYjD,MAAyB,KAAA,IAGjBC,KAAA,IAK5BC,KAAqBt4B,GAAaq7B,EAAS,mBAAmB,GAAG/C,EAAkB,GAInFC,KAAuBv4B,GAAaq7B,EAAS,qBAAqB,GAAG9C,EAAoB,GAIzFC,KAAsBx4B,GAAaq7B,EAAS,yBAAyB,GAAG7C,EAAmB,GAI3FC,KAAwBz4B,GAAaq7B,EAAS,2BAA2B,GAAG5C,EAAqB,GAIhFC,KAAAx1B,GAAyBm4B,EAAS,cAAc3C,EAAc,GAI3EzO,OACIwR,OACsB9C,KAAA34B,GAAay7B,IAAqB,GAAG9C,EAAmB,IAE9E+C,OACmB9C,KAAA7yB,GAAmB21B,IAAwB/lB,IAAYijB,EAAgB,KAInGhT,IAAA;AAAA,IACC,YAAY+S;AAAA,IACZ,QAAQC;AAAA,KAQRC,KAAe/xB,GAAyB60B,MAA0C,QAAW9C,EAAY,GAIvFO,KAAA/B,GAAyBzM,IAAqBwO,EAAe,KAG5EkC,MAAA,gBAAAA,GAAe,oBAAmB,WAAUA,MAAA,gBAAAA,GAAe,oBAAmB,YACjFjC,KAAgBiC,GAAc,iBAG3Bx1B,GAAoBw1B,MAAA,gBAAAA,GAAe,kBAAkB,MACxDpP,KAAoBoP,GAAc,qBAuCnC/B,GAAY78B,CAAK,GA0RbmH,GAAiB,SAChB6uB,OACA9uB,GAAQ,mBAAmB8uB,EAAM,GACxBA,KAAA,SAGT7uB,GAAiB,MAAA,CAAO6nB,OAAa7nB,GAAiB,gBACtD6uB,KAAS7uB,GAAiB,IAC1BD,GAAQ,iBAAiC8uB,IAAA;AAAA,IACrC,eAAe9wB,GAAc8xB,IAAA;UACrB9xB,IAAO,KAAKA,IAAOlF,EAAM,SAAS;AACxB,cAAA,IAAA,MAAM,mDAAmD;AAG3D,MAAA+8B,GAAA73B,GAAM,IAAO8xB,EAAQ;AAAA;IAErC,gBAAgBmD,GAAc9C,IAAoBL,IAAA;UAC1CqD,IAAewD,EAAWf,IAAW3C,GAAM9C,EAAQ;AAE3C,MAAA0F,GAAA1C,GAAc,IAAOrD,EAAQ;AAAA;IAE7C,YAAYmD,GAAc9C,IAAoBL,IAAA;UACtCuD,IAAWsD,EAAWf,IAAW3C,GAAM9C,EAAQ;AAEvC,MAAA0F,GAAAxC,GAAU,IAAOvD,EAAQ;AAAA;IAEzC,cAAcA,GAAA;AACE,MAAA+F,GAAA,GAAG,IAAO/F,CAAQ;AAAA;IAElC,YAAYA,GAAA;AACR,MAAA+F,GAAY/8B,EAAM,SAAS,GAAG,IAAOg3B,CAAQ;AAAA;IAEjD,eAAA,EACI,MAAAmD,GACA,UAAA9C,IACA,UAAAL,MAAA;AAEI,MAAAmD,KACY4C,GAAAc,EAAWf,IAAW3C,GAAM9C,MAAY,OAAO,GAAG,IAAOL,MAAY,EAAI;AAAA;QAOtGvuB,KAAA;AAAA,IACC,kBAAiBiS,MAAA,gBAAAA,GAAa,UAAS,iBAAiB,QAAQ;AAAA,IAChE,WAAWiiB;AAAA,+EAuBb3N;;;MAEO,KAAAxmB,GAAa,QAAQ5H,IAAK6H,EAAI;AAAA;;qBAGpB;AAAA,gBACLq1B;AAAA,0BACU;AAAA;;;;qBAMR,gBAAA3/B,GAAAyC,GAAI,YAAU,EAAA,IAAA,MAAAzC;AAAA,QAAGq8B,KAA4BzrB,GAAQ,sBAAsB,IAAI;AAAA;;uCAEpDotB,KAAevzB,GAAiBuzB,IAAcljB,EAAU,IAAI;AAAA,QAChE,2BAAAjW,GAAOm4B,EAAW;AAAA,kCACnBC;AAAA,qCACGC;AAAA,wCACGC;AAAA,QACI,oCAAAE,MAAuB;AAAA,QACrB,sCAAAE,MAAyB;AAAA,QAC3B,oCAAAD,KAAuB;AAAA,QACrB,sCAAAE,MAAyB;AAAA,2CAC5BC;AAAA,6CACEC;AAAA,iDACIC;AAAA,mDACEC;AAAA,uCACZR;AAAA,uCACAS,KAAiB94B,GAAgB84B,KAAiB,KAAKb,EAAW,IAAI;AAAA,QACjE,oCAAA3L,OAAsB,YAAeA,EAAiB,OAAO;AAAA,MAAA,CAlB1F,CAAA,GAAA3uB,EAAA,QAAAm6B,IAqBC,CAAA,CAAA,QAAAn6B,EAAA,SAAAD,GAAI,gBAAgB,+BACrBusB,IAAW,CAAAjoB,MAAA;YACNoC,KAAQpC,EAAK,OACbg6B,KAAa53B,OAAUw1B;oBAE1BJ,MAAmBp1B,KAAQ,IAEjB,QAAAzG,EAAA,SAAAD,GAAI,kBAAgB,CAAA,CAAA,GAAAI,GAAA;AAAA,UACd,OAAA07B,GAAgB,QAAQ15B,GAAO05B,GAAgB,KAAK,IAAI;AAAA,UACvD,QAAAA,GAAgB,SAAS15B,GAAO05B,GAAgB,MAAM,IAAI;AAAA;;UAKrEl0B,GAAa,cAAc5H,IAAG;AAAA,YACjC,UAAUs+B;AAAA,YACV,YAAY,EAAQh6B,EAAK;AAAA,UAAkB;;QAEjD,CAAA,IAAA/G,GAAA+G,EAAK,KAAK,CAAA;AAAA,MAAA,YAGfy3B,OAAkB,WAAWC,KAEnB,OAAA/7B,EAAA,SAAAD,GAAI,wBAAwB,GAC5B,CAAA,CAAA,GAAAC,EAAA,SAAAiC,GAAU85B,EAAiB,GAAA,CAAA,CAAA,iCAG9Bh8B,GAAI,kBAAkB,GAAA,CAAA,CAAA,IAAAb,GACvBotB,IAAW,CAAAjoB,MAAA;YACNoC,KAAQpC,EAAK,OACbg6B,KAAa53B,OAAUw1B;oBAE1BJ,MAAmBp1B,KAAQ,IAEjB,OAAAzG,EAAA,SAAAD,GAAI,kBAIN,CAAA,CAAA,0CAAAC,EAAA,OAAA67B,GAAgB,KAAG,CAAA,CAAA,GAAA17B,GAAA;AAAA,UACX,OAAA07B,GAAgB,QAAQ15B,GAAO05B,GAAgB,KAAK,IAAI;AAAA,UACvD,QAAAA,GAAgB,SAAS15B,GAAO05B,GAAgB,MAAM,IAAI;AAAA,QAAA;;;;iBAMvEl0B,GAAa,cAAc5H,IAAG;AAAA,cAC/B,UAAUs+B;AAAA,cACV,YAAY,EAAQh6B,EAAK;AAAA,YAAkB;YAG3C,SAAAA,EAAK,sBAAuB,CAAAiC,GAAiB,cACxC,CAAAjC,EAAK,kBAAkB,EAAE,OAAOiG,EAAoB;;cAIzD,IAAE,GAAK4vB,EAAM,QAAQzzB,EAAK;AAAA,cAC1B,iBAAe,GAAKyzB,EAAM,UAAUzzB,EAAK;AAAA,cACzC,MAAM;AAAA;AAAA,cAEN,UAAU43B,MAAe,CAAA/3B,GAAiB,cAAejC,EAAK,qBAAqB,SAAY,MAAO;AAAA,cACtG,iBAAiBg6B,KAAa,SAAS;AAAA;YAE7B,cAAA/3B,GAAiB,cAAc,OAAQ,CAAS7K,MAAA8gC,GAAW9gC,GAAOgL,EAAK;AAAA;;;2BACvF,GAAAnJ,GAAA+G,EAAK,KAAK,CAAA;AAAA;;wBAInBqoB,KAEU,OAAA1sB,EAAA,SAAAD,GAAI,iBACJ,CAAA,CAAA,GAAAC,EAAA,SAAAiC,GAAUomB,CAAc,GAAA,CAAA,CAAA,YAI3B,EAAA,gBAAA/qB,GAAAyC,GAAI,cAAY,EAAA,IAAA,MAAAzC;AAAA,QAAGq8B,KAA4BzrB,GAAQ,sBAAsB,IAAI;AAAA;qBAC9EksB,IAAa,CAAA,CAAA,QAAAp6B;AAAA;QAOb2H,GAAa,gBAAgB5H,IAAG;AAAA,UACnC,QAAQw7B;AAAA,UACR,UAAUC;AAAA,QAAA;;OAEH,GAAAx7B,EAAA,QAAAq6B,aAEJ/N,IAAW,CAAAjoB,MAAA;YACNoC,KAAQpC,EAAK,OACbi6B,KAAwB5C,GAAaj1B,EAAK;mCAGvCkB,GAAa,eAAe5H,MAC/B,SAAS47B,EAAcl1B,EAAK,GAAA,GAAA,CAAA,CAAA,wBAAAnJ,GAG3B48B,IAAe,EAAA,IAAA,YAAA58B,GAAAmJ,IACF,EAAA,CAAA,sBAAAnJ,GAAA48B,IAAa,EAAA,IAAA,UAAA58B,GAAAmJ,iCACjBA,KAAQ,KAAG,EAAA,IAAA,GAAA,KAEpB63B;;;8BAEqBA;AAAA,0BACJ9T;AAAA,YACL,SAAA/jB,OAAUw1B;AAAA;;;;;;;;;;;;;;ACnyB5C,SAASsC,GAAWC,GAAG;AAC7B,SAAOA,IAAI,MAAM,IAAMA,IAAIA,IAAIA,IAAI,MAAM,KAAK,IAAI,IAAMA,IAAI,GAAK,CAAG,IAAI;AACzE;AAOO,SAASC,GAAQD,GAAG;AAC1B,SAAOA,IAAIA,IAAIA;AAChB;AAOO,SAASE,GAASF,GAAG;AAC3B,QAAMG,IAAIH,IAAI;AACd,SAAOG,IAAIA,IAAIA,IAAI;AACpB;ACnIO,SAASC,GAAkBC,GAAiB;AAC/C,SAAO,CAAC,MAAc;AAClB,QAAI,KAAK;AACE,aAAA;AACX,QAAW,KAAK;AACL,aAAA;AAGL,UAAAllC,IAAI,IAAIklC,EAAM,QACd,IAAI,KAAK,MAAMllC,CAAC,GAChBmlC,IAAKD,EAAM,CAAC,GACZE,IAAKF,EAAM,IAAI,CAAC,GAChBG,IAAKrlC,IAAI;AAER,WAAAmlC,IAAKE,IAAKD,KAAM,IAAIC;AAAA,EAC/B;AACJ;ACdA,MAAMH,KAAQ;AAAA,EACV;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AA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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,91]}