{"version":3,"file":"bundle.js","sources":["../../node_modules/svelte/internal/index.mjs","../../node_modules/d3-format/src/formatDecimal.js","../../node_modules/d3-format/src/formatSpecifier.js","../../node_modules/d3-format/src/formatPrefixAuto.js","../../node_modules/d3-format/src/formatRounded.js","../../node_modules/d3-format/src/formatTypes.js","../../node_modules/d3-format/src/identity.js","../../node_modules/d3-format/src/locale.js","../../node_modules/d3-format/src/defaultLocale.js","../../node_modules/d3-format/src/formatGroup.js","../../node_modules/d3-format/src/formatNumerals.js","../../node_modules/d3-format/src/formatTrim.js","../../node_modules/d3-format/src/exponent.js","../../node_modules/d3-array/src/max.js","../../node_modules/d3-array/src/min.js","../../src/lib/random.js","../../node_modules/d3-dsv/src/dsv.js","../../node_modules/d3-dsv/src/csv.js","../../node_modules/d3-dsv/src/autoType.js","../../node_modules/html2canvas/dist/html2canvas.js","../../src/utils.js","../../src/config.js","../../src/ui/Tooltip.svelte","../../src/ui/tooltip.js","../../node_modules/d3-selection/src/namespaces.js","../../node_modules/d3-selection/src/namespace.js","../../node_modules/d3-selection/src/creator.js","../../node_modules/d3-selection/src/selector.js","../../node_modules/d3-selection/src/array.js","../../node_modules/d3-selection/src/selectorAll.js","../../node_modules/d3-selection/src/matcher.js","../../node_modules/d3-selection/src/selection/selectChild.js","../../node_modules/d3-selection/src/selection/selectChildren.js","../../node_modules/d3-selection/src/selection/sparse.js","../../node_modules/d3-selection/src/selection/enter.js","../../node_modules/d3-selection/src/constant.js","../../node_modules/d3-selection/src/selection/data.js","../../node_modules/d3-selection/src/selection/sort.js","../../node_modules/d3-selection/src/selection/attr.js","../../node_modules/d3-selection/src/window.js","../../node_modules/d3-selection/src/selection/style.js","../../node_modules/d3-selection/src/selection/property.js","../../node_modules/d3-selection/src/selection/classed.js","../../node_modules/d3-selection/src/selection/text.js","../../node_modules/d3-selection/src/selection/html.js","../../node_modules/d3-selection/src/selection/raise.js","../../node_modules/d3-selection/src/selection/lower.js","../../node_modules/d3-selection/src/selection/insert.js","../../node_modules/d3-selection/src/selection/remove.js","../../node_modules/d3-selection/src/selection/clone.js","../../node_modules/d3-selection/src/selection/on.js","../../node_modules/d3-selection/src/selection/dispatch.js","../../node_modules/d3-selection/src/selection/index.js","../../node_modules/d3-selection/src/select.js","../../node_modules/d3-selection/src/pointer.js","../../node_modules/d3-selection/src/sourceEvent.js","../../node_modules/d3-selection/src/selection/select.js","../../node_modules/d3-selection/src/selection/selectAll.js","../../node_modules/d3-selection/src/selection/filter.js","../../node_modules/d3-selection/src/selection/exit.js","../../node_modules/d3-selection/src/selection/join.js","../../node_modules/d3-selection/src/selection/merge.js","../../node_modules/d3-selection/src/selection/order.js","../../node_modules/d3-selection/src/selection/call.js","../../node_modules/d3-selection/src/selection/nodes.js","../../node_modules/d3-selection/src/selection/node.js","../../node_modules/d3-selection/src/selection/size.js","../../node_modules/d3-selection/src/selection/empty.js","../../node_modules/d3-selection/src/selection/each.js","../../node_modules/d3-selection/src/selection/append.js","../../node_modules/d3-selection/src/selection/datum.js","../../node_modules/d3-selection/src/selection/iterator.js","../../node_modules/d3-dispatch/src/dispatch.js","../../node_modules/d3-drag/src/noevent.js","../../node_modules/d3-drag/src/nodrag.js","../../node_modules/d3-color/src/define.js","../../node_modules/d3-color/src/color.js","../../node_modules/d3-interpolate/src/constant.js","../../node_modules/d3-interpolate/src/color.js","../../node_modules/d3-interpolate/src/rgb.js","../../node_modules/d3-interpolate/src/number.js","../../node_modules/d3-interpolate/src/string.js","../../node_modules/d3-interpolate/src/transform/decompose.js","../../node_modules/d3-interpolate/src/transform/parse.js","../../node_modules/d3-interpolate/src/transform/index.js","../../node_modules/d3-interpolate/src/zoom.js","../../node_modules/d3-timer/src/timer.js","../../node_modules/d3-timer/src/timeout.js","../../node_modules/d3-transition/src/transition/schedule.js","../../node_modules/d3-transition/src/interrupt.js","../../node_modules/d3-transition/src/transition/tween.js","../../node_modules/d3-transition/src/transition/interpolate.js","../../node_modules/d3-transition/src/transition/attr.js","../../node_modules/d3-transition/src/transition/attrTween.js","../../node_modules/d3-transition/src/transition/delay.js","../../node_modules/d3-transition/src/transition/duration.js","../../node_modules/d3-transition/src/transition/ease.js","../../node_modules/d3-transition/src/transition/on.js","../../node_modules/d3-transition/src/transition/selection.js","../../node_modules/d3-transition/src/transition/style.js","../../node_modules/d3-transition/src/transition/styleTween.js","../../node_modules/d3-transition/src/transition/textTween.js","../../node_modules/d3-transition/src/transition/index.js","../../node_modules/d3-transition/src/transition/select.js","../../node_modules/d3-transition/src/transition/selectAll.js","../../node_modules/d3-transition/src/transition/filter.js","../../node_modules/d3-transition/src/transition/merge.js","../../node_modules/d3-transition/src/transition/transition.js","../../node_modules/d3-transition/src/transition/text.js","../../node_modules/d3-transition/src/transition/remove.js","../../node_modules/d3-transition/src/transition/easeVarying.js","../../node_modules/d3-transition/src/transition/end.js","../../node_modules/d3-transition/src/selection/transition.js","../../node_modules/d3-ease/src/cubic.js","../../node_modules/d3-transition/src/selection/index.js","../../node_modules/d3-transition/src/selection/interrupt.js","../../node_modules/d3-zoom/src/constant.js","../../node_modules/d3-zoom/src/event.js","../../node_modules/d3-zoom/src/transform.js","../../node_modules/d3-zoom/src/noevent.js","../../node_modules/d3-zoom/src/zoom.js","../../src/ui/Icon.svelte","../../src/vis/HexMap.svelte","../../src/vis/Legend.svelte","../../src/vis/Bar.svelte","../../node_modules/svelte-select/src/Item.svelte","../../node_modules/svelte-select/src/List.svelte","../../node_modules/svelte-select/src/utils/isOutOfViewport.js","../../node_modules/svelte-select/src/Selection.svelte","../../node_modules/svelte-select/src/MultiSelection.svelte","../../node_modules/svelte-select/src/VirtualList.svelte","../../node_modules/svelte-select/src/ClearIcon.svelte","../../node_modules/svelte-select/src/Select.svelte","../../node_modules/svelte-select/src/utils/debounce.js","../../src/ui/Select.svelte","../../src/ui/ONSLogo.svelte","../../src/ui/CensusLogo.svelte","../../src/App.svelte","../../src/lib/hexjson.js","../../src/main.js"],"sourcesContent":["function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\nfunction is_promise(value) {\n return value && typeof value === 'object' && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nlet src_url_equal_anchor;\nfunction src_url_equal(element_src, url) {\n if (!src_url_equal_anchor) {\n src_url_equal_anchor = document.createElement('a');\n }\n src_url_equal_anchor.href = url;\n return element_src === src_url_equal_anchor.href;\n}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction validate_store(store, name) {\n if (store != null && typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\n}\nfunction subscribe(store, ...callbacks) {\n if (store == null) {\n return noop;\n }\n const unsub = store.subscribe(...callbacks);\n return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction get_store_value(store) {\n let value;\n subscribe(store, _ => value = _)();\n return value;\n}\nfunction component_subscribe(component, store, callback) {\n component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n return definition[1] && fn\n ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n if (definition[2] && fn) {\n const lets = definition[2](fn(dirty));\n if ($$scope.dirty === undefined) {\n return lets;\n }\n if (typeof lets === 'object') {\n const merged = [];\n const len = Math.max($$scope.dirty.length, lets.length);\n for (let i = 0; i < len; i += 1) {\n merged[i] = $$scope.dirty[i] | lets[i];\n }\n return merged;\n }\n return $$scope.dirty | lets;\n }\n return $$scope.dirty;\n}\nfunction update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn) {\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\nfunction get_all_dirty_from_scope($$scope) {\n if ($$scope.ctx.length > 32) {\n const dirty = [];\n const length = $$scope.ctx.length / 32;\n for (let i = 0; i < length; i++) {\n dirty[i] = -1;\n }\n return dirty;\n }\n return -1;\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== '$')\n result[k] = props[k];\n return result;\n}\nfunction compute_rest_props(props, keys) {\n const rest = {};\n keys = new Set(keys);\n for (const k in props)\n if (!keys.has(k) && k[0] !== '$')\n rest[k] = props[k];\n return rest;\n}\nfunction compute_slots(slots) {\n const result = {};\n for (const key in slots) {\n result[key] = true;\n }\n return result;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\nfunction null_to_empty(value) {\n return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value) {\n store.set(value);\n return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n tasks.forEach(task => {\n if (!task.c(now)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n let task;\n if (tasks.size === 0)\n raf(run_tasks);\n return {\n promise: new Promise(fulfill => {\n tasks.add(task = { c: callback, f: fulfill });\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\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;\nfunction start_hydrating() {\n is_hydrating = true;\n}\nfunction end_hydrating() {\n is_hydrating = false;\n}\nfunction upper_bound(low, high, key, value) {\n // Return first index of value larger than input value in the range [low, high)\n while (low < high) {\n const mid = low + ((high - low) >> 1);\n if (key(mid) <= value) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n return low;\n}\nfunction init_hydrate(target) {\n if (target.hydrate_init)\n return;\n target.hydrate_init = true;\n // We know that all children have claim_order values since the unclaimed have been detached if target is not <head>\n let children = target.childNodes;\n // If target is <head>, there may be children without claim_order\n if (target.nodeName === 'HEAD') {\n const myChildren = [];\n for (let i = 0; i < children.length; i++) {\n const node = children[i];\n if (node.claim_order !== undefined) {\n myChildren.push(node);\n }\n }\n children = myChildren;\n }\n /*\n * Reorder claimed children optimally.\n * We can reorder claimed children optimally by finding the longest subsequence of\n * nodes that are already claimed in order and only moving the rest. The longest\n * subsequence subsequence of nodes that are claimed in order can be found by\n * computing the longest increasing subsequence of .claim_order values.\n *\n * This algorithm is optimal in generating the least amount of reorder operations\n * possible.\n *\n * Proof:\n * We know that, given a set of reordering operations, the nodes that do not move\n * always form an increasing subsequence, since they do not move among each other\n * meaning that they must be already ordered among each other. Thus, the maximal\n * set of nodes that do not move form a longest increasing subsequence.\n */\n // Compute longest increasing subsequence\n // m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n const m = new Int32Array(children.length + 1);\n // Predecessor indices + 1\n const p = new Int32Array(children.length);\n m[0] = -1;\n let longest = 0;\n for (let i = 0; i < children.length; i++) {\n const current = children[i].claim_order;\n // Find the largest subsequence length such that it ends in a value less than our current value\n // upper_bound returns first greater value, so we subtract one\n // with fast path for when we are on the current longest subsequence\n const seqLen = ((longest > 0 && children[m[longest]].claim_order <= current) ? longest + 1 : upper_bound(1, longest, idx => children[m[idx]].claim_order, current)) - 1;\n p[i] = m[seqLen] + 1;\n const newLen = seqLen + 1;\n // We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n m[newLen] = i;\n longest = Math.max(newLen, longest);\n }\n // The longest increasing subsequence of nodes (initially reversed)\n const lis = [];\n // The rest of the nodes, nodes that will be moved\n const toMove = [];\n let last = children.length - 1;\n for (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n lis.push(children[cur - 1]);\n for (; last >= cur; last--) {\n toMove.push(children[last]);\n }\n last--;\n }\n for (; last >= 0; last--) {\n toMove.push(children[last]);\n }\n lis.reverse();\n // We sort the nodes being moved to guarantee that their insertion order matches the claim order\n toMove.sort((a, b) => a.claim_order - b.claim_order);\n // Finally, we move the nodes\n for (let i = 0, j = 0; i < toMove.length; i++) {\n while (j < lis.length && toMove[i].claim_order >= lis[j].claim_order) {\n j++;\n }\n const anchor = j < lis.length ? lis[j] : null;\n target.insertBefore(toMove[i], anchor);\n }\n}\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction append_styles(target, style_sheet_id, styles) {\n const append_styles_to = get_root_for_style(target);\n if (!append_styles_to.getElementById(style_sheet_id)) {\n const style = element('style');\n style.id = style_sheet_id;\n style.textContent = styles;\n append_stylesheet(append_styles_to, style);\n }\n}\nfunction get_root_for_style(node) {\n if (!node)\n return document;\n const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n if (root && root.host) {\n return root;\n }\n return node.ownerDocument;\n}\nfunction append_empty_stylesheet(node) {\n const style_element = element('style');\n append_stylesheet(get_root_for_style(node), style_element);\n return style_element.sheet;\n}\nfunction append_stylesheet(node, style) {\n append(node.head || node, style);\n}\nfunction append_hydration(target, node) {\n if (is_hydrating) {\n init_hydrate(target);\n if ((target.actual_end_child === undefined) || ((target.actual_end_child !== null) && (target.actual_end_child.parentElement !== target))) {\n target.actual_end_child = target.firstChild;\n }\n // Skip nodes of undefined ordering\n while ((target.actual_end_child !== null) && (target.actual_end_child.claim_order === undefined)) {\n target.actual_end_child = target.actual_end_child.nextSibling;\n }\n if (node !== target.actual_end_child) {\n // We only insert if the ordering of this node should be modified or the parent node is not target\n if (node.claim_order !== undefined || node.parentNode !== target) {\n target.insertBefore(node, target.actual_end_child);\n }\n }\n else {\n target.actual_end_child = node.nextSibling;\n }\n }\n else if (node.parentNode !== target || node.nextSibling !== null) {\n target.appendChild(node);\n }\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction insert_hydration(target, node, anchor) {\n if (is_hydrating && !anchor) {\n append_hydration(target, node);\n }\n else if (node.parentNode !== target || node.nextSibling != anchor) {\n target.insertBefore(node, anchor || null);\n }\n}\nfunction detach(node) {\n node.parentNode.removeChild(node);\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction element_is(name, is) {\n return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n const target = {};\n for (const k in obj) {\n if (has_prop(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(' ');\n}\nfunction empty() {\n return text('');\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function (event) {\n event.preventDefault();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction self(fn) {\n return function (event) {\n // @ts-ignore\n if (event.target === this)\n fn.call(this, event);\n };\n}\nfunction trusted(fn) {\n return function (event) {\n // @ts-ignore\n if (event.isTrusted)\n fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\nfunction set_attributes(node, attributes) {\n // @ts-ignore\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n }\n else if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key === '__value') {\n node.value = node[key] = attributes[key];\n }\n else if (descriptors[key] && descriptors[key].set) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_svg_attributes(node, attributes) {\n for (const key in attributes) {\n attr(node, key, attributes[key]);\n }\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n const value = new Set();\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.add(group[i].__value);\n }\n if (!checked) {\n value.delete(__value);\n }\n return Array.from(value);\n}\nfunction to_number(value) {\n return value === '' ? null : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction init_claim_info(nodes) {\n if (nodes.claim_info === undefined) {\n nodes.claim_info = { last_index: 0, total_claimed: 0 };\n }\n}\nfunction claim_node(nodes, predicate, processNode, createNode, dontUpdateLastIndex = false) {\n // Try to find nodes in an order such that we lengthen the longest increasing subsequence\n init_claim_info(nodes);\n const resultNode = (() => {\n // We first try to find an element after the previous one\n for (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n return node;\n }\n }\n // Otherwise, we try to find one before\n // We iterate in reverse so that we don't go too far back\n for (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n else if (replacement === undefined) {\n // Since we spliced before the last_index, we decrease it\n nodes.claim_info.last_index--;\n }\n return node;\n }\n }\n // If we can't find any matching node, we create a new one\n return createNode();\n })();\n resultNode.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n return resultNode;\n}\nfunction claim_element_base(nodes, name, attributes, create_element) {\n return claim_node(nodes, (node) => node.nodeName === name, (node) => {\n const remove = [];\n for (let j = 0; j < node.attributes.length; j++) {\n const attribute = node.attributes[j];\n if (!attributes[attribute.name]) {\n remove.push(attribute.name);\n }\n }\n remove.forEach(v => node.removeAttribute(v));\n return undefined;\n }, () => create_element(name));\n}\nfunction claim_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, element);\n}\nfunction claim_svg_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, svg_element);\n}\nfunction claim_text(nodes, data) {\n return claim_node(nodes, (node) => node.nodeType === 3, (node) => {\n const dataStr = '' + data;\n if (node.data.startsWith(dataStr)) {\n if (node.data.length !== dataStr.length) {\n return node.splitText(dataStr.length);\n }\n }\n else {\n node.data = dataStr;\n }\n }, () => text(data), true // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n );\n}\nfunction claim_space(nodes) {\n return claim_text(nodes, ' ');\n}\nfunction find_comment(nodes, text, start) {\n for (let i = start; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n return i;\n }\n }\n return nodes.length;\n}\nfunction claim_html_tag(nodes) {\n // find html opening tag\n const start_index = find_comment(nodes, 'HTML_TAG_START', 0);\n const end_index = find_comment(nodes, 'HTML_TAG_END', start_index);\n if (start_index === end_index) {\n return new HtmlTagHydration();\n }\n init_claim_info(nodes);\n const html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n detach(html_tag_nodes[0]);\n detach(html_tag_nodes[html_tag_nodes.length - 1]);\n const claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n for (const n of claimed_nodes) {\n n.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n }\n return new HtmlTagHydration(claimed_nodes);\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.wholeText !== data)\n text.data = data;\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value, important) {\n if (value === null) {\n node.style.removeProperty(key);\n }\n else {\n node.style.setProperty(key, value, important ? 'important' : '');\n }\n}\nfunction select_option(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n select.selectedIndex = -1; // no option should be selected\n}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked') || select.options[0];\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].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\nlet crossorigin;\nfunction is_crossorigin() {\n if (crossorigin === undefined) {\n crossorigin = false;\n try {\n if (typeof window !== 'undefined' && window.parent) {\n void window.parent.document;\n }\n }\n catch (error) {\n crossorigin = true;\n }\n }\n return crossorigin;\n}\nfunction add_resize_listener(node, fn) {\n const computed_style = getComputedStyle(node);\n if (computed_style.position === 'static') {\n node.style.position = 'relative';\n }\n const iframe = element('iframe');\n iframe.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n 'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;');\n iframe.setAttribute('aria-hidden', 'true');\n iframe.tabIndex = -1;\n const crossorigin = is_crossorigin();\n let unsubscribe;\n if (crossorigin) {\n iframe.src = \"data:text/html,<script>onresize=function(){parent.postMessage(0,'*')}</script>\";\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail, bubbles = false) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, bubbles, false, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nclass HtmlTag {\n constructor() {\n this.e = this.n = null;\n }\n c(html) {\n this.h(html);\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n this.e = element(target.nodeName);\n this.t = target;\n this.c(html);\n }\n this.i(anchor);\n }\n h(html) {\n this.e.innerHTML = html;\n this.n = Array.from(this.e.childNodes);\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert(this.t, this.n[i], anchor);\n }\n }\n p(html) {\n this.d();\n this.h(html);\n this.i(this.a);\n }\n d() {\n this.n.forEach(detach);\n }\n}\nclass HtmlTagHydration extends HtmlTag {\n constructor(claimed_nodes) {\n super();\n this.e = this.n = null;\n this.l = claimed_nodes;\n }\n c(html) {\n if (this.l) {\n this.n = this.l;\n }\n else {\n super.c(html);\n }\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert_hydration(this.t, this.n[i], anchor);\n }\n }\n}\nfunction attribute_to_object(attributes) {\n const result = {};\n for (const attribute of attributes) {\n result[attribute.name] = attribute.value;\n }\n return result;\n}\nfunction get_custom_elements_slots(element) {\n const result = {};\n element.childNodes.forEach((node) => {\n result[node.slot || 'default'] = true;\n });\n return result;\n}\n\n// we need to store the information for multiple documents because a Svelte application could also contain iframes\n// https://github.com/sveltejs/svelte/issues/3624\nconst managed_styles = new Map();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\n}\nfunction create_style_information(doc, node) {\n const info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n managed_styles.set(doc, info);\n return info;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = '{\\n';\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n const doc = get_root_for_style(node);\n const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n if (!rules[name]) {\n rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || '';\n node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n const previous = (node.style.animation || '').split(', ');\n const next = previous.filter(name\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n );\n const deleted = previous.length - next.length;\n if (deleted) {\n node.style.animation = next.join(', ');\n active -= deleted;\n if (!active)\n clear_rules();\n }\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n managed_styles.forEach(info => {\n const { stylesheet } = info;\n let i = stylesheet.cssRules.length;\n while (i--)\n stylesheet.deleteRule(i);\n info.rules = {};\n });\n managed_styles.clear();\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error('Function called outside component initialization');\n return current_component;\n}\nfunction beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.push(fn);\n}\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\nfunction createEventDispatcher() {\n const component = get_current_component();\n return (type, detail) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail);\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n }\n };\n}\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n}\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\nfunction getAllContexts() {\n return get_current_component().$$.context;\n}\nfunction hasContext(key) {\n return get_current_component().$$.context.has(key);\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\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n // @ts-ignore\n callbacks.slice().forEach(fn => fn.call(this, event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nconst render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\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();\nlet flushidx = 0; // Do *not* move this inside the flush() function\nfunction flush() {\n const saved_component = current_component;\n do {\n // first, call beforeUpdate functions\n // and update components\n while (flushidx < dirty_components.length) {\n const component = dirty_components[flushidx];\n flushidx++;\n set_current_component(component);\n update(component.$$);\n }\n set_current_component(null);\n dirty_components.length = 0;\n flushidx = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n seen_callbacks.clear();\n set_current_component(saved_component);\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\n\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros // parent group\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n let config = fn(node, params);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n started = true;\n delete_rule(node);\n if (is_function(config)) {\n config = config();\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n let config = fn(node, params);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n let config = fn(node, params);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init(program, duration) {\n const d = (program.b - t);\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program || pending_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, 'start');\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== undefined) {\n child_ctx = child_ctx.slice();\n child_ctx[key] = value;\n }\n const block = type && (info.current = type)(child_ctx);\n let needs_flush = false;\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n if (info.blocks[i] === block) {\n info.blocks[i] = null;\n }\n });\n check_outros();\n }\n });\n }\n else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n needs_flush = true;\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n if (needs_flush) {\n flush();\n }\n }\n if (is_promise(promise)) {\n const current_component = get_current_component();\n promise.then(value => {\n set_current_component(current_component);\n update(info.then, 1, info.value, value);\n set_current_component(null);\n }, error => {\n set_current_component(current_component);\n update(info.catch, 2, info.error, error);\n set_current_component(null);\n if (!info.hasCatch) {\n throw error;\n }\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = promise;\n }\n}\nfunction update_await_block_branch(info, ctx, dirty) {\n const child_ctx = ctx.slice();\n const { resolved } = info;\n if (info.current === info.then) {\n child_ctx[info.value] = resolved;\n }\n if (info.current === info.catch) {\n child_ctx[info.error] = resolved;\n }\n info.block.p(child_ctx, dirty);\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n block.p(child_ctx, dirty);\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n const keys = new Set();\n for (let i = 0; i < list.length; i++) {\n const key = get_key(get_context(ctx, list, i));\n if (keys.has(key)) {\n throw new Error('Cannot have duplicate keys in a keyed each');\n }\n keys.add(key);\n }\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\n const to_null_out = {};\n const accounted_for = { $$scope: 1 };\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n }\n else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update))\n update[key] = undefined;\n }\n return update;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\n// source: https://html.spec.whatwg.org/multipage/indices.html\nconst boolean_attributes = new Set([\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'ismap',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected'\n]);\n\nconst invalid_attribute_name_character = /[\\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\nfunction spread(args, attrs_to_add) {\n const attributes = Object.assign({}, ...args);\n if (attrs_to_add) {\n const classes_to_add = attrs_to_add.classes;\n const styles_to_add = attrs_to_add.styles;\n if (classes_to_add) {\n if (attributes.class == null) {\n attributes.class = classes_to_add;\n }\n else {\n attributes.class += ' ' + classes_to_add;\n }\n }\n if (styles_to_add) {\n if (attributes.style == null) {\n attributes.style = style_object_to_string(styles_to_add);\n }\n else {\n attributes.style = style_object_to_string(merge_ssr_styles(attributes.style, styles_to_add));\n }\n }\n }\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === true)\n str += ' ' + name;\n else if (boolean_attributes.has(name.toLowerCase())) {\n if (value)\n str += ' ' + name;\n }\n else if (value != null) {\n str += ` ${name}=\"${value}\"`;\n }\n });\n return str;\n}\nfunction merge_ssr_styles(style_attribute, style_directive) {\n const style_object = {};\n for (const individual_style of style_attribute.split(';')) {\n const colon_index = individual_style.indexOf(':');\n const name = individual_style.slice(0, colon_index).trim();\n const value = individual_style.slice(colon_index + 1).trim();\n if (!name)\n continue;\n style_object[name] = value;\n }\n for (const name in style_directive) {\n const value = style_directive[name];\n if (value) {\n style_object[name] = value;\n }\n else {\n delete style_object[name];\n }\n }\n return style_object;\n}\nconst escaped = {\n '\"': '"',\n \"'\": ''',\n '&': '&',\n '<': '<',\n '>': '>'\n};\nfunction escape(html) {\n return String(html).replace(/[\"'&<>]/g, match => escaped[match]);\n}\nfunction escape_attribute_value(value) {\n return typeof value === 'string' ? escape(value) : value;\n}\nfunction escape_object(obj) {\n const result = {};\n for (const key in obj) {\n result[key] = escape_attribute_value(obj[key]);\n }\n return result;\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${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`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots, context) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(context || (parent_component ? parent_component.$$.context : [])),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n on_destroy = [];\n const result = { title: '', head: '', css: new Set() };\n const html = $$render(result, props, {}, $$slots, context);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.title + result.head\n };\n },\n $$render\n };\n}\nfunction add_attribute(name, value, boolean) {\n if (value == null || (boolean && !value))\n return '';\n return ` ${name}${value === true && boolean_attributes.has(name) ? '' : `=${typeof value === 'string' ? JSON.stringify(escape(value)) : `\"${value}\"`}`}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : '';\n}\nfunction style_object_to_string(style_object) {\n return Object.keys(style_object)\n .filter(key => style_object[key])\n .map(key => `${key}: ${style_object[key]};`)\n .join(' ');\n}\nfunction add_styles(style_object) {\n const styles = style_object_to_string(style_object);\n return styles ? ` style=\"${styles}\"` : '';\n}\n\nfunction bind(component, name, callback) {\n const index = component.$$.props[name];\n if (index !== undefined) {\n component.$$.bound[index] = callback;\n callback(component.$$.ctx[index]);\n }\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor, customElement) {\n const { fragment, on_mount, on_destroy, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n if (!customElement) {\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = on_mount.map(run).filter(is_function);\n if (on_destroy) {\n on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n }\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const $$ = component.$$ = {\n fragment: null,\n ctx: null,\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n on_disconnect: [],\n before_update: [],\n after_update: [],\n context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n // everything else\n callbacks: blank_object(),\n dirty,\n skip_bound: false,\n root: options.target || parent_component.$$.root\n };\n append_styles && append_styles($$.root);\n let ready = false;\n $$.ctx = instance\n ? instance(component, options.props || {}, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n if (!$$.skip_bound && $$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n })\n : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n start_hydrating();\n const nodes = children(options.target);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor, options.customElement);\n end_hydrating();\n flush();\n }\n set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n const { on_mount } = this.$$;\n this.$$.on_disconnect = on_mount.map(run).filter(is_function);\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n disconnectedCallback() {\n run_all(this.$$.on_disconnect);\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n };\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n}\n\nfunction dispatch_dev(type, detail) {\n document.dispatchEvent(custom_event(type, Object.assign({ version: '3.46.4' }, detail), true));\n}\nfunction append_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append(target, node);\n}\nfunction append_hydration_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append_hydration(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert(target, node, anchor);\n}\nfunction insert_hydration_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert_hydration(target, node, anchor);\n}\nfunction detach_dev(node) {\n dispatch_dev('SvelteDOMRemove', { node });\n detach(node);\n}\nfunction detach_between_dev(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n detach_dev(before.nextSibling);\n }\n}\nfunction detach_before_dev(after) {\n while (after.previousSibling) {\n detach_dev(after.previousSibling);\n }\n}\nfunction detach_after_dev(before) {\n while (before.nextSibling) {\n detach_dev(before.nextSibling);\n }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {\n const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n if (has_prevent_default)\n modifiers.push('preventDefault');\n if (has_stop_propagation)\n modifiers.push('stopPropagation');\n dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n const dispose = listen(node, event, handler, options);\n return () => {\n dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n dispose();\n };\n}\nfunction attr_dev(node, attribute, value) {\n attr(node, attribute, value);\n if (value == null)\n dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n else\n dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n node[property] = value;\n dispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n node.dataset[property] = value;\n dispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\nfunction set_data_dev(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction validate_each_argument(arg) {\n if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n let msg = '{#each} only iterates over array-like objects.';\n if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n msg += ' You can use a spread to convert this iterable into an array.';\n }\n throw new Error(msg);\n }\n}\nfunction validate_slots(name, slot, keys) {\n for (const slot_key of Object.keys(slot)) {\n if (!~keys.indexOf(slot_key)) {\n console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n }\n }\n}\n/**\n * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.\n */\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(\"'target' is a required option\");\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn('Component was already destroyed'); // eslint-disable-line no-console\n };\n }\n $capture_state() { }\n $inject_state() { }\n}\n/**\n * Base class to create strongly typed Svelte components.\n * This only exists for typing purposes and should be used in `.d.ts` files.\n *\n * ### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import { SvelteComponentTyped } from \"svelte\";\n * export class MyComponent extends SvelteComponentTyped<{foo: string}> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * <script lang=\"ts\">\n * \timport { MyComponent } from \"component-library\";\n * </script>\n * <MyComponent foo={'bar'} />\n * ```\n *\n * #### Why not make this part of `SvelteComponent(Dev)`?\n * Because\n * ```ts\n * class ASubclassOfSvelteComponent extends SvelteComponent<{foo: string}> {}\n * const component: typeof SvelteComponent = ASubclassOfSvelteComponent;\n * ```\n * will throw a type error, so we need to separate the more strictly typed class.\n */\nclass SvelteComponentTyped extends SvelteComponentDev {\n constructor(options) {\n super(options);\n }\n}\nfunction loop_guard(timeout) {\n const start = Date.now();\n return () => {\n if (Date.now() - start > timeout) {\n throw new Error('Infinite loop detected');\n }\n };\n}\n\nexport { HtmlTag, HtmlTagHydration, SvelteComponent, SvelteComponentDev, SvelteComponentTyped, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_location, add_render_callback, add_resize_listener, add_styles, add_transform, afterUpdate, append, append_dev, append_empty_stylesheet, append_hydration, append_hydration_dev, append_styles, assign, attr, attr_dev, attribute_to_object, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_component, claim_element, claim_html_tag, claim_space, claim_svg_element, claim_text, clear_loops, component_subscribe, compute_rest_props, compute_slots, createEventDispatcher, create_animation, create_bidirectional_transition, create_component, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, dataset_dev, debug, destroy_block, destroy_component, destroy_each, detach, detach_after_dev, detach_before_dev, detach_between_dev, detach_dev, dirty_components, dispatch_dev, each, element, element_is, empty, end_hydrating, escape, escape_attribute_value, escape_object, escaped, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, getAllContexts, getContext, get_all_dirty_from_scope, get_binding_group_value, get_current_component, get_custom_elements_slots, get_root_for_style, get_slot_changes, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, hasContext, has_prop, identity, init, insert, insert_dev, insert_hydration, insert_hydration_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_empty, is_function, is_promise, listen, listen_dev, loop, loop_guard, merge_ssr_styles, missing_component, mount_component, noop, not_equal, now, null_to_empty, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, prop_dev, query_selector_all, raf, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, self, setContext, set_attributes, set_current_component, set_custom_element_data, set_data, set_data_dev, set_input_type, set_input_value, set_now, set_raf, set_store_value, set_style, set_svg_attributes, space, spread, src_url_equal, start_hydrating, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, trusted, update_await_block_branch, update_keyed_each, update_slot, update_slot_base, validate_component, validate_each_argument, validate_each_keys, validate_slots, validate_store, xlink_attr };\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","!function(n,t,e){function u(n){var t=this,e=function(){var s=4022871197;return function(n){n=String(n);for(var t=0;t<n.length;t++){var e=.02519603282416938*(s+=n.charCodeAt(t));e-=s=e>>>0,s=(e*=s)>>>0,s+=4294967296*(e-=s)}return 2.3283064365386963e-10*(s>>>0)}}();t.next=function(){var n=2091639*t.s0+2.3283064365386963e-10*t.c;return t.s0=t.s1,t.s1=t.s2,t.s2=n-(t.c=0|n)},t.c=1,t.s0=e(\" \"),t.s1=e(\" \"),t.s2=e(\" \"),t.s0-=e(n),t.s0<0&&(t.s0+=1),t.s1-=e(n),t.s1<0&&(t.s1+=1),t.s2-=e(n),t.s2<0&&(t.s2+=1),e=null}function o(n,t){return t.c=n.c,t.s0=n.s0,t.s1=n.s1,t.s2=n.s2,t}function s(n,t){var e=new u(n),s=t&&t.state,r=e.next;return r.int32=function(){return 4294967296*e.next()|0},r.double=function(){return r()+11102230246251565e-32*(2097152*r()|0)},r.quick=r,s&&(\"object\"==typeof s&&o(s,e),r.state=function(){return o(e,{})}),r}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.alea=s}(0,\"object\"==typeof module&&module,\"function\"==typeof define&&define);","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","export default function autoType(object) {\n for (var key in object) {\n var value = object[key].trim(), number, m;\n if (!value) value = null;\n else if (value === \"true\") value = true;\n else if (value === \"false\") value = false;\n else if (value === \"NaN\") value = NaN;\n else if (!isNaN(number = +value)) value = number;\n else if (m = value.match(/^([-+]\\d{2})?\\d{4}(-\\d{2}(-\\d{2})?)?(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[-+]\\d{2}:\\d{2})?)?$/)) {\n if (fixtz && !!m[4] && !m[7]) value = value.replace(/-/g, \"/\").replace(/T/, \" \");\n value = new Date(value);\n }\n else continue;\n object[key] = value;\n }\n return object;\n}\n\n// https://github.com/d3/d3-dsv/issues/45\nconst fixtz = new Date(\"2019-01-01T00:00\").getHours() || new Date(\"2019-07-01T00:00\").getHours();","/*!\n * html2canvas 1.4.1 <https://html2canvas.hertzen.com>\n * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.html2canvas = factory());\n}(this, (function () { 'use strict';\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation.\r\n\r\n Permission to use, copy, modify, and/or distribute this software for any\r\n purpose with or without fee is hereby granted.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n PERFORMANCE OF THIS SOFTWARE.\r\n ***************************************************************************** */\r\n /* global Reflect, Promise */\r\n\r\n var extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n\r\n function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n }\r\n\r\n var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n };\r\n\r\n function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n }\r\n\r\n function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n }\r\n\r\n function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || from);\r\n }\n\n var Bounds = /** @class */ (function () {\n function Bounds(left, top, width, height) {\n this.left = left;\n this.top = top;\n this.width = width;\n this.height = height;\n }\n Bounds.prototype.add = function (x, y, w, h) {\n return new Bounds(this.left + x, this.top + y, this.width + w, this.height + h);\n };\n Bounds.fromClientRect = function (context, clientRect) {\n return new Bounds(clientRect.left + context.windowBounds.left, clientRect.top + context.windowBounds.top, clientRect.width, clientRect.height);\n };\n Bounds.fromDOMRectList = function (context, domRectList) {\n var domRect = Array.from(domRectList).find(function (rect) { return rect.width !== 0; });\n return domRect\n ? new Bounds(domRect.left + context.windowBounds.left, domRect.top + context.windowBounds.top, domRect.width, domRect.height)\n : Bounds.EMPTY;\n };\n Bounds.EMPTY = new Bounds(0, 0, 0, 0);\n return Bounds;\n }());\n var parseBounds = function (context, node) {\n return Bounds.fromClientRect(context, node.getBoundingClientRect());\n };\n var parseDocumentSize = function (document) {\n var body = document.body;\n var documentElement = document.documentElement;\n if (!body || !documentElement) {\n throw new Error(\"Unable to get document size\");\n }\n var width = Math.max(Math.max(body.scrollWidth, documentElement.scrollWidth), Math.max(body.offsetWidth, documentElement.offsetWidth), Math.max(body.clientWidth, documentElement.clientWidth));\n var height = Math.max(Math.max(body.scrollHeight, documentElement.scrollHeight), Math.max(body.offsetHeight, documentElement.offsetHeight), Math.max(body.clientHeight, documentElement.clientHeight));\n return new Bounds(0, 0, width, height);\n };\n\n /*\n * css-line-break 2.1.0 <https://github.com/niklasvh/css-line-break#readme>\n * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var toCodePoints$1 = function (str) {\n var codePoints = [];\n var i = 0;\n var length = str.length;\n while (i < length) {\n var value = str.charCodeAt(i++);\n if (value >= 0xd800 && value <= 0xdbff && i < length) {\n var extra = str.charCodeAt(i++);\n if ((extra & 0xfc00) === 0xdc00) {\n codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\n }\n else {\n codePoints.push(value);\n i--;\n }\n }\n else {\n codePoints.push(value);\n }\n }\n return codePoints;\n };\n var fromCodePoint$1 = function () {\n var codePoints = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n codePoints[_i] = arguments[_i];\n }\n if (String.fromCodePoint) {\n return String.fromCodePoint.apply(String, codePoints);\n }\n var length = codePoints.length;\n if (!length) {\n return '';\n }\n var codeUnits = [];\n var index = -1;\n var result = '';\n while (++index < length) {\n var codePoint = codePoints[index];\n if (codePoint <= 0xffff) {\n codeUnits.push(codePoint);\n }\n else {\n codePoint -= 0x10000;\n codeUnits.push((codePoint >> 10) + 0xd800, (codePoint % 0x400) + 0xdc00);\n }\n if (index + 1 === length || codeUnits.length > 0x4000) {\n result += String.fromCharCode.apply(String, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n };\n var chars$2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n // Use a lookup table to find the index.\n var lookup$2 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n for (var i$2 = 0; i$2 < chars$2.length; i$2++) {\n lookup$2[chars$2.charCodeAt(i$2)] = i$2;\n }\n\n /*\n * utrie 1.0.2 <https://github.com/niklasvh/utrie>\n * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var chars$1$1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n // Use a lookup table to find the index.\n var lookup$1$1 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n for (var i$1$1 = 0; i$1$1 < chars$1$1.length; i$1$1++) {\n lookup$1$1[chars$1$1.charCodeAt(i$1$1)] = i$1$1;\n }\n var decode$1 = function (base64) {\n var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n var buffer = typeof ArrayBuffer !== 'undefined' &&\n typeof Uint8Array !== 'undefined' &&\n typeof Uint8Array.prototype.slice !== 'undefined'\n ? new ArrayBuffer(bufferLength)\n : new Array(bufferLength);\n var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup$1$1[base64.charCodeAt(i)];\n encoded2 = lookup$1$1[base64.charCodeAt(i + 1)];\n encoded3 = lookup$1$1[base64.charCodeAt(i + 2)];\n encoded4 = lookup$1$1[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return buffer;\n };\n var polyUint16Array$1 = function (buffer) {\n var length = buffer.length;\n var bytes = [];\n for (var i = 0; i < length; i += 2) {\n bytes.push((buffer[i + 1] << 8) | buffer[i]);\n }\n return bytes;\n };\n var polyUint32Array$1 = function (buffer) {\n var length = buffer.length;\n var bytes = [];\n for (var i = 0; i < length; i += 4) {\n bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]);\n }\n return bytes;\n };\n\n /** Shift size for getting the index-2 table offset. */\n var UTRIE2_SHIFT_2$1 = 5;\n /** Shift size for getting the index-1 table offset. */\n var UTRIE2_SHIFT_1$1 = 6 + 5;\n /**\n * Shift size for shifting left the index array values.\n * Increases possible data size with 16-bit index values at the cost\n * of compactability.\n * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.\n */\n var UTRIE2_INDEX_SHIFT$1 = 2;\n /**\n * Difference between the two shift sizes,\n * for getting an index-1 offset from an index-2 offset. 6=11-5\n */\n var UTRIE2_SHIFT_1_2$1 = UTRIE2_SHIFT_1$1 - UTRIE2_SHIFT_2$1;\n /**\n * The part of the index-2 table for U+D800..U+DBFF stores values for\n * lead surrogate code _units_ not code _points_.\n * Values for lead surrogate code _points_ are indexed with this portion of the table.\n * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)\n */\n var UTRIE2_LSCP_INDEX_2_OFFSET$1 = 0x10000 >> UTRIE2_SHIFT_2$1;\n /** Number of entries in a data block. 32=0x20 */\n var UTRIE2_DATA_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_2$1;\n /** Mask for getting the lower bits for the in-data-block offset. */\n var UTRIE2_DATA_MASK$1 = UTRIE2_DATA_BLOCK_LENGTH$1 - 1;\n var UTRIE2_LSCP_INDEX_2_LENGTH$1 = 0x400 >> UTRIE2_SHIFT_2$1;\n /** Count the lengths of both BMP pieces. 2080=0x820 */\n var UTRIE2_INDEX_2_BMP_LENGTH$1 = UTRIE2_LSCP_INDEX_2_OFFSET$1 + UTRIE2_LSCP_INDEX_2_LENGTH$1;\n /**\n * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.\n */\n var UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 = UTRIE2_INDEX_2_BMP_LENGTH$1;\n var UTRIE2_UTF8_2B_INDEX_2_LENGTH$1 = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */\n /**\n * The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n * Variable length, for code points up to highStart, where the last single-value range starts.\n * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.\n * (For 0x100000 supplementary code points U+10000..U+10ffff.)\n *\n * The part of the index-2 table for supplementary code points starts\n * after this index-1 table.\n *\n * Both the index-1 table and the following part of the index-2 table\n * are omitted completely if there is only BMP data.\n */\n var UTRIE2_INDEX_1_OFFSET$1 = UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 + UTRIE2_UTF8_2B_INDEX_2_LENGTH$1;\n /**\n * Number of index-1 entries for the BMP. 32=0x20\n * This part of the index-1 table is omitted from the serialized form.\n */\n var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 = 0x10000 >> UTRIE2_SHIFT_1$1;\n /** Number of entries in an index-2 block. 64=0x40 */\n var UTRIE2_INDEX_2_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_1_2$1;\n /** Mask for getting the lower bits for the in-index-2-block offset. */\n var UTRIE2_INDEX_2_MASK$1 = UTRIE2_INDEX_2_BLOCK_LENGTH$1 - 1;\n var slice16$1 = function (view, start, end) {\n if (view.slice) {\n return view.slice(start, end);\n }\n return new Uint16Array(Array.prototype.slice.call(view, start, end));\n };\n var slice32$1 = function (view, start, end) {\n if (view.slice) {\n return view.slice(start, end);\n }\n return new Uint32Array(Array.prototype.slice.call(view, start, end));\n };\n var createTrieFromBase64$1 = function (base64, _byteLength) {\n var buffer = decode$1(base64);\n var view32 = Array.isArray(buffer) ? polyUint32Array$1(buffer) : new Uint32Array(buffer);\n var view16 = Array.isArray(buffer) ? polyUint16Array$1(buffer) : new Uint16Array(buffer);\n var headerLength = 24;\n var index = slice16$1(view16, headerLength / 2, view32[4] / 2);\n var data = view32[5] === 2\n ? slice16$1(view16, (headerLength + view32[4]) / 2)\n : slice32$1(view32, Math.ceil((headerLength + view32[4]) / 4));\n return new Trie$1(view32[0], view32[1], view32[2], view32[3], index, data);\n };\n var Trie$1 = /** @class */ (function () {\n function Trie(initialValue, errorValue, highStart, highValueIndex, index, data) {\n this.initialValue = initialValue;\n this.errorValue = errorValue;\n this.highStart = highStart;\n this.highValueIndex = highValueIndex;\n this.index = index;\n this.data = data;\n }\n /**\n * Get the value for a code point as stored in the Trie.\n *\n * @param codePoint the code point\n * @return the value\n */\n Trie.prototype.get = function (codePoint) {\n var ix;\n if (codePoint >= 0) {\n if (codePoint < 0x0d800 || (codePoint > 0x0dbff && codePoint <= 0x0ffff)) {\n // Ordinary BMP code point, excluding leading surrogates.\n // BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index.\n // 16 bit data is stored in the index array itself.\n ix = this.index[codePoint >> UTRIE2_SHIFT_2$1];\n ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);\n return this.data[ix];\n }\n if (codePoint <= 0xffff) {\n // Lead Surrogate Code Point. A Separate index section is stored for\n // lead surrogate code units and code points.\n // The main index has the code unit data.\n // For this function, we need the code point data.\n // Note: this expression could be refactored for slightly improved efficiency, but\n // surrogate code points will be so rare in practice that it's not worth it.\n ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET$1 + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2$1)];\n ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);\n return this.data[ix];\n }\n if (codePoint < this.highStart) {\n // Supplemental code point, use two-level lookup.\n ix = UTRIE2_INDEX_1_OFFSET$1 - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 + (codePoint >> UTRIE2_SHIFT_1$1);\n ix = this.index[ix];\n ix += (codePoint >> UTRIE2_SHIFT_2$1) & UTRIE2_INDEX_2_MASK$1;\n ix = this.index[ix];\n ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);\n return this.data[ix];\n }\n if (codePoint <= 0x10ffff) {\n return this.data[this.highValueIndex];\n }\n }\n // Fall through. The code point is outside of the legal range of 0..0x10ffff.\n return this.errorValue;\n };\n return Trie;\n }());\n\n /*\n * base64-arraybuffer 1.0.2 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var chars$3 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n // Use a lookup table to find the index.\n var lookup$3 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n for (var i$3 = 0; i$3 < chars$3.length; i$3++) {\n lookup$3[chars$3.charCodeAt(i$3)] = i$3;\n }\n\n var base64$1 = 'KwAAAAAAAAAACA4AUD0AADAgAAACAAAAAAAIABAAGABAAEgAUABYAGAAaABgAGgAYgBqAF8AZwBgAGgAcQB5AHUAfQCFAI0AlQCdAKIAqgCyALoAYABoAGAAaABgAGgAwgDKAGAAaADGAM4A0wDbAOEA6QDxAPkAAQEJAQ8BFwF1AH0AHAEkASwBNAE6AUIBQQFJAVEBWQFhAWgBcAF4ATAAgAGGAY4BlQGXAZ8BpwGvAbUBvQHFAc0B0wHbAeMB6wHxAfkBAQIJAvEBEQIZAiECKQIxAjgCQAJGAk4CVgJeAmQCbAJ0AnwCgQKJApECmQKgAqgCsAK4ArwCxAIwAMwC0wLbAjAA4wLrAvMC+AIAAwcDDwMwABcDHQMlAy0DNQN1AD0DQQNJA0kDSQNRA1EDVwNZA1kDdQB1AGEDdQBpA20DdQN1AHsDdQCBA4kDkQN1AHUAmQOhA3UAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AKYDrgN1AHUAtgO+A8YDzgPWAxcD3gPjA+sD8wN1AHUA+wMDBAkEdQANBBUEHQQlBCoEFwMyBDgEYABABBcDSARQBFgEYARoBDAAcAQzAXgEgASIBJAEdQCXBHUAnwSnBK4EtgS6BMIEyAR1AHUAdQB1AHUAdQCVANAEYABgAGAAYABgAGAAYABgANgEYADcBOQEYADsBPQE/AQEBQwFFAUcBSQFLAU0BWQEPAVEBUsFUwVbBWAAYgVgAGoFcgV6BYIFigWRBWAAmQWfBaYFYABgAGAAYABgAKoFYACxBbAFuQW6BcEFwQXHBcEFwQXPBdMF2wXjBeoF8gX6BQIGCgYSBhoGIgYqBjIGOgZgAD4GRgZMBmAAUwZaBmAAYABgAGAAYABgAGAAYABgAGAAYABgAGIGYABpBnAGYABgAGAAYABgAGAAYABgAGAAYAB4Bn8GhQZgAGAAYAB1AHcDFQSLBmAAYABgAJMGdQA9A3UAmwajBqsGqwaVALMGuwbDBjAAywbSBtIG1QbSBtIG0gbSBtIG0gbdBuMG6wbzBvsGAwcLBxMHAwcbByMHJwcsBywHMQcsB9IGOAdAB0gHTgfSBkgHVgfSBtIG0gbSBtIG0gbSBtIG0gbSBiwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdgAGAALAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdbB2MHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB2kH0gZwB64EdQB1AHUAdQB1AHUAdQB1AHUHfQdgAIUHjQd1AHUAlQedB2AAYAClB6sHYACzB7YHvgfGB3UAzgfWBzMB3gfmB1EB7gf1B/0HlQENAQUIDQh1ABUIHQglCBcDLQg1CD0IRQhNCEEDUwh1AHUAdQBbCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIcAh3CHoIMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIgggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAALAcsBywHLAcsBywHLAcsBywHLAcsB4oILAcsB44I0gaWCJ4Ipgh1AHUAqgiyCHUAdQB1AHUAdQB1AHUAdQB1AHUAtwh8AXUAvwh1AMUIyQjRCNkI4AjoCHUAdQB1AO4I9gj+CAYJDgkTCS0HGwkjCYIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiAAIAAAAFAAYABgAGIAXwBgAHEAdQBFAJUAogCyAKAAYABgAEIA4ABGANMA4QDxAMEBDwE1AFwBLAE6AQEBUQF4QkhCmEKoQrhCgAHIQsAB0MLAAcABwAHAAeDC6ABoAHDCwMMAAcABwAHAAdDDGMMAAcAB6MM4wwjDWMNow3jDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEjDqABWw6bDqABpg6gAaABoAHcDvwOPA+gAaABfA/8DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DpcPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB9cPKwkyCToJMAB1AHUAdQBCCUoJTQl1AFUJXAljCWcJawkwADAAMAAwAHMJdQB2CX4JdQCECYoJjgmWCXUAngkwAGAAYABxAHUApgn3A64JtAl1ALkJdQDACTAAMAAwADAAdQB1AHUAdQB1AHUAdQB1AHUAowYNBMUIMAAwADAAMADICcsJ0wnZCRUE4QkwAOkJ8An4CTAAMAB1AAAKvwh1AAgKDwoXCh8KdQAwACcKLgp1ADYKqAmICT4KRgowADAAdQB1AE4KMAB1AFYKdQBeCnUAZQowADAAMAAwADAAMAAwADAAMAAVBHUAbQowADAAdQC5CXUKMAAwAHwBxAijBogEMgF9CoQKiASMCpQKmgqIBKIKqgquCogEDQG2Cr4KxgrLCjAAMADTCtsKCgHjCusK8Qr5CgELMAAwADAAMAB1AIsECQsRC3UANAEZCzAAMAAwADAAMAB1ACELKQswAHUANAExCzkLdQBBC0kLMABRC1kLMAAwADAAMAAwADAAdQBhCzAAMAAwAGAAYABpC3ELdwt/CzAAMACHC4sLkwubC58Lpwt1AK4Ltgt1APsDMAAwADAAMAAwADAAMAAwAL4LwwvLC9IL1wvdCzAAMADlC+kL8Qv5C/8LSQswADAAMAAwADAAMAAwADAAMAAHDDAAMAAwADAAMAAODBYMHgx1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1ACYMMAAwADAAdQB1AHUALgx1AHUAdQB1AHUAdQA2DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AD4MdQBGDHUAdQB1AHUAdQB1AEkMdQB1AHUAdQB1AFAMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQBYDHUAdQB1AF8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUA+wMVBGcMMAAwAHwBbwx1AHcMfwyHDI8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAYABgAJcMMAAwADAAdQB1AJ8MlQClDDAAMACtDCwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB7UMLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AA0EMAC9DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAsBywHLAcsBywHLAcsBywHLQcwAMEMyAwsBywHLAcsBywHLAcsBywHLAcsBywHzAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1ANQM2QzhDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMABgAGAAYABgAGAAYABgAOkMYADxDGAA+AwADQYNYABhCWAAYAAODTAAMAAwADAAFg1gAGAAHg37AzAAMAAwADAAYABgACYNYAAsDTQNPA1gAEMNPg1LDWAAYABgAGAAYABgAGAAYABgAGAAUg1aDYsGVglhDV0NcQBnDW0NdQ15DWAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAlQCBDZUAiA2PDZcNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAnw2nDTAAMAAwADAAMAAwAHUArw23DTAAMAAwADAAMAAwADAAMAAwADAAMAB1AL8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQDHDTAAYABgAM8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA1w11ANwNMAAwAD0B5A0wADAAMAAwADAAMADsDfQN/A0EDgwOFA4wABsOMAAwADAAMAAwADAAMAAwANIG0gbSBtIG0gbSBtIG0gYjDigOwQUuDsEFMw7SBjoO0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGQg5KDlIOVg7SBtIGXg5lDm0OdQ7SBtIGfQ6EDooOjQ6UDtIGmg6hDtIG0gaoDqwO0ga0DrwO0gZgAGAAYADEDmAAYAAkBtIGzA5gANIOYADaDokO0gbSBt8O5w7SBu8O0gb1DvwO0gZgAGAAxA7SBtIG0gbSBtIGYABgAGAAYAAED2AAsAUMD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHJA8sBywHLAcsBywHLAccDywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywPLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAc0D9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHPA/SBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gYUD0QPlQCVAJUAMAAwADAAMACVAJUAlQCVAJUAlQCVAEwPMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA//8EAAQABAAEAAQABAAEAAQABAANAAMAAQABAAIABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQACgATABcAHgAbABoAHgAXABYAEgAeABsAGAAPABgAHABLAEsASwBLAEsASwBLAEsASwBLABgAGAAeAB4AHgATAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAGwASAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWAA0AEQAeAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAFAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJABYAGgAbABsAGwAeAB0AHQAeAE8AFwAeAA0AHgAeABoAGwBPAE8ADgBQAB0AHQAdAE8ATwAXAE8ATwBPABYAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwBWAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsABAAbABsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEAA0ADQBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABABQACsAKwArACsAKwArACsAKwAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUAAaABoAUABQAFAAUABQAEwAHgAbAFAAHgAEACsAKwAEAAQABAArAFAAUABQAFAAUABQACsAKwArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQACsAUABQACsAKwAEACsABAAEAAQABAAEACsAKwArACsABAAEACsAKwAEAAQABAArACsAKwAEACsAKwArACsAKwArACsAUABQAFAAUAArAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAAQABABQAFAAUAAEAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAArACsAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AGwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAKwArACsAKwArAAQABAAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAAQAUAArAFAAUABQAFAAUABQACsAKwArAFAAUABQACsAUABQAFAAUAArACsAKwBQAFAAKwBQACsAUABQACsAKwArAFAAUAArACsAKwBQAFAAUAArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAArACsAKwAEAAQABAArAAQABAAEAAQAKwArAFAAKwArACsAKwArACsABAArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAHgAeAB4AHgAeAB4AGwAeACsAKwArACsAKwAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAUABQAFAAKwArACsAKwArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwAOAFAAUABQAFAAUABQAFAAHgBQAAQABAAEAA4AUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAKwArAAQAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAKwArACsAKwArACsAUAArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAXABcAFwAXABcACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAXAArAFwAXABcAFwAXABcAFwAXABcAFwAKgBcAFwAKgAqACoAKgAqACoAKgAqACoAXAArACsAXABcAFwAXABcACsAXAArACoAKgAqACoAKgAqACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwBcAFwAXABcAFAADgAOAA4ADgAeAA4ADgAJAA4ADgANAAkAEwATABMAEwATAAkAHgATAB4AHgAeAAQABAAeAB4AHgAeAB4AHgBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAADQAEAB4ABAAeAAQAFgARABYAEQAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAAQABAAEAAQADQAEAAQAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAA0ADQAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeACsAHgAeAA4ADgANAA4AHgAeAB4AHgAeAAkACQArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgBcAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4AHgAeAB4AXABcAFwAXABcAFwAKgAqACoAKgBcAFwAXABcACoAKgAqAFwAKgAqACoAXABcACoAKgAqACoAKgAqACoAXABcAFwAKgAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwAKgBLAEsASwBLAEsASwBLAEsASwBLACoAKgAqACoAKgAqAFAAUABQAFAAUABQACsAUAArACsAKwArACsAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAKwBQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsABAAEAAQAHgANAB4AHgAeAB4AHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUAArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWABEAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAANAA0AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUAArAAQABAArACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAA0ADQAVAFwADQAeAA0AGwBcACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwAeAB4AEwATAA0ADQAOAB4AEwATAB4ABAAEAAQACQArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAHgArACsAKwATABMASwBLAEsASwBLAEsASwBLAEsASwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAXABcAFwAXABcACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXAArACsAKwAqACoAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsAHgAeAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKwArAAQASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACoAKgAqACoAKgAqACoAXAAqACoAKgAqACoAKgArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABABQAFAAUABQAFAAUABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgANAA0ADQANAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwAeAB4AHgAeAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArAA0ADQANAA0ADQBLAEsASwBLAEsASwBLAEsASwBLACsAKwArAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUAAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAAQAUABQAFAAUABQAFAABABQAFAABAAEAAQAUAArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQACsAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQACsAKwAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQACsAHgAeAB4AHgAeAB4AHgAOAB4AKwANAA0ADQANAA0ADQANAAkADQANAA0ACAAEAAsABAAEAA0ACQANAA0ADAAdAB0AHgAXABcAFgAXABcAFwAWABcAHQAdAB4AHgAUABQAFAANAAEAAQAEAAQABAAEAAQACQAaABoAGgAaABoAGgAaABoAHgAXABcAHQAVABUAHgAeAB4AHgAeAB4AGAAWABEAFQAVABUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ADQAeAA0ADQANAA0AHgANAA0ADQAHAB4AHgAeAB4AKwAEAAQABAAEAAQABAAEAAQABAAEAFAAUAArACsATwBQAFAAUABQAFAAHgAeAB4AFgARAE8AUABPAE8ATwBPAFAAUABQAFAAUAAeAB4AHgAWABEAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArABsAGwAbABsAGwAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGgAbABsAGwAbABoAGwAbABoAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAFAAGgAeAB0AHgBQAB4AGgAeAB4AHgAeAB4AHgAeAB4AHgBPAB4AUAAbAB4AHgBQAFAAUABQAFAAHgAeAB4AHQAdAB4AUAAeAFAAHgBQAB4AUABPAFAAUAAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgBQAFAAUABQAE8ATwBQAFAAUABQAFAATwBQAFAATwBQAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAUABQAFAATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABPAB4AHgArACsAKwArAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAdAB4AHgAeAB0AHQAeAB4AHQAeAB4AHgAdAB4AHQAbABsAHgAdAB4AHgAeAB4AHQAeAB4AHQAdAB0AHQAeAB4AHQAeAB0AHgAdAB0AHQAdAB0AHQAeAB0AHgAeAB4AHgAeAB0AHQAdAB0AHgAeAB4AHgAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB0AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAdAB0AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHQAdAB0AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHQAdAB4AHgAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AJQAlAB0AHQAlAB4AJQAlACUAIAAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAeAB0AJQAdAB0AHgAdAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAdAB0AHQAdACUAHgAlACUAJQAdACUAJQAdAB0AHQAlACUAHQAdACUAHQAdACUAJQAlAB4AHQAeAB4AHgAeAB0AHQAlAB0AHQAdAB0AHQAdACUAJQAlACUAJQAdACUAJQAgACUAHQAdACUAJQAlACUAJQAlACUAJQAeAB4AHgAlACUAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AFwAXABcAFwAXABcAHgATABMAJQAeAB4AHgAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARABYAEQAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANAA0AHgANAB4ADQANAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwAlACUAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACsAKwArACsAKwArACsAKwArACsAKwArAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBPAE8ATwBPAE8ATwBPAE8AJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeAAQAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUABQAAQAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAUABQAFAAUABQAAQABAAEACsABAAEACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAKwBQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAA0ADQANAA0ADQANAA0ADQAeACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAArACsAKwArAFAAUABQAFAAUAANAA0ADQANAA0ADQAUACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQANAA0ADQANAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAANACsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAB4AHgAeAB4AHgArACsAKwArACsAKwAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANAFAABAAEAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAEAAQABAAEAB4ABAAEAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsABAAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLAA0ADQArAB4ABABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUAAeAFAAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAAEAAQADgANAA0AEwATAB4AHgAeAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAFAAUABQAFAABAAEACsAKwAEAA0ADQAeAFAAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcAFwADQANAA0AKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQAKwAEAAQAKwArAAQABAAEAAQAUAAEAFAABAAEAA0ADQANACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABABQAA4AUAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANAFAADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAaABoAGgAaAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAJAAkACQAJAAkACQAJABYAEQArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AHgAeACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAARwBHABUARwAJACsAKwArACsAKwArACsAKwArACsAKwAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAKwArACsAKwArACsAKwArACsAKwArACsAKwBRAFEAUQBRACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAHgAEAAQADQAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAeAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQAHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAKwArAFAAKwArAFAAUAArACsAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAHgAeAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeACsAKwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4ABAAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAHgAeAA0ADQANAA0AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArAAQABAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwBQAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArABsAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAB4AHgAeAB4ABAAEAAQABAAEAAQABABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArABYAFgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAGgBQAFAAUAAaAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUAArACsAKwArACsAKwBQACsAKwArACsAUAArAFAAKwBQACsAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUAArAFAAKwBQACsAUAArAFAAUAArAFAAKwArAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAKwBQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeACUAJQAlAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAHgAlACUAJQAlACUAIAAgACAAJQAlACAAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACEAIQAhACEAIQAlACUAIAAgACUAJQAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAlACUAJQAlACAAIAAgACUAIAAgACAAJQAlACUAJQAlACUAJQAgACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAlAB4AJQAeACUAJQAlACUAJQAgACUAJQAlACUAHgAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACAAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABcAFwAXABUAFQAVAB4AHgAeAB4AJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAgACUAJQAgACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAIAAgACUAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACAAIAAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACAAIAAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAA==';\n\n var LETTER_NUMBER_MODIFIER = 50;\n // Non-tailorable Line Breaking Classes\n var BK = 1; // Cause a line break (after)\n var CR$1 = 2; // Cause a line break (after), except between CR and LF\n var LF$1 = 3; // Cause a line break (after)\n var CM = 4; // Prohibit a line break between the character and the preceding character\n var NL = 5; // Cause a line break (after)\n var WJ = 7; // Prohibit line breaks before and after\n var ZW = 8; // Provide a break opportunity\n var GL = 9; // Prohibit line breaks before and after\n var SP = 10; // Enable indirect line breaks\n var ZWJ$1 = 11; // Prohibit line breaks within joiner sequences\n // Break Opportunities\n var B2 = 12; // Provide a line break opportunity before and after the character\n var BA = 13; // Generally provide a line break opportunity after the character\n var BB = 14; // Generally provide a line break opportunity before the character\n var HY = 15; // Provide a line break opportunity after the character, except in numeric context\n var CB = 16; // Provide a line break opportunity contingent on additional information\n // Characters Prohibiting Certain Breaks\n var CL = 17; // Prohibit line breaks before\n var CP = 18; // Prohibit line breaks before\n var EX = 19; // Prohibit line breaks before\n var IN = 20; // Allow only indirect line breaks between pairs\n var NS = 21; // Allow only indirect line breaks before\n var OP = 22; // Prohibit line breaks after\n var QU = 23; // Act like they are both opening and closing\n // Numeric Context\n var IS = 24; // Prevent breaks after any and before numeric\n var NU = 25; // Form numeric expressions for line breaking purposes\n var PO = 26; // Do not break following a numeric expression\n var PR = 27; // Do not break in front of a numeric expression\n var SY = 28; // Prevent a break before; and allow a break after\n // Other Characters\n var AI = 29; // Act like AL when the resolvedEAW is N; otherwise; act as ID\n var AL = 30; // Are alphabetic characters or symbols that are used with alphabetic characters\n var CJ = 31; // Treat as NS or ID for strict or normal breaking.\n var EB = 32; // Do not break from following Emoji Modifier\n var EM = 33; // Do not break from preceding Emoji Base\n var H2 = 34; // Form Korean syllable blocks\n var H3 = 35; // Form Korean syllable blocks\n var HL = 36; // Do not break around a following hyphen; otherwise act as Alphabetic\n var ID = 37; // Break before or after; except in some numeric context\n var JL = 38; // Form Korean syllable blocks\n var JV = 39; // Form Korean syllable blocks\n var JT = 40; // Form Korean syllable blocks\n var RI$1 = 41; // Keep pairs together. For pairs; break before and after other classes\n var SA = 42; // Provide a line break opportunity contingent on additional, language-specific context analysis\n var XX = 43; // Have as yet unknown line breaking behavior or unassigned code positions\n var ea_OP = [0x2329, 0xff08];\n var BREAK_MANDATORY = '!';\n var BREAK_NOT_ALLOWED$1 = '×';\n var BREAK_ALLOWED$1 = '÷';\n var UnicodeTrie$1 = createTrieFromBase64$1(base64$1);\n var ALPHABETICS = [AL, HL];\n var HARD_LINE_BREAKS = [BK, CR$1, LF$1, NL];\n var SPACE$1 = [SP, ZW];\n var PREFIX_POSTFIX = [PR, PO];\n var LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE$1);\n var KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3];\n var HYPHEN = [HY, BA];\n var codePointsToCharacterClasses = function (codePoints, lineBreak) {\n if (lineBreak === void 0) { lineBreak = 'strict'; }\n var types = [];\n var indices = [];\n var categories = [];\n codePoints.forEach(function (codePoint, index) {\n var classType = UnicodeTrie$1.get(codePoint);\n if (classType > LETTER_NUMBER_MODIFIER) {\n categories.push(true);\n classType -= LETTER_NUMBER_MODIFIER;\n }\n else {\n categories.push(false);\n }\n if (['normal', 'auto', 'loose'].indexOf(lineBreak) !== -1) {\n // U+2010, – U+2013, 〜 U+301C, ゠ U+30A0\n if ([0x2010, 0x2013, 0x301c, 0x30a0].indexOf(codePoint) !== -1) {\n indices.push(index);\n return types.push(CB);\n }\n }\n if (classType === CM || classType === ZWJ$1) {\n // LB10 Treat any remaining combining mark or ZWJ as AL.\n if (index === 0) {\n indices.push(index);\n return types.push(AL);\n }\n // LB9 Do not break a combining character sequence; treat it as if it has the line breaking class of\n // the base character in all of the following rules. Treat ZWJ as if it were CM.\n var prev = types[index - 1];\n if (LINE_BREAKS.indexOf(prev) === -1) {\n indices.push(indices[index - 1]);\n return types.push(prev);\n }\n indices.push(index);\n return types.push(AL);\n }\n indices.push(index);\n if (classType === CJ) {\n return types.push(lineBreak === 'strict' ? NS : ID);\n }\n if (classType === SA) {\n return types.push(AL);\n }\n if (classType === AI) {\n return types.push(AL);\n }\n // For supplementary characters, a useful default is to treat characters in the range 10000..1FFFD as AL\n // and characters in the ranges 20000..2FFFD and 30000..3FFFD as ID, until the implementation can be revised\n // to take into account the actual line breaking properties for these characters.\n if (classType === XX) {\n if ((codePoint >= 0x20000 && codePoint <= 0x2fffd) || (codePoint >= 0x30000 && codePoint <= 0x3fffd)) {\n return types.push(ID);\n }\n else {\n return types.push(AL);\n }\n }\n types.push(classType);\n });\n return [indices, types, categories];\n };\n var isAdjacentWithSpaceIgnored = function (a, b, currentIndex, classTypes) {\n var current = classTypes[currentIndex];\n if (Array.isArray(a) ? a.indexOf(current) !== -1 : a === current) {\n var i = currentIndex;\n while (i <= classTypes.length) {\n i++;\n var next = classTypes[i];\n if (next === b) {\n return true;\n }\n if (next !== SP) {\n break;\n }\n }\n }\n if (current === SP) {\n var i = currentIndex;\n while (i > 0) {\n i--;\n var prev = classTypes[i];\n if (Array.isArray(a) ? a.indexOf(prev) !== -1 : a === prev) {\n var n = currentIndex;\n while (n <= classTypes.length) {\n n++;\n var next = classTypes[n];\n if (next === b) {\n return true;\n }\n if (next !== SP) {\n break;\n }\n }\n }\n if (prev !== SP) {\n break;\n }\n }\n }\n return false;\n };\n var previousNonSpaceClassType = function (currentIndex, classTypes) {\n var i = currentIndex;\n while (i >= 0) {\n var type = classTypes[i];\n if (type === SP) {\n i--;\n }\n else {\n return type;\n }\n }\n return 0;\n };\n var _lineBreakAtIndex = function (codePoints, classTypes, indicies, index, forbiddenBreaks) {\n if (indicies[index] === 0) {\n return BREAK_NOT_ALLOWED$1;\n }\n var currentIndex = index - 1;\n if (Array.isArray(forbiddenBreaks) && forbiddenBreaks[currentIndex] === true) {\n return BREAK_NOT_ALLOWED$1;\n }\n var beforeIndex = currentIndex - 1;\n var afterIndex = currentIndex + 1;\n var current = classTypes[currentIndex];\n // LB4 Always break after hard line breaks.\n // LB5 Treat CR followed by LF, as well as CR, LF, and NL as hard line breaks.\n var before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0;\n var next = classTypes[afterIndex];\n if (current === CR$1 && next === LF$1) {\n return BREAK_NOT_ALLOWED$1;\n }\n if (HARD_LINE_BREAKS.indexOf(current) !== -1) {\n return BREAK_MANDATORY;\n }\n // LB6 Do not break before hard line breaks.\n if (HARD_LINE_BREAKS.indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB7 Do not break before spaces or zero width space.\n if (SPACE$1.indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB8 Break before any character following a zero-width space, even if one or more spaces intervene.\n if (previousNonSpaceClassType(currentIndex, classTypes) === ZW) {\n return BREAK_ALLOWED$1;\n }\n // LB8a Do not break after a zero width joiner.\n if (UnicodeTrie$1.get(codePoints[currentIndex]) === ZWJ$1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // zwj emojis\n if ((current === EB || current === EM) && UnicodeTrie$1.get(codePoints[afterIndex]) === ZWJ$1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB11 Do not break before or after Word joiner and related characters.\n if (current === WJ || next === WJ) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB12 Do not break after NBSP and related characters.\n if (current === GL) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB12a Do not break before NBSP and related characters, except after spaces and hyphens.\n if ([SP, BA, HY].indexOf(current) === -1 && next === GL) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB13 Do not break before ‘]’ or ‘!’ or ‘;’ or ‘/’, even after spaces.\n if ([CL, CP, EX, IS, SY].indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB14 Do not break after ‘[’, even after spaces.\n if (previousNonSpaceClassType(currentIndex, classTypes) === OP) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB15 Do not break within ‘”[’, even with intervening spaces.\n if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB16 Do not break between closing punctuation and a nonstarter (lb=NS), even with intervening spaces.\n if (isAdjacentWithSpaceIgnored([CL, CP], NS, currentIndex, classTypes)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB17 Do not break within ‘——’, even with intervening spaces.\n if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB18 Break after spaces.\n if (current === SP) {\n return BREAK_ALLOWED$1;\n }\n // LB19 Do not break before or after quotation marks, such as ‘ ” ’.\n if (current === QU || next === QU) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB20 Break before and after unresolved CB.\n if (next === CB || current === CB) {\n return BREAK_ALLOWED$1;\n }\n // LB21 Do not break before hyphen-minus, other hyphens, fixed-width spaces, small kana, and other non-starters, or after acute accents.\n if ([BA, HY, NS].indexOf(next) !== -1 || current === BB) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB21a Don't break after Hebrew + Hyphen.\n if (before === HL && HYPHEN.indexOf(current) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB21b Don’t break between Solidus and Hebrew letters.\n if (current === SY && next === HL) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB22 Do not break before ellipsis.\n if (next === IN) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB23 Do not break between digits and letters.\n if ((ALPHABETICS.indexOf(next) !== -1 && current === NU) || (ALPHABETICS.indexOf(current) !== -1 && next === NU)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB23a Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes.\n if ((current === PR && [ID, EB, EM].indexOf(next) !== -1) ||\n ([ID, EB, EM].indexOf(current) !== -1 && next === PO)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB24 Do not break between numeric prefix/postfix and letters, or between letters and prefix/postfix.\n if ((ALPHABETICS.indexOf(current) !== -1 && PREFIX_POSTFIX.indexOf(next) !== -1) ||\n (PREFIX_POSTFIX.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB25 Do not break between the following pairs of classes relevant to numbers:\n if (\n // (PR | PO) × ( OP | HY )? NU\n ([PR, PO].indexOf(current) !== -1 &&\n (next === NU || ([OP, HY].indexOf(next) !== -1 && classTypes[afterIndex + 1] === NU))) ||\n // ( OP | HY ) × NU\n ([OP, HY].indexOf(current) !== -1 && next === NU) ||\n // NU ×\t(NU | SY | IS)\n (current === NU && [NU, SY, IS].indexOf(next) !== -1)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // NU (NU | SY | IS)* × (NU | SY | IS | CL | CP)\n if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) {\n var prevIndex = currentIndex;\n while (prevIndex >= 0) {\n var type = classTypes[prevIndex];\n if (type === NU) {\n return BREAK_NOT_ALLOWED$1;\n }\n else if ([SY, IS].indexOf(type) !== -1) {\n prevIndex--;\n }\n else {\n break;\n }\n }\n }\n // NU (NU | SY | IS)* (CL | CP)? × (PO | PR))\n if ([PR, PO].indexOf(next) !== -1) {\n var prevIndex = [CL, CP].indexOf(current) !== -1 ? beforeIndex : currentIndex;\n while (prevIndex >= 0) {\n var type = classTypes[prevIndex];\n if (type === NU) {\n return BREAK_NOT_ALLOWED$1;\n }\n else if ([SY, IS].indexOf(type) !== -1) {\n prevIndex--;\n }\n else {\n break;\n }\n }\n }\n // LB26 Do not break a Korean syllable.\n if ((JL === current && [JL, JV, H2, H3].indexOf(next) !== -1) ||\n ([JV, H2].indexOf(current) !== -1 && [JV, JT].indexOf(next) !== -1) ||\n ([JT, H3].indexOf(current) !== -1 && next === JT)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB27 Treat a Korean Syllable Block the same as ID.\n if ((KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 && [IN, PO].indexOf(next) !== -1) ||\n (KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB28 Do not break between alphabetics (“at”).\n if (ALPHABETICS.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB29 Do not break between numeric punctuation and alphabetics (“e.g.”).\n if (current === IS && ALPHABETICS.indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB30 Do not break between letters, numbers, or ordinary symbols and opening or closing parentheses.\n if ((ALPHABETICS.concat(NU).indexOf(current) !== -1 &&\n next === OP &&\n ea_OP.indexOf(codePoints[afterIndex]) === -1) ||\n (ALPHABETICS.concat(NU).indexOf(next) !== -1 && current === CP)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB30a Break between two regional indicator symbols if and only if there are an even number of regional\n // indicators preceding the position of the break.\n if (current === RI$1 && next === RI$1) {\n var i = indicies[currentIndex];\n var count = 1;\n while (i > 0) {\n i--;\n if (classTypes[i] === RI$1) {\n count++;\n }\n else {\n break;\n }\n }\n if (count % 2 !== 0) {\n return BREAK_NOT_ALLOWED$1;\n }\n }\n // LB30b Do not break between an emoji base and an emoji modifier.\n if (current === EB && next === EM) {\n return BREAK_NOT_ALLOWED$1;\n }\n return BREAK_ALLOWED$1;\n };\n var cssFormattedClasses = function (codePoints, options) {\n if (!options) {\n options = { lineBreak: 'normal', wordBreak: 'normal' };\n }\n var _a = codePointsToCharacterClasses(codePoints, options.lineBreak), indicies = _a[0], classTypes = _a[1], isLetterNumber = _a[2];\n if (options.wordBreak === 'break-all' || options.wordBreak === 'break-word') {\n classTypes = classTypes.map(function (type) { return ([NU, AL, SA].indexOf(type) !== -1 ? ID : type); });\n }\n var forbiddenBreakpoints = options.wordBreak === 'keep-all'\n ? isLetterNumber.map(function (letterNumber, i) {\n return letterNumber && codePoints[i] >= 0x4e00 && codePoints[i] <= 0x9fff;\n })\n : undefined;\n return [indicies, classTypes, forbiddenBreakpoints];\n };\n var Break = /** @class */ (function () {\n function Break(codePoints, lineBreak, start, end) {\n this.codePoints = codePoints;\n this.required = lineBreak === BREAK_MANDATORY;\n this.start = start;\n this.end = end;\n }\n Break.prototype.slice = function () {\n return fromCodePoint$1.apply(void 0, this.codePoints.slice(this.start, this.end));\n };\n return Break;\n }());\n var LineBreaker = function (str, options) {\n var codePoints = toCodePoints$1(str);\n var _a = cssFormattedClasses(codePoints, options), indicies = _a[0], classTypes = _a[1], forbiddenBreakpoints = _a[2];\n var length = codePoints.length;\n var lastEnd = 0;\n var nextIndex = 0;\n return {\n next: function () {\n if (nextIndex >= length) {\n return { done: true, value: null };\n }\n var lineBreak = BREAK_NOT_ALLOWED$1;\n while (nextIndex < length &&\n (lineBreak = _lineBreakAtIndex(codePoints, classTypes, indicies, ++nextIndex, forbiddenBreakpoints)) ===\n BREAK_NOT_ALLOWED$1) { }\n if (lineBreak !== BREAK_NOT_ALLOWED$1 || nextIndex === length) {\n var value = new Break(codePoints, lineBreak, lastEnd, nextIndex);\n lastEnd = nextIndex;\n return { value: value, done: false };\n }\n return { done: true, value: null };\n },\n };\n };\n\n // https://www.w3.org/TR/css-syntax-3\n var FLAG_UNRESTRICTED = 1 << 0;\n var FLAG_ID = 1 << 1;\n var FLAG_INTEGER = 1 << 2;\n var FLAG_NUMBER = 1 << 3;\n var LINE_FEED = 0x000a;\n var SOLIDUS = 0x002f;\n var REVERSE_SOLIDUS = 0x005c;\n var CHARACTER_TABULATION = 0x0009;\n var SPACE = 0x0020;\n var QUOTATION_MARK = 0x0022;\n var EQUALS_SIGN = 0x003d;\n var NUMBER_SIGN = 0x0023;\n var DOLLAR_SIGN = 0x0024;\n var PERCENTAGE_SIGN = 0x0025;\n var APOSTROPHE = 0x0027;\n var LEFT_PARENTHESIS = 0x0028;\n var RIGHT_PARENTHESIS = 0x0029;\n var LOW_LINE = 0x005f;\n var HYPHEN_MINUS = 0x002d;\n var EXCLAMATION_MARK = 0x0021;\n var LESS_THAN_SIGN = 0x003c;\n var GREATER_THAN_SIGN = 0x003e;\n var COMMERCIAL_AT = 0x0040;\n var LEFT_SQUARE_BRACKET = 0x005b;\n var RIGHT_SQUARE_BRACKET = 0x005d;\n var CIRCUMFLEX_ACCENT = 0x003d;\n var LEFT_CURLY_BRACKET = 0x007b;\n var QUESTION_MARK = 0x003f;\n var RIGHT_CURLY_BRACKET = 0x007d;\n var VERTICAL_LINE = 0x007c;\n var TILDE = 0x007e;\n var CONTROL = 0x0080;\n var REPLACEMENT_CHARACTER = 0xfffd;\n var ASTERISK = 0x002a;\n var PLUS_SIGN = 0x002b;\n var COMMA = 0x002c;\n var COLON = 0x003a;\n var SEMICOLON = 0x003b;\n var FULL_STOP = 0x002e;\n var NULL = 0x0000;\n var BACKSPACE = 0x0008;\n var LINE_TABULATION = 0x000b;\n var SHIFT_OUT = 0x000e;\n var INFORMATION_SEPARATOR_ONE = 0x001f;\n var DELETE = 0x007f;\n var EOF = -1;\n var ZERO = 0x0030;\n var a = 0x0061;\n var e = 0x0065;\n var f = 0x0066;\n var u = 0x0075;\n var z = 0x007a;\n var A = 0x0041;\n var E = 0x0045;\n var F = 0x0046;\n var U = 0x0055;\n var Z = 0x005a;\n var isDigit = function (codePoint) { return codePoint >= ZERO && codePoint <= 0x0039; };\n var isSurrogateCodePoint = function (codePoint) { return codePoint >= 0xd800 && codePoint <= 0xdfff; };\n var isHex = function (codePoint) {\n return isDigit(codePoint) || (codePoint >= A && codePoint <= F) || (codePoint >= a && codePoint <= f);\n };\n var isLowerCaseLetter = function (codePoint) { return codePoint >= a && codePoint <= z; };\n var isUpperCaseLetter = function (codePoint) { return codePoint >= A && codePoint <= Z; };\n var isLetter = function (codePoint) { return isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint); };\n var isNonASCIICodePoint = function (codePoint) { return codePoint >= CONTROL; };\n var isWhiteSpace = function (codePoint) {\n return codePoint === LINE_FEED || codePoint === CHARACTER_TABULATION || codePoint === SPACE;\n };\n var isNameStartCodePoint = function (codePoint) {\n return isLetter(codePoint) || isNonASCIICodePoint(codePoint) || codePoint === LOW_LINE;\n };\n var isNameCodePoint = function (codePoint) {\n return isNameStartCodePoint(codePoint) || isDigit(codePoint) || codePoint === HYPHEN_MINUS;\n };\n var isNonPrintableCodePoint = function (codePoint) {\n return ((codePoint >= NULL && codePoint <= BACKSPACE) ||\n codePoint === LINE_TABULATION ||\n (codePoint >= SHIFT_OUT && codePoint <= INFORMATION_SEPARATOR_ONE) ||\n codePoint === DELETE);\n };\n var isValidEscape = function (c1, c2) {\n if (c1 !== REVERSE_SOLIDUS) {\n return false;\n }\n return c2 !== LINE_FEED;\n };\n var isIdentifierStart = function (c1, c2, c3) {\n if (c1 === HYPHEN_MINUS) {\n return isNameStartCodePoint(c2) || isValidEscape(c2, c3);\n }\n else if (isNameStartCodePoint(c1)) {\n return true;\n }\n else if (c1 === REVERSE_SOLIDUS && isValidEscape(c1, c2)) {\n return true;\n }\n return false;\n };\n var isNumberStart = function (c1, c2, c3) {\n if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\n if (isDigit(c2)) {\n return true;\n }\n return c2 === FULL_STOP && isDigit(c3);\n }\n if (c1 === FULL_STOP) {\n return isDigit(c2);\n }\n return isDigit(c1);\n };\n var stringToNumber = function (codePoints) {\n var c = 0;\n var sign = 1;\n if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {\n if (codePoints[c] === HYPHEN_MINUS) {\n sign = -1;\n }\n c++;\n }\n var integers = [];\n while (isDigit(codePoints[c])) {\n integers.push(codePoints[c++]);\n }\n var int = integers.length ? parseInt(fromCodePoint$1.apply(void 0, integers), 10) : 0;\n if (codePoints[c] === FULL_STOP) {\n c++;\n }\n var fraction = [];\n while (isDigit(codePoints[c])) {\n fraction.push(codePoints[c++]);\n }\n var fracd = fraction.length;\n var frac = fracd ? parseInt(fromCodePoint$1.apply(void 0, fraction), 10) : 0;\n if (codePoints[c] === E || codePoints[c] === e) {\n c++;\n }\n var expsign = 1;\n if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {\n if (codePoints[c] === HYPHEN_MINUS) {\n expsign = -1;\n }\n c++;\n }\n var exponent = [];\n while (isDigit(codePoints[c])) {\n exponent.push(codePoints[c++]);\n }\n var exp = exponent.length ? parseInt(fromCodePoint$1.apply(void 0, exponent), 10) : 0;\n return sign * (int + frac * Math.pow(10, -fracd)) * Math.pow(10, expsign * exp);\n };\n var LEFT_PARENTHESIS_TOKEN = {\n type: 2 /* LEFT_PARENTHESIS_TOKEN */\n };\n var RIGHT_PARENTHESIS_TOKEN = {\n type: 3 /* RIGHT_PARENTHESIS_TOKEN */\n };\n var COMMA_TOKEN = { type: 4 /* COMMA_TOKEN */ };\n var SUFFIX_MATCH_TOKEN = { type: 13 /* SUFFIX_MATCH_TOKEN */ };\n var PREFIX_MATCH_TOKEN = { type: 8 /* PREFIX_MATCH_TOKEN */ };\n var COLUMN_TOKEN = { type: 21 /* COLUMN_TOKEN */ };\n var DASH_MATCH_TOKEN = { type: 9 /* DASH_MATCH_TOKEN */ };\n var INCLUDE_MATCH_TOKEN = { type: 10 /* INCLUDE_MATCH_TOKEN */ };\n var LEFT_CURLY_BRACKET_TOKEN = {\n type: 11 /* LEFT_CURLY_BRACKET_TOKEN */\n };\n var RIGHT_CURLY_BRACKET_TOKEN = {\n type: 12 /* RIGHT_CURLY_BRACKET_TOKEN */\n };\n var SUBSTRING_MATCH_TOKEN = { type: 14 /* SUBSTRING_MATCH_TOKEN */ };\n var BAD_URL_TOKEN = { type: 23 /* BAD_URL_TOKEN */ };\n var BAD_STRING_TOKEN = { type: 1 /* BAD_STRING_TOKEN */ };\n var CDO_TOKEN = { type: 25 /* CDO_TOKEN */ };\n var CDC_TOKEN = { type: 24 /* CDC_TOKEN */ };\n var COLON_TOKEN = { type: 26 /* COLON_TOKEN */ };\n var SEMICOLON_TOKEN = { type: 27 /* SEMICOLON_TOKEN */ };\n var LEFT_SQUARE_BRACKET_TOKEN = {\n type: 28 /* LEFT_SQUARE_BRACKET_TOKEN */\n };\n var RIGHT_SQUARE_BRACKET_TOKEN = {\n type: 29 /* RIGHT_SQUARE_BRACKET_TOKEN */\n };\n var WHITESPACE_TOKEN = { type: 31 /* WHITESPACE_TOKEN */ };\n var EOF_TOKEN = { type: 32 /* EOF_TOKEN */ };\n var Tokenizer = /** @class */ (function () {\n function Tokenizer() {\n this._value = [];\n }\n Tokenizer.prototype.write = function (chunk) {\n this._value = this._value.concat(toCodePoints$1(chunk));\n };\n Tokenizer.prototype.read = function () {\n var tokens = [];\n var token = this.consumeToken();\n while (token !== EOF_TOKEN) {\n tokens.push(token);\n token = this.consumeToken();\n }\n return tokens;\n };\n Tokenizer.prototype.consumeToken = function () {\n var codePoint = this.consumeCodePoint();\n switch (codePoint) {\n case QUOTATION_MARK:\n return this.consumeStringToken(QUOTATION_MARK);\n case NUMBER_SIGN:\n var c1 = this.peekCodePoint(0);\n var c2 = this.peekCodePoint(1);\n var c3 = this.peekCodePoint(2);\n if (isNameCodePoint(c1) || isValidEscape(c2, c3)) {\n var flags = isIdentifierStart(c1, c2, c3) ? FLAG_ID : FLAG_UNRESTRICTED;\n var value = this.consumeName();\n return { type: 5 /* HASH_TOKEN */, value: value, flags: flags };\n }\n break;\n case DOLLAR_SIGN:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return SUFFIX_MATCH_TOKEN;\n }\n break;\n case APOSTROPHE:\n return this.consumeStringToken(APOSTROPHE);\n case LEFT_PARENTHESIS:\n return LEFT_PARENTHESIS_TOKEN;\n case RIGHT_PARENTHESIS:\n return RIGHT_PARENTHESIS_TOKEN;\n case ASTERISK:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return SUBSTRING_MATCH_TOKEN;\n }\n break;\n case PLUS_SIGN:\n if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeNumericToken();\n }\n break;\n case COMMA:\n return COMMA_TOKEN;\n case HYPHEN_MINUS:\n var e1 = codePoint;\n var e2 = this.peekCodePoint(0);\n var e3 = this.peekCodePoint(1);\n if (isNumberStart(e1, e2, e3)) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeNumericToken();\n }\n if (isIdentifierStart(e1, e2, e3)) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeIdentLikeToken();\n }\n if (e2 === HYPHEN_MINUS && e3 === GREATER_THAN_SIGN) {\n this.consumeCodePoint();\n this.consumeCodePoint();\n return CDC_TOKEN;\n }\n break;\n case FULL_STOP:\n if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeNumericToken();\n }\n break;\n case SOLIDUS:\n if (this.peekCodePoint(0) === ASTERISK) {\n this.consumeCodePoint();\n while (true) {\n var c = this.consumeCodePoint();\n if (c === ASTERISK) {\n c = this.consumeCodePoint();\n if (c === SOLIDUS) {\n return this.consumeToken();\n }\n }\n if (c === EOF) {\n return this.consumeToken();\n }\n }\n }\n break;\n case COLON:\n return COLON_TOKEN;\n case SEMICOLON:\n return SEMICOLON_TOKEN;\n case LESS_THAN_SIGN:\n if (this.peekCodePoint(0) === EXCLAMATION_MARK &&\n this.peekCodePoint(1) === HYPHEN_MINUS &&\n this.peekCodePoint(2) === HYPHEN_MINUS) {\n this.consumeCodePoint();\n this.consumeCodePoint();\n return CDO_TOKEN;\n }\n break;\n case COMMERCIAL_AT:\n var a1 = this.peekCodePoint(0);\n var a2 = this.peekCodePoint(1);\n var a3 = this.peekCodePoint(2);\n if (isIdentifierStart(a1, a2, a3)) {\n var value = this.consumeName();\n return { type: 7 /* AT_KEYWORD_TOKEN */, value: value };\n }\n break;\n case LEFT_SQUARE_BRACKET:\n return LEFT_SQUARE_BRACKET_TOKEN;\n case REVERSE_SOLIDUS:\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeIdentLikeToken();\n }\n break;\n case RIGHT_SQUARE_BRACKET:\n return RIGHT_SQUARE_BRACKET_TOKEN;\n case CIRCUMFLEX_ACCENT:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return PREFIX_MATCH_TOKEN;\n }\n break;\n case LEFT_CURLY_BRACKET:\n return LEFT_CURLY_BRACKET_TOKEN;\n case RIGHT_CURLY_BRACKET:\n return RIGHT_CURLY_BRACKET_TOKEN;\n case u:\n case U:\n var u1 = this.peekCodePoint(0);\n var u2 = this.peekCodePoint(1);\n if (u1 === PLUS_SIGN && (isHex(u2) || u2 === QUESTION_MARK)) {\n this.consumeCodePoint();\n this.consumeUnicodeRangeToken();\n }\n this.reconsumeCodePoint(codePoint);\n return this.consumeIdentLikeToken();\n case VERTICAL_LINE:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return DASH_MATCH_TOKEN;\n }\n if (this.peekCodePoint(0) === VERTICAL_LINE) {\n this.consumeCodePoint();\n return COLUMN_TOKEN;\n }\n break;\n case TILDE:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return INCLUDE_MATCH_TOKEN;\n }\n break;\n case EOF:\n return EOF_TOKEN;\n }\n if (isWhiteSpace(codePoint)) {\n this.consumeWhiteSpace();\n return WHITESPACE_TOKEN;\n }\n if (isDigit(codePoint)) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeNumericToken();\n }\n if (isNameStartCodePoint(codePoint)) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeIdentLikeToken();\n }\n return { type: 6 /* DELIM_TOKEN */, value: fromCodePoint$1(codePoint) };\n };\n Tokenizer.prototype.consumeCodePoint = function () {\n var value = this._value.shift();\n return typeof value === 'undefined' ? -1 : value;\n };\n Tokenizer.prototype.reconsumeCodePoint = function (codePoint) {\n this._value.unshift(codePoint);\n };\n Tokenizer.prototype.peekCodePoint = function (delta) {\n if (delta >= this._value.length) {\n return -1;\n }\n return this._value[delta];\n };\n Tokenizer.prototype.consumeUnicodeRangeToken = function () {\n var digits = [];\n var codePoint = this.consumeCodePoint();\n while (isHex(codePoint) && digits.length < 6) {\n digits.push(codePoint);\n codePoint = this.consumeCodePoint();\n }\n var questionMarks = false;\n while (codePoint === QUESTION_MARK && digits.length < 6) {\n digits.push(codePoint);\n codePoint = this.consumeCodePoint();\n questionMarks = true;\n }\n if (questionMarks) {\n var start_1 = parseInt(fromCodePoint$1.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? ZERO : digit); })), 16);\n var end = parseInt(fromCodePoint$1.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? F : digit); })), 16);\n return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start_1, end: end };\n }\n var start = parseInt(fromCodePoint$1.apply(void 0, digits), 16);\n if (this.peekCodePoint(0) === HYPHEN_MINUS && isHex(this.peekCodePoint(1))) {\n this.consumeCodePoint();\n codePoint = this.consumeCodePoint();\n var endDigits = [];\n while (isHex(codePoint) && endDigits.length < 6) {\n endDigits.push(codePoint);\n codePoint = this.consumeCodePoint();\n }\n var end = parseInt(fromCodePoint$1.apply(void 0, endDigits), 16);\n return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start, end: end };\n }\n else {\n return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start, end: start };\n }\n };\n Tokenizer.prototype.consumeIdentLikeToken = function () {\n var value = this.consumeName();\n if (value.toLowerCase() === 'url' && this.peekCodePoint(0) === LEFT_PARENTHESIS) {\n this.consumeCodePoint();\n return this.consumeUrlToken();\n }\n else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) {\n this.consumeCodePoint();\n return { type: 19 /* FUNCTION_TOKEN */, value: value };\n }\n return { type: 20 /* IDENT_TOKEN */, value: value };\n };\n Tokenizer.prototype.consumeUrlToken = function () {\n var value = [];\n this.consumeWhiteSpace();\n if (this.peekCodePoint(0) === EOF) {\n return { type: 22 /* URL_TOKEN */, value: '' };\n }\n var next = this.peekCodePoint(0);\n if (next === APOSTROPHE || next === QUOTATION_MARK) {\n var stringToken = this.consumeStringToken(this.consumeCodePoint());\n if (stringToken.type === 0 /* STRING_TOKEN */) {\n this.consumeWhiteSpace();\n if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {\n this.consumeCodePoint();\n return { type: 22 /* URL_TOKEN */, value: stringToken.value };\n }\n }\n this.consumeBadUrlRemnants();\n return BAD_URL_TOKEN;\n }\n while (true) {\n var codePoint = this.consumeCodePoint();\n if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) {\n return { type: 22 /* URL_TOKEN */, value: fromCodePoint$1.apply(void 0, value) };\n }\n else if (isWhiteSpace(codePoint)) {\n this.consumeWhiteSpace();\n if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {\n this.consumeCodePoint();\n return { type: 22 /* URL_TOKEN */, value: fromCodePoint$1.apply(void 0, value) };\n }\n this.consumeBadUrlRemnants();\n return BAD_URL_TOKEN;\n }\n else if (codePoint === QUOTATION_MARK ||\n codePoint === APOSTROPHE ||\n codePoint === LEFT_PARENTHESIS ||\n isNonPrintableCodePoint(codePoint)) {\n this.consumeBadUrlRemnants();\n return BAD_URL_TOKEN;\n }\n else if (codePoint === REVERSE_SOLIDUS) {\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n value.push(this.consumeEscapedCodePoint());\n }\n else {\n this.consumeBadUrlRemnants();\n return BAD_URL_TOKEN;\n }\n }\n else {\n value.push(codePoint);\n }\n }\n };\n Tokenizer.prototype.consumeWhiteSpace = function () {\n while (isWhiteSpace(this.peekCodePoint(0))) {\n this.consumeCodePoint();\n }\n };\n Tokenizer.prototype.consumeBadUrlRemnants = function () {\n while (true) {\n var codePoint = this.consumeCodePoint();\n if (codePoint === RIGHT_PARENTHESIS || codePoint === EOF) {\n return;\n }\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n this.consumeEscapedCodePoint();\n }\n }\n };\n Tokenizer.prototype.consumeStringSlice = function (count) {\n var SLICE_STACK_SIZE = 50000;\n var value = '';\n while (count > 0) {\n var amount = Math.min(SLICE_STACK_SIZE, count);\n value += fromCodePoint$1.apply(void 0, this._value.splice(0, amount));\n count -= amount;\n }\n this._value.shift();\n return value;\n };\n Tokenizer.prototype.consumeStringToken = function (endingCodePoint) {\n var value = '';\n var i = 0;\n do {\n var codePoint = this._value[i];\n if (codePoint === EOF || codePoint === undefined || codePoint === endingCodePoint) {\n value += this.consumeStringSlice(i);\n return { type: 0 /* STRING_TOKEN */, value: value };\n }\n if (codePoint === LINE_FEED) {\n this._value.splice(0, i);\n return BAD_STRING_TOKEN;\n }\n if (codePoint === REVERSE_SOLIDUS) {\n var next = this._value[i + 1];\n if (next !== EOF && next !== undefined) {\n if (next === LINE_FEED) {\n value += this.consumeStringSlice(i);\n i = -1;\n this._value.shift();\n }\n else if (isValidEscape(codePoint, next)) {\n value += this.consumeStringSlice(i);\n value += fromCodePoint$1(this.consumeEscapedCodePoint());\n i = -1;\n }\n }\n }\n i++;\n } while (true);\n };\n Tokenizer.prototype.consumeNumber = function () {\n var repr = [];\n var type = FLAG_INTEGER;\n var c1 = this.peekCodePoint(0);\n if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\n repr.push(this.consumeCodePoint());\n }\n while (isDigit(this.peekCodePoint(0))) {\n repr.push(this.consumeCodePoint());\n }\n c1 = this.peekCodePoint(0);\n var c2 = this.peekCodePoint(1);\n if (c1 === FULL_STOP && isDigit(c2)) {\n repr.push(this.consumeCodePoint(), this.consumeCodePoint());\n type = FLAG_NUMBER;\n while (isDigit(this.peekCodePoint(0))) {\n repr.push(this.consumeCodePoint());\n }\n }\n c1 = this.peekCodePoint(0);\n c2 = this.peekCodePoint(1);\n var c3 = this.peekCodePoint(2);\n if ((c1 === E || c1 === e) && (((c2 === PLUS_SIGN || c2 === HYPHEN_MINUS) && isDigit(c3)) || isDigit(c2))) {\n repr.push(this.consumeCodePoint(), this.consumeCodePoint());\n type = FLAG_NUMBER;\n while (isDigit(this.peekCodePoint(0))) {\n repr.push(this.consumeCodePoint());\n }\n }\n return [stringToNumber(repr), type];\n };\n Tokenizer.prototype.consumeNumericToken = function () {\n var _a = this.consumeNumber(), number = _a[0], flags = _a[1];\n var c1 = this.peekCodePoint(0);\n var c2 = this.peekCodePoint(1);\n var c3 = this.peekCodePoint(2);\n if (isIdentifierStart(c1, c2, c3)) {\n var unit = this.consumeName();\n return { type: 15 /* DIMENSION_TOKEN */, number: number, flags: flags, unit: unit };\n }\n if (c1 === PERCENTAGE_SIGN) {\n this.consumeCodePoint();\n return { type: 16 /* PERCENTAGE_TOKEN */, number: number, flags: flags };\n }\n return { type: 17 /* NUMBER_TOKEN */, number: number, flags: flags };\n };\n Tokenizer.prototype.consumeEscapedCodePoint = function () {\n var codePoint = this.consumeCodePoint();\n if (isHex(codePoint)) {\n var hex = fromCodePoint$1(codePoint);\n while (isHex(this.peekCodePoint(0)) && hex.length < 6) {\n hex += fromCodePoint$1(this.consumeCodePoint());\n }\n if (isWhiteSpace(this.peekCodePoint(0))) {\n this.consumeCodePoint();\n }\n var hexCodePoint = parseInt(hex, 16);\n if (hexCodePoint === 0 || isSurrogateCodePoint(hexCodePoint) || hexCodePoint > 0x10ffff) {\n return REPLACEMENT_CHARACTER;\n }\n return hexCodePoint;\n }\n if (codePoint === EOF) {\n return REPLACEMENT_CHARACTER;\n }\n return codePoint;\n };\n Tokenizer.prototype.consumeName = function () {\n var result = '';\n while (true) {\n var codePoint = this.consumeCodePoint();\n if (isNameCodePoint(codePoint)) {\n result += fromCodePoint$1(codePoint);\n }\n else if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n result += fromCodePoint$1(this.consumeEscapedCodePoint());\n }\n else {\n this.reconsumeCodePoint(codePoint);\n return result;\n }\n }\n };\n return Tokenizer;\n }());\n\n var Parser = /** @class */ (function () {\n function Parser(tokens) {\n this._tokens = tokens;\n }\n Parser.create = function (value) {\n var tokenizer = new Tokenizer();\n tokenizer.write(value);\n return new Parser(tokenizer.read());\n };\n Parser.parseValue = function (value) {\n return Parser.create(value).parseComponentValue();\n };\n Parser.parseValues = function (value) {\n return Parser.create(value).parseComponentValues();\n };\n Parser.prototype.parseComponentValue = function () {\n var token = this.consumeToken();\n while (token.type === 31 /* WHITESPACE_TOKEN */) {\n token = this.consumeToken();\n }\n if (token.type === 32 /* EOF_TOKEN */) {\n throw new SyntaxError(\"Error parsing CSS component value, unexpected EOF\");\n }\n this.reconsumeToken(token);\n var value = this.consumeComponentValue();\n do {\n token = this.consumeToken();\n } while (token.type === 31 /* WHITESPACE_TOKEN */);\n if (token.type === 32 /* EOF_TOKEN */) {\n return value;\n }\n throw new SyntaxError(\"Error parsing CSS component value, multiple values found when expecting only one\");\n };\n Parser.prototype.parseComponentValues = function () {\n var values = [];\n while (true) {\n var value = this.consumeComponentValue();\n if (value.type === 32 /* EOF_TOKEN */) {\n return values;\n }\n values.push(value);\n values.push();\n }\n };\n Parser.prototype.consumeComponentValue = function () {\n var token = this.consumeToken();\n switch (token.type) {\n case 11 /* LEFT_CURLY_BRACKET_TOKEN */:\n case 28 /* LEFT_SQUARE_BRACKET_TOKEN */:\n case 2 /* LEFT_PARENTHESIS_TOKEN */:\n return this.consumeSimpleBlock(token.type);\n case 19 /* FUNCTION_TOKEN */:\n return this.consumeFunction(token);\n }\n return token;\n };\n Parser.prototype.consumeSimpleBlock = function (type) {\n var block = { type: type, values: [] };\n var token = this.consumeToken();\n while (true) {\n if (token.type === 32 /* EOF_TOKEN */ || isEndingTokenFor(token, type)) {\n return block;\n }\n this.reconsumeToken(token);\n block.values.push(this.consumeComponentValue());\n token = this.consumeToken();\n }\n };\n Parser.prototype.consumeFunction = function (functionToken) {\n var cssFunction = {\n name: functionToken.value,\n values: [],\n type: 18 /* FUNCTION */\n };\n while (true) {\n var token = this.consumeToken();\n if (token.type === 32 /* EOF_TOKEN */ || token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */) {\n return cssFunction;\n }\n this.reconsumeToken(token);\n cssFunction.values.push(this.consumeComponentValue());\n }\n };\n Parser.prototype.consumeToken = function () {\n var token = this._tokens.shift();\n return typeof token === 'undefined' ? EOF_TOKEN : token;\n };\n Parser.prototype.reconsumeToken = function (token) {\n this._tokens.unshift(token);\n };\n return Parser;\n }());\n var isDimensionToken = function (token) { return token.type === 15 /* DIMENSION_TOKEN */; };\n var isNumberToken = function (token) { return token.type === 17 /* NUMBER_TOKEN */; };\n var isIdentToken = function (token) { return token.type === 20 /* IDENT_TOKEN */; };\n var isStringToken = function (token) { return token.type === 0 /* STRING_TOKEN */; };\n var isIdentWithValue = function (token, value) {\n return isIdentToken(token) && token.value === value;\n };\n var nonWhiteSpace = function (token) { return token.type !== 31 /* WHITESPACE_TOKEN */; };\n var nonFunctionArgSeparator = function (token) {\n return token.type !== 31 /* WHITESPACE_TOKEN */ && token.type !== 4 /* COMMA_TOKEN */;\n };\n var parseFunctionArgs = function (tokens) {\n var args = [];\n var arg = [];\n tokens.forEach(function (token) {\n if (token.type === 4 /* COMMA_TOKEN */) {\n if (arg.length === 0) {\n throw new Error(\"Error parsing function args, zero tokens for arg\");\n }\n args.push(arg);\n arg = [];\n return;\n }\n if (token.type !== 31 /* WHITESPACE_TOKEN */) {\n arg.push(token);\n }\n });\n if (arg.length) {\n args.push(arg);\n }\n return args;\n };\n var isEndingTokenFor = function (token, type) {\n if (type === 11 /* LEFT_CURLY_BRACKET_TOKEN */ && token.type === 12 /* RIGHT_CURLY_BRACKET_TOKEN */) {\n return true;\n }\n if (type === 28 /* LEFT_SQUARE_BRACKET_TOKEN */ && token.type === 29 /* RIGHT_SQUARE_BRACKET_TOKEN */) {\n return true;\n }\n return type === 2 /* LEFT_PARENTHESIS_TOKEN */ && token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */;\n };\n\n var isLength = function (token) {\n return token.type === 17 /* NUMBER_TOKEN */ || token.type === 15 /* DIMENSION_TOKEN */;\n };\n\n var isLengthPercentage = function (token) {\n return token.type === 16 /* PERCENTAGE_TOKEN */ || isLength(token);\n };\n var parseLengthPercentageTuple = function (tokens) {\n return tokens.length > 1 ? [tokens[0], tokens[1]] : [tokens[0]];\n };\n var ZERO_LENGTH = {\n type: 17 /* NUMBER_TOKEN */,\n number: 0,\n flags: FLAG_INTEGER\n };\n var FIFTY_PERCENT = {\n type: 16 /* PERCENTAGE_TOKEN */,\n number: 50,\n flags: FLAG_INTEGER\n };\n var HUNDRED_PERCENT = {\n type: 16 /* PERCENTAGE_TOKEN */,\n number: 100,\n flags: FLAG_INTEGER\n };\n var getAbsoluteValueForTuple = function (tuple, width, height) {\n var x = tuple[0], y = tuple[1];\n return [getAbsoluteValue(x, width), getAbsoluteValue(typeof y !== 'undefined' ? y : x, height)];\n };\n var getAbsoluteValue = function (token, parent) {\n if (token.type === 16 /* PERCENTAGE_TOKEN */) {\n return (token.number / 100) * parent;\n }\n if (isDimensionToken(token)) {\n switch (token.unit) {\n case 'rem':\n case 'em':\n return 16 * token.number; // TODO use correct font-size\n case 'px':\n default:\n return token.number;\n }\n }\n return token.number;\n };\n\n var DEG = 'deg';\n var GRAD = 'grad';\n var RAD = 'rad';\n var TURN = 'turn';\n var angle = {\n name: 'angle',\n parse: function (_context, value) {\n if (value.type === 15 /* DIMENSION_TOKEN */) {\n switch (value.unit) {\n case DEG:\n return (Math.PI * value.number) / 180;\n case GRAD:\n return (Math.PI / 200) * value.number;\n case RAD:\n return value.number;\n case TURN:\n return Math.PI * 2 * value.number;\n }\n }\n throw new Error(\"Unsupported angle type\");\n }\n };\n var isAngle = function (value) {\n if (value.type === 15 /* DIMENSION_TOKEN */) {\n if (value.unit === DEG || value.unit === GRAD || value.unit === RAD || value.unit === TURN) {\n return true;\n }\n }\n return false;\n };\n var parseNamedSide = function (tokens) {\n var sideOrCorner = tokens\n .filter(isIdentToken)\n .map(function (ident) { return ident.value; })\n .join(' ');\n switch (sideOrCorner) {\n case 'to bottom right':\n case 'to right bottom':\n case 'left top':\n case 'top left':\n return [ZERO_LENGTH, ZERO_LENGTH];\n case 'to top':\n case 'bottom':\n return deg(0);\n case 'to bottom left':\n case 'to left bottom':\n case 'right top':\n case 'top right':\n return [ZERO_LENGTH, HUNDRED_PERCENT];\n case 'to right':\n case 'left':\n return deg(90);\n case 'to top left':\n case 'to left top':\n case 'right bottom':\n case 'bottom right':\n return [HUNDRED_PERCENT, HUNDRED_PERCENT];\n case 'to bottom':\n case 'top':\n return deg(180);\n case 'to top right':\n case 'to right top':\n case 'left bottom':\n case 'bottom left':\n return [HUNDRED_PERCENT, ZERO_LENGTH];\n case 'to left':\n case 'right':\n return deg(270);\n }\n return 0;\n };\n var deg = function (deg) { return (Math.PI * deg) / 180; };\n\n var color$1 = {\n name: 'color',\n parse: function (context, value) {\n if (value.type === 18 /* FUNCTION */) {\n var colorFunction = SUPPORTED_COLOR_FUNCTIONS[value.name];\n if (typeof colorFunction === 'undefined') {\n throw new Error(\"Attempting to parse an unsupported color function \\\"\" + value.name + \"\\\"\");\n }\n return colorFunction(context, value.values);\n }\n if (value.type === 5 /* HASH_TOKEN */) {\n if (value.value.length === 3) {\n var r = value.value.substring(0, 1);\n var g = value.value.substring(1, 2);\n var b = value.value.substring(2, 3);\n return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), 1);\n }\n if (value.value.length === 4) {\n var r = value.value.substring(0, 1);\n var g = value.value.substring(1, 2);\n var b = value.value.substring(2, 3);\n var a = value.value.substring(3, 4);\n return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), parseInt(a + a, 16) / 255);\n }\n if (value.value.length === 6) {\n var r = value.value.substring(0, 2);\n var g = value.value.substring(2, 4);\n var b = value.value.substring(4, 6);\n return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), 1);\n }\n if (value.value.length === 8) {\n var r = value.value.substring(0, 2);\n var g = value.value.substring(2, 4);\n var b = value.value.substring(4, 6);\n var a = value.value.substring(6, 8);\n return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), parseInt(a, 16) / 255);\n }\n }\n if (value.type === 20 /* IDENT_TOKEN */) {\n var namedColor = COLORS[value.value.toUpperCase()];\n if (typeof namedColor !== 'undefined') {\n return namedColor;\n }\n }\n return COLORS.TRANSPARENT;\n }\n };\n var isTransparent = function (color) { return (0xff & color) === 0; };\n var asString = function (color) {\n var alpha = 0xff & color;\n var blue = 0xff & (color >> 8);\n var green = 0xff & (color >> 16);\n var red = 0xff & (color >> 24);\n return alpha < 255 ? \"rgba(\" + red + \",\" + green + \",\" + blue + \",\" + alpha / 255 + \")\" : \"rgb(\" + red + \",\" + green + \",\" + blue + \")\";\n };\n var pack = function (r, g, b, a) {\n return ((r << 24) | (g << 16) | (b << 8) | (Math.round(a * 255) << 0)) >>> 0;\n };\n var getTokenColorValue = function (token, i) {\n if (token.type === 17 /* NUMBER_TOKEN */) {\n return token.number;\n }\n if (token.type === 16 /* PERCENTAGE_TOKEN */) {\n var max = i === 3 ? 1 : 255;\n return i === 3 ? (token.number / 100) * max : Math.round((token.number / 100) * max);\n }\n return 0;\n };\n var rgb = function (_context, args) {\n var tokens = args.filter(nonFunctionArgSeparator);\n if (tokens.length === 3) {\n var _a = tokens.map(getTokenColorValue), r = _a[0], g = _a[1], b = _a[2];\n return pack(r, g, b, 1);\n }\n if (tokens.length === 4) {\n var _b = tokens.map(getTokenColorValue), r = _b[0], g = _b[1], b = _b[2], a = _b[3];\n return pack(r, g, b, a);\n }\n return 0;\n };\n function hue2rgb(t1, t2, hue) {\n if (hue < 0) {\n hue += 1;\n }\n if (hue >= 1) {\n hue -= 1;\n }\n if (hue < 1 / 6) {\n return (t2 - t1) * hue * 6 + t1;\n }\n else if (hue < 1 / 2) {\n return t2;\n }\n else if (hue < 2 / 3) {\n return (t2 - t1) * 6 * (2 / 3 - hue) + t1;\n }\n else {\n return t1;\n }\n }\n var hsl = function (context, args) {\n var tokens = args.filter(nonFunctionArgSeparator);\n var hue = tokens[0], saturation = tokens[1], lightness = tokens[2], alpha = tokens[3];\n var h = (hue.type === 17 /* NUMBER_TOKEN */ ? deg(hue.number) : angle.parse(context, hue)) / (Math.PI * 2);\n var s = isLengthPercentage(saturation) ? saturation.number / 100 : 0;\n var l = isLengthPercentage(lightness) ? lightness.number / 100 : 0;\n var a = typeof alpha !== 'undefined' && isLengthPercentage(alpha) ? getAbsoluteValue(alpha, 1) : 1;\n if (s === 0) {\n return pack(l * 255, l * 255, l * 255, 1);\n }\n var t2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var t1 = l * 2 - t2;\n var r = hue2rgb(t1, t2, h + 1 / 3);\n var g = hue2rgb(t1, t2, h);\n var b = hue2rgb(t1, t2, h - 1 / 3);\n return pack(r * 255, g * 255, b * 255, a);\n };\n var SUPPORTED_COLOR_FUNCTIONS = {\n hsl: hsl,\n hsla: hsl,\n rgb: rgb,\n rgba: rgb\n };\n var parseColor = function (context, value) {\n return color$1.parse(context, Parser.create(value).parseComponentValue());\n };\n var COLORS = {\n ALICEBLUE: 0xf0f8ffff,\n ANTIQUEWHITE: 0xfaebd7ff,\n AQUA: 0x00ffffff,\n AQUAMARINE: 0x7fffd4ff,\n AZURE: 0xf0ffffff,\n BEIGE: 0xf5f5dcff,\n BISQUE: 0xffe4c4ff,\n BLACK: 0x000000ff,\n BLANCHEDALMOND: 0xffebcdff,\n BLUE: 0x0000ffff,\n BLUEVIOLET: 0x8a2be2ff,\n BROWN: 0xa52a2aff,\n BURLYWOOD: 0xdeb887ff,\n CADETBLUE: 0x5f9ea0ff,\n CHARTREUSE: 0x7fff00ff,\n CHOCOLATE: 0xd2691eff,\n CORAL: 0xff7f50ff,\n CORNFLOWERBLUE: 0x6495edff,\n CORNSILK: 0xfff8dcff,\n CRIMSON: 0xdc143cff,\n CYAN: 0x00ffffff,\n DARKBLUE: 0x00008bff,\n DARKCYAN: 0x008b8bff,\n DARKGOLDENROD: 0xb886bbff,\n DARKGRAY: 0xa9a9a9ff,\n DARKGREEN: 0x006400ff,\n DARKGREY: 0xa9a9a9ff,\n DARKKHAKI: 0xbdb76bff,\n DARKMAGENTA: 0x8b008bff,\n DARKOLIVEGREEN: 0x556b2fff,\n DARKORANGE: 0xff8c00ff,\n DARKORCHID: 0x9932ccff,\n DARKRED: 0x8b0000ff,\n DARKSALMON: 0xe9967aff,\n DARKSEAGREEN: 0x8fbc8fff,\n DARKSLATEBLUE: 0x483d8bff,\n DARKSLATEGRAY: 0x2f4f4fff,\n DARKSLATEGREY: 0x2f4f4fff,\n DARKTURQUOISE: 0x00ced1ff,\n DARKVIOLET: 0x9400d3ff,\n DEEPPINK: 0xff1493ff,\n DEEPSKYBLUE: 0x00bfffff,\n DIMGRAY: 0x696969ff,\n DIMGREY: 0x696969ff,\n DODGERBLUE: 0x1e90ffff,\n FIREBRICK: 0xb22222ff,\n FLORALWHITE: 0xfffaf0ff,\n FORESTGREEN: 0x228b22ff,\n FUCHSIA: 0xff00ffff,\n GAINSBORO: 0xdcdcdcff,\n GHOSTWHITE: 0xf8f8ffff,\n GOLD: 0xffd700ff,\n GOLDENROD: 0xdaa520ff,\n GRAY: 0x808080ff,\n GREEN: 0x008000ff,\n GREENYELLOW: 0xadff2fff,\n GREY: 0x808080ff,\n HONEYDEW: 0xf0fff0ff,\n HOTPINK: 0xff69b4ff,\n INDIANRED: 0xcd5c5cff,\n INDIGO: 0x4b0082ff,\n IVORY: 0xfffff0ff,\n KHAKI: 0xf0e68cff,\n LAVENDER: 0xe6e6faff,\n LAVENDERBLUSH: 0xfff0f5ff,\n LAWNGREEN: 0x7cfc00ff,\n LEMONCHIFFON: 0xfffacdff,\n LIGHTBLUE: 0xadd8e6ff,\n LIGHTCORAL: 0xf08080ff,\n LIGHTCYAN: 0xe0ffffff,\n LIGHTGOLDENRODYELLOW: 0xfafad2ff,\n LIGHTGRAY: 0xd3d3d3ff,\n LIGHTGREEN: 0x90ee90ff,\n LIGHTGREY: 0xd3d3d3ff,\n LIGHTPINK: 0xffb6c1ff,\n LIGHTSALMON: 0xffa07aff,\n LIGHTSEAGREEN: 0x20b2aaff,\n LIGHTSKYBLUE: 0x87cefaff,\n LIGHTSLATEGRAY: 0x778899ff,\n LIGHTSLATEGREY: 0x778899ff,\n LIGHTSTEELBLUE: 0xb0c4deff,\n LIGHTYELLOW: 0xffffe0ff,\n LIME: 0x00ff00ff,\n LIMEGREEN: 0x32cd32ff,\n LINEN: 0xfaf0e6ff,\n MAGENTA: 0xff00ffff,\n MAROON: 0x800000ff,\n MEDIUMAQUAMARINE: 0x66cdaaff,\n MEDIUMBLUE: 0x0000cdff,\n MEDIUMORCHID: 0xba55d3ff,\n MEDIUMPURPLE: 0x9370dbff,\n MEDIUMSEAGREEN: 0x3cb371ff,\n MEDIUMSLATEBLUE: 0x7b68eeff,\n MEDIUMSPRINGGREEN: 0x00fa9aff,\n MEDIUMTURQUOISE: 0x48d1ccff,\n MEDIUMVIOLETRED: 0xc71585ff,\n MIDNIGHTBLUE: 0x191970ff,\n MINTCREAM: 0xf5fffaff,\n MISTYROSE: 0xffe4e1ff,\n MOCCASIN: 0xffe4b5ff,\n NAVAJOWHITE: 0xffdeadff,\n NAVY: 0x000080ff,\n OLDLACE: 0xfdf5e6ff,\n OLIVE: 0x808000ff,\n OLIVEDRAB: 0x6b8e23ff,\n ORANGE: 0xffa500ff,\n ORANGERED: 0xff4500ff,\n ORCHID: 0xda70d6ff,\n PALEGOLDENROD: 0xeee8aaff,\n PALEGREEN: 0x98fb98ff,\n PALETURQUOISE: 0xafeeeeff,\n PALEVIOLETRED: 0xdb7093ff,\n PAPAYAWHIP: 0xffefd5ff,\n PEACHPUFF: 0xffdab9ff,\n PERU: 0xcd853fff,\n PINK: 0xffc0cbff,\n PLUM: 0xdda0ddff,\n POWDERBLUE: 0xb0e0e6ff,\n PURPLE: 0x800080ff,\n REBECCAPURPLE: 0x663399ff,\n RED: 0xff0000ff,\n ROSYBROWN: 0xbc8f8fff,\n ROYALBLUE: 0x4169e1ff,\n SADDLEBROWN: 0x8b4513ff,\n SALMON: 0xfa8072ff,\n SANDYBROWN: 0xf4a460ff,\n SEAGREEN: 0x2e8b57ff,\n SEASHELL: 0xfff5eeff,\n SIENNA: 0xa0522dff,\n SILVER: 0xc0c0c0ff,\n SKYBLUE: 0x87ceebff,\n SLATEBLUE: 0x6a5acdff,\n SLATEGRAY: 0x708090ff,\n SLATEGREY: 0x708090ff,\n SNOW: 0xfffafaff,\n SPRINGGREEN: 0x00ff7fff,\n STEELBLUE: 0x4682b4ff,\n TAN: 0xd2b48cff,\n TEAL: 0x008080ff,\n THISTLE: 0xd8bfd8ff,\n TOMATO: 0xff6347ff,\n TRANSPARENT: 0x00000000,\n TURQUOISE: 0x40e0d0ff,\n VIOLET: 0xee82eeff,\n WHEAT: 0xf5deb3ff,\n WHITE: 0xffffffff,\n WHITESMOKE: 0xf5f5f5ff,\n YELLOW: 0xffff00ff,\n YELLOWGREEN: 0x9acd32ff\n };\n\n var backgroundClip = {\n name: 'background-clip',\n initialValue: 'border-box',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens.map(function (token) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'padding-box':\n return 1 /* PADDING_BOX */;\n case 'content-box':\n return 2 /* CONTENT_BOX */;\n }\n }\n return 0 /* BORDER_BOX */;\n });\n }\n };\n\n var backgroundColor = {\n name: \"background-color\",\n initialValue: 'transparent',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n };\n\n var parseColorStop = function (context, args) {\n var color = color$1.parse(context, args[0]);\n var stop = args[1];\n return stop && isLengthPercentage(stop) ? { color: color, stop: stop } : { color: color, stop: null };\n };\n var processColorStops = function (stops, lineLength) {\n var first = stops[0];\n var last = stops[stops.length - 1];\n if (first.stop === null) {\n first.stop = ZERO_LENGTH;\n }\n if (last.stop === null) {\n last.stop = HUNDRED_PERCENT;\n }\n var processStops = [];\n var previous = 0;\n for (var i = 0; i < stops.length; i++) {\n var stop_1 = stops[i].stop;\n if (stop_1 !== null) {\n var absoluteValue = getAbsoluteValue(stop_1, lineLength);\n if (absoluteValue > previous) {\n processStops.push(absoluteValue);\n }\n else {\n processStops.push(previous);\n }\n previous = absoluteValue;\n }\n else {\n processStops.push(null);\n }\n }\n var gapBegin = null;\n for (var i = 0; i < processStops.length; i++) {\n var stop_2 = processStops[i];\n if (stop_2 === null) {\n if (gapBegin === null) {\n gapBegin = i;\n }\n }\n else if (gapBegin !== null) {\n var gapLength = i - gapBegin;\n var beforeGap = processStops[gapBegin - 1];\n var gapValue = (stop_2 - beforeGap) / (gapLength + 1);\n for (var g = 1; g <= gapLength; g++) {\n processStops[gapBegin + g - 1] = gapValue * g;\n }\n gapBegin = null;\n }\n }\n return stops.map(function (_a, i) {\n var color = _a.color;\n return { color: color, stop: Math.max(Math.min(1, processStops[i] / lineLength), 0) };\n });\n };\n var getAngleFromCorner = function (corner, width, height) {\n var centerX = width / 2;\n var centerY = height / 2;\n var x = getAbsoluteValue(corner[0], width) - centerX;\n var y = centerY - getAbsoluteValue(corner[1], height);\n return (Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2);\n };\n var calculateGradientDirection = function (angle, width, height) {\n var radian = typeof angle === 'number' ? angle : getAngleFromCorner(angle, width, height);\n var lineLength = Math.abs(width * Math.sin(radian)) + Math.abs(height * Math.cos(radian));\n var halfWidth = width / 2;\n var halfHeight = height / 2;\n var halfLineLength = lineLength / 2;\n var yDiff = Math.sin(radian - Math.PI / 2) * halfLineLength;\n var xDiff = Math.cos(radian - Math.PI / 2) * halfLineLength;\n return [lineLength, halfWidth - xDiff, halfWidth + xDiff, halfHeight - yDiff, halfHeight + yDiff];\n };\n var distance = function (a, b) { return Math.sqrt(a * a + b * b); };\n var findCorner = function (width, height, x, y, closest) {\n var corners = [\n [0, 0],\n [0, height],\n [width, 0],\n [width, height]\n ];\n return corners.reduce(function (stat, corner) {\n var cx = corner[0], cy = corner[1];\n var d = distance(x - cx, y - cy);\n if (closest ? d < stat.optimumDistance : d > stat.optimumDistance) {\n return {\n optimumCorner: corner,\n optimumDistance: d\n };\n }\n return stat;\n }, {\n optimumDistance: closest ? Infinity : -Infinity,\n optimumCorner: null\n }).optimumCorner;\n };\n var calculateRadius = function (gradient, x, y, width, height) {\n var rx = 0;\n var ry = 0;\n switch (gradient.size) {\n case 0 /* CLOSEST_SIDE */:\n // The ending shape is sized so that that it exactly meets the side of the gradient box closest to the gradient’s center.\n // If the shape is an ellipse, it exactly meets the closest side in each dimension.\n if (gradient.shape === 0 /* CIRCLE */) {\n rx = ry = Math.min(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\n }\n else if (gradient.shape === 1 /* ELLIPSE */) {\n rx = Math.min(Math.abs(x), Math.abs(x - width));\n ry = Math.min(Math.abs(y), Math.abs(y - height));\n }\n break;\n case 2 /* CLOSEST_CORNER */:\n // The ending shape is sized so that that it passes through the corner of the gradient box closest to the gradient’s center.\n // If the shape is an ellipse, the ending shape is given the same aspect-ratio it would have if closest-side were specified.\n if (gradient.shape === 0 /* CIRCLE */) {\n rx = ry = Math.min(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height));\n }\n else if (gradient.shape === 1 /* ELLIPSE */) {\n // Compute the ratio ry/rx (which is to be the same as for \"closest-side\")\n var c = Math.min(Math.abs(y), Math.abs(y - height)) / Math.min(Math.abs(x), Math.abs(x - width));\n var _a = findCorner(width, height, x, y, true), cx = _a[0], cy = _a[1];\n rx = distance(cx - x, (cy - y) / c);\n ry = c * rx;\n }\n break;\n case 1 /* FARTHEST_SIDE */:\n // Same as closest-side, except the ending shape is sized based on the farthest side(s)\n if (gradient.shape === 0 /* CIRCLE */) {\n rx = ry = Math.max(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\n }\n else if (gradient.shape === 1 /* ELLIPSE */) {\n rx = Math.max(Math.abs(x), Math.abs(x - width));\n ry = Math.max(Math.abs(y), Math.abs(y - height));\n }\n break;\n case 3 /* FARTHEST_CORNER */:\n // Same as closest-corner, except the ending shape is sized based on the farthest corner.\n // If the shape is an ellipse, the ending shape is given the same aspect ratio it would have if farthest-side were specified.\n if (gradient.shape === 0 /* CIRCLE */) {\n rx = ry = Math.max(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height));\n }\n else if (gradient.shape === 1 /* ELLIPSE */) {\n // Compute the ratio ry/rx (which is to be the same as for \"farthest-side\")\n var c = Math.max(Math.abs(y), Math.abs(y - height)) / Math.max(Math.abs(x), Math.abs(x - width));\n var _b = findCorner(width, height, x, y, false), cx = _b[0], cy = _b[1];\n rx = distance(cx - x, (cy - y) / c);\n ry = c * rx;\n }\n break;\n }\n if (Array.isArray(gradient.size)) {\n rx = getAbsoluteValue(gradient.size[0], width);\n ry = gradient.size.length === 2 ? getAbsoluteValue(gradient.size[1], height) : rx;\n }\n return [rx, ry];\n };\n\n var linearGradient = function (context, tokens) {\n var angle$1 = deg(180);\n var stops = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n if (i === 0) {\n var firstToken = arg[0];\n if (firstToken.type === 20 /* IDENT_TOKEN */ && firstToken.value === 'to') {\n angle$1 = parseNamedSide(arg);\n return;\n }\n else if (isAngle(firstToken)) {\n angle$1 = angle.parse(context, firstToken);\n return;\n }\n }\n var colorStop = parseColorStop(context, arg);\n stops.push(colorStop);\n });\n return { angle: angle$1, stops: stops, type: 1 /* LINEAR_GRADIENT */ };\n };\n\n var prefixLinearGradient = function (context, tokens) {\n var angle$1 = deg(180);\n var stops = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n if (i === 0) {\n var firstToken = arg[0];\n if (firstToken.type === 20 /* IDENT_TOKEN */ &&\n ['top', 'left', 'right', 'bottom'].indexOf(firstToken.value) !== -1) {\n angle$1 = parseNamedSide(arg);\n return;\n }\n else if (isAngle(firstToken)) {\n angle$1 = (angle.parse(context, firstToken) + deg(270)) % deg(360);\n return;\n }\n }\n var colorStop = parseColorStop(context, arg);\n stops.push(colorStop);\n });\n return {\n angle: angle$1,\n stops: stops,\n type: 1 /* LINEAR_GRADIENT */\n };\n };\n\n var webkitGradient = function (context, tokens) {\n var angle = deg(180);\n var stops = [];\n var type = 1 /* LINEAR_GRADIENT */;\n var shape = 0 /* CIRCLE */;\n var size = 3 /* FARTHEST_CORNER */;\n var position = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n var firstToken = arg[0];\n if (i === 0) {\n if (isIdentToken(firstToken) && firstToken.value === 'linear') {\n type = 1 /* LINEAR_GRADIENT */;\n return;\n }\n else if (isIdentToken(firstToken) && firstToken.value === 'radial') {\n type = 2 /* RADIAL_GRADIENT */;\n return;\n }\n }\n if (firstToken.type === 18 /* FUNCTION */) {\n if (firstToken.name === 'from') {\n var color = color$1.parse(context, firstToken.values[0]);\n stops.push({ stop: ZERO_LENGTH, color: color });\n }\n else if (firstToken.name === 'to') {\n var color = color$1.parse(context, firstToken.values[0]);\n stops.push({ stop: HUNDRED_PERCENT, color: color });\n }\n else if (firstToken.name === 'color-stop') {\n var values = firstToken.values.filter(nonFunctionArgSeparator);\n if (values.length === 2) {\n var color = color$1.parse(context, values[1]);\n var stop_1 = values[0];\n if (isNumberToken(stop_1)) {\n stops.push({\n stop: { type: 16 /* PERCENTAGE_TOKEN */, number: stop_1.number * 100, flags: stop_1.flags },\n color: color\n });\n }\n }\n }\n }\n });\n return type === 1 /* LINEAR_GRADIENT */\n ? {\n angle: (angle + deg(180)) % deg(360),\n stops: stops,\n type: type\n }\n : { size: size, shape: shape, stops: stops, position: position, type: type };\n };\n\n var CLOSEST_SIDE = 'closest-side';\n var FARTHEST_SIDE = 'farthest-side';\n var CLOSEST_CORNER = 'closest-corner';\n var FARTHEST_CORNER = 'farthest-corner';\n var CIRCLE = 'circle';\n var ELLIPSE = 'ellipse';\n var COVER = 'cover';\n var CONTAIN = 'contain';\n var radialGradient = function (context, tokens) {\n var shape = 0 /* CIRCLE */;\n var size = 3 /* FARTHEST_CORNER */;\n var stops = [];\n var position = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n var isColorStop = true;\n if (i === 0) {\n var isAtPosition_1 = false;\n isColorStop = arg.reduce(function (acc, token) {\n if (isAtPosition_1) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'center':\n position.push(FIFTY_PERCENT);\n return acc;\n case 'top':\n case 'left':\n position.push(ZERO_LENGTH);\n return acc;\n case 'right':\n case 'bottom':\n position.push(HUNDRED_PERCENT);\n return acc;\n }\n }\n else if (isLengthPercentage(token) || isLength(token)) {\n position.push(token);\n }\n }\n else if (isIdentToken(token)) {\n switch (token.value) {\n case CIRCLE:\n shape = 0 /* CIRCLE */;\n return false;\n case ELLIPSE:\n shape = 1 /* ELLIPSE */;\n return false;\n case 'at':\n isAtPosition_1 = true;\n return false;\n case CLOSEST_SIDE:\n size = 0 /* CLOSEST_SIDE */;\n return false;\n case COVER:\n case FARTHEST_SIDE:\n size = 1 /* FARTHEST_SIDE */;\n return false;\n case CONTAIN:\n case CLOSEST_CORNER:\n size = 2 /* CLOSEST_CORNER */;\n return false;\n case FARTHEST_CORNER:\n size = 3 /* FARTHEST_CORNER */;\n return false;\n }\n }\n else if (isLength(token) || isLengthPercentage(token)) {\n if (!Array.isArray(size)) {\n size = [];\n }\n size.push(token);\n return false;\n }\n return acc;\n }, isColorStop);\n }\n if (isColorStop) {\n var colorStop = parseColorStop(context, arg);\n stops.push(colorStop);\n }\n });\n return { size: size, shape: shape, stops: stops, position: position, type: 2 /* RADIAL_GRADIENT */ };\n };\n\n var prefixRadialGradient = function (context, tokens) {\n var shape = 0 /* CIRCLE */;\n var size = 3 /* FARTHEST_CORNER */;\n var stops = [];\n var position = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n var isColorStop = true;\n if (i === 0) {\n isColorStop = arg.reduce(function (acc, token) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'center':\n position.push(FIFTY_PERCENT);\n return false;\n case 'top':\n case 'left':\n position.push(ZERO_LENGTH);\n return false;\n case 'right':\n case 'bottom':\n position.push(HUNDRED_PERCENT);\n return false;\n }\n }\n else if (isLengthPercentage(token) || isLength(token)) {\n position.push(token);\n return false;\n }\n return acc;\n }, isColorStop);\n }\n else if (i === 1) {\n isColorStop = arg.reduce(function (acc, token) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case CIRCLE:\n shape = 0 /* CIRCLE */;\n return false;\n case ELLIPSE:\n shape = 1 /* ELLIPSE */;\n return false;\n case CONTAIN:\n case CLOSEST_SIDE:\n size = 0 /* CLOSEST_SIDE */;\n return false;\n case FARTHEST_SIDE:\n size = 1 /* FARTHEST_SIDE */;\n return false;\n case CLOSEST_CORNER:\n size = 2 /* CLOSEST_CORNER */;\n return false;\n case COVER:\n case FARTHEST_CORNER:\n size = 3 /* FARTHEST_CORNER */;\n return false;\n }\n }\n else if (isLength(token) || isLengthPercentage(token)) {\n if (!Array.isArray(size)) {\n size = [];\n }\n size.push(token);\n return false;\n }\n return acc;\n }, isColorStop);\n }\n if (isColorStop) {\n var colorStop = parseColorStop(context, arg);\n stops.push(colorStop);\n }\n });\n return { size: size, shape: shape, stops: stops, position: position, type: 2 /* RADIAL_GRADIENT */ };\n };\n\n var isLinearGradient = function (background) {\n return background.type === 1 /* LINEAR_GRADIENT */;\n };\n var isRadialGradient = function (background) {\n return background.type === 2 /* RADIAL_GRADIENT */;\n };\n var image = {\n name: 'image',\n parse: function (context, value) {\n if (value.type === 22 /* URL_TOKEN */) {\n var image_1 = { url: value.value, type: 0 /* URL */ };\n context.cache.addImage(value.value);\n return image_1;\n }\n if (value.type === 18 /* FUNCTION */) {\n var imageFunction = SUPPORTED_IMAGE_FUNCTIONS[value.name];\n if (typeof imageFunction === 'undefined') {\n throw new Error(\"Attempting to parse an unsupported image function \\\"\" + value.name + \"\\\"\");\n }\n return imageFunction(context, value.values);\n }\n throw new Error(\"Unsupported image type \" + value.type);\n }\n };\n function isSupportedImage(value) {\n return (!(value.type === 20 /* IDENT_TOKEN */ && value.value === 'none') &&\n (value.type !== 18 /* FUNCTION */ || !!SUPPORTED_IMAGE_FUNCTIONS[value.name]));\n }\n var SUPPORTED_IMAGE_FUNCTIONS = {\n 'linear-gradient': linearGradient,\n '-moz-linear-gradient': prefixLinearGradient,\n '-ms-linear-gradient': prefixLinearGradient,\n '-o-linear-gradient': prefixLinearGradient,\n '-webkit-linear-gradient': prefixLinearGradient,\n 'radial-gradient': radialGradient,\n '-moz-radial-gradient': prefixRadialGradient,\n '-ms-radial-gradient': prefixRadialGradient,\n '-o-radial-gradient': prefixRadialGradient,\n '-webkit-radial-gradient': prefixRadialGradient,\n '-webkit-gradient': webkitGradient\n };\n\n var backgroundImage = {\n name: 'background-image',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (context, tokens) {\n if (tokens.length === 0) {\n return [];\n }\n var first = tokens[0];\n if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\n return [];\n }\n return tokens\n .filter(function (value) { return nonFunctionArgSeparator(value) && isSupportedImage(value); })\n .map(function (value) { return image.parse(context, value); });\n }\n };\n\n var backgroundOrigin = {\n name: 'background-origin',\n initialValue: 'border-box',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens.map(function (token) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'padding-box':\n return 1 /* PADDING_BOX */;\n case 'content-box':\n return 2 /* CONTENT_BOX */;\n }\n }\n return 0 /* BORDER_BOX */;\n });\n }\n };\n\n var backgroundPosition = {\n name: 'background-position',\n initialValue: '0% 0%',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (_context, tokens) {\n return parseFunctionArgs(tokens)\n .map(function (values) { return values.filter(isLengthPercentage); })\n .map(parseLengthPercentageTuple);\n }\n };\n\n var backgroundRepeat = {\n name: 'background-repeat',\n initialValue: 'repeat',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return parseFunctionArgs(tokens)\n .map(function (values) {\n return values\n .filter(isIdentToken)\n .map(function (token) { return token.value; })\n .join(' ');\n })\n .map(parseBackgroundRepeat);\n }\n };\n var parseBackgroundRepeat = function (value) {\n switch (value) {\n case 'no-repeat':\n return 1 /* NO_REPEAT */;\n case 'repeat-x':\n case 'repeat no-repeat':\n return 2 /* REPEAT_X */;\n case 'repeat-y':\n case 'no-repeat repeat':\n return 3 /* REPEAT_Y */;\n case 'repeat':\n default:\n return 0 /* REPEAT */;\n }\n };\n\n var BACKGROUND_SIZE;\n (function (BACKGROUND_SIZE) {\n BACKGROUND_SIZE[\"AUTO\"] = \"auto\";\n BACKGROUND_SIZE[\"CONTAIN\"] = \"contain\";\n BACKGROUND_SIZE[\"COVER\"] = \"cover\";\n })(BACKGROUND_SIZE || (BACKGROUND_SIZE = {}));\n var backgroundSize = {\n name: 'background-size',\n initialValue: '0',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return parseFunctionArgs(tokens).map(function (values) { return values.filter(isBackgroundSizeInfoToken); });\n }\n };\n var isBackgroundSizeInfoToken = function (value) {\n return isIdentToken(value) || isLengthPercentage(value);\n };\n\n var borderColorForSide = function (side) { return ({\n name: \"border-\" + side + \"-color\",\n initialValue: 'transparent',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n }); };\n var borderTopColor = borderColorForSide('top');\n var borderRightColor = borderColorForSide('right');\n var borderBottomColor = borderColorForSide('bottom');\n var borderLeftColor = borderColorForSide('left');\n\n var borderRadiusForSide = function (side) { return ({\n name: \"border-radius-\" + side,\n initialValue: '0 0',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return parseLengthPercentageTuple(tokens.filter(isLengthPercentage));\n }\n }); };\n var borderTopLeftRadius = borderRadiusForSide('top-left');\n var borderTopRightRadius = borderRadiusForSide('top-right');\n var borderBottomRightRadius = borderRadiusForSide('bottom-right');\n var borderBottomLeftRadius = borderRadiusForSide('bottom-left');\n\n var borderStyleForSide = function (side) { return ({\n name: \"border-\" + side + \"-style\",\n initialValue: 'solid',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, style) {\n switch (style) {\n case 'none':\n return 0 /* NONE */;\n case 'dashed':\n return 2 /* DASHED */;\n case 'dotted':\n return 3 /* DOTTED */;\n case 'double':\n return 4 /* DOUBLE */;\n }\n return 1 /* SOLID */;\n }\n }); };\n var borderTopStyle = borderStyleForSide('top');\n var borderRightStyle = borderStyleForSide('right');\n var borderBottomStyle = borderStyleForSide('bottom');\n var borderLeftStyle = borderStyleForSide('left');\n\n var borderWidthForSide = function (side) { return ({\n name: \"border-\" + side + \"-width\",\n initialValue: '0',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (_context, token) {\n if (isDimensionToken(token)) {\n return token.number;\n }\n return 0;\n }\n }); };\n var borderTopWidth = borderWidthForSide('top');\n var borderRightWidth = borderWidthForSide('right');\n var borderBottomWidth = borderWidthForSide('bottom');\n var borderLeftWidth = borderWidthForSide('left');\n\n var color = {\n name: \"color\",\n initialValue: 'transparent',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n };\n\n var direction = {\n name: 'direction',\n initialValue: 'ltr',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, direction) {\n switch (direction) {\n case 'rtl':\n return 1 /* RTL */;\n case 'ltr':\n default:\n return 0 /* LTR */;\n }\n }\n };\n\n var display = {\n name: 'display',\n initialValue: 'inline-block',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens.filter(isIdentToken).reduce(function (bit, token) {\n return bit | parseDisplayValue(token.value);\n }, 0 /* NONE */);\n }\n };\n var parseDisplayValue = function (display) {\n switch (display) {\n case 'block':\n case '-webkit-box':\n return 2 /* BLOCK */;\n case 'inline':\n return 4 /* INLINE */;\n case 'run-in':\n return 8 /* RUN_IN */;\n case 'flow':\n return 16 /* FLOW */;\n case 'flow-root':\n return 32 /* FLOW_ROOT */;\n case 'table':\n return 64 /* TABLE */;\n case 'flex':\n case '-webkit-flex':\n return 128 /* FLEX */;\n case 'grid':\n case '-ms-grid':\n return 256 /* GRID */;\n case 'ruby':\n return 512 /* RUBY */;\n case 'subgrid':\n return 1024 /* SUBGRID */;\n case 'list-item':\n return 2048 /* LIST_ITEM */;\n case 'table-row-group':\n return 4096 /* TABLE_ROW_GROUP */;\n case 'table-header-group':\n return 8192 /* TABLE_HEADER_GROUP */;\n case 'table-footer-group':\n return 16384 /* TABLE_FOOTER_GROUP */;\n case 'table-row':\n return 32768 /* TABLE_ROW */;\n case 'table-cell':\n return 65536 /* TABLE_CELL */;\n case 'table-column-group':\n return 131072 /* TABLE_COLUMN_GROUP */;\n case 'table-column':\n return 262144 /* TABLE_COLUMN */;\n case 'table-caption':\n return 524288 /* TABLE_CAPTION */;\n case 'ruby-base':\n return 1048576 /* RUBY_BASE */;\n case 'ruby-text':\n return 2097152 /* RUBY_TEXT */;\n case 'ruby-base-container':\n return 4194304 /* RUBY_BASE_CONTAINER */;\n case 'ruby-text-container':\n return 8388608 /* RUBY_TEXT_CONTAINER */;\n case 'contents':\n return 16777216 /* CONTENTS */;\n case 'inline-block':\n return 33554432 /* INLINE_BLOCK */;\n case 'inline-list-item':\n return 67108864 /* INLINE_LIST_ITEM */;\n case 'inline-table':\n return 134217728 /* INLINE_TABLE */;\n case 'inline-flex':\n return 268435456 /* INLINE_FLEX */;\n case 'inline-grid':\n return 536870912 /* INLINE_GRID */;\n }\n return 0 /* NONE */;\n };\n\n var float = {\n name: 'float',\n initialValue: 'none',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, float) {\n switch (float) {\n case 'left':\n return 1 /* LEFT */;\n case 'right':\n return 2 /* RIGHT */;\n case 'inline-start':\n return 3 /* INLINE_START */;\n case 'inline-end':\n return 4 /* INLINE_END */;\n }\n return 0 /* NONE */;\n }\n };\n\n var letterSpacing = {\n name: 'letter-spacing',\n initialValue: '0',\n prefix: false,\n type: 0 /* VALUE */,\n parse: function (_context, token) {\n if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'normal') {\n return 0;\n }\n if (token.type === 17 /* NUMBER_TOKEN */) {\n return token.number;\n }\n if (token.type === 15 /* DIMENSION_TOKEN */) {\n return token.number;\n }\n return 0;\n }\n };\n\n var LINE_BREAK;\n (function (LINE_BREAK) {\n LINE_BREAK[\"NORMAL\"] = \"normal\";\n LINE_BREAK[\"STRICT\"] = \"strict\";\n })(LINE_BREAK || (LINE_BREAK = {}));\n var lineBreak = {\n name: 'line-break',\n initialValue: 'normal',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, lineBreak) {\n switch (lineBreak) {\n case 'strict':\n return LINE_BREAK.STRICT;\n case 'normal':\n default:\n return LINE_BREAK.NORMAL;\n }\n }\n };\n\n var lineHeight = {\n name: 'line-height',\n initialValue: 'normal',\n prefix: false,\n type: 4 /* TOKEN_VALUE */\n };\n var computeLineHeight = function (token, fontSize) {\n if (isIdentToken(token) && token.value === 'normal') {\n return 1.2 * fontSize;\n }\n else if (token.type === 17 /* NUMBER_TOKEN */) {\n return fontSize * token.number;\n }\n else if (isLengthPercentage(token)) {\n return getAbsoluteValue(token, fontSize);\n }\n return fontSize;\n };\n\n var listStyleImage = {\n name: 'list-style-image',\n initialValue: 'none',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (context, token) {\n if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'none') {\n return null;\n }\n return image.parse(context, token);\n }\n };\n\n var listStylePosition = {\n name: 'list-style-position',\n initialValue: 'outside',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, position) {\n switch (position) {\n case 'inside':\n return 0 /* INSIDE */;\n case 'outside':\n default:\n return 1 /* OUTSIDE */;\n }\n }\n };\n\n var listStyleType = {\n name: 'list-style-type',\n initialValue: 'none',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, type) {\n switch (type) {\n case 'disc':\n return 0 /* DISC */;\n case 'circle':\n return 1 /* CIRCLE */;\n case 'square':\n return 2 /* SQUARE */;\n case 'decimal':\n return 3 /* DECIMAL */;\n case 'cjk-decimal':\n return 4 /* CJK_DECIMAL */;\n case 'decimal-leading-zero':\n return 5 /* DECIMAL_LEADING_ZERO */;\n case 'lower-roman':\n return 6 /* LOWER_ROMAN */;\n case 'upper-roman':\n return 7 /* UPPER_ROMAN */;\n case 'lower-greek':\n return 8 /* LOWER_GREEK */;\n case 'lower-alpha':\n return 9 /* LOWER_ALPHA */;\n case 'upper-alpha':\n return 10 /* UPPER_ALPHA */;\n case 'arabic-indic':\n return 11 /* ARABIC_INDIC */;\n case 'armenian':\n return 12 /* ARMENIAN */;\n case 'bengali':\n return 13 /* BENGALI */;\n case 'cambodian':\n return 14 /* CAMBODIAN */;\n case 'cjk-earthly-branch':\n return 15 /* CJK_EARTHLY_BRANCH */;\n case 'cjk-heavenly-stem':\n return 16 /* CJK_HEAVENLY_STEM */;\n case 'cjk-ideographic':\n return 17 /* CJK_IDEOGRAPHIC */;\n case 'devanagari':\n return 18 /* DEVANAGARI */;\n case 'ethiopic-numeric':\n return 19 /* ETHIOPIC_NUMERIC */;\n case 'georgian':\n return 20 /* GEORGIAN */;\n case 'gujarati':\n return 21 /* GUJARATI */;\n case 'gurmukhi':\n return 22 /* GURMUKHI */;\n case 'hebrew':\n return 22 /* HEBREW */;\n case 'hiragana':\n return 23 /* HIRAGANA */;\n case 'hiragana-iroha':\n return 24 /* HIRAGANA_IROHA */;\n case 'japanese-formal':\n return 25 /* JAPANESE_FORMAL */;\n case 'japanese-informal':\n return 26 /* JAPANESE_INFORMAL */;\n case 'kannada':\n return 27 /* KANNADA */;\n case 'katakana':\n return 28 /* KATAKANA */;\n case 'katakana-iroha':\n return 29 /* KATAKANA_IROHA */;\n case 'khmer':\n return 30 /* KHMER */;\n case 'korean-hangul-formal':\n return 31 /* KOREAN_HANGUL_FORMAL */;\n case 'korean-hanja-formal':\n return 32 /* KOREAN_HANJA_FORMAL */;\n case 'korean-hanja-informal':\n return 33 /* KOREAN_HANJA_INFORMAL */;\n case 'lao':\n return 34 /* LAO */;\n case 'lower-armenian':\n return 35 /* LOWER_ARMENIAN */;\n case 'malayalam':\n return 36 /* MALAYALAM */;\n case 'mongolian':\n return 37 /* MONGOLIAN */;\n case 'myanmar':\n return 38 /* MYANMAR */;\n case 'oriya':\n return 39 /* ORIYA */;\n case 'persian':\n return 40 /* PERSIAN */;\n case 'simp-chinese-formal':\n return 41 /* SIMP_CHINESE_FORMAL */;\n case 'simp-chinese-informal':\n return 42 /* SIMP_CHINESE_INFORMAL */;\n case 'tamil':\n return 43 /* TAMIL */;\n case 'telugu':\n return 44 /* TELUGU */;\n case 'thai':\n return 45 /* THAI */;\n case 'tibetan':\n return 46 /* TIBETAN */;\n case 'trad-chinese-formal':\n return 47 /* TRAD_CHINESE_FORMAL */;\n case 'trad-chinese-informal':\n return 48 /* TRAD_CHINESE_INFORMAL */;\n case 'upper-armenian':\n return 49 /* UPPER_ARMENIAN */;\n case 'disclosure-open':\n return 50 /* DISCLOSURE_OPEN */;\n case 'disclosure-closed':\n return 51 /* DISCLOSURE_CLOSED */;\n case 'none':\n default:\n return -1 /* NONE */;\n }\n }\n };\n\n var marginForSide = function (side) { return ({\n name: \"margin-\" + side,\n initialValue: '0',\n prefix: false,\n type: 4 /* TOKEN_VALUE */\n }); };\n var marginTop = marginForSide('top');\n var marginRight = marginForSide('right');\n var marginBottom = marginForSide('bottom');\n var marginLeft = marginForSide('left');\n\n var overflow = {\n name: 'overflow',\n initialValue: 'visible',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens.filter(isIdentToken).map(function (overflow) {\n switch (overflow.value) {\n case 'hidden':\n return 1 /* HIDDEN */;\n case 'scroll':\n return 2 /* SCROLL */;\n case 'clip':\n return 3 /* CLIP */;\n case 'auto':\n return 4 /* AUTO */;\n case 'visible':\n default:\n return 0 /* VISIBLE */;\n }\n });\n }\n };\n\n var overflowWrap = {\n name: 'overflow-wrap',\n initialValue: 'normal',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, overflow) {\n switch (overflow) {\n case 'break-word':\n return \"break-word\" /* BREAK_WORD */;\n case 'normal':\n default:\n return \"normal\" /* NORMAL */;\n }\n }\n };\n\n var paddingForSide = function (side) { return ({\n name: \"padding-\" + side,\n initialValue: '0',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'length-percentage'\n }); };\n var paddingTop = paddingForSide('top');\n var paddingRight = paddingForSide('right');\n var paddingBottom = paddingForSide('bottom');\n var paddingLeft = paddingForSide('left');\n\n var textAlign = {\n name: 'text-align',\n initialValue: 'left',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, textAlign) {\n switch (textAlign) {\n case 'right':\n return 2 /* RIGHT */;\n case 'center':\n case 'justify':\n return 1 /* CENTER */;\n case 'left':\n default:\n return 0 /* LEFT */;\n }\n }\n };\n\n var position = {\n name: 'position',\n initialValue: 'static',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, position) {\n switch (position) {\n case 'relative':\n return 1 /* RELATIVE */;\n case 'absolute':\n return 2 /* ABSOLUTE */;\n case 'fixed':\n return 3 /* FIXED */;\n case 'sticky':\n return 4 /* STICKY */;\n }\n return 0 /* STATIC */;\n }\n };\n\n var textShadow = {\n name: 'text-shadow',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (context, tokens) {\n if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\n return [];\n }\n return parseFunctionArgs(tokens).map(function (values) {\n var shadow = {\n color: COLORS.TRANSPARENT,\n offsetX: ZERO_LENGTH,\n offsetY: ZERO_LENGTH,\n blur: ZERO_LENGTH\n };\n var c = 0;\n for (var i = 0; i < values.length; i++) {\n var token = values[i];\n if (isLength(token)) {\n if (c === 0) {\n shadow.offsetX = token;\n }\n else if (c === 1) {\n shadow.offsetY = token;\n }\n else {\n shadow.blur = token;\n }\n c++;\n }\n else {\n shadow.color = color$1.parse(context, token);\n }\n }\n return shadow;\n });\n }\n };\n\n var textTransform = {\n name: 'text-transform',\n initialValue: 'none',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, textTransform) {\n switch (textTransform) {\n case 'uppercase':\n return 2 /* UPPERCASE */;\n case 'lowercase':\n return 1 /* LOWERCASE */;\n case 'capitalize':\n return 3 /* CAPITALIZE */;\n }\n return 0 /* NONE */;\n }\n };\n\n var transform$1 = {\n name: 'transform',\n initialValue: 'none',\n prefix: true,\n type: 0 /* VALUE */,\n parse: function (_context, token) {\n if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'none') {\n return null;\n }\n if (token.type === 18 /* FUNCTION */) {\n var transformFunction = SUPPORTED_TRANSFORM_FUNCTIONS[token.name];\n if (typeof transformFunction === 'undefined') {\n throw new Error(\"Attempting to parse an unsupported transform function \\\"\" + token.name + \"\\\"\");\n }\n return transformFunction(token.values);\n }\n return null;\n }\n };\n var matrix = function (args) {\n var values = args.filter(function (arg) { return arg.type === 17 /* NUMBER_TOKEN */; }).map(function (arg) { return arg.number; });\n return values.length === 6 ? values : null;\n };\n // doesn't support 3D transforms at the moment\n var matrix3d = function (args) {\n var values = args.filter(function (arg) { return arg.type === 17 /* NUMBER_TOKEN */; }).map(function (arg) { return arg.number; });\n var a1 = values[0], b1 = values[1]; values[2]; values[3]; var a2 = values[4], b2 = values[5]; values[6]; values[7]; values[8]; values[9]; values[10]; values[11]; var a4 = values[12], b4 = values[13]; values[14]; values[15];\n return values.length === 16 ? [a1, b1, a2, b2, a4, b4] : null;\n };\n var SUPPORTED_TRANSFORM_FUNCTIONS = {\n matrix: matrix,\n matrix3d: matrix3d\n };\n\n var DEFAULT_VALUE = {\n type: 16 /* PERCENTAGE_TOKEN */,\n number: 50,\n flags: FLAG_INTEGER\n };\n var DEFAULT = [DEFAULT_VALUE, DEFAULT_VALUE];\n var transformOrigin = {\n name: 'transform-origin',\n initialValue: '50% 50%',\n prefix: true,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n var origins = tokens.filter(isLengthPercentage);\n if (origins.length !== 2) {\n return DEFAULT;\n }\n return [origins[0], origins[1]];\n }\n };\n\n var visibility = {\n name: 'visible',\n initialValue: 'none',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, visibility) {\n switch (visibility) {\n case 'hidden':\n return 1 /* HIDDEN */;\n case 'collapse':\n return 2 /* COLLAPSE */;\n case 'visible':\n default:\n return 0 /* VISIBLE */;\n }\n }\n };\n\n var WORD_BREAK;\n (function (WORD_BREAK) {\n WORD_BREAK[\"NORMAL\"] = \"normal\";\n WORD_BREAK[\"BREAK_ALL\"] = \"break-all\";\n WORD_BREAK[\"KEEP_ALL\"] = \"keep-all\";\n })(WORD_BREAK || (WORD_BREAK = {}));\n var wordBreak = {\n name: 'word-break',\n initialValue: 'normal',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, wordBreak) {\n switch (wordBreak) {\n case 'break-all':\n return WORD_BREAK.BREAK_ALL;\n case 'keep-all':\n return WORD_BREAK.KEEP_ALL;\n case 'normal':\n default:\n return WORD_BREAK.NORMAL;\n }\n }\n };\n\n var zIndex = {\n name: 'z-index',\n initialValue: 'auto',\n prefix: false,\n type: 0 /* VALUE */,\n parse: function (_context, token) {\n if (token.type === 20 /* IDENT_TOKEN */) {\n return { auto: true, order: 0 };\n }\n if (isNumberToken(token)) {\n return { auto: false, order: token.number };\n }\n throw new Error(\"Invalid z-index number parsed\");\n }\n };\n\n var time = {\n name: 'time',\n parse: function (_context, value) {\n if (value.type === 15 /* DIMENSION_TOKEN */) {\n switch (value.unit.toLowerCase()) {\n case 's':\n return 1000 * value.number;\n case 'ms':\n return value.number;\n }\n }\n throw new Error(\"Unsupported time type\");\n }\n };\n\n var opacity = {\n name: 'opacity',\n initialValue: '1',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (_context, token) {\n if (isNumberToken(token)) {\n return token.number;\n }\n return 1;\n }\n };\n\n var textDecorationColor = {\n name: \"text-decoration-color\",\n initialValue: 'transparent',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n };\n\n var textDecorationLine = {\n name: 'text-decoration-line',\n initialValue: 'none',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens\n .filter(isIdentToken)\n .map(function (token) {\n switch (token.value) {\n case 'underline':\n return 1 /* UNDERLINE */;\n case 'overline':\n return 2 /* OVERLINE */;\n case 'line-through':\n return 3 /* LINE_THROUGH */;\n case 'none':\n return 4 /* BLINK */;\n }\n return 0 /* NONE */;\n })\n .filter(function (line) { return line !== 0 /* NONE */; });\n }\n };\n\n var fontFamily = {\n name: \"font-family\",\n initialValue: '',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n var accumulator = [];\n var results = [];\n tokens.forEach(function (token) {\n switch (token.type) {\n case 20 /* IDENT_TOKEN */:\n case 0 /* STRING_TOKEN */:\n accumulator.push(token.value);\n break;\n case 17 /* NUMBER_TOKEN */:\n accumulator.push(token.number.toString());\n break;\n case 4 /* COMMA_TOKEN */:\n results.push(accumulator.join(' '));\n accumulator.length = 0;\n break;\n }\n });\n if (accumulator.length) {\n results.push(accumulator.join(' '));\n }\n return results.map(function (result) { return (result.indexOf(' ') === -1 ? result : \"'\" + result + \"'\"); });\n }\n };\n\n var fontSize = {\n name: \"font-size\",\n initialValue: '0',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'length'\n };\n\n var fontWeight = {\n name: 'font-weight',\n initialValue: 'normal',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (_context, token) {\n if (isNumberToken(token)) {\n return token.number;\n }\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'bold':\n return 700;\n case 'normal':\n default:\n return 400;\n }\n }\n return 400;\n }\n };\n\n var fontVariant = {\n name: 'font-variant',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (_context, tokens) {\n return tokens.filter(isIdentToken).map(function (token) { return token.value; });\n }\n };\n\n var fontStyle = {\n name: 'font-style',\n initialValue: 'normal',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, overflow) {\n switch (overflow) {\n case 'oblique':\n return \"oblique\" /* OBLIQUE */;\n case 'italic':\n return \"italic\" /* ITALIC */;\n case 'normal':\n default:\n return \"normal\" /* NORMAL */;\n }\n }\n };\n\n var contains = function (bit, value) { return (bit & value) !== 0; };\n\n var content = {\n name: 'content',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (_context, tokens) {\n if (tokens.length === 0) {\n return [];\n }\n var first = tokens[0];\n if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\n return [];\n }\n return tokens;\n }\n };\n\n var counterIncrement = {\n name: 'counter-increment',\n initialValue: 'none',\n prefix: true,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n if (tokens.length === 0) {\n return null;\n }\n var first = tokens[0];\n if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\n return null;\n }\n var increments = [];\n var filtered = tokens.filter(nonWhiteSpace);\n for (var i = 0; i < filtered.length; i++) {\n var counter = filtered[i];\n var next = filtered[i + 1];\n if (counter.type === 20 /* IDENT_TOKEN */) {\n var increment = next && isNumberToken(next) ? next.number : 1;\n increments.push({ counter: counter.value, increment: increment });\n }\n }\n return increments;\n }\n };\n\n var counterReset = {\n name: 'counter-reset',\n initialValue: 'none',\n prefix: true,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n if (tokens.length === 0) {\n return [];\n }\n var resets = [];\n var filtered = tokens.filter(nonWhiteSpace);\n for (var i = 0; i < filtered.length; i++) {\n var counter = filtered[i];\n var next = filtered[i + 1];\n if (isIdentToken(counter) && counter.value !== 'none') {\n var reset = next && isNumberToken(next) ? next.number : 0;\n resets.push({ counter: counter.value, reset: reset });\n }\n }\n return resets;\n }\n };\n\n var duration = {\n name: 'duration',\n initialValue: '0s',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (context, tokens) {\n return tokens.filter(isDimensionToken).map(function (token) { return time.parse(context, token); });\n }\n };\n\n var quotes = {\n name: 'quotes',\n initialValue: 'none',\n prefix: true,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n if (tokens.length === 0) {\n return null;\n }\n var first = tokens[0];\n if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\n return null;\n }\n var quotes = [];\n var filtered = tokens.filter(isStringToken);\n if (filtered.length % 2 !== 0) {\n return null;\n }\n for (var i = 0; i < filtered.length; i += 2) {\n var open_1 = filtered[i].value;\n var close_1 = filtered[i + 1].value;\n quotes.push({ open: open_1, close: close_1 });\n }\n return quotes;\n }\n };\n var getQuote = function (quotes, depth, open) {\n if (!quotes) {\n return '';\n }\n var quote = quotes[Math.min(depth, quotes.length - 1)];\n if (!quote) {\n return '';\n }\n return open ? quote.open : quote.close;\n };\n\n var boxShadow = {\n name: 'box-shadow',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (context, tokens) {\n if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\n return [];\n }\n return parseFunctionArgs(tokens).map(function (values) {\n var shadow = {\n color: 0x000000ff,\n offsetX: ZERO_LENGTH,\n offsetY: ZERO_LENGTH,\n blur: ZERO_LENGTH,\n spread: ZERO_LENGTH,\n inset: false\n };\n var c = 0;\n for (var i = 0; i < values.length; i++) {\n var token = values[i];\n if (isIdentWithValue(token, 'inset')) {\n shadow.inset = true;\n }\n else if (isLength(token)) {\n if (c === 0) {\n shadow.offsetX = token;\n }\n else if (c === 1) {\n shadow.offsetY = token;\n }\n else if (c === 2) {\n shadow.blur = token;\n }\n else {\n shadow.spread = token;\n }\n c++;\n }\n else {\n shadow.color = color$1.parse(context, token);\n }\n }\n return shadow;\n });\n }\n };\n\n var paintOrder = {\n name: 'paint-order',\n initialValue: 'normal',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n var DEFAULT_VALUE = [0 /* FILL */, 1 /* STROKE */, 2 /* MARKERS */];\n var layers = [];\n tokens.filter(isIdentToken).forEach(function (token) {\n switch (token.value) {\n case 'stroke':\n layers.push(1 /* STROKE */);\n break;\n case 'fill':\n layers.push(0 /* FILL */);\n break;\n case 'markers':\n layers.push(2 /* MARKERS */);\n break;\n }\n });\n DEFAULT_VALUE.forEach(function (value) {\n if (layers.indexOf(value) === -1) {\n layers.push(value);\n }\n });\n return layers;\n }\n };\n\n var webkitTextStrokeColor = {\n name: \"-webkit-text-stroke-color\",\n initialValue: 'currentcolor',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n };\n\n var webkitTextStrokeWidth = {\n name: \"-webkit-text-stroke-width\",\n initialValue: '0',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (_context, token) {\n if (isDimensionToken(token)) {\n return token.number;\n }\n return 0;\n }\n };\n\n var CSSParsedDeclaration = /** @class */ (function () {\n function CSSParsedDeclaration(context, declaration) {\n var _a, _b;\n this.animationDuration = parse(context, duration, declaration.animationDuration);\n this.backgroundClip = parse(context, backgroundClip, declaration.backgroundClip);\n this.backgroundColor = parse(context, backgroundColor, declaration.backgroundColor);\n this.backgroundImage = parse(context, backgroundImage, declaration.backgroundImage);\n this.backgroundOrigin = parse(context, backgroundOrigin, declaration.backgroundOrigin);\n this.backgroundPosition = parse(context, backgroundPosition, declaration.backgroundPosition);\n this.backgroundRepeat = parse(context, backgroundRepeat, declaration.backgroundRepeat);\n this.backgroundSize = parse(context, backgroundSize, declaration.backgroundSize);\n this.borderTopColor = parse(context, borderTopColor, declaration.borderTopColor);\n this.borderRightColor = parse(context, borderRightColor, declaration.borderRightColor);\n this.borderBottomColor = parse(context, borderBottomColor, declaration.borderBottomColor);\n this.borderLeftColor = parse(context, borderLeftColor, declaration.borderLeftColor);\n this.borderTopLeftRadius = parse(context, borderTopLeftRadius, declaration.borderTopLeftRadius);\n this.borderTopRightRadius = parse(context, borderTopRightRadius, declaration.borderTopRightRadius);\n this.borderBottomRightRadius = parse(context, borderBottomRightRadius, declaration.borderBottomRightRadius);\n this.borderBottomLeftRadius = parse(context, borderBottomLeftRadius, declaration.borderBottomLeftRadius);\n this.borderTopStyle = parse(context, borderTopStyle, declaration.borderTopStyle);\n this.borderRightStyle = parse(context, borderRightStyle, declaration.borderRightStyle);\n this.borderBottomStyle = parse(context, borderBottomStyle, declaration.borderBottomStyle);\n this.borderLeftStyle = parse(context, borderLeftStyle, declaration.borderLeftStyle);\n this.borderTopWidth = parse(context, borderTopWidth, declaration.borderTopWidth);\n this.borderRightWidth = parse(context, borderRightWidth, declaration.borderRightWidth);\n this.borderBottomWidth = parse(context, borderBottomWidth, declaration.borderBottomWidth);\n this.borderLeftWidth = parse(context, borderLeftWidth, declaration.borderLeftWidth);\n this.boxShadow = parse(context, boxShadow, declaration.boxShadow);\n this.color = parse(context, color, declaration.color);\n this.direction = parse(context, direction, declaration.direction);\n this.display = parse(context, display, declaration.display);\n this.float = parse(context, float, declaration.cssFloat);\n this.fontFamily = parse(context, fontFamily, declaration.fontFamily);\n this.fontSize = parse(context, fontSize, declaration.fontSize);\n this.fontStyle = parse(context, fontStyle, declaration.fontStyle);\n this.fontVariant = parse(context, fontVariant, declaration.fontVariant);\n this.fontWeight = parse(context, fontWeight, declaration.fontWeight);\n this.letterSpacing = parse(context, letterSpacing, declaration.letterSpacing);\n this.lineBreak = parse(context, lineBreak, declaration.lineBreak);\n this.lineHeight = parse(context, lineHeight, declaration.lineHeight);\n this.listStyleImage = parse(context, listStyleImage, declaration.listStyleImage);\n this.listStylePosition = parse(context, listStylePosition, declaration.listStylePosition);\n this.listStyleType = parse(context, listStyleType, declaration.listStyleType);\n this.marginTop = parse(context, marginTop, declaration.marginTop);\n this.marginRight = parse(context, marginRight, declaration.marginRight);\n this.marginBottom = parse(context, marginBottom, declaration.marginBottom);\n this.marginLeft = parse(context, marginLeft, declaration.marginLeft);\n this.opacity = parse(context, opacity, declaration.opacity);\n var overflowTuple = parse(context, overflow, declaration.overflow);\n this.overflowX = overflowTuple[0];\n this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0];\n this.overflowWrap = parse(context, overflowWrap, declaration.overflowWrap);\n this.paddingTop = parse(context, paddingTop, declaration.paddingTop);\n this.paddingRight = parse(context, paddingRight, declaration.paddingRight);\n this.paddingBottom = parse(context, paddingBottom, declaration.paddingBottom);\n this.paddingLeft = parse(context, paddingLeft, declaration.paddingLeft);\n this.paintOrder = parse(context, paintOrder, declaration.paintOrder);\n this.position = parse(context, position, declaration.position);\n this.textAlign = parse(context, textAlign, declaration.textAlign);\n this.textDecorationColor = parse(context, textDecorationColor, (_a = declaration.textDecorationColor) !== null && _a !== void 0 ? _a : declaration.color);\n this.textDecorationLine = parse(context, textDecorationLine, (_b = declaration.textDecorationLine) !== null && _b !== void 0 ? _b : declaration.textDecoration);\n this.textShadow = parse(context, textShadow, declaration.textShadow);\n this.textTransform = parse(context, textTransform, declaration.textTransform);\n this.transform = parse(context, transform$1, declaration.transform);\n this.transformOrigin = parse(context, transformOrigin, declaration.transformOrigin);\n this.visibility = parse(context, visibility, declaration.visibility);\n this.webkitTextStrokeColor = parse(context, webkitTextStrokeColor, declaration.webkitTextStrokeColor);\n this.webkitTextStrokeWidth = parse(context, webkitTextStrokeWidth, declaration.webkitTextStrokeWidth);\n this.wordBreak = parse(context, wordBreak, declaration.wordBreak);\n this.zIndex = parse(context, zIndex, declaration.zIndex);\n }\n CSSParsedDeclaration.prototype.isVisible = function () {\n return this.display > 0 && this.opacity > 0 && this.visibility === 0 /* VISIBLE */;\n };\n CSSParsedDeclaration.prototype.isTransparent = function () {\n return isTransparent(this.backgroundColor);\n };\n CSSParsedDeclaration.prototype.isTransformed = function () {\n return this.transform !== null;\n };\n CSSParsedDeclaration.prototype.isPositioned = function () {\n return this.position !== 0 /* STATIC */;\n };\n CSSParsedDeclaration.prototype.isPositionedWithZIndex = function () {\n return this.isPositioned() && !this.zIndex.auto;\n };\n CSSParsedDeclaration.prototype.isFloating = function () {\n return this.float !== 0 /* NONE */;\n };\n CSSParsedDeclaration.prototype.isInlineLevel = function () {\n return (contains(this.display, 4 /* INLINE */) ||\n contains(this.display, 33554432 /* INLINE_BLOCK */) ||\n contains(this.display, 268435456 /* INLINE_FLEX */) ||\n contains(this.display, 536870912 /* INLINE_GRID */) ||\n contains(this.display, 67108864 /* INLINE_LIST_ITEM */) ||\n contains(this.display, 134217728 /* INLINE_TABLE */));\n };\n return CSSParsedDeclaration;\n }());\n var CSSParsedPseudoDeclaration = /** @class */ (function () {\n function CSSParsedPseudoDeclaration(context, declaration) {\n this.content = parse(context, content, declaration.content);\n this.quotes = parse(context, quotes, declaration.quotes);\n }\n return CSSParsedPseudoDeclaration;\n }());\n var CSSParsedCounterDeclaration = /** @class */ (function () {\n function CSSParsedCounterDeclaration(context, declaration) {\n this.counterIncrement = parse(context, counterIncrement, declaration.counterIncrement);\n this.counterReset = parse(context, counterReset, declaration.counterReset);\n }\n return CSSParsedCounterDeclaration;\n }());\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var parse = function (context, descriptor, style) {\n var tokenizer = new Tokenizer();\n var value = style !== null && typeof style !== 'undefined' ? style.toString() : descriptor.initialValue;\n tokenizer.write(value);\n var parser = new Parser(tokenizer.read());\n switch (descriptor.type) {\n case 2 /* IDENT_VALUE */:\n var token = parser.parseComponentValue();\n return descriptor.parse(context, isIdentToken(token) ? token.value : descriptor.initialValue);\n case 0 /* VALUE */:\n return descriptor.parse(context, parser.parseComponentValue());\n case 1 /* LIST */:\n return descriptor.parse(context, parser.parseComponentValues());\n case 4 /* TOKEN_VALUE */:\n return parser.parseComponentValue();\n case 3 /* TYPE_VALUE */:\n switch (descriptor.format) {\n case 'angle':\n return angle.parse(context, parser.parseComponentValue());\n case 'color':\n return color$1.parse(context, parser.parseComponentValue());\n case 'image':\n return image.parse(context, parser.parseComponentValue());\n case 'length':\n var length_1 = parser.parseComponentValue();\n return isLength(length_1) ? length_1 : ZERO_LENGTH;\n case 'length-percentage':\n var value_1 = parser.parseComponentValue();\n return isLengthPercentage(value_1) ? value_1 : ZERO_LENGTH;\n case 'time':\n return time.parse(context, parser.parseComponentValue());\n }\n break;\n }\n };\n\n var elementDebuggerAttribute = 'data-html2canvas-debug';\n var getElementDebugType = function (element) {\n var attribute = element.getAttribute(elementDebuggerAttribute);\n switch (attribute) {\n case 'all':\n return 1 /* ALL */;\n case 'clone':\n return 2 /* CLONE */;\n case 'parse':\n return 3 /* PARSE */;\n case 'render':\n return 4 /* RENDER */;\n default:\n return 0 /* NONE */;\n }\n };\n var isDebugging = function (element, type) {\n var elementType = getElementDebugType(element);\n return elementType === 1 /* ALL */ || type === elementType;\n };\n\n var ElementContainer = /** @class */ (function () {\n function ElementContainer(context, element) {\n this.context = context;\n this.textNodes = [];\n this.elements = [];\n this.flags = 0;\n if (isDebugging(element, 3 /* PARSE */)) {\n debugger;\n }\n this.styles = new CSSParsedDeclaration(context, window.getComputedStyle(element, null));\n if (isHTMLElementNode(element)) {\n if (this.styles.animationDuration.some(function (duration) { return duration > 0; })) {\n element.style.animationDuration = '0s';\n }\n if (this.styles.transform !== null) {\n // getBoundingClientRect takes transforms into account\n element.style.transform = 'none';\n }\n }\n this.bounds = parseBounds(this.context, element);\n if (isDebugging(element, 4 /* RENDER */)) {\n this.flags |= 16 /* DEBUG_RENDER */;\n }\n }\n return ElementContainer;\n }());\n\n /*\n * text-segmentation 1.0.3 <https://github.com/niklasvh/text-segmentation>\n * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var base64 = 'AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA=';\n\n /*\n * utrie 1.0.2 <https://github.com/niklasvh/utrie>\n * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var chars$1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n // Use a lookup table to find the index.\n var lookup$1 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n for (var i$1 = 0; i$1 < chars$1.length; i$1++) {\n lookup$1[chars$1.charCodeAt(i$1)] = i$1;\n }\n var decode = function (base64) {\n var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n var buffer = typeof ArrayBuffer !== 'undefined' &&\n typeof Uint8Array !== 'undefined' &&\n typeof Uint8Array.prototype.slice !== 'undefined'\n ? new ArrayBuffer(bufferLength)\n : new Array(bufferLength);\n var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup$1[base64.charCodeAt(i)];\n encoded2 = lookup$1[base64.charCodeAt(i + 1)];\n encoded3 = lookup$1[base64.charCodeAt(i + 2)];\n encoded4 = lookup$1[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return buffer;\n };\n var polyUint16Array = function (buffer) {\n var length = buffer.length;\n var bytes = [];\n for (var i = 0; i < length; i += 2) {\n bytes.push((buffer[i + 1] << 8) | buffer[i]);\n }\n return bytes;\n };\n var polyUint32Array = function (buffer) {\n var length = buffer.length;\n var bytes = [];\n for (var i = 0; i < length; i += 4) {\n bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]);\n }\n return bytes;\n };\n\n /** Shift size for getting the index-2 table offset. */\n var UTRIE2_SHIFT_2 = 5;\n /** Shift size for getting the index-1 table offset. */\n var UTRIE2_SHIFT_1 = 6 + 5;\n /**\n * Shift size for shifting left the index array values.\n * Increases possible data size with 16-bit index values at the cost\n * of compactability.\n * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.\n */\n var UTRIE2_INDEX_SHIFT = 2;\n /**\n * Difference between the two shift sizes,\n * for getting an index-1 offset from an index-2 offset. 6=11-5\n */\n var UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2;\n /**\n * The part of the index-2 table for U+D800..U+DBFF stores values for\n * lead surrogate code _units_ not code _points_.\n * Values for lead surrogate code _points_ are indexed with this portion of the table.\n * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)\n */\n var UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2;\n /** Number of entries in a data block. 32=0x20 */\n var UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2;\n /** Mask for getting the lower bits for the in-data-block offset. */\n var UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1;\n var UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2;\n /** Count the lengths of both BMP pieces. 2080=0x820 */\n var UTRIE2_INDEX_2_BMP_LENGTH = UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH;\n /**\n * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.\n */\n var UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH;\n var UTRIE2_UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */\n /**\n * The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n * Variable length, for code points up to highStart, where the last single-value range starts.\n * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.\n * (For 0x100000 supplementary code points U+10000..U+10ffff.)\n *\n * The part of the index-2 table for supplementary code points starts\n * after this index-1 table.\n *\n * Both the index-1 table and the following part of the index-2 table\n * are omitted completely if there is only BMP data.\n */\n var UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH;\n /**\n * Number of index-1 entries for the BMP. 32=0x20\n * This part of the index-1 table is omitted from the serialized form.\n */\n var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1;\n /** Number of entries in an index-2 block. 64=0x40 */\n var UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2;\n /** Mask for getting the lower bits for the in-index-2-block offset. */\n var UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1;\n var slice16 = function (view, start, end) {\n if (view.slice) {\n return view.slice(start, end);\n }\n return new Uint16Array(Array.prototype.slice.call(view, start, end));\n };\n var slice32 = function (view, start, end) {\n if (view.slice) {\n return view.slice(start, end);\n }\n return new Uint32Array(Array.prototype.slice.call(view, start, end));\n };\n var createTrieFromBase64 = function (base64, _byteLength) {\n var buffer = decode(base64);\n var view32 = Array.isArray(buffer) ? polyUint32Array(buffer) : new Uint32Array(buffer);\n var view16 = Array.isArray(buffer) ? polyUint16Array(buffer) : new Uint16Array(buffer);\n var headerLength = 24;\n var index = slice16(view16, headerLength / 2, view32[4] / 2);\n var data = view32[5] === 2\n ? slice16(view16, (headerLength + view32[4]) / 2)\n : slice32(view32, Math.ceil((headerLength + view32[4]) / 4));\n return new Trie(view32[0], view32[1], view32[2], view32[3], index, data);\n };\n var Trie = /** @class */ (function () {\n function Trie(initialValue, errorValue, highStart, highValueIndex, index, data) {\n this.initialValue = initialValue;\n this.errorValue = errorValue;\n this.highStart = highStart;\n this.highValueIndex = highValueIndex;\n this.index = index;\n this.data = data;\n }\n /**\n * Get the value for a code point as stored in the Trie.\n *\n * @param codePoint the code point\n * @return the value\n */\n Trie.prototype.get = function (codePoint) {\n var ix;\n if (codePoint >= 0) {\n if (codePoint < 0x0d800 || (codePoint > 0x0dbff && codePoint <= 0x0ffff)) {\n // Ordinary BMP code point, excluding leading surrogates.\n // BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index.\n // 16 bit data is stored in the index array itself.\n ix = this.index[codePoint >> UTRIE2_SHIFT_2];\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n return this.data[ix];\n }\n if (codePoint <= 0xffff) {\n // Lead Surrogate Code Point. A Separate index section is stored for\n // lead surrogate code units and code points.\n // The main index has the code unit data.\n // For this function, we need the code point data.\n // Note: this expression could be refactored for slightly improved efficiency, but\n // surrogate code points will be so rare in practice that it's not worth it.\n ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2)];\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n return this.data[ix];\n }\n if (codePoint < this.highStart) {\n // Supplemental code point, use two-level lookup.\n ix = UTRIE2_INDEX_1_OFFSET - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> UTRIE2_SHIFT_1);\n ix = this.index[ix];\n ix += (codePoint >> UTRIE2_SHIFT_2) & UTRIE2_INDEX_2_MASK;\n ix = this.index[ix];\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n return this.data[ix];\n }\n if (codePoint <= 0x10ffff) {\n return this.data[this.highValueIndex];\n }\n }\n // Fall through. The code point is outside of the legal range of 0..0x10ffff.\n return this.errorValue;\n };\n return Trie;\n }());\n\n /*\n * base64-arraybuffer 1.0.2 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n // Use a lookup table to find the index.\n var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n for (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n }\n\n var Prepend = 1;\n var CR = 2;\n var LF = 3;\n var Control = 4;\n var Extend = 5;\n var SpacingMark = 7;\n var L = 8;\n var V = 9;\n var T = 10;\n var LV = 11;\n var LVT = 12;\n var ZWJ = 13;\n var Extended_Pictographic = 14;\n var RI = 15;\n var toCodePoints = function (str) {\n var codePoints = [];\n var i = 0;\n var length = str.length;\n while (i < length) {\n var value = str.charCodeAt(i++);\n if (value >= 0xd800 && value <= 0xdbff && i < length) {\n var extra = str.charCodeAt(i++);\n if ((extra & 0xfc00) === 0xdc00) {\n codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\n }\n else {\n codePoints.push(value);\n i--;\n }\n }\n else {\n codePoints.push(value);\n }\n }\n return codePoints;\n };\n var fromCodePoint = function () {\n var codePoints = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n codePoints[_i] = arguments[_i];\n }\n if (String.fromCodePoint) {\n return String.fromCodePoint.apply(String, codePoints);\n }\n var length = codePoints.length;\n if (!length) {\n return '';\n }\n var codeUnits = [];\n var index = -1;\n var result = '';\n while (++index < length) {\n var codePoint = codePoints[index];\n if (codePoint <= 0xffff) {\n codeUnits.push(codePoint);\n }\n else {\n codePoint -= 0x10000;\n codeUnits.push((codePoint >> 10) + 0xd800, (codePoint % 0x400) + 0xdc00);\n }\n if (index + 1 === length || codeUnits.length > 0x4000) {\n result += String.fromCharCode.apply(String, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n };\n var UnicodeTrie = createTrieFromBase64(base64);\n var BREAK_NOT_ALLOWED = '×';\n var BREAK_ALLOWED = '÷';\n var codePointToClass = function (codePoint) { return UnicodeTrie.get(codePoint); };\n var _graphemeBreakAtIndex = function (_codePoints, classTypes, index) {\n var prevIndex = index - 2;\n var prev = classTypes[prevIndex];\n var current = classTypes[index - 1];\n var next = classTypes[index];\n // GB3 Do not break between a CR and LF\n if (current === CR && next === LF) {\n return BREAK_NOT_ALLOWED;\n }\n // GB4 Otherwise, break before and after controls.\n if (current === CR || current === LF || current === Control) {\n return BREAK_ALLOWED;\n }\n // GB5\n if (next === CR || next === LF || next === Control) {\n return BREAK_ALLOWED;\n }\n // Do not break Hangul syllable sequences.\n // GB6\n if (current === L && [L, V, LV, LVT].indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED;\n }\n // GB7\n if ((current === LV || current === V) && (next === V || next === T)) {\n return BREAK_NOT_ALLOWED;\n }\n // GB8\n if ((current === LVT || current === T) && next === T) {\n return BREAK_NOT_ALLOWED;\n }\n // GB9 Do not break before extending characters or ZWJ.\n if (next === ZWJ || next === Extend) {\n return BREAK_NOT_ALLOWED;\n }\n // Do not break before SpacingMarks, or after Prepend characters.\n // GB9a\n if (next === SpacingMark) {\n return BREAK_NOT_ALLOWED;\n }\n // GB9a\n if (current === Prepend) {\n return BREAK_NOT_ALLOWED;\n }\n // GB11 Do not break within emoji modifier sequences or emoji zwj sequences.\n if (current === ZWJ && next === Extended_Pictographic) {\n while (prev === Extend) {\n prev = classTypes[--prevIndex];\n }\n if (prev === Extended_Pictographic) {\n return BREAK_NOT_ALLOWED;\n }\n }\n // GB12 Do not break within emoji flag sequences.\n // That is, do not break between regional indicator (RI) symbols\n // if there is an odd number of RI characters before the break point.\n if (current === RI && next === RI) {\n var countRI = 0;\n while (prev === RI) {\n countRI++;\n prev = classTypes[--prevIndex];\n }\n if (countRI % 2 === 0) {\n return BREAK_NOT_ALLOWED;\n }\n }\n return BREAK_ALLOWED;\n };\n var GraphemeBreaker = function (str) {\n var codePoints = toCodePoints(str);\n var length = codePoints.length;\n var index = 0;\n var lastEnd = 0;\n var classTypes = codePoints.map(codePointToClass);\n return {\n next: function () {\n if (index >= length) {\n return { done: true, value: null };\n }\n var graphemeBreak = BREAK_NOT_ALLOWED;\n while (index < length &&\n (graphemeBreak = _graphemeBreakAtIndex(codePoints, classTypes, ++index)) === BREAK_NOT_ALLOWED) { }\n if (graphemeBreak !== BREAK_NOT_ALLOWED || index === length) {\n var value = fromCodePoint.apply(null, codePoints.slice(lastEnd, index));\n lastEnd = index;\n return { value: value, done: false };\n }\n return { done: true, value: null };\n },\n };\n };\n var splitGraphemes = function (str) {\n var breaker = GraphemeBreaker(str);\n var graphemes = [];\n var bk;\n while (!(bk = breaker.next()).done) {\n if (bk.value) {\n graphemes.push(bk.value.slice());\n }\n }\n return graphemes;\n };\n\n var testRangeBounds = function (document) {\n var TEST_HEIGHT = 123;\n if (document.createRange) {\n var range = document.createRange();\n if (range.getBoundingClientRect) {\n var testElement = document.createElement('boundtest');\n testElement.style.height = TEST_HEIGHT + \"px\";\n testElement.style.display = 'block';\n document.body.appendChild(testElement);\n range.selectNode(testElement);\n var rangeBounds = range.getBoundingClientRect();\n var rangeHeight = Math.round(rangeBounds.height);\n document.body.removeChild(testElement);\n if (rangeHeight === TEST_HEIGHT) {\n return true;\n }\n }\n }\n return false;\n };\n var testIOSLineBreak = function (document) {\n var testElement = document.createElement('boundtest');\n testElement.style.width = '50px';\n testElement.style.display = 'block';\n testElement.style.fontSize = '12px';\n testElement.style.letterSpacing = '0px';\n testElement.style.wordSpacing = '0px';\n document.body.appendChild(testElement);\n var range = document.createRange();\n testElement.innerHTML = typeof ''.repeat === 'function' ? '👨'.repeat(10) : '';\n var node = testElement.firstChild;\n var textList = toCodePoints$1(node.data).map(function (i) { return fromCodePoint$1(i); });\n var offset = 0;\n var prev = {};\n // ios 13 does not handle range getBoundingClientRect line changes correctly #2177\n var supports = textList.every(function (text, i) {\n range.setStart(node, offset);\n range.setEnd(node, offset + text.length);\n var rect = range.getBoundingClientRect();\n offset += text.length;\n var boundAhead = rect.x > prev.x || rect.y > prev.y;\n prev = rect;\n if (i === 0) {\n return true;\n }\n return boundAhead;\n });\n document.body.removeChild(testElement);\n return supports;\n };\n var testCORS = function () { return typeof new Image().crossOrigin !== 'undefined'; };\n var testResponseType = function () { return typeof new XMLHttpRequest().responseType === 'string'; };\n var testSVG = function (document) {\n var img = new Image();\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (!ctx) {\n return false;\n }\n img.src = \"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>\";\n try {\n ctx.drawImage(img, 0, 0);\n canvas.toDataURL();\n }\n catch (e) {\n return false;\n }\n return true;\n };\n var isGreenPixel = function (data) {\n return data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255;\n };\n var testForeignObject = function (document) {\n var canvas = document.createElement('canvas');\n var size = 100;\n canvas.width = size;\n canvas.height = size;\n var ctx = canvas.getContext('2d');\n if (!ctx) {\n return Promise.reject(false);\n }\n ctx.fillStyle = 'rgb(0, 255, 0)';\n ctx.fillRect(0, 0, size, size);\n var img = new Image();\n var greenImageSrc = canvas.toDataURL();\n img.src = greenImageSrc;\n var svg = createForeignObjectSVG(size, size, 0, 0, img);\n ctx.fillStyle = 'red';\n ctx.fillRect(0, 0, size, size);\n return loadSerializedSVG$1(svg)\n .then(function (img) {\n ctx.drawImage(img, 0, 0);\n var data = ctx.getImageData(0, 0, size, size).data;\n ctx.fillStyle = 'red';\n ctx.fillRect(0, 0, size, size);\n var node = document.createElement('div');\n node.style.backgroundImage = \"url(\" + greenImageSrc + \")\";\n node.style.height = size + \"px\";\n // Firefox 55 does not render inline <img /> tags\n return isGreenPixel(data)\n ? loadSerializedSVG$1(createForeignObjectSVG(size, size, 0, 0, node))\n : Promise.reject(false);\n })\n .then(function (img) {\n ctx.drawImage(img, 0, 0);\n // Edge does not render background-images\n return isGreenPixel(ctx.getImageData(0, 0, size, size).data);\n })\n .catch(function () { return false; });\n };\n var createForeignObjectSVG = function (width, height, x, y, node) {\n var xmlns = 'http://www.w3.org/2000/svg';\n var svg = document.createElementNS(xmlns, 'svg');\n var foreignObject = document.createElementNS(xmlns, 'foreignObject');\n svg.setAttributeNS(null, 'width', width.toString());\n svg.setAttributeNS(null, 'height', height.toString());\n foreignObject.setAttributeNS(null, 'width', '100%');\n foreignObject.setAttributeNS(null, 'height', '100%');\n foreignObject.setAttributeNS(null, 'x', x.toString());\n foreignObject.setAttributeNS(null, 'y', y.toString());\n foreignObject.setAttributeNS(null, 'externalResourcesRequired', 'true');\n svg.appendChild(foreignObject);\n foreignObject.appendChild(node);\n return svg;\n };\n var loadSerializedSVG$1 = function (svg) {\n return new Promise(function (resolve, reject) {\n var img = new Image();\n img.onload = function () { return resolve(img); };\n img.onerror = reject;\n img.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(new XMLSerializer().serializeToString(svg));\n });\n };\n var FEATURES = {\n get SUPPORT_RANGE_BOUNDS() {\n var value = testRangeBounds(document);\n Object.defineProperty(FEATURES, 'SUPPORT_RANGE_BOUNDS', { value: value });\n return value;\n },\n get SUPPORT_WORD_BREAKING() {\n var value = FEATURES.SUPPORT_RANGE_BOUNDS && testIOSLineBreak(document);\n Object.defineProperty(FEATURES, 'SUPPORT_WORD_BREAKING', { value: value });\n return value;\n },\n get SUPPORT_SVG_DRAWING() {\n var value = testSVG(document);\n Object.defineProperty(FEATURES, 'SUPPORT_SVG_DRAWING', { value: value });\n return value;\n },\n get SUPPORT_FOREIGNOBJECT_DRAWING() {\n var value = typeof Array.from === 'function' && typeof window.fetch === 'function'\n ? testForeignObject(document)\n : Promise.resolve(false);\n Object.defineProperty(FEATURES, 'SUPPORT_FOREIGNOBJECT_DRAWING', { value: value });\n return value;\n },\n get SUPPORT_CORS_IMAGES() {\n var value = testCORS();\n Object.defineProperty(FEATURES, 'SUPPORT_CORS_IMAGES', { value: value });\n return value;\n },\n get SUPPORT_RESPONSE_TYPE() {\n var value = testResponseType();\n Object.defineProperty(FEATURES, 'SUPPORT_RESPONSE_TYPE', { value: value });\n return value;\n },\n get SUPPORT_CORS_XHR() {\n var value = 'withCredentials' in new XMLHttpRequest();\n Object.defineProperty(FEATURES, 'SUPPORT_CORS_XHR', { value: value });\n return value;\n },\n get SUPPORT_NATIVE_TEXT_SEGMENTATION() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = !!(typeof Intl !== 'undefined' && Intl.Segmenter);\n Object.defineProperty(FEATURES, 'SUPPORT_NATIVE_TEXT_SEGMENTATION', { value: value });\n return value;\n }\n };\n\n var TextBounds = /** @class */ (function () {\n function TextBounds(text, bounds) {\n this.text = text;\n this.bounds = bounds;\n }\n return TextBounds;\n }());\n var parseTextBounds = function (context, value, styles, node) {\n var textList = breakText(value, styles);\n var textBounds = [];\n var offset = 0;\n textList.forEach(function (text) {\n if (styles.textDecorationLine.length || text.trim().length > 0) {\n if (FEATURES.SUPPORT_RANGE_BOUNDS) {\n var clientRects = createRange(node, offset, text.length).getClientRects();\n if (clientRects.length > 1) {\n var subSegments = segmentGraphemes(text);\n var subOffset_1 = 0;\n subSegments.forEach(function (subSegment) {\n textBounds.push(new TextBounds(subSegment, Bounds.fromDOMRectList(context, createRange(node, subOffset_1 + offset, subSegment.length).getClientRects())));\n subOffset_1 += subSegment.length;\n });\n }\n else {\n textBounds.push(new TextBounds(text, Bounds.fromDOMRectList(context, clientRects)));\n }\n }\n else {\n var replacementNode = node.splitText(text.length);\n textBounds.push(new TextBounds(text, getWrapperBounds(context, node)));\n node = replacementNode;\n }\n }\n else if (!FEATURES.SUPPORT_RANGE_BOUNDS) {\n node = node.splitText(text.length);\n }\n offset += text.length;\n });\n return textBounds;\n };\n var getWrapperBounds = function (context, node) {\n var ownerDocument = node.ownerDocument;\n if (ownerDocument) {\n var wrapper = ownerDocument.createElement('html2canvaswrapper');\n wrapper.appendChild(node.cloneNode(true));\n var parentNode = node.parentNode;\n if (parentNode) {\n parentNode.replaceChild(wrapper, node);\n var bounds = parseBounds(context, wrapper);\n if (wrapper.firstChild) {\n parentNode.replaceChild(wrapper.firstChild, wrapper);\n }\n return bounds;\n }\n }\n return Bounds.EMPTY;\n };\n var createRange = function (node, offset, length) {\n var ownerDocument = node.ownerDocument;\n if (!ownerDocument) {\n throw new Error('Node has no owner document');\n }\n var range = ownerDocument.createRange();\n range.setStart(node, offset);\n range.setEnd(node, offset + length);\n return range;\n };\n var segmentGraphemes = function (value) {\n if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var segmenter = new Intl.Segmenter(void 0, { granularity: 'grapheme' });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return Array.from(segmenter.segment(value)).map(function (segment) { return segment.segment; });\n }\n return splitGraphemes(value);\n };\n var segmentWords = function (value, styles) {\n if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var segmenter = new Intl.Segmenter(void 0, {\n granularity: 'word'\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return Array.from(segmenter.segment(value)).map(function (segment) { return segment.segment; });\n }\n return breakWords(value, styles);\n };\n var breakText = function (value, styles) {\n return styles.letterSpacing !== 0 ? segmentGraphemes(value) : segmentWords(value, styles);\n };\n // https://drafts.csswg.org/css-text/#word-separator\n var wordSeparators = [0x0020, 0x00a0, 0x1361, 0x10100, 0x10101, 0x1039, 0x1091];\n var breakWords = function (str, styles) {\n var breaker = LineBreaker(str, {\n lineBreak: styles.lineBreak,\n wordBreak: styles.overflowWrap === \"break-word\" /* BREAK_WORD */ ? 'break-word' : styles.wordBreak\n });\n var words = [];\n var bk;\n var _loop_1 = function () {\n if (bk.value) {\n var value = bk.value.slice();\n var codePoints = toCodePoints$1(value);\n var word_1 = '';\n codePoints.forEach(function (codePoint) {\n if (wordSeparators.indexOf(codePoint) === -1) {\n word_1 += fromCodePoint$1(codePoint);\n }\n else {\n if (word_1.length) {\n words.push(word_1);\n }\n words.push(fromCodePoint$1(codePoint));\n word_1 = '';\n }\n });\n if (word_1.length) {\n words.push(word_1);\n }\n }\n };\n while (!(bk = breaker.next()).done) {\n _loop_1();\n }\n return words;\n };\n\n var TextContainer = /** @class */ (function () {\n function TextContainer(context, node, styles) {\n this.text = transform(node.data, styles.textTransform);\n this.textBounds = parseTextBounds(context, this.text, styles, node);\n }\n return TextContainer;\n }());\n var transform = function (text, transform) {\n switch (transform) {\n case 1 /* LOWERCASE */:\n return text.toLowerCase();\n case 3 /* CAPITALIZE */:\n return text.replace(CAPITALIZE, capitalize);\n case 2 /* UPPERCASE */:\n return text.toUpperCase();\n default:\n return text;\n }\n };\n var CAPITALIZE = /(^|\\s|:|-|\\(|\\))([a-z])/g;\n var capitalize = function (m, p1, p2) {\n if (m.length > 0) {\n return p1 + p2.toUpperCase();\n }\n return m;\n };\n\n var ImageElementContainer = /** @class */ (function (_super) {\n __extends(ImageElementContainer, _super);\n function ImageElementContainer(context, img) {\n var _this = _super.call(this, context, img) || this;\n _this.src = img.currentSrc || img.src;\n _this.intrinsicWidth = img.naturalWidth;\n _this.intrinsicHeight = img.naturalHeight;\n _this.context.cache.addImage(_this.src);\n return _this;\n }\n return ImageElementContainer;\n }(ElementContainer));\n\n var CanvasElementContainer = /** @class */ (function (_super) {\n __extends(CanvasElementContainer, _super);\n function CanvasElementContainer(context, canvas) {\n var _this = _super.call(this, context, canvas) || this;\n _this.canvas = canvas;\n _this.intrinsicWidth = canvas.width;\n _this.intrinsicHeight = canvas.height;\n return _this;\n }\n return CanvasElementContainer;\n }(ElementContainer));\n\n var SVGElementContainer = /** @class */ (function (_super) {\n __extends(SVGElementContainer, _super);\n function SVGElementContainer(context, img) {\n var _this = _super.call(this, context, img) || this;\n var s = new XMLSerializer();\n var bounds = parseBounds(context, img);\n img.setAttribute('width', bounds.width + \"px\");\n img.setAttribute('height', bounds.height + \"px\");\n _this.svg = \"data:image/svg+xml,\" + encodeURIComponent(s.serializeToString(img));\n _this.intrinsicWidth = img.width.baseVal.value;\n _this.intrinsicHeight = img.height.baseVal.value;\n _this.context.cache.addImage(_this.svg);\n return _this;\n }\n return SVGElementContainer;\n }(ElementContainer));\n\n var LIElementContainer = /** @class */ (function (_super) {\n __extends(LIElementContainer, _super);\n function LIElementContainer(context, element) {\n var _this = _super.call(this, context, element) || this;\n _this.value = element.value;\n return _this;\n }\n return LIElementContainer;\n }(ElementContainer));\n\n var OLElementContainer = /** @class */ (function (_super) {\n __extends(OLElementContainer, _super);\n function OLElementContainer(context, element) {\n var _this = _super.call(this, context, element) || this;\n _this.start = element.start;\n _this.reversed = typeof element.reversed === 'boolean' && element.reversed === true;\n return _this;\n }\n return OLElementContainer;\n }(ElementContainer));\n\n var CHECKBOX_BORDER_RADIUS = [\n {\n type: 15 /* DIMENSION_TOKEN */,\n flags: 0,\n unit: 'px',\n number: 3\n }\n ];\n var RADIO_BORDER_RADIUS = [\n {\n type: 16 /* PERCENTAGE_TOKEN */,\n flags: 0,\n number: 50\n }\n ];\n var reformatInputBounds = function (bounds) {\n if (bounds.width > bounds.height) {\n return new Bounds(bounds.left + (bounds.width - bounds.height) / 2, bounds.top, bounds.height, bounds.height);\n }\n else if (bounds.width < bounds.height) {\n return new Bounds(bounds.left, bounds.top + (bounds.height - bounds.width) / 2, bounds.width, bounds.width);\n }\n return bounds;\n };\n var getInputValue = function (node) {\n var value = node.type === PASSWORD ? new Array(node.value.length + 1).join('\\u2022') : node.value;\n return value.length === 0 ? node.placeholder || '' : value;\n };\n var CHECKBOX = 'checkbox';\n var RADIO = 'radio';\n var PASSWORD = 'password';\n var INPUT_COLOR = 0x2a2a2aff;\n var InputElementContainer = /** @class */ (function (_super) {\n __extends(InputElementContainer, _super);\n function InputElementContainer(context, input) {\n var _this = _super.call(this, context, input) || this;\n _this.type = input.type.toLowerCase();\n _this.checked = input.checked;\n _this.value = getInputValue(input);\n if (_this.type === CHECKBOX || _this.type === RADIO) {\n _this.styles.backgroundColor = 0xdededeff;\n _this.styles.borderTopColor =\n _this.styles.borderRightColor =\n _this.styles.borderBottomColor =\n _this.styles.borderLeftColor =\n 0xa5a5a5ff;\n _this.styles.borderTopWidth =\n _this.styles.borderRightWidth =\n _this.styles.borderBottomWidth =\n _this.styles.borderLeftWidth =\n 1;\n _this.styles.borderTopStyle =\n _this.styles.borderRightStyle =\n _this.styles.borderBottomStyle =\n _this.styles.borderLeftStyle =\n 1 /* SOLID */;\n _this.styles.backgroundClip = [0 /* BORDER_BOX */];\n _this.styles.backgroundOrigin = [0 /* BORDER_BOX */];\n _this.bounds = reformatInputBounds(_this.bounds);\n }\n switch (_this.type) {\n case CHECKBOX:\n _this.styles.borderTopRightRadius =\n _this.styles.borderTopLeftRadius =\n _this.styles.borderBottomRightRadius =\n _this.styles.borderBottomLeftRadius =\n CHECKBOX_BORDER_RADIUS;\n break;\n case RADIO:\n _this.styles.borderTopRightRadius =\n _this.styles.borderTopLeftRadius =\n _this.styles.borderBottomRightRadius =\n _this.styles.borderBottomLeftRadius =\n RADIO_BORDER_RADIUS;\n break;\n }\n return _this;\n }\n return InputElementContainer;\n }(ElementContainer));\n\n var SelectElementContainer = /** @class */ (function (_super) {\n __extends(SelectElementContainer, _super);\n function SelectElementContainer(context, element) {\n var _this = _super.call(this, context, element) || this;\n var option = element.options[element.selectedIndex || 0];\n _this.value = option ? option.text || '' : '';\n return _this;\n }\n return SelectElementContainer;\n }(ElementContainer));\n\n var TextareaElementContainer = /** @class */ (function (_super) {\n __extends(TextareaElementContainer, _super);\n function TextareaElementContainer(context, element) {\n var _this = _super.call(this, context, element) || this;\n _this.value = element.value;\n return _this;\n }\n return TextareaElementContainer;\n }(ElementContainer));\n\n var IFrameElementContainer = /** @class */ (function (_super) {\n __extends(IFrameElementContainer, _super);\n function IFrameElementContainer(context, iframe) {\n var _this = _super.call(this, context, iframe) || this;\n _this.src = iframe.src;\n _this.width = parseInt(iframe.width, 10) || 0;\n _this.height = parseInt(iframe.height, 10) || 0;\n _this.backgroundColor = _this.styles.backgroundColor;\n try {\n if (iframe.contentWindow &&\n iframe.contentWindow.document &&\n iframe.contentWindow.document.documentElement) {\n _this.tree = parseTree(context, iframe.contentWindow.document.documentElement);\n // http://www.w3.org/TR/css3-background/#special-backgrounds\n var documentBackgroundColor = iframe.contentWindow.document.documentElement\n ? parseColor(context, getComputedStyle(iframe.contentWindow.document.documentElement).backgroundColor)\n : COLORS.TRANSPARENT;\n var bodyBackgroundColor = iframe.contentWindow.document.body\n ? parseColor(context, getComputedStyle(iframe.contentWindow.document.body).backgroundColor)\n : COLORS.TRANSPARENT;\n _this.backgroundColor = isTransparent(documentBackgroundColor)\n ? isTransparent(bodyBackgroundColor)\n ? _this.styles.backgroundColor\n : bodyBackgroundColor\n : documentBackgroundColor;\n }\n }\n catch (e) { }\n return _this;\n }\n return IFrameElementContainer;\n }(ElementContainer));\n\n var LIST_OWNERS = ['OL', 'UL', 'MENU'];\n var parseNodeTree = function (context, node, parent, root) {\n for (var childNode = node.firstChild, nextNode = void 0; childNode; childNode = nextNode) {\n nextNode = childNode.nextSibling;\n if (isTextNode(childNode) && childNode.data.trim().length > 0) {\n parent.textNodes.push(new TextContainer(context, childNode, parent.styles));\n }\n else if (isElementNode(childNode)) {\n if (isSlotElement(childNode) && childNode.assignedNodes) {\n childNode.assignedNodes().forEach(function (childNode) { return parseNodeTree(context, childNode, parent, root); });\n }\n else {\n var container = createContainer(context, childNode);\n if (container.styles.isVisible()) {\n if (createsRealStackingContext(childNode, container, root)) {\n container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;\n }\n else if (createsStackingContext(container.styles)) {\n container.flags |= 2 /* CREATES_STACKING_CONTEXT */;\n }\n if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) {\n container.flags |= 8 /* IS_LIST_OWNER */;\n }\n parent.elements.push(container);\n childNode.slot;\n if (childNode.shadowRoot) {\n parseNodeTree(context, childNode.shadowRoot, container, root);\n }\n else if (!isTextareaElement(childNode) &&\n !isSVGElement(childNode) &&\n !isSelectElement(childNode)) {\n parseNodeTree(context, childNode, container, root);\n }\n }\n }\n }\n }\n };\n var createContainer = function (context, element) {\n if (isImageElement(element)) {\n return new ImageElementContainer(context, element);\n }\n if (isCanvasElement(element)) {\n return new CanvasElementContainer(context, element);\n }\n if (isSVGElement(element)) {\n return new SVGElementContainer(context, element);\n }\n if (isLIElement(element)) {\n return new LIElementContainer(context, element);\n }\n if (isOLElement(element)) {\n return new OLElementContainer(context, element);\n }\n if (isInputElement(element)) {\n return new InputElementContainer(context, element);\n }\n if (isSelectElement(element)) {\n return new SelectElementContainer(context, element);\n }\n if (isTextareaElement(element)) {\n return new TextareaElementContainer(context, element);\n }\n if (isIFrameElement(element)) {\n return new IFrameElementContainer(context, element);\n }\n return new ElementContainer(context, element);\n };\n var parseTree = function (context, element) {\n var container = createContainer(context, element);\n container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;\n parseNodeTree(context, element, container, container);\n return container;\n };\n var createsRealStackingContext = function (node, container, root) {\n return (container.styles.isPositionedWithZIndex() ||\n container.styles.opacity < 1 ||\n container.styles.isTransformed() ||\n (isBodyElement(node) && root.styles.isTransparent()));\n };\n var createsStackingContext = function (styles) { return styles.isPositioned() || styles.isFloating(); };\n var isTextNode = function (node) { return node.nodeType === Node.TEXT_NODE; };\n var isElementNode = function (node) { return node.nodeType === Node.ELEMENT_NODE; };\n var isHTMLElementNode = function (node) {\n return isElementNode(node) && typeof node.style !== 'undefined' && !isSVGElementNode(node);\n };\n var isSVGElementNode = function (element) {\n return typeof element.className === 'object';\n };\n var isLIElement = function (node) { return node.tagName === 'LI'; };\n var isOLElement = function (node) { return node.tagName === 'OL'; };\n var isInputElement = function (node) { return node.tagName === 'INPUT'; };\n var isHTMLElement = function (node) { return node.tagName === 'HTML'; };\n var isSVGElement = function (node) { return node.tagName === 'svg'; };\n var isBodyElement = function (node) { return node.tagName === 'BODY'; };\n var isCanvasElement = function (node) { return node.tagName === 'CANVAS'; };\n var isVideoElement = function (node) { return node.tagName === 'VIDEO'; };\n var isImageElement = function (node) { return node.tagName === 'IMG'; };\n var isIFrameElement = function (node) { return node.tagName === 'IFRAME'; };\n var isStyleElement = function (node) { return node.tagName === 'STYLE'; };\n var isScriptElement = function (node) { return node.tagName === 'SCRIPT'; };\n var isTextareaElement = function (node) { return node.tagName === 'TEXTAREA'; };\n var isSelectElement = function (node) { return node.tagName === 'SELECT'; };\n var isSlotElement = function (node) { return node.tagName === 'SLOT'; };\n // https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n var isCustomElement = function (node) { return node.tagName.indexOf('-') > 0; };\n\n var CounterState = /** @class */ (function () {\n function CounterState() {\n this.counters = {};\n }\n CounterState.prototype.getCounterValue = function (name) {\n var counter = this.counters[name];\n if (counter && counter.length) {\n return counter[counter.length - 1];\n }\n return 1;\n };\n CounterState.prototype.getCounterValues = function (name) {\n var counter = this.counters[name];\n return counter ? counter : [];\n };\n CounterState.prototype.pop = function (counters) {\n var _this = this;\n counters.forEach(function (counter) { return _this.counters[counter].pop(); });\n };\n CounterState.prototype.parse = function (style) {\n var _this = this;\n var counterIncrement = style.counterIncrement;\n var counterReset = style.counterReset;\n var canReset = true;\n if (counterIncrement !== null) {\n counterIncrement.forEach(function (entry) {\n var counter = _this.counters[entry.counter];\n if (counter && entry.increment !== 0) {\n canReset = false;\n if (!counter.length) {\n counter.push(1);\n }\n counter[Math.max(0, counter.length - 1)] += entry.increment;\n }\n });\n }\n var counterNames = [];\n if (canReset) {\n counterReset.forEach(function (entry) {\n var counter = _this.counters[entry.counter];\n counterNames.push(entry.counter);\n if (!counter) {\n counter = _this.counters[entry.counter] = [];\n }\n counter.push(entry.reset);\n });\n }\n return counterNames;\n };\n return CounterState;\n }());\n var ROMAN_UPPER = {\n integers: [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1],\n values: ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']\n };\n var ARMENIAN = {\n integers: [\n 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90, 80, 70,\n 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\n ],\n values: [\n 'Ք',\n 'Փ',\n 'Ւ',\n 'Ց',\n 'Ր',\n 'Տ',\n 'Վ',\n 'Ս',\n 'Ռ',\n 'Ջ',\n 'Պ',\n 'Չ',\n 'Ո',\n 'Շ',\n 'Ն',\n 'Յ',\n 'Մ',\n 'Ճ',\n 'Ղ',\n 'Ձ',\n 'Հ',\n 'Կ',\n 'Ծ',\n 'Խ',\n 'Լ',\n 'Ի',\n 'Ժ',\n 'Թ',\n 'Ը',\n 'Է',\n 'Զ',\n 'Ե',\n 'Դ',\n 'Գ',\n 'Բ',\n 'Ա'\n ]\n };\n var HEBREW = {\n integers: [\n 10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20,\n 19, 18, 17, 16, 15, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\n ],\n values: [\n 'י׳',\n 'ט׳',\n 'ח׳',\n 'ז׳',\n 'ו׳',\n 'ה׳',\n 'ד׳',\n 'ג׳',\n 'ב׳',\n 'א׳',\n 'ת',\n 'ש',\n 'ר',\n 'ק',\n 'צ',\n 'פ',\n 'ע',\n 'ס',\n 'נ',\n 'מ',\n 'ל',\n 'כ',\n 'יט',\n 'יח',\n 'יז',\n 'טז',\n 'טו',\n 'י',\n 'ט',\n 'ח',\n 'ז',\n 'ו',\n 'ה',\n 'ד',\n 'ג',\n 'ב',\n 'א'\n ]\n };\n var GEORGIAN = {\n integers: [\n 10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90,\n 80, 70, 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\n ],\n values: [\n 'ჵ',\n 'ჰ',\n 'ჯ',\n 'ჴ',\n 'ხ',\n 'ჭ',\n 'წ',\n 'ძ',\n 'ც',\n 'ჩ',\n 'შ',\n 'ყ',\n 'ღ',\n 'ქ',\n 'ფ',\n 'ჳ',\n 'ტ',\n 'ს',\n 'რ',\n 'ჟ',\n 'პ',\n 'ო',\n 'ჲ',\n 'ნ',\n 'მ',\n 'ლ',\n 'კ',\n 'ი',\n 'თ',\n 'ჱ',\n 'ზ',\n 'ვ',\n 'ე',\n 'დ',\n 'გ',\n 'ბ',\n 'ა'\n ]\n };\n var createAdditiveCounter = function (value, min, max, symbols, fallback, suffix) {\n if (value < min || value > max) {\n return createCounterText(value, fallback, suffix.length > 0);\n }\n return (symbols.integers.reduce(function (string, integer, index) {\n while (value >= integer) {\n value -= integer;\n string += symbols.values[index];\n }\n return string;\n }, '') + suffix);\n };\n var createCounterStyleWithSymbolResolver = function (value, codePointRangeLength, isNumeric, resolver) {\n var string = '';\n do {\n if (!isNumeric) {\n value--;\n }\n string = resolver(value) + string;\n value /= codePointRangeLength;\n } while (value * codePointRangeLength >= codePointRangeLength);\n return string;\n };\n var createCounterStyleFromRange = function (value, codePointRangeStart, codePointRangeEnd, isNumeric, suffix) {\n var codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1;\n return ((value < 0 ? '-' : '') +\n (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, isNumeric, function (codePoint) {\n return fromCodePoint$1(Math.floor(codePoint % codePointRangeLength) + codePointRangeStart);\n }) +\n suffix));\n };\n var createCounterStyleFromSymbols = function (value, symbols, suffix) {\n if (suffix === void 0) { suffix = '. '; }\n var codePointRangeLength = symbols.length;\n return (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, false, function (codePoint) { return symbols[Math.floor(codePoint % codePointRangeLength)]; }) + suffix);\n };\n var CJK_ZEROS = 1 << 0;\n var CJK_TEN_COEFFICIENTS = 1 << 1;\n var CJK_TEN_HIGH_COEFFICIENTS = 1 << 2;\n var CJK_HUNDRED_COEFFICIENTS = 1 << 3;\n var createCJKCounter = function (value, numbers, multipliers, negativeSign, suffix, flags) {\n if (value < -9999 || value > 9999) {\n return createCounterText(value, 4 /* CJK_DECIMAL */, suffix.length > 0);\n }\n var tmp = Math.abs(value);\n var string = suffix;\n if (tmp === 0) {\n return numbers[0] + string;\n }\n for (var digit = 0; tmp > 0 && digit <= 4; digit++) {\n var coefficient = tmp % 10;\n if (coefficient === 0 && contains(flags, CJK_ZEROS) && string !== '') {\n string = numbers[coefficient] + string;\n }\n else if (coefficient > 1 ||\n (coefficient === 1 && digit === 0) ||\n (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_COEFFICIENTS)) ||\n (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_HIGH_COEFFICIENTS) && value > 100) ||\n (coefficient === 1 && digit > 1 && contains(flags, CJK_HUNDRED_COEFFICIENTS))) {\n string = numbers[coefficient] + (digit > 0 ? multipliers[digit - 1] : '') + string;\n }\n else if (coefficient === 1 && digit > 0) {\n string = multipliers[digit - 1] + string;\n }\n tmp = Math.floor(tmp / 10);\n }\n return (value < 0 ? negativeSign : '') + string;\n };\n var CHINESE_INFORMAL_MULTIPLIERS = '十百千萬';\n var CHINESE_FORMAL_MULTIPLIERS = '拾佰仟萬';\n var JAPANESE_NEGATIVE = 'マイナス';\n var KOREAN_NEGATIVE = '마이너스';\n var createCounterText = function (value, type, appendSuffix) {\n var defaultSuffix = appendSuffix ? '. ' : '';\n var cjkSuffix = appendSuffix ? '、' : '';\n var koreanSuffix = appendSuffix ? ', ' : '';\n var spaceSuffix = appendSuffix ? ' ' : '';\n switch (type) {\n case 0 /* DISC */:\n return '•' + spaceSuffix;\n case 1 /* CIRCLE */:\n return '◦' + spaceSuffix;\n case 2 /* SQUARE */:\n return '◾' + spaceSuffix;\n case 5 /* DECIMAL_LEADING_ZERO */:\n var string = createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\n return string.length < 4 ? \"0\" + string : string;\n case 4 /* CJK_DECIMAL */:\n return createCounterStyleFromSymbols(value, '〇一二三四五六七八九', cjkSuffix);\n case 6 /* LOWER_ROMAN */:\n return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, 3 /* DECIMAL */, defaultSuffix).toLowerCase();\n case 7 /* UPPER_ROMAN */:\n return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, 3 /* DECIMAL */, defaultSuffix);\n case 8 /* LOWER_GREEK */:\n return createCounterStyleFromRange(value, 945, 969, false, defaultSuffix);\n case 9 /* LOWER_ALPHA */:\n return createCounterStyleFromRange(value, 97, 122, false, defaultSuffix);\n case 10 /* UPPER_ALPHA */:\n return createCounterStyleFromRange(value, 65, 90, false, defaultSuffix);\n case 11 /* ARABIC_INDIC */:\n return createCounterStyleFromRange(value, 1632, 1641, true, defaultSuffix);\n case 12 /* ARMENIAN */:\n case 49 /* UPPER_ARMENIAN */:\n return createAdditiveCounter(value, 1, 9999, ARMENIAN, 3 /* DECIMAL */, defaultSuffix);\n case 35 /* LOWER_ARMENIAN */:\n return createAdditiveCounter(value, 1, 9999, ARMENIAN, 3 /* DECIMAL */, defaultSuffix).toLowerCase();\n case 13 /* BENGALI */:\n return createCounterStyleFromRange(value, 2534, 2543, true, defaultSuffix);\n case 14 /* CAMBODIAN */:\n case 30 /* KHMER */:\n return createCounterStyleFromRange(value, 6112, 6121, true, defaultSuffix);\n case 15 /* CJK_EARTHLY_BRANCH */:\n return createCounterStyleFromSymbols(value, '子丑寅卯辰巳午未申酉戌亥', cjkSuffix);\n case 16 /* CJK_HEAVENLY_STEM */:\n return createCounterStyleFromSymbols(value, '甲乙丙丁戊己庚辛壬癸', cjkSuffix);\n case 17 /* CJK_IDEOGRAPHIC */:\n case 48 /* TRAD_CHINESE_INFORMAL */:\n return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\n case 47 /* TRAD_CHINESE_FORMAL */:\n return createCJKCounter(value, '零壹貳參肆伍陸柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\n case 42 /* SIMP_CHINESE_INFORMAL */:\n return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\n case 41 /* SIMP_CHINESE_FORMAL */:\n return createCJKCounter(value, '零壹贰叁肆伍陆柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\n case 26 /* JAPANESE_INFORMAL */:\n return createCJKCounter(value, '〇一二三四五六七八九', '十百千万', JAPANESE_NEGATIVE, cjkSuffix, 0);\n case 25 /* JAPANESE_FORMAL */:\n return createCJKCounter(value, '零壱弐参四伍六七八九', '拾百千万', JAPANESE_NEGATIVE, cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\n case 31 /* KOREAN_HANGUL_FORMAL */:\n return createCJKCounter(value, '영일이삼사오육칠팔구', '십백천만', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\n case 33 /* KOREAN_HANJA_INFORMAL */:\n return createCJKCounter(value, '零一二三四五六七八九', '十百千萬', KOREAN_NEGATIVE, koreanSuffix, 0);\n case 32 /* KOREAN_HANJA_FORMAL */:\n return createCJKCounter(value, '零壹貳參四五六七八九', '拾百千', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\n case 18 /* DEVANAGARI */:\n return createCounterStyleFromRange(value, 0x966, 0x96f, true, defaultSuffix);\n case 20 /* GEORGIAN */:\n return createAdditiveCounter(value, 1, 19999, GEORGIAN, 3 /* DECIMAL */, defaultSuffix);\n case 21 /* GUJARATI */:\n return createCounterStyleFromRange(value, 0xae6, 0xaef, true, defaultSuffix);\n case 22 /* GURMUKHI */:\n return createCounterStyleFromRange(value, 0xa66, 0xa6f, true, defaultSuffix);\n case 22 /* HEBREW */:\n return createAdditiveCounter(value, 1, 10999, HEBREW, 3 /* DECIMAL */, defaultSuffix);\n case 23 /* HIRAGANA */:\n return createCounterStyleFromSymbols(value, 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん');\n case 24 /* HIRAGANA_IROHA */:\n return createCounterStyleFromSymbols(value, 'いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす');\n case 27 /* KANNADA */:\n return createCounterStyleFromRange(value, 0xce6, 0xcef, true, defaultSuffix);\n case 28 /* KATAKANA */:\n return createCounterStyleFromSymbols(value, 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン', cjkSuffix);\n case 29 /* KATAKANA_IROHA */:\n return createCounterStyleFromSymbols(value, 'イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス', cjkSuffix);\n case 34 /* LAO */:\n return createCounterStyleFromRange(value, 0xed0, 0xed9, true, defaultSuffix);\n case 37 /* MONGOLIAN */:\n return createCounterStyleFromRange(value, 0x1810, 0x1819, true, defaultSuffix);\n case 38 /* MYANMAR */:\n return createCounterStyleFromRange(value, 0x1040, 0x1049, true, defaultSuffix);\n case 39 /* ORIYA */:\n return createCounterStyleFromRange(value, 0xb66, 0xb6f, true, defaultSuffix);\n case 40 /* PERSIAN */:\n return createCounterStyleFromRange(value, 0x6f0, 0x6f9, true, defaultSuffix);\n case 43 /* TAMIL */:\n return createCounterStyleFromRange(value, 0xbe6, 0xbef, true, defaultSuffix);\n case 44 /* TELUGU */:\n return createCounterStyleFromRange(value, 0xc66, 0xc6f, true, defaultSuffix);\n case 45 /* THAI */:\n return createCounterStyleFromRange(value, 0xe50, 0xe59, true, defaultSuffix);\n case 46 /* TIBETAN */:\n return createCounterStyleFromRange(value, 0xf20, 0xf29, true, defaultSuffix);\n case 3 /* DECIMAL */:\n default:\n return createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\n }\n };\n\n var IGNORE_ATTRIBUTE = 'data-html2canvas-ignore';\n var DocumentCloner = /** @class */ (function () {\n function DocumentCloner(context, element, options) {\n this.context = context;\n this.options = options;\n this.scrolledElements = [];\n this.referenceElement = element;\n this.counters = new CounterState();\n this.quoteDepth = 0;\n if (!element.ownerDocument) {\n throw new Error('Cloned element does not have an owner document');\n }\n this.documentElement = this.cloneNode(element.ownerDocument.documentElement, false);\n }\n DocumentCloner.prototype.toIFrame = function (ownerDocument, windowSize) {\n var _this = this;\n var iframe = createIFrameContainer(ownerDocument, windowSize);\n if (!iframe.contentWindow) {\n return Promise.reject(\"Unable to find iframe window\");\n }\n var scrollX = ownerDocument.defaultView.pageXOffset;\n var scrollY = ownerDocument.defaultView.pageYOffset;\n var cloneWindow = iframe.contentWindow;\n var documentClone = cloneWindow.document;\n /* Chrome doesn't detect relative background-images assigned in inline <style> sheets when fetched through getComputedStyle\n if window url is about:blank, we can assign the url to current by writing onto the document\n */\n var iframeLoad = iframeLoader(iframe).then(function () { return __awaiter(_this, void 0, void 0, function () {\n var onclone, referenceElement;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.scrolledElements.forEach(restoreNodeScroll);\n if (cloneWindow) {\n cloneWindow.scrollTo(windowSize.left, windowSize.top);\n if (/(iPad|iPhone|iPod)/g.test(navigator.userAgent) &&\n (cloneWindow.scrollY !== windowSize.top || cloneWindow.scrollX !== windowSize.left)) {\n this.context.logger.warn('Unable to restore scroll position for cloned document');\n this.context.windowBounds = this.context.windowBounds.add(cloneWindow.scrollX - windowSize.left, cloneWindow.scrollY - windowSize.top, 0, 0);\n }\n }\n onclone = this.options.onclone;\n referenceElement = this.clonedReferenceElement;\n if (typeof referenceElement === 'undefined') {\n return [2 /*return*/, Promise.reject(\"Error finding the \" + this.referenceElement.nodeName + \" in the cloned document\")];\n }\n if (!(documentClone.fonts && documentClone.fonts.ready)) return [3 /*break*/, 2];\n return [4 /*yield*/, documentClone.fonts.ready];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n if (!/(AppleWebKit)/g.test(navigator.userAgent)) return [3 /*break*/, 4];\n return [4 /*yield*/, imagesReady(documentClone)];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4:\n if (typeof onclone === 'function') {\n return [2 /*return*/, Promise.resolve()\n .then(function () { return onclone(documentClone, referenceElement); })\n .then(function () { return iframe; })];\n }\n return [2 /*return*/, iframe];\n }\n });\n }); });\n documentClone.open();\n documentClone.write(serializeDoctype(document.doctype) + \"<html></html>\");\n // Chrome scrolls the parent document for some reason after the write to the cloned window???\n restoreOwnerScroll(this.referenceElement.ownerDocument, scrollX, scrollY);\n documentClone.replaceChild(documentClone.adoptNode(this.documentElement), documentClone.documentElement);\n documentClone.close();\n return iframeLoad;\n };\n DocumentCloner.prototype.createElementClone = function (node) {\n if (isDebugging(node, 2 /* CLONE */)) {\n debugger;\n }\n if (isCanvasElement(node)) {\n return this.createCanvasClone(node);\n }\n if (isVideoElement(node)) {\n return this.createVideoClone(node);\n }\n if (isStyleElement(node)) {\n return this.createStyleClone(node);\n }\n var clone = node.cloneNode(false);\n if (isImageElement(clone)) {\n if (isImageElement(node) && node.currentSrc && node.currentSrc !== node.src) {\n clone.src = node.currentSrc;\n clone.srcset = '';\n }\n if (clone.loading === 'lazy') {\n clone.loading = 'eager';\n }\n }\n if (isCustomElement(clone)) {\n return this.createCustomElementClone(clone);\n }\n return clone;\n };\n DocumentCloner.prototype.createCustomElementClone = function (node) {\n var clone = document.createElement('html2canvascustomelement');\n copyCSSStyles(node.style, clone);\n return clone;\n };\n DocumentCloner.prototype.createStyleClone = function (node) {\n try {\n var sheet = node.sheet;\n if (sheet && sheet.cssRules) {\n var css = [].slice.call(sheet.cssRules, 0).reduce(function (css, rule) {\n if (rule && typeof rule.cssText === 'string') {\n return css + rule.cssText;\n }\n return css;\n }, '');\n var style = node.cloneNode(false);\n style.textContent = css;\n return style;\n }\n }\n catch (e) {\n // accessing node.sheet.cssRules throws a DOMException\n this.context.logger.error('Unable to access cssRules property', e);\n if (e.name !== 'SecurityError') {\n throw e;\n }\n }\n return node.cloneNode(false);\n };\n DocumentCloner.prototype.createCanvasClone = function (canvas) {\n var _a;\n if (this.options.inlineImages && canvas.ownerDocument) {\n var img = canvas.ownerDocument.createElement('img');\n try {\n img.src = canvas.toDataURL();\n return img;\n }\n catch (e) {\n this.context.logger.info(\"Unable to inline canvas contents, canvas is tainted\", canvas);\n }\n }\n var clonedCanvas = canvas.cloneNode(false);\n try {\n clonedCanvas.width = canvas.width;\n clonedCanvas.height = canvas.height;\n var ctx = canvas.getContext('2d');\n var clonedCtx = clonedCanvas.getContext('2d');\n if (clonedCtx) {\n if (!this.options.allowTaint && ctx) {\n clonedCtx.putImageData(ctx.getImageData(0, 0, canvas.width, canvas.height), 0, 0);\n }\n else {\n var gl = (_a = canvas.getContext('webgl2')) !== null && _a !== void 0 ? _a : canvas.getContext('webgl');\n if (gl) {\n var attribs = gl.getContextAttributes();\n if ((attribs === null || attribs === void 0 ? void 0 : attribs.preserveDrawingBuffer) === false) {\n this.context.logger.warn('Unable to clone WebGL context as it has preserveDrawingBuffer=false', canvas);\n }\n }\n clonedCtx.drawImage(canvas, 0, 0);\n }\n }\n return clonedCanvas;\n }\n catch (e) {\n this.context.logger.info(\"Unable to clone canvas as it is tainted\", canvas);\n }\n return clonedCanvas;\n };\n DocumentCloner.prototype.createVideoClone = function (video) {\n var canvas = video.ownerDocument.createElement('canvas');\n canvas.width = video.offsetWidth;\n canvas.height = video.offsetHeight;\n var ctx = canvas.getContext('2d');\n try {\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n if (!this.options.allowTaint) {\n ctx.getImageData(0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n catch (e) {\n this.context.logger.info(\"Unable to clone video as it is tainted\", video);\n }\n var blankCanvas = video.ownerDocument.createElement('canvas');\n blankCanvas.width = video.offsetWidth;\n blankCanvas.height = video.offsetHeight;\n return blankCanvas;\n };\n DocumentCloner.prototype.appendChildNode = function (clone, child, copyStyles) {\n if (!isElementNode(child) ||\n (!isScriptElement(child) &&\n !child.hasAttribute(IGNORE_ATTRIBUTE) &&\n (typeof this.options.ignoreElements !== 'function' || !this.options.ignoreElements(child)))) {\n if (!this.options.copyStyles || !isElementNode(child) || !isStyleElement(child)) {\n clone.appendChild(this.cloneNode(child, copyStyles));\n }\n }\n };\n DocumentCloner.prototype.cloneChildNodes = function (node, clone, copyStyles) {\n var _this = this;\n for (var child = node.shadowRoot ? node.shadowRoot.firstChild : node.firstChild; child; child = child.nextSibling) {\n if (isElementNode(child) && isSlotElement(child) && typeof child.assignedNodes === 'function') {\n var assignedNodes = child.assignedNodes();\n if (assignedNodes.length) {\n assignedNodes.forEach(function (assignedNode) { return _this.appendChildNode(clone, assignedNode, copyStyles); });\n }\n }\n else {\n this.appendChildNode(clone, child, copyStyles);\n }\n }\n };\n DocumentCloner.prototype.cloneNode = function (node, copyStyles) {\n if (isTextNode(node)) {\n return document.createTextNode(node.data);\n }\n if (!node.ownerDocument) {\n return node.cloneNode(false);\n }\n var window = node.ownerDocument.defaultView;\n if (window && isElementNode(node) && (isHTMLElementNode(node) || isSVGElementNode(node))) {\n var clone = this.createElementClone(node);\n clone.style.transitionProperty = 'none';\n var style = window.getComputedStyle(node);\n var styleBefore = window.getComputedStyle(node, ':before');\n var styleAfter = window.getComputedStyle(node, ':after');\n if (this.referenceElement === node && isHTMLElementNode(clone)) {\n this.clonedReferenceElement = clone;\n }\n if (isBodyElement(clone)) {\n createPseudoHideStyles(clone);\n }\n var counters = this.counters.parse(new CSSParsedCounterDeclaration(this.context, style));\n var before = this.resolvePseudoContent(node, clone, styleBefore, PseudoElementType.BEFORE);\n if (isCustomElement(node)) {\n copyStyles = true;\n }\n if (!isVideoElement(node)) {\n this.cloneChildNodes(node, clone, copyStyles);\n }\n if (before) {\n clone.insertBefore(before, clone.firstChild);\n }\n var after = this.resolvePseudoContent(node, clone, styleAfter, PseudoElementType.AFTER);\n if (after) {\n clone.appendChild(after);\n }\n this.counters.pop(counters);\n if ((style && (this.options.copyStyles || isSVGElementNode(node)) && !isIFrameElement(node)) ||\n copyStyles) {\n copyCSSStyles(style, clone);\n }\n if (node.scrollTop !== 0 || node.scrollLeft !== 0) {\n this.scrolledElements.push([clone, node.scrollLeft, node.scrollTop]);\n }\n if ((isTextareaElement(node) || isSelectElement(node)) &&\n (isTextareaElement(clone) || isSelectElement(clone))) {\n clone.value = node.value;\n }\n return clone;\n }\n return node.cloneNode(false);\n };\n DocumentCloner.prototype.resolvePseudoContent = function (node, clone, style, pseudoElt) {\n var _this = this;\n if (!style) {\n return;\n }\n var value = style.content;\n var document = clone.ownerDocument;\n if (!document || !value || value === 'none' || value === '-moz-alt-content' || style.display === 'none') {\n return;\n }\n this.counters.parse(new CSSParsedCounterDeclaration(this.context, style));\n var declaration = new CSSParsedPseudoDeclaration(this.context, style);\n var anonymousReplacedElement = document.createElement('html2canvaspseudoelement');\n copyCSSStyles(style, anonymousReplacedElement);\n declaration.content.forEach(function (token) {\n if (token.type === 0 /* STRING_TOKEN */) {\n anonymousReplacedElement.appendChild(document.createTextNode(token.value));\n }\n else if (token.type === 22 /* URL_TOKEN */) {\n var img = document.createElement('img');\n img.src = token.value;\n img.style.opacity = '1';\n anonymousReplacedElement.appendChild(img);\n }\n else if (token.type === 18 /* FUNCTION */) {\n if (token.name === 'attr') {\n var attr = token.values.filter(isIdentToken);\n if (attr.length) {\n anonymousReplacedElement.appendChild(document.createTextNode(node.getAttribute(attr[0].value) || ''));\n }\n }\n else if (token.name === 'counter') {\n var _a = token.values.filter(nonFunctionArgSeparator), counter = _a[0], counterStyle = _a[1];\n if (counter && isIdentToken(counter)) {\n var counterState = _this.counters.getCounterValue(counter.value);\n var counterType = counterStyle && isIdentToken(counterStyle)\n ? listStyleType.parse(_this.context, counterStyle.value)\n : 3 /* DECIMAL */;\n anonymousReplacedElement.appendChild(document.createTextNode(createCounterText(counterState, counterType, false)));\n }\n }\n else if (token.name === 'counters') {\n var _b = token.values.filter(nonFunctionArgSeparator), counter = _b[0], delim = _b[1], counterStyle = _b[2];\n if (counter && isIdentToken(counter)) {\n var counterStates = _this.counters.getCounterValues(counter.value);\n var counterType_1 = counterStyle && isIdentToken(counterStyle)\n ? listStyleType.parse(_this.context, counterStyle.value)\n : 3 /* DECIMAL */;\n var separator = delim && delim.type === 0 /* STRING_TOKEN */ ? delim.value : '';\n var text = counterStates\n .map(function (value) { return createCounterText(value, counterType_1, false); })\n .join(separator);\n anonymousReplacedElement.appendChild(document.createTextNode(text));\n }\n }\n else ;\n }\n else if (token.type === 20 /* IDENT_TOKEN */) {\n switch (token.value) {\n case 'open-quote':\n anonymousReplacedElement.appendChild(document.createTextNode(getQuote(declaration.quotes, _this.quoteDepth++, true)));\n break;\n case 'close-quote':\n anonymousReplacedElement.appendChild(document.createTextNode(getQuote(declaration.quotes, --_this.quoteDepth, false)));\n break;\n default:\n // safari doesn't parse string tokens correctly because of lack of quotes\n anonymousReplacedElement.appendChild(document.createTextNode(token.value));\n }\n }\n });\n anonymousReplacedElement.className = PSEUDO_HIDE_ELEMENT_CLASS_BEFORE + \" \" + PSEUDO_HIDE_ELEMENT_CLASS_AFTER;\n var newClassName = pseudoElt === PseudoElementType.BEFORE\n ? \" \" + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE\n : \" \" + PSEUDO_HIDE_ELEMENT_CLASS_AFTER;\n if (isSVGElementNode(clone)) {\n clone.className.baseValue += newClassName;\n }\n else {\n clone.className += newClassName;\n }\n return anonymousReplacedElement;\n };\n DocumentCloner.destroy = function (container) {\n if (container.parentNode) {\n container.parentNode.removeChild(container);\n return true;\n }\n return false;\n };\n return DocumentCloner;\n }());\n var PseudoElementType;\n (function (PseudoElementType) {\n PseudoElementType[PseudoElementType[\"BEFORE\"] = 0] = \"BEFORE\";\n PseudoElementType[PseudoElementType[\"AFTER\"] = 1] = \"AFTER\";\n })(PseudoElementType || (PseudoElementType = {}));\n var createIFrameContainer = function (ownerDocument, bounds) {\n var cloneIframeContainer = ownerDocument.createElement('iframe');\n cloneIframeContainer.className = 'html2canvas-container';\n cloneIframeContainer.style.visibility = 'hidden';\n cloneIframeContainer.style.position = 'fixed';\n cloneIframeContainer.style.left = '-10000px';\n cloneIframeContainer.style.top = '0px';\n cloneIframeContainer.style.border = '0';\n cloneIframeContainer.width = bounds.width.toString();\n cloneIframeContainer.height = bounds.height.toString();\n cloneIframeContainer.scrolling = 'no'; // ios won't scroll without it\n cloneIframeContainer.setAttribute(IGNORE_ATTRIBUTE, 'true');\n ownerDocument.body.appendChild(cloneIframeContainer);\n return cloneIframeContainer;\n };\n var imageReady = function (img) {\n return new Promise(function (resolve) {\n if (img.complete) {\n resolve();\n return;\n }\n if (!img.src) {\n resolve();\n return;\n }\n img.onload = resolve;\n img.onerror = resolve;\n });\n };\n var imagesReady = function (document) {\n return Promise.all([].slice.call(document.images, 0).map(imageReady));\n };\n var iframeLoader = function (iframe) {\n return new Promise(function (resolve, reject) {\n var cloneWindow = iframe.contentWindow;\n if (!cloneWindow) {\n return reject(\"No window assigned for iframe\");\n }\n var documentClone = cloneWindow.document;\n cloneWindow.onload = iframe.onload = function () {\n cloneWindow.onload = iframe.onload = null;\n var interval = setInterval(function () {\n if (documentClone.body.childNodes.length > 0 && documentClone.readyState === 'complete') {\n clearInterval(interval);\n resolve(iframe);\n }\n }, 50);\n };\n });\n };\n var ignoredStyleProperties = [\n 'all',\n 'd',\n 'content' // Safari shows pseudoelements if content is set\n ];\n var copyCSSStyles = function (style, target) {\n // Edge does not provide value for cssText\n for (var i = style.length - 1; i >= 0; i--) {\n var property = style.item(i);\n if (ignoredStyleProperties.indexOf(property) === -1) {\n target.style.setProperty(property, style.getPropertyValue(property));\n }\n }\n return target;\n };\n var serializeDoctype = function (doctype) {\n var str = '';\n if (doctype) {\n str += '<!DOCTYPE ';\n if (doctype.name) {\n str += doctype.name;\n }\n if (doctype.internalSubset) {\n str += doctype.internalSubset;\n }\n if (doctype.publicId) {\n str += \"\\\"\" + doctype.publicId + \"\\\"\";\n }\n if (doctype.systemId) {\n str += \"\\\"\" + doctype.systemId + \"\\\"\";\n }\n str += '>';\n }\n return str;\n };\n var restoreOwnerScroll = function (ownerDocument, x, y) {\n if (ownerDocument &&\n ownerDocument.defaultView &&\n (x !== ownerDocument.defaultView.pageXOffset || y !== ownerDocument.defaultView.pageYOffset)) {\n ownerDocument.defaultView.scrollTo(x, y);\n }\n };\n var restoreNodeScroll = function (_a) {\n var element = _a[0], x = _a[1], y = _a[2];\n element.scrollLeft = x;\n element.scrollTop = y;\n };\n var PSEUDO_BEFORE = ':before';\n var PSEUDO_AFTER = ':after';\n var PSEUDO_HIDE_ELEMENT_CLASS_BEFORE = '___html2canvas___pseudoelement_before';\n var PSEUDO_HIDE_ELEMENT_CLASS_AFTER = '___html2canvas___pseudoelement_after';\n var PSEUDO_HIDE_ELEMENT_STYLE = \"{\\n content: \\\"\\\" !important;\\n display: none !important;\\n}\";\n var createPseudoHideStyles = function (body) {\n createStyles(body, \".\" + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE + PSEUDO_BEFORE + PSEUDO_HIDE_ELEMENT_STYLE + \"\\n .\" + PSEUDO_HIDE_ELEMENT_CLASS_AFTER + PSEUDO_AFTER + PSEUDO_HIDE_ELEMENT_STYLE);\n };\n var createStyles = function (body, styles) {\n var document = body.ownerDocument;\n if (document) {\n var style = document.createElement('style');\n style.textContent = styles;\n body.appendChild(style);\n }\n };\n\n var CacheStorage = /** @class */ (function () {\n function CacheStorage() {\n }\n CacheStorage.getOrigin = function (url) {\n var link = CacheStorage._link;\n if (!link) {\n return 'about:blank';\n }\n link.href = url;\n link.href = link.href; // IE9, LOL! - http://jsfiddle.net/niklasvh/2e48b/\n return link.protocol + link.hostname + link.port;\n };\n CacheStorage.isSameOrigin = function (src) {\n return CacheStorage.getOrigin(src) === CacheStorage._origin;\n };\n CacheStorage.setContext = function (window) {\n CacheStorage._link = window.document.createElement('a');\n CacheStorage._origin = CacheStorage.getOrigin(window.location.href);\n };\n CacheStorage._origin = 'about:blank';\n return CacheStorage;\n }());\n var Cache = /** @class */ (function () {\n function Cache(context, _options) {\n this.context = context;\n this._options = _options;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this._cache = {};\n }\n Cache.prototype.addImage = function (src) {\n var result = Promise.resolve();\n if (this.has(src)) {\n return result;\n }\n if (isBlobImage(src) || isRenderable(src)) {\n (this._cache[src] = this.loadImage(src)).catch(function () {\n // prevent unhandled rejection\n });\n return result;\n }\n return result;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Cache.prototype.match = function (src) {\n return this._cache[src];\n };\n Cache.prototype.loadImage = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n var isSameOrigin, useCORS, useProxy, src;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n isSameOrigin = CacheStorage.isSameOrigin(key);\n useCORS = !isInlineImage(key) && this._options.useCORS === true && FEATURES.SUPPORT_CORS_IMAGES && !isSameOrigin;\n useProxy = !isInlineImage(key) &&\n !isSameOrigin &&\n !isBlobImage(key) &&\n typeof this._options.proxy === 'string' &&\n FEATURES.SUPPORT_CORS_XHR &&\n !useCORS;\n if (!isSameOrigin &&\n this._options.allowTaint === false &&\n !isInlineImage(key) &&\n !isBlobImage(key) &&\n !useProxy &&\n !useCORS) {\n return [2 /*return*/];\n }\n src = key;\n if (!useProxy) return [3 /*break*/, 2];\n return [4 /*yield*/, this.proxy(src)];\n case 1:\n src = _a.sent();\n _a.label = 2;\n case 2:\n this.context.logger.debug(\"Added image \" + key.substring(0, 256));\n return [4 /*yield*/, new Promise(function (resolve, reject) {\n var img = new Image();\n img.onload = function () { return resolve(img); };\n img.onerror = reject;\n //ios safari 10.3 taints canvas with data urls unless crossOrigin is set to anonymous\n if (isInlineBase64Image(src) || useCORS) {\n img.crossOrigin = 'anonymous';\n }\n img.src = src;\n if (img.complete === true) {\n // Inline XML images may fail to parse, throwing an Error later on\n setTimeout(function () { return resolve(img); }, 500);\n }\n if (_this._options.imageTimeout > 0) {\n setTimeout(function () { return reject(\"Timed out (\" + _this._options.imageTimeout + \"ms) loading image\"); }, _this._options.imageTimeout);\n }\n })];\n case 3: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n Cache.prototype.has = function (key) {\n return typeof this._cache[key] !== 'undefined';\n };\n Cache.prototype.keys = function () {\n return Promise.resolve(Object.keys(this._cache));\n };\n Cache.prototype.proxy = function (src) {\n var _this = this;\n var proxy = this._options.proxy;\n if (!proxy) {\n throw new Error('No proxy defined');\n }\n var key = src.substring(0, 256);\n return new Promise(function (resolve, reject) {\n var responseType = FEATURES.SUPPORT_RESPONSE_TYPE ? 'blob' : 'text';\n var xhr = new XMLHttpRequest();\n xhr.onload = function () {\n if (xhr.status === 200) {\n if (responseType === 'text') {\n resolve(xhr.response);\n }\n else {\n var reader_1 = new FileReader();\n reader_1.addEventListener('load', function () { return resolve(reader_1.result); }, false);\n reader_1.addEventListener('error', function (e) { return reject(e); }, false);\n reader_1.readAsDataURL(xhr.response);\n }\n }\n else {\n reject(\"Failed to proxy resource \" + key + \" with status code \" + xhr.status);\n }\n };\n xhr.onerror = reject;\n var queryString = proxy.indexOf('?') > -1 ? '&' : '?';\n xhr.open('GET', \"\" + proxy + queryString + \"url=\" + encodeURIComponent(src) + \"&responseType=\" + responseType);\n if (responseType !== 'text' && xhr instanceof XMLHttpRequest) {\n xhr.responseType = responseType;\n }\n if (_this._options.imageTimeout) {\n var timeout_1 = _this._options.imageTimeout;\n xhr.timeout = timeout_1;\n xhr.ontimeout = function () { return reject(\"Timed out (\" + timeout_1 + \"ms) proxying \" + key); };\n }\n xhr.send();\n });\n };\n return Cache;\n }());\n var INLINE_SVG = /^data:image\\/svg\\+xml/i;\n var INLINE_BASE64 = /^data:image\\/.*;base64,/i;\n var INLINE_IMG = /^data:image\\/.*/i;\n var isRenderable = function (src) { return FEATURES.SUPPORT_SVG_DRAWING || !isSVG(src); };\n var isInlineImage = function (src) { return INLINE_IMG.test(src); };\n var isInlineBase64Image = function (src) { return INLINE_BASE64.test(src); };\n var isBlobImage = function (src) { return src.substr(0, 4) === 'blob'; };\n var isSVG = function (src) { return src.substr(-3).toLowerCase() === 'svg' || INLINE_SVG.test(src); };\n\n var Vector = /** @class */ (function () {\n function Vector(x, y) {\n this.type = 0 /* VECTOR */;\n this.x = x;\n this.y = y;\n }\n Vector.prototype.add = function (deltaX, deltaY) {\n return new Vector(this.x + deltaX, this.y + deltaY);\n };\n return Vector;\n }());\n\n var lerp = function (a, b, t) {\n return new Vector(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t);\n };\n var BezierCurve = /** @class */ (function () {\n function BezierCurve(start, startControl, endControl, end) {\n this.type = 1 /* BEZIER_CURVE */;\n this.start = start;\n this.startControl = startControl;\n this.endControl = endControl;\n this.end = end;\n }\n BezierCurve.prototype.subdivide = function (t, firstHalf) {\n var ab = lerp(this.start, this.startControl, t);\n var bc = lerp(this.startControl, this.endControl, t);\n var cd = lerp(this.endControl, this.end, t);\n var abbc = lerp(ab, bc, t);\n var bccd = lerp(bc, cd, t);\n var dest = lerp(abbc, bccd, t);\n return firstHalf ? new BezierCurve(this.start, ab, abbc, dest) : new BezierCurve(dest, bccd, cd, this.end);\n };\n BezierCurve.prototype.add = function (deltaX, deltaY) {\n return new BezierCurve(this.start.add(deltaX, deltaY), this.startControl.add(deltaX, deltaY), this.endControl.add(deltaX, deltaY), this.end.add(deltaX, deltaY));\n };\n BezierCurve.prototype.reverse = function () {\n return new BezierCurve(this.end, this.endControl, this.startControl, this.start);\n };\n return BezierCurve;\n }());\n var isBezierCurve = function (path) { return path.type === 1 /* BEZIER_CURVE */; };\n\n var BoundCurves = /** @class */ (function () {\n function BoundCurves(element) {\n var styles = element.styles;\n var bounds = element.bounds;\n var _a = getAbsoluteValueForTuple(styles.borderTopLeftRadius, bounds.width, bounds.height), tlh = _a[0], tlv = _a[1];\n var _b = getAbsoluteValueForTuple(styles.borderTopRightRadius, bounds.width, bounds.height), trh = _b[0], trv = _b[1];\n var _c = getAbsoluteValueForTuple(styles.borderBottomRightRadius, bounds.width, bounds.height), brh = _c[0], brv = _c[1];\n var _d = getAbsoluteValueForTuple(styles.borderBottomLeftRadius, bounds.width, bounds.height), blh = _d[0], blv = _d[1];\n var factors = [];\n factors.push((tlh + trh) / bounds.width);\n factors.push((blh + brh) / bounds.width);\n factors.push((tlv + blv) / bounds.height);\n factors.push((trv + brv) / bounds.height);\n var maxFactor = Math.max.apply(Math, factors);\n if (maxFactor > 1) {\n tlh /= maxFactor;\n tlv /= maxFactor;\n trh /= maxFactor;\n trv /= maxFactor;\n brh /= maxFactor;\n brv /= maxFactor;\n blh /= maxFactor;\n blv /= maxFactor;\n }\n var topWidth = bounds.width - trh;\n var rightHeight = bounds.height - brv;\n var bottomWidth = bounds.width - brh;\n var leftHeight = bounds.height - blv;\n var borderTopWidth = styles.borderTopWidth;\n var borderRightWidth = styles.borderRightWidth;\n var borderBottomWidth = styles.borderBottomWidth;\n var borderLeftWidth = styles.borderLeftWidth;\n var paddingTop = getAbsoluteValue(styles.paddingTop, element.bounds.width);\n var paddingRight = getAbsoluteValue(styles.paddingRight, element.bounds.width);\n var paddingBottom = getAbsoluteValue(styles.paddingBottom, element.bounds.width);\n var paddingLeft = getAbsoluteValue(styles.paddingLeft, element.bounds.width);\n this.topLeftBorderDoubleOuterBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth / 3, bounds.top + borderTopWidth / 3, tlh - borderLeftWidth / 3, tlv - borderTopWidth / 3, CORNER.TOP_LEFT)\n : new Vector(bounds.left + borderLeftWidth / 3, bounds.top + borderTopWidth / 3);\n this.topRightBorderDoubleOuterBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + topWidth, bounds.top + borderTopWidth / 3, trh - borderRightWidth / 3, trv - borderTopWidth / 3, CORNER.TOP_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth / 3, bounds.top + borderTopWidth / 3);\n this.bottomRightBorderDoubleOuterBox =\n brh > 0 || brv > 0\n ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - borderRightWidth / 3, brv - borderBottomWidth / 3, CORNER.BOTTOM_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth / 3, bounds.top + bounds.height - borderBottomWidth / 3);\n this.bottomLeftBorderDoubleOuterBox =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth / 3, bounds.top + leftHeight, blh - borderLeftWidth / 3, blv - borderBottomWidth / 3, CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left + borderLeftWidth / 3, bounds.top + bounds.height - borderBottomWidth / 3);\n this.topLeftBorderDoubleInnerBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + (borderTopWidth * 2) / 3, tlh - (borderLeftWidth * 2) / 3, tlv - (borderTopWidth * 2) / 3, CORNER.TOP_LEFT)\n : new Vector(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + (borderTopWidth * 2) / 3);\n this.topRightBorderDoubleInnerBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + topWidth, bounds.top + (borderTopWidth * 2) / 3, trh - (borderRightWidth * 2) / 3, trv - (borderTopWidth * 2) / 3, CORNER.TOP_RIGHT)\n : new Vector(bounds.left + bounds.width - (borderRightWidth * 2) / 3, bounds.top + (borderTopWidth * 2) / 3);\n this.bottomRightBorderDoubleInnerBox =\n brh > 0 || brv > 0\n ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - (borderRightWidth * 2) / 3, brv - (borderBottomWidth * 2) / 3, CORNER.BOTTOM_RIGHT)\n : new Vector(bounds.left + bounds.width - (borderRightWidth * 2) / 3, bounds.top + bounds.height - (borderBottomWidth * 2) / 3);\n this.bottomLeftBorderDoubleInnerBox =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + leftHeight, blh - (borderLeftWidth * 2) / 3, blv - (borderBottomWidth * 2) / 3, CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + bounds.height - (borderBottomWidth * 2) / 3);\n this.topLeftBorderStroke =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth / 2, bounds.top + borderTopWidth / 2, tlh - borderLeftWidth / 2, tlv - borderTopWidth / 2, CORNER.TOP_LEFT)\n : new Vector(bounds.left + borderLeftWidth / 2, bounds.top + borderTopWidth / 2);\n this.topRightBorderStroke =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + topWidth, bounds.top + borderTopWidth / 2, trh - borderRightWidth / 2, trv - borderTopWidth / 2, CORNER.TOP_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth / 2, bounds.top + borderTopWidth / 2);\n this.bottomRightBorderStroke =\n brh > 0 || brv > 0\n ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - borderRightWidth / 2, brv - borderBottomWidth / 2, CORNER.BOTTOM_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth / 2, bounds.top + bounds.height - borderBottomWidth / 2);\n this.bottomLeftBorderStroke =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth / 2, bounds.top + leftHeight, blh - borderLeftWidth / 2, blv - borderBottomWidth / 2, CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left + borderLeftWidth / 2, bounds.top + bounds.height - borderBottomWidth / 2);\n this.topLeftBorderBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left, bounds.top, tlh, tlv, CORNER.TOP_LEFT)\n : new Vector(bounds.left, bounds.top);\n this.topRightBorderBox =\n trh > 0 || trv > 0\n ? getCurvePoints(bounds.left + topWidth, bounds.top, trh, trv, CORNER.TOP_RIGHT)\n : new Vector(bounds.left + bounds.width, bounds.top);\n this.bottomRightBorderBox =\n brh > 0 || brv > 0\n ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh, brv, CORNER.BOTTOM_RIGHT)\n : new Vector(bounds.left + bounds.width, bounds.top + bounds.height);\n this.bottomLeftBorderBox =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left, bounds.top + leftHeight, blh, blv, CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left, bounds.top + bounds.height);\n this.topLeftPaddingBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth, bounds.top + borderTopWidth, Math.max(0, tlh - borderLeftWidth), Math.max(0, tlv - borderTopWidth), CORNER.TOP_LEFT)\n : new Vector(bounds.left + borderLeftWidth, bounds.top + borderTopWidth);\n this.topRightPaddingBox =\n trh > 0 || trv > 0\n ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width - borderRightWidth), bounds.top + borderTopWidth, topWidth > bounds.width + borderRightWidth ? 0 : Math.max(0, trh - borderRightWidth), Math.max(0, trv - borderTopWidth), CORNER.TOP_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth, bounds.top + borderTopWidth);\n this.bottomRightPaddingBox =\n brh > 0 || brv > 0\n ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - borderLeftWidth), bounds.top + Math.min(rightHeight, bounds.height - borderBottomWidth), Math.max(0, brh - borderRightWidth), Math.max(0, brv - borderBottomWidth), CORNER.BOTTOM_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth, bounds.top + bounds.height - borderBottomWidth);\n this.bottomLeftPaddingBox =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth, bounds.top + Math.min(leftHeight, bounds.height - borderBottomWidth), Math.max(0, blh - borderLeftWidth), Math.max(0, blv - borderBottomWidth), CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left + borderLeftWidth, bounds.top + bounds.height - borderBottomWidth);\n this.topLeftContentBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth + paddingLeft, bounds.top + borderTopWidth + paddingTop, Math.max(0, tlh - (borderLeftWidth + paddingLeft)), Math.max(0, tlv - (borderTopWidth + paddingTop)), CORNER.TOP_LEFT)\n : new Vector(bounds.left + borderLeftWidth + paddingLeft, bounds.top + borderTopWidth + paddingTop);\n this.topRightContentBox =\n trh > 0 || trv > 0\n ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width + borderLeftWidth + paddingLeft), bounds.top + borderTopWidth + paddingTop, topWidth > bounds.width + borderLeftWidth + paddingLeft ? 0 : trh - borderLeftWidth + paddingLeft, trv - (borderTopWidth + paddingTop), CORNER.TOP_RIGHT)\n : new Vector(bounds.left + bounds.width - (borderRightWidth + paddingRight), bounds.top + borderTopWidth + paddingTop);\n this.bottomRightContentBox =\n brh > 0 || brv > 0\n ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - (borderLeftWidth + paddingLeft)), bounds.top + Math.min(rightHeight, bounds.height + borderTopWidth + paddingTop), Math.max(0, brh - (borderRightWidth + paddingRight)), brv - (borderBottomWidth + paddingBottom), CORNER.BOTTOM_RIGHT)\n : new Vector(bounds.left + bounds.width - (borderRightWidth + paddingRight), bounds.top + bounds.height - (borderBottomWidth + paddingBottom));\n this.bottomLeftContentBox =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth + paddingLeft, bounds.top + leftHeight, Math.max(0, blh - (borderLeftWidth + paddingLeft)), blv - (borderBottomWidth + paddingBottom), CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left + borderLeftWidth + paddingLeft, bounds.top + bounds.height - (borderBottomWidth + paddingBottom));\n }\n return BoundCurves;\n }());\n var CORNER;\n (function (CORNER) {\n CORNER[CORNER[\"TOP_LEFT\"] = 0] = \"TOP_LEFT\";\n CORNER[CORNER[\"TOP_RIGHT\"] = 1] = \"TOP_RIGHT\";\n CORNER[CORNER[\"BOTTOM_RIGHT\"] = 2] = \"BOTTOM_RIGHT\";\n CORNER[CORNER[\"BOTTOM_LEFT\"] = 3] = \"BOTTOM_LEFT\";\n })(CORNER || (CORNER = {}));\n var getCurvePoints = function (x, y, r1, r2, position) {\n var kappa = 4 * ((Math.sqrt(2) - 1) / 3);\n var ox = r1 * kappa; // control point offset horizontal\n var oy = r2 * kappa; // control point offset vertical\n var xm = x + r1; // x-middle\n var ym = y + r2; // y-middle\n switch (position) {\n case CORNER.TOP_LEFT:\n return new BezierCurve(new Vector(x, ym), new Vector(x, ym - oy), new Vector(xm - ox, y), new Vector(xm, y));\n case CORNER.TOP_RIGHT:\n return new BezierCurve(new Vector(x, y), new Vector(x + ox, y), new Vector(xm, ym - oy), new Vector(xm, ym));\n case CORNER.BOTTOM_RIGHT:\n return new BezierCurve(new Vector(xm, y), new Vector(xm, y + oy), new Vector(x + ox, ym), new Vector(x, ym));\n case CORNER.BOTTOM_LEFT:\n default:\n return new BezierCurve(new Vector(xm, ym), new Vector(xm - ox, ym), new Vector(x, y + oy), new Vector(x, y));\n }\n };\n var calculateBorderBoxPath = function (curves) {\n return [curves.topLeftBorderBox, curves.topRightBorderBox, curves.bottomRightBorderBox, curves.bottomLeftBorderBox];\n };\n var calculateContentBoxPath = function (curves) {\n return [\n curves.topLeftContentBox,\n curves.topRightContentBox,\n curves.bottomRightContentBox,\n curves.bottomLeftContentBox\n ];\n };\n var calculatePaddingBoxPath = function (curves) {\n return [\n curves.topLeftPaddingBox,\n curves.topRightPaddingBox,\n curves.bottomRightPaddingBox,\n curves.bottomLeftPaddingBox\n ];\n };\n\n var TransformEffect = /** @class */ (function () {\n function TransformEffect(offsetX, offsetY, matrix) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n this.matrix = matrix;\n this.type = 0 /* TRANSFORM */;\n this.target = 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */;\n }\n return TransformEffect;\n }());\n var ClipEffect = /** @class */ (function () {\n function ClipEffect(path, target) {\n this.path = path;\n this.target = target;\n this.type = 1 /* CLIP */;\n }\n return ClipEffect;\n }());\n var OpacityEffect = /** @class */ (function () {\n function OpacityEffect(opacity) {\n this.opacity = opacity;\n this.type = 2 /* OPACITY */;\n this.target = 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */;\n }\n return OpacityEffect;\n }());\n var isTransformEffect = function (effect) {\n return effect.type === 0 /* TRANSFORM */;\n };\n var isClipEffect = function (effect) { return effect.type === 1 /* CLIP */; };\n var isOpacityEffect = function (effect) { return effect.type === 2 /* OPACITY */; };\n\n var equalPath = function (a, b) {\n if (a.length === b.length) {\n return a.some(function (v, i) { return v === b[i]; });\n }\n return false;\n };\n var transformPath = function (path, deltaX, deltaY, deltaW, deltaH) {\n return path.map(function (point, index) {\n switch (index) {\n case 0:\n return point.add(deltaX, deltaY);\n case 1:\n return point.add(deltaX + deltaW, deltaY);\n case 2:\n return point.add(deltaX + deltaW, deltaY + deltaH);\n case 3:\n return point.add(deltaX, deltaY + deltaH);\n }\n return point;\n });\n };\n\n var StackingContext = /** @class */ (function () {\n function StackingContext(container) {\n this.element = container;\n this.inlineLevel = [];\n this.nonInlineLevel = [];\n this.negativeZIndex = [];\n this.zeroOrAutoZIndexOrTransformedOrOpacity = [];\n this.positiveZIndex = [];\n this.nonPositionedFloats = [];\n this.nonPositionedInlineLevel = [];\n }\n return StackingContext;\n }());\n var ElementPaint = /** @class */ (function () {\n function ElementPaint(container, parent) {\n this.container = container;\n this.parent = parent;\n this.effects = [];\n this.curves = new BoundCurves(this.container);\n if (this.container.styles.opacity < 1) {\n this.effects.push(new OpacityEffect(this.container.styles.opacity));\n }\n if (this.container.styles.transform !== null) {\n var offsetX = this.container.bounds.left + this.container.styles.transformOrigin[0].number;\n var offsetY = this.container.bounds.top + this.container.styles.transformOrigin[1].number;\n var matrix = this.container.styles.transform;\n this.effects.push(new TransformEffect(offsetX, offsetY, matrix));\n }\n if (this.container.styles.overflowX !== 0 /* VISIBLE */) {\n var borderBox = calculateBorderBoxPath(this.curves);\n var paddingBox = calculatePaddingBoxPath(this.curves);\n if (equalPath(borderBox, paddingBox)) {\n this.effects.push(new ClipEffect(borderBox, 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */));\n }\n else {\n this.effects.push(new ClipEffect(borderBox, 2 /* BACKGROUND_BORDERS */));\n this.effects.push(new ClipEffect(paddingBox, 4 /* CONTENT */));\n }\n }\n }\n ElementPaint.prototype.getEffects = function (target) {\n var inFlow = [2 /* ABSOLUTE */, 3 /* FIXED */].indexOf(this.container.styles.position) === -1;\n var parent = this.parent;\n var effects = this.effects.slice(0);\n while (parent) {\n var croplessEffects = parent.effects.filter(function (effect) { return !isClipEffect(effect); });\n if (inFlow || parent.container.styles.position !== 0 /* STATIC */ || !parent.parent) {\n effects.unshift.apply(effects, croplessEffects);\n inFlow = [2 /* ABSOLUTE */, 3 /* FIXED */].indexOf(parent.container.styles.position) === -1;\n if (parent.container.styles.overflowX !== 0 /* VISIBLE */) {\n var borderBox = calculateBorderBoxPath(parent.curves);\n var paddingBox = calculatePaddingBoxPath(parent.curves);\n if (!equalPath(borderBox, paddingBox)) {\n effects.unshift(new ClipEffect(paddingBox, 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */));\n }\n }\n }\n else {\n effects.unshift.apply(effects, croplessEffects);\n }\n parent = parent.parent;\n }\n return effects.filter(function (effect) { return contains(effect.target, target); });\n };\n return ElementPaint;\n }());\n var parseStackTree = function (parent, stackingContext, realStackingContext, listItems) {\n parent.container.elements.forEach(function (child) {\n var treatAsRealStackingContext = contains(child.flags, 4 /* CREATES_REAL_STACKING_CONTEXT */);\n var createsStackingContext = contains(child.flags, 2 /* CREATES_STACKING_CONTEXT */);\n var paintContainer = new ElementPaint(child, parent);\n if (contains(child.styles.display, 2048 /* LIST_ITEM */)) {\n listItems.push(paintContainer);\n }\n var listOwnerItems = contains(child.flags, 8 /* IS_LIST_OWNER */) ? [] : listItems;\n if (treatAsRealStackingContext || createsStackingContext) {\n var parentStack = treatAsRealStackingContext || child.styles.isPositioned() ? realStackingContext : stackingContext;\n var stack = new StackingContext(paintContainer);\n if (child.styles.isPositioned() || child.styles.opacity < 1 || child.styles.isTransformed()) {\n var order_1 = child.styles.zIndex.order;\n if (order_1 < 0) {\n var index_1 = 0;\n parentStack.negativeZIndex.some(function (current, i) {\n if (order_1 > current.element.container.styles.zIndex.order) {\n index_1 = i;\n return false;\n }\n else if (index_1 > 0) {\n return true;\n }\n return false;\n });\n parentStack.negativeZIndex.splice(index_1, 0, stack);\n }\n else if (order_1 > 0) {\n var index_2 = 0;\n parentStack.positiveZIndex.some(function (current, i) {\n if (order_1 >= current.element.container.styles.zIndex.order) {\n index_2 = i + 1;\n return false;\n }\n else if (index_2 > 0) {\n return true;\n }\n return false;\n });\n parentStack.positiveZIndex.splice(index_2, 0, stack);\n }\n else {\n parentStack.zeroOrAutoZIndexOrTransformedOrOpacity.push(stack);\n }\n }\n else {\n if (child.styles.isFloating()) {\n parentStack.nonPositionedFloats.push(stack);\n }\n else {\n parentStack.nonPositionedInlineLevel.push(stack);\n }\n }\n parseStackTree(paintContainer, stack, treatAsRealStackingContext ? stack : realStackingContext, listOwnerItems);\n }\n else {\n if (child.styles.isInlineLevel()) {\n stackingContext.inlineLevel.push(paintContainer);\n }\n else {\n stackingContext.nonInlineLevel.push(paintContainer);\n }\n parseStackTree(paintContainer, stackingContext, realStackingContext, listOwnerItems);\n }\n if (contains(child.flags, 8 /* IS_LIST_OWNER */)) {\n processListItems(child, listOwnerItems);\n }\n });\n };\n var processListItems = function (owner, elements) {\n var numbering = owner instanceof OLElementContainer ? owner.start : 1;\n var reversed = owner instanceof OLElementContainer ? owner.reversed : false;\n for (var i = 0; i < elements.length; i++) {\n var item = elements[i];\n if (item.container instanceof LIElementContainer &&\n typeof item.container.value === 'number' &&\n item.container.value !== 0) {\n numbering = item.container.value;\n }\n item.listValue = createCounterText(numbering, item.container.styles.listStyleType, true);\n numbering += reversed ? -1 : 1;\n }\n };\n var parseStackingContexts = function (container) {\n var paintContainer = new ElementPaint(container, null);\n var root = new StackingContext(paintContainer);\n var listItems = [];\n parseStackTree(paintContainer, root, root, listItems);\n processListItems(paintContainer.container, listItems);\n return root;\n };\n\n var parsePathForBorder = function (curves, borderSide) {\n switch (borderSide) {\n case 0:\n return createPathFromCurves(curves.topLeftBorderBox, curves.topLeftPaddingBox, curves.topRightBorderBox, curves.topRightPaddingBox);\n case 1:\n return createPathFromCurves(curves.topRightBorderBox, curves.topRightPaddingBox, curves.bottomRightBorderBox, curves.bottomRightPaddingBox);\n case 2:\n return createPathFromCurves(curves.bottomRightBorderBox, curves.bottomRightPaddingBox, curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox);\n case 3:\n default:\n return createPathFromCurves(curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox, curves.topLeftBorderBox, curves.topLeftPaddingBox);\n }\n };\n var parsePathForBorderDoubleOuter = function (curves, borderSide) {\n switch (borderSide) {\n case 0:\n return createPathFromCurves(curves.topLeftBorderBox, curves.topLeftBorderDoubleOuterBox, curves.topRightBorderBox, curves.topRightBorderDoubleOuterBox);\n case 1:\n return createPathFromCurves(curves.topRightBorderBox, curves.topRightBorderDoubleOuterBox, curves.bottomRightBorderBox, curves.bottomRightBorderDoubleOuterBox);\n case 2:\n return createPathFromCurves(curves.bottomRightBorderBox, curves.bottomRightBorderDoubleOuterBox, curves.bottomLeftBorderBox, curves.bottomLeftBorderDoubleOuterBox);\n case 3:\n default:\n return createPathFromCurves(curves.bottomLeftBorderBox, curves.bottomLeftBorderDoubleOuterBox, curves.topLeftBorderBox, curves.topLeftBorderDoubleOuterBox);\n }\n };\n var parsePathForBorderDoubleInner = function (curves, borderSide) {\n switch (borderSide) {\n case 0:\n return createPathFromCurves(curves.topLeftBorderDoubleInnerBox, curves.topLeftPaddingBox, curves.topRightBorderDoubleInnerBox, curves.topRightPaddingBox);\n case 1:\n return createPathFromCurves(curves.topRightBorderDoubleInnerBox, curves.topRightPaddingBox, curves.bottomRightBorderDoubleInnerBox, curves.bottomRightPaddingBox);\n case 2:\n return createPathFromCurves(curves.bottomRightBorderDoubleInnerBox, curves.bottomRightPaddingBox, curves.bottomLeftBorderDoubleInnerBox, curves.bottomLeftPaddingBox);\n case 3:\n default:\n return createPathFromCurves(curves.bottomLeftBorderDoubleInnerBox, curves.bottomLeftPaddingBox, curves.topLeftBorderDoubleInnerBox, curves.topLeftPaddingBox);\n }\n };\n var parsePathForBorderStroke = function (curves, borderSide) {\n switch (borderSide) {\n case 0:\n return createStrokePathFromCurves(curves.topLeftBorderStroke, curves.topRightBorderStroke);\n case 1:\n return createStrokePathFromCurves(curves.topRightBorderStroke, curves.bottomRightBorderStroke);\n case 2:\n return createStrokePathFromCurves(curves.bottomRightBorderStroke, curves.bottomLeftBorderStroke);\n case 3:\n default:\n return createStrokePathFromCurves(curves.bottomLeftBorderStroke, curves.topLeftBorderStroke);\n }\n };\n var createStrokePathFromCurves = function (outer1, outer2) {\n var path = [];\n if (isBezierCurve(outer1)) {\n path.push(outer1.subdivide(0.5, false));\n }\n else {\n path.push(outer1);\n }\n if (isBezierCurve(outer2)) {\n path.push(outer2.subdivide(0.5, true));\n }\n else {\n path.push(outer2);\n }\n return path;\n };\n var createPathFromCurves = function (outer1, inner1, outer2, inner2) {\n var path = [];\n if (isBezierCurve(outer1)) {\n path.push(outer1.subdivide(0.5, false));\n }\n else {\n path.push(outer1);\n }\n if (isBezierCurve(outer2)) {\n path.push(outer2.subdivide(0.5, true));\n }\n else {\n path.push(outer2);\n }\n if (isBezierCurve(inner2)) {\n path.push(inner2.subdivide(0.5, true).reverse());\n }\n else {\n path.push(inner2);\n }\n if (isBezierCurve(inner1)) {\n path.push(inner1.subdivide(0.5, false).reverse());\n }\n else {\n path.push(inner1);\n }\n return path;\n };\n\n var paddingBox = function (element) {\n var bounds = element.bounds;\n var styles = element.styles;\n return bounds.add(styles.borderLeftWidth, styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth), -(styles.borderTopWidth + styles.borderBottomWidth));\n };\n var contentBox = function (element) {\n var styles = element.styles;\n var bounds = element.bounds;\n var paddingLeft = getAbsoluteValue(styles.paddingLeft, bounds.width);\n var paddingRight = getAbsoluteValue(styles.paddingRight, bounds.width);\n var paddingTop = getAbsoluteValue(styles.paddingTop, bounds.width);\n var paddingBottom = getAbsoluteValue(styles.paddingBottom, bounds.width);\n return bounds.add(paddingLeft + styles.borderLeftWidth, paddingTop + styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth + paddingLeft + paddingRight), -(styles.borderTopWidth + styles.borderBottomWidth + paddingTop + paddingBottom));\n };\n\n var calculateBackgroundPositioningArea = function (backgroundOrigin, element) {\n if (backgroundOrigin === 0 /* BORDER_BOX */) {\n return element.bounds;\n }\n if (backgroundOrigin === 2 /* CONTENT_BOX */) {\n return contentBox(element);\n }\n return paddingBox(element);\n };\n var calculateBackgroundPaintingArea = function (backgroundClip, element) {\n if (backgroundClip === 0 /* BORDER_BOX */) {\n return element.bounds;\n }\n if (backgroundClip === 2 /* CONTENT_BOX */) {\n return contentBox(element);\n }\n return paddingBox(element);\n };\n var calculateBackgroundRendering = function (container, index, intrinsicSize) {\n var backgroundPositioningArea = calculateBackgroundPositioningArea(getBackgroundValueForIndex(container.styles.backgroundOrigin, index), container);\n var backgroundPaintingArea = calculateBackgroundPaintingArea(getBackgroundValueForIndex(container.styles.backgroundClip, index), container);\n var backgroundImageSize = calculateBackgroundSize(getBackgroundValueForIndex(container.styles.backgroundSize, index), intrinsicSize, backgroundPositioningArea);\n var sizeWidth = backgroundImageSize[0], sizeHeight = backgroundImageSize[1];\n var position = getAbsoluteValueForTuple(getBackgroundValueForIndex(container.styles.backgroundPosition, index), backgroundPositioningArea.width - sizeWidth, backgroundPositioningArea.height - sizeHeight);\n var path = calculateBackgroundRepeatPath(getBackgroundValueForIndex(container.styles.backgroundRepeat, index), position, backgroundImageSize, backgroundPositioningArea, backgroundPaintingArea);\n var offsetX = Math.round(backgroundPositioningArea.left + position[0]);\n var offsetY = Math.round(backgroundPositioningArea.top + position[1]);\n return [path, offsetX, offsetY, sizeWidth, sizeHeight];\n };\n var isAuto = function (token) { return isIdentToken(token) && token.value === BACKGROUND_SIZE.AUTO; };\n var hasIntrinsicValue = function (value) { return typeof value === 'number'; };\n var calculateBackgroundSize = function (size, _a, bounds) {\n var intrinsicWidth = _a[0], intrinsicHeight = _a[1], intrinsicProportion = _a[2];\n var first = size[0], second = size[1];\n if (!first) {\n return [0, 0];\n }\n if (isLengthPercentage(first) && second && isLengthPercentage(second)) {\n return [getAbsoluteValue(first, bounds.width), getAbsoluteValue(second, bounds.height)];\n }\n var hasIntrinsicProportion = hasIntrinsicValue(intrinsicProportion);\n if (isIdentToken(first) && (first.value === BACKGROUND_SIZE.CONTAIN || first.value === BACKGROUND_SIZE.COVER)) {\n if (hasIntrinsicValue(intrinsicProportion)) {\n var targetRatio = bounds.width / bounds.height;\n return targetRatio < intrinsicProportion !== (first.value === BACKGROUND_SIZE.COVER)\n ? [bounds.width, bounds.width / intrinsicProportion]\n : [bounds.height * intrinsicProportion, bounds.height];\n }\n return [bounds.width, bounds.height];\n }\n var hasIntrinsicWidth = hasIntrinsicValue(intrinsicWidth);\n var hasIntrinsicHeight = hasIntrinsicValue(intrinsicHeight);\n var hasIntrinsicDimensions = hasIntrinsicWidth || hasIntrinsicHeight;\n // If the background-size is auto or auto auto:\n if (isAuto(first) && (!second || isAuto(second))) {\n // If the image has both horizontal and vertical intrinsic dimensions, it's rendered at that size.\n if (hasIntrinsicWidth && hasIntrinsicHeight) {\n return [intrinsicWidth, intrinsicHeight];\n }\n // If the image has no intrinsic dimensions and has no intrinsic proportions,\n // it's rendered at the size of the background positioning area.\n if (!hasIntrinsicProportion && !hasIntrinsicDimensions) {\n return [bounds.width, bounds.height];\n }\n // TODO If the image has no intrinsic dimensions but has intrinsic proportions, it's rendered as if contain had been specified instead.\n // If the image has only one intrinsic dimension and has intrinsic proportions, it's rendered at the size corresponding to that one dimension.\n // The other dimension is computed using the specified dimension and the intrinsic proportions.\n if (hasIntrinsicDimensions && hasIntrinsicProportion) {\n var width_1 = hasIntrinsicWidth\n ? intrinsicWidth\n : intrinsicHeight * intrinsicProportion;\n var height_1 = hasIntrinsicHeight\n ? intrinsicHeight\n : intrinsicWidth / intrinsicProportion;\n return [width_1, height_1];\n }\n // If the image has only one intrinsic dimension but has no intrinsic proportions,\n // it's rendered using the specified dimension and the other dimension of the background positioning area.\n var width_2 = hasIntrinsicWidth ? intrinsicWidth : bounds.width;\n var height_2 = hasIntrinsicHeight ? intrinsicHeight : bounds.height;\n return [width_2, height_2];\n }\n // If the image has intrinsic proportions, it's stretched to the specified dimension.\n // The unspecified dimension is computed using the specified dimension and the intrinsic proportions.\n if (hasIntrinsicProportion) {\n var width_3 = 0;\n var height_3 = 0;\n if (isLengthPercentage(first)) {\n width_3 = getAbsoluteValue(first, bounds.width);\n }\n else if (isLengthPercentage(second)) {\n height_3 = getAbsoluteValue(second, bounds.height);\n }\n if (isAuto(first)) {\n width_3 = height_3 * intrinsicProportion;\n }\n else if (!second || isAuto(second)) {\n height_3 = width_3 / intrinsicProportion;\n }\n return [width_3, height_3];\n }\n // If the image has no intrinsic proportions, it's stretched to the specified dimension.\n // The unspecified dimension is computed using the image's corresponding intrinsic dimension,\n // if there is one. If there is no such intrinsic dimension,\n // it becomes the corresponding dimension of the background positioning area.\n var width = null;\n var height = null;\n if (isLengthPercentage(first)) {\n width = getAbsoluteValue(first, bounds.width);\n }\n else if (second && isLengthPercentage(second)) {\n height = getAbsoluteValue(second, bounds.height);\n }\n if (width !== null && (!second || isAuto(second))) {\n height =\n hasIntrinsicWidth && hasIntrinsicHeight\n ? (width / intrinsicWidth) * intrinsicHeight\n : bounds.height;\n }\n if (height !== null && isAuto(first)) {\n width =\n hasIntrinsicWidth && hasIntrinsicHeight\n ? (height / intrinsicHeight) * intrinsicWidth\n : bounds.width;\n }\n if (width !== null && height !== null) {\n return [width, height];\n }\n throw new Error(\"Unable to calculate background-size for element\");\n };\n var getBackgroundValueForIndex = function (values, index) {\n var value = values[index];\n if (typeof value === 'undefined') {\n return values[0];\n }\n return value;\n };\n var calculateBackgroundRepeatPath = function (repeat, _a, _b, backgroundPositioningArea, backgroundPaintingArea) {\n var x = _a[0], y = _a[1];\n var width = _b[0], height = _b[1];\n switch (repeat) {\n case 2 /* REPEAT_X */:\n return [\n new Vector(Math.round(backgroundPositioningArea.left), Math.round(backgroundPositioningArea.top + y)),\n new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(backgroundPositioningArea.top + y)),\n new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(height + backgroundPositioningArea.top + y)),\n new Vector(Math.round(backgroundPositioningArea.left), Math.round(height + backgroundPositioningArea.top + y))\n ];\n case 3 /* REPEAT_Y */:\n return [\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top)),\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top)),\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top)),\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top))\n ];\n case 1 /* NO_REPEAT */:\n return [\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y)),\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y)),\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y + height)),\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y + height))\n ];\n default:\n return [\n new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.top)),\n new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.top)),\n new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top)),\n new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top))\n ];\n }\n };\n\n var SMALL_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\n var SAMPLE_TEXT = 'Hidden Text';\n var FontMetrics = /** @class */ (function () {\n function FontMetrics(document) {\n this._data = {};\n this._document = document;\n }\n FontMetrics.prototype.parseMetrics = function (fontFamily, fontSize) {\n var container = this._document.createElement('div');\n var img = this._document.createElement('img');\n var span = this._document.createElement('span');\n var body = this._document.body;\n container.style.visibility = 'hidden';\n container.style.fontFamily = fontFamily;\n container.style.fontSize = fontSize;\n container.style.margin = '0';\n container.style.padding = '0';\n container.style.whiteSpace = 'nowrap';\n body.appendChild(container);\n img.src = SMALL_IMAGE;\n img.width = 1;\n img.height = 1;\n img.style.margin = '0';\n img.style.padding = '0';\n img.style.verticalAlign = 'baseline';\n span.style.fontFamily = fontFamily;\n span.style.fontSize = fontSize;\n span.style.margin = '0';\n span.style.padding = '0';\n span.appendChild(this._document.createTextNode(SAMPLE_TEXT));\n container.appendChild(span);\n container.appendChild(img);\n var baseline = img.offsetTop - span.offsetTop + 2;\n container.removeChild(span);\n container.appendChild(this._document.createTextNode(SAMPLE_TEXT));\n container.style.lineHeight = 'normal';\n img.style.verticalAlign = 'super';\n var middle = img.offsetTop - container.offsetTop + 2;\n body.removeChild(container);\n return { baseline: baseline, middle: middle };\n };\n FontMetrics.prototype.getMetrics = function (fontFamily, fontSize) {\n var key = fontFamily + \" \" + fontSize;\n if (typeof this._data[key] === 'undefined') {\n this._data[key] = this.parseMetrics(fontFamily, fontSize);\n }\n return this._data[key];\n };\n return FontMetrics;\n }());\n\n var Renderer = /** @class */ (function () {\n function Renderer(context, options) {\n this.context = context;\n this.options = options;\n }\n return Renderer;\n }());\n\n var MASK_OFFSET = 10000;\n var CanvasRenderer = /** @class */ (function (_super) {\n __extends(CanvasRenderer, _super);\n function CanvasRenderer(context, options) {\n var _this = _super.call(this, context, options) || this;\n _this._activeEffects = [];\n _this.canvas = options.canvas ? options.canvas : document.createElement('canvas');\n _this.ctx = _this.canvas.getContext('2d');\n if (!options.canvas) {\n _this.canvas.width = Math.floor(options.width * options.scale);\n _this.canvas.height = Math.floor(options.height * options.scale);\n _this.canvas.style.width = options.width + \"px\";\n _this.canvas.style.height = options.height + \"px\";\n }\n _this.fontMetrics = new FontMetrics(document);\n _this.ctx.scale(_this.options.scale, _this.options.scale);\n _this.ctx.translate(-options.x, -options.y);\n _this.ctx.textBaseline = 'bottom';\n _this._activeEffects = [];\n _this.context.logger.debug(\"Canvas renderer initialized (\" + options.width + \"x\" + options.height + \") with scale \" + options.scale);\n return _this;\n }\n CanvasRenderer.prototype.applyEffects = function (effects) {\n var _this = this;\n while (this._activeEffects.length) {\n this.popEffect();\n }\n effects.forEach(function (effect) { return _this.applyEffect(effect); });\n };\n CanvasRenderer.prototype.applyEffect = function (effect) {\n this.ctx.save();\n if (isOpacityEffect(effect)) {\n this.ctx.globalAlpha = effect.opacity;\n }\n if (isTransformEffect(effect)) {\n this.ctx.translate(effect.offsetX, effect.offsetY);\n this.ctx.transform(effect.matrix[0], effect.matrix[1], effect.matrix[2], effect.matrix[3], effect.matrix[4], effect.matrix[5]);\n this.ctx.translate(-effect.offsetX, -effect.offsetY);\n }\n if (isClipEffect(effect)) {\n this.path(effect.path);\n this.ctx.clip();\n }\n this._activeEffects.push(effect);\n };\n CanvasRenderer.prototype.popEffect = function () {\n this._activeEffects.pop();\n this.ctx.restore();\n };\n CanvasRenderer.prototype.renderStack = function (stack) {\n return __awaiter(this, void 0, void 0, function () {\n var styles;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n styles = stack.element.container.styles;\n if (!styles.isVisible()) return [3 /*break*/, 2];\n return [4 /*yield*/, this.renderStackContent(stack)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderNode = function (paint) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (contains(paint.container.flags, 16 /* DEBUG_RENDER */)) {\n debugger;\n }\n if (!paint.container.styles.isVisible()) return [3 /*break*/, 3];\n return [4 /*yield*/, this.renderNodeBackgroundAndBorders(paint)];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.renderNodeContent(paint)];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderTextWithLetterSpacing = function (text, letterSpacing, baseline) {\n var _this = this;\n if (letterSpacing === 0) {\n this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + baseline);\n }\n else {\n var letters = segmentGraphemes(text.text);\n letters.reduce(function (left, letter) {\n _this.ctx.fillText(letter, left, text.bounds.top + baseline);\n return left + _this.ctx.measureText(letter).width;\n }, text.bounds.left);\n }\n };\n CanvasRenderer.prototype.createFontStyle = function (styles) {\n var fontVariant = styles.fontVariant\n .filter(function (variant) { return variant === 'normal' || variant === 'small-caps'; })\n .join('');\n var fontFamily = fixIOSSystemFonts(styles.fontFamily).join(', ');\n var fontSize = isDimensionToken(styles.fontSize)\n ? \"\" + styles.fontSize.number + styles.fontSize.unit\n : styles.fontSize.number + \"px\";\n return [\n [styles.fontStyle, fontVariant, styles.fontWeight, fontSize, fontFamily].join(' '),\n fontFamily,\n fontSize\n ];\n };\n CanvasRenderer.prototype.renderTextNode = function (text, styles) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, font, fontFamily, fontSize, _b, baseline, middle, paintOrder;\n var _this = this;\n return __generator(this, function (_c) {\n _a = this.createFontStyle(styles), font = _a[0], fontFamily = _a[1], fontSize = _a[2];\n this.ctx.font = font;\n this.ctx.direction = styles.direction === 1 /* RTL */ ? 'rtl' : 'ltr';\n this.ctx.textAlign = 'left';\n this.ctx.textBaseline = 'alphabetic';\n _b = this.fontMetrics.getMetrics(fontFamily, fontSize), baseline = _b.baseline, middle = _b.middle;\n paintOrder = styles.paintOrder;\n text.textBounds.forEach(function (text) {\n paintOrder.forEach(function (paintOrderLayer) {\n switch (paintOrderLayer) {\n case 0 /* FILL */:\n _this.ctx.fillStyle = asString(styles.color);\n _this.renderTextWithLetterSpacing(text, styles.letterSpacing, baseline);\n var textShadows = styles.textShadow;\n if (textShadows.length && text.text.trim().length) {\n textShadows\n .slice(0)\n .reverse()\n .forEach(function (textShadow) {\n _this.ctx.shadowColor = asString(textShadow.color);\n _this.ctx.shadowOffsetX = textShadow.offsetX.number * _this.options.scale;\n _this.ctx.shadowOffsetY = textShadow.offsetY.number * _this.options.scale;\n _this.ctx.shadowBlur = textShadow.blur.number;\n _this.renderTextWithLetterSpacing(text, styles.letterSpacing, baseline);\n });\n _this.ctx.shadowColor = '';\n _this.ctx.shadowOffsetX = 0;\n _this.ctx.shadowOffsetY = 0;\n _this.ctx.shadowBlur = 0;\n }\n if (styles.textDecorationLine.length) {\n _this.ctx.fillStyle = asString(styles.textDecorationColor || styles.color);\n styles.textDecorationLine.forEach(function (textDecorationLine) {\n switch (textDecorationLine) {\n case 1 /* UNDERLINE */:\n // Draws a line at the baseline of the font\n // TODO As some browsers display the line as more than 1px if the font-size is big,\n // need to take that into account both in position and size\n _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top + baseline), text.bounds.width, 1);\n break;\n case 2 /* OVERLINE */:\n _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top), text.bounds.width, 1);\n break;\n case 3 /* LINE_THROUGH */:\n // TODO try and find exact position for line-through\n _this.ctx.fillRect(text.bounds.left, Math.ceil(text.bounds.top + middle), text.bounds.width, 1);\n break;\n }\n });\n }\n break;\n case 1 /* STROKE */:\n if (styles.webkitTextStrokeWidth && text.text.trim().length) {\n _this.ctx.strokeStyle = asString(styles.webkitTextStrokeColor);\n _this.ctx.lineWidth = styles.webkitTextStrokeWidth;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.ctx.lineJoin = !!window.chrome ? 'miter' : 'round';\n _this.ctx.strokeText(text.text, text.bounds.left, text.bounds.top + baseline);\n }\n _this.ctx.strokeStyle = '';\n _this.ctx.lineWidth = 0;\n _this.ctx.lineJoin = 'miter';\n break;\n }\n });\n });\n return [2 /*return*/];\n });\n });\n };\n CanvasRenderer.prototype.renderReplacedElement = function (container, curves, image) {\n if (image && container.intrinsicWidth > 0 && container.intrinsicHeight > 0) {\n var box = contentBox(container);\n var path = calculatePaddingBoxPath(curves);\n this.path(path);\n this.ctx.save();\n this.ctx.clip();\n this.ctx.drawImage(image, 0, 0, container.intrinsicWidth, container.intrinsicHeight, box.left, box.top, box.width, box.height);\n this.ctx.restore();\n }\n };\n CanvasRenderer.prototype.renderNodeContent = function (paint) {\n return __awaiter(this, void 0, void 0, function () {\n var container, curves, styles, _i, _a, child, image, image, iframeRenderer, canvas, size, _b, fontFamily, fontSize, baseline, bounds, x, textBounds, img, image, url, fontFamily, bounds;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n this.applyEffects(paint.getEffects(4 /* CONTENT */));\n container = paint.container;\n curves = paint.curves;\n styles = container.styles;\n _i = 0, _a = container.textNodes;\n _c.label = 1;\n case 1:\n if (!(_i < _a.length)) return [3 /*break*/, 4];\n child = _a[_i];\n return [4 /*yield*/, this.renderTextNode(child, styles)];\n case 2:\n _c.sent();\n _c.label = 3;\n case 3:\n _i++;\n return [3 /*break*/, 1];\n case 4:\n if (!(container instanceof ImageElementContainer)) return [3 /*break*/, 8];\n _c.label = 5;\n case 5:\n _c.trys.push([5, 7, , 8]);\n return [4 /*yield*/, this.context.cache.match(container.src)];\n case 6:\n image = _c.sent();\n this.renderReplacedElement(container, curves, image);\n return [3 /*break*/, 8];\n case 7:\n _c.sent();\n this.context.logger.error(\"Error loading image \" + container.src);\n return [3 /*break*/, 8];\n case 8:\n if (container instanceof CanvasElementContainer) {\n this.renderReplacedElement(container, curves, container.canvas);\n }\n if (!(container instanceof SVGElementContainer)) return [3 /*break*/, 12];\n _c.label = 9;\n case 9:\n _c.trys.push([9, 11, , 12]);\n return [4 /*yield*/, this.context.cache.match(container.svg)];\n case 10:\n image = _c.sent();\n this.renderReplacedElement(container, curves, image);\n return [3 /*break*/, 12];\n case 11:\n _c.sent();\n this.context.logger.error(\"Error loading svg \" + container.svg.substring(0, 255));\n return [3 /*break*/, 12];\n case 12:\n if (!(container instanceof IFrameElementContainer && container.tree)) return [3 /*break*/, 14];\n iframeRenderer = new CanvasRenderer(this.context, {\n scale: this.options.scale,\n backgroundColor: container.backgroundColor,\n x: 0,\n y: 0,\n width: container.width,\n height: container.height\n });\n return [4 /*yield*/, iframeRenderer.render(container.tree)];\n case 13:\n canvas = _c.sent();\n if (container.width && container.height) {\n this.ctx.drawImage(canvas, 0, 0, container.width, container.height, container.bounds.left, container.bounds.top, container.bounds.width, container.bounds.height);\n }\n _c.label = 14;\n case 14:\n if (container instanceof InputElementContainer) {\n size = Math.min(container.bounds.width, container.bounds.height);\n if (container.type === CHECKBOX) {\n if (container.checked) {\n this.ctx.save();\n this.path([\n new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79),\n new Vector(container.bounds.left + size * 0.16, container.bounds.top + size * 0.5549),\n new Vector(container.bounds.left + size * 0.27347, container.bounds.top + size * 0.44071),\n new Vector(container.bounds.left + size * 0.39694, container.bounds.top + size * 0.5649),\n new Vector(container.bounds.left + size * 0.72983, container.bounds.top + size * 0.23),\n new Vector(container.bounds.left + size * 0.84, container.bounds.top + size * 0.34085),\n new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79)\n ]);\n this.ctx.fillStyle = asString(INPUT_COLOR);\n this.ctx.fill();\n this.ctx.restore();\n }\n }\n else if (container.type === RADIO) {\n if (container.checked) {\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.arc(container.bounds.left + size / 2, container.bounds.top + size / 2, size / 4, 0, Math.PI * 2, true);\n this.ctx.fillStyle = asString(INPUT_COLOR);\n this.ctx.fill();\n this.ctx.restore();\n }\n }\n }\n if (isTextInputElement(container) && container.value.length) {\n _b = this.createFontStyle(styles), fontFamily = _b[0], fontSize = _b[1];\n baseline = this.fontMetrics.getMetrics(fontFamily, fontSize).baseline;\n this.ctx.font = fontFamily;\n this.ctx.fillStyle = asString(styles.color);\n this.ctx.textBaseline = 'alphabetic';\n this.ctx.textAlign = canvasTextAlign(container.styles.textAlign);\n bounds = contentBox(container);\n x = 0;\n switch (container.styles.textAlign) {\n case 1 /* CENTER */:\n x += bounds.width / 2;\n break;\n case 2 /* RIGHT */:\n x += bounds.width;\n break;\n }\n textBounds = bounds.add(x, 0, 0, -bounds.height / 2 + 1);\n this.ctx.save();\n this.path([\n new Vector(bounds.left, bounds.top),\n new Vector(bounds.left + bounds.width, bounds.top),\n new Vector(bounds.left + bounds.width, bounds.top + bounds.height),\n new Vector(bounds.left, bounds.top + bounds.height)\n ]);\n this.ctx.clip();\n this.renderTextWithLetterSpacing(new TextBounds(container.value, textBounds), styles.letterSpacing, baseline);\n this.ctx.restore();\n this.ctx.textBaseline = 'alphabetic';\n this.ctx.textAlign = 'left';\n }\n if (!contains(container.styles.display, 2048 /* LIST_ITEM */)) return [3 /*break*/, 20];\n if (!(container.styles.listStyleImage !== null)) return [3 /*break*/, 19];\n img = container.styles.listStyleImage;\n if (!(img.type === 0 /* URL */)) return [3 /*break*/, 18];\n image = void 0;\n url = img.url;\n _c.label = 15;\n case 15:\n _c.trys.push([15, 17, , 18]);\n return [4 /*yield*/, this.context.cache.match(url)];\n case 16:\n image = _c.sent();\n this.ctx.drawImage(image, container.bounds.left - (image.width + 10), container.bounds.top);\n return [3 /*break*/, 18];\n case 17:\n _c.sent();\n this.context.logger.error(\"Error loading list-style-image \" + url);\n return [3 /*break*/, 18];\n case 18: return [3 /*break*/, 20];\n case 19:\n if (paint.listValue && container.styles.listStyleType !== -1 /* NONE */) {\n fontFamily = this.createFontStyle(styles)[0];\n this.ctx.font = fontFamily;\n this.ctx.fillStyle = asString(styles.color);\n this.ctx.textBaseline = 'middle';\n this.ctx.textAlign = 'right';\n bounds = new Bounds(container.bounds.left, container.bounds.top + getAbsoluteValue(container.styles.paddingTop, container.bounds.width), container.bounds.width, computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 1);\n this.renderTextWithLetterSpacing(new TextBounds(paint.listValue, bounds), styles.letterSpacing, computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 2);\n this.ctx.textBaseline = 'bottom';\n this.ctx.textAlign = 'left';\n }\n _c.label = 20;\n case 20: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderStackContent = function (stack) {\n return __awaiter(this, void 0, void 0, function () {\n var _i, _a, child, _b, _c, child, _d, _e, child, _f, _g, child, _h, _j, child, _k, _l, child, _m, _o, child;\n return __generator(this, function (_p) {\n switch (_p.label) {\n case 0:\n if (contains(stack.element.container.flags, 16 /* DEBUG_RENDER */)) {\n debugger;\n }\n // https://www.w3.org/TR/css-position-3/#painting-order\n // 1. the background and borders of the element forming the stacking context.\n return [4 /*yield*/, this.renderNodeBackgroundAndBorders(stack.element)];\n case 1:\n // https://www.w3.org/TR/css-position-3/#painting-order\n // 1. the background and borders of the element forming the stacking context.\n _p.sent();\n _i = 0, _a = stack.negativeZIndex;\n _p.label = 2;\n case 2:\n if (!(_i < _a.length)) return [3 /*break*/, 5];\n child = _a[_i];\n return [4 /*yield*/, this.renderStack(child)];\n case 3:\n _p.sent();\n _p.label = 4;\n case 4:\n _i++;\n return [3 /*break*/, 2];\n case 5: \n // 3. For all its in-flow, non-positioned, block-level descendants in tree order:\n return [4 /*yield*/, this.renderNodeContent(stack.element)];\n case 6:\n // 3. For all its in-flow, non-positioned, block-level descendants in tree order:\n _p.sent();\n _b = 0, _c = stack.nonInlineLevel;\n _p.label = 7;\n case 7:\n if (!(_b < _c.length)) return [3 /*break*/, 10];\n child = _c[_b];\n return [4 /*yield*/, this.renderNode(child)];\n case 8:\n _p.sent();\n _p.label = 9;\n case 9:\n _b++;\n return [3 /*break*/, 7];\n case 10:\n _d = 0, _e = stack.nonPositionedFloats;\n _p.label = 11;\n case 11:\n if (!(_d < _e.length)) return [3 /*break*/, 14];\n child = _e[_d];\n return [4 /*yield*/, this.renderStack(child)];\n case 12:\n _p.sent();\n _p.label = 13;\n case 13:\n _d++;\n return [3 /*break*/, 11];\n case 14:\n _f = 0, _g = stack.nonPositionedInlineLevel;\n _p.label = 15;\n case 15:\n if (!(_f < _g.length)) return [3 /*break*/, 18];\n child = _g[_f];\n return [4 /*yield*/, this.renderStack(child)];\n case 16:\n _p.sent();\n _p.label = 17;\n case 17:\n _f++;\n return [3 /*break*/, 15];\n case 18:\n _h = 0, _j = stack.inlineLevel;\n _p.label = 19;\n case 19:\n if (!(_h < _j.length)) return [3 /*break*/, 22];\n child = _j[_h];\n return [4 /*yield*/, this.renderNode(child)];\n case 20:\n _p.sent();\n _p.label = 21;\n case 21:\n _h++;\n return [3 /*break*/, 19];\n case 22:\n _k = 0, _l = stack.zeroOrAutoZIndexOrTransformedOrOpacity;\n _p.label = 23;\n case 23:\n if (!(_k < _l.length)) return [3 /*break*/, 26];\n child = _l[_k];\n return [4 /*yield*/, this.renderStack(child)];\n case 24:\n _p.sent();\n _p.label = 25;\n case 25:\n _k++;\n return [3 /*break*/, 23];\n case 26:\n _m = 0, _o = stack.positiveZIndex;\n _p.label = 27;\n case 27:\n if (!(_m < _o.length)) return [3 /*break*/, 30];\n child = _o[_m];\n return [4 /*yield*/, this.renderStack(child)];\n case 28:\n _p.sent();\n _p.label = 29;\n case 29:\n _m++;\n return [3 /*break*/, 27];\n case 30: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.mask = function (paths) {\n this.ctx.beginPath();\n this.ctx.moveTo(0, 0);\n this.ctx.lineTo(this.canvas.width, 0);\n this.ctx.lineTo(this.canvas.width, this.canvas.height);\n this.ctx.lineTo(0, this.canvas.height);\n this.ctx.lineTo(0, 0);\n this.formatPath(paths.slice(0).reverse());\n this.ctx.closePath();\n };\n CanvasRenderer.prototype.path = function (paths) {\n this.ctx.beginPath();\n this.formatPath(paths);\n this.ctx.closePath();\n };\n CanvasRenderer.prototype.formatPath = function (paths) {\n var _this = this;\n paths.forEach(function (point, index) {\n var start = isBezierCurve(point) ? point.start : point;\n if (index === 0) {\n _this.ctx.moveTo(start.x, start.y);\n }\n else {\n _this.ctx.lineTo(start.x, start.y);\n }\n if (isBezierCurve(point)) {\n _this.ctx.bezierCurveTo(point.startControl.x, point.startControl.y, point.endControl.x, point.endControl.y, point.end.x, point.end.y);\n }\n });\n };\n CanvasRenderer.prototype.renderRepeat = function (path, pattern, offsetX, offsetY) {\n this.path(path);\n this.ctx.fillStyle = pattern;\n this.ctx.translate(offsetX, offsetY);\n this.ctx.fill();\n this.ctx.translate(-offsetX, -offsetY);\n };\n CanvasRenderer.prototype.resizeImage = function (image, width, height) {\n var _a;\n if (image.width === width && image.height === height) {\n return image;\n }\n var ownerDocument = (_a = this.canvas.ownerDocument) !== null && _a !== void 0 ? _a : document;\n var canvas = ownerDocument.createElement('canvas');\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n var ctx = canvas.getContext('2d');\n ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, width, height);\n return canvas;\n };\n CanvasRenderer.prototype.renderBackgroundImage = function (container) {\n return __awaiter(this, void 0, void 0, function () {\n var index, _loop_1, this_1, _i, _a, backgroundImage;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n index = container.styles.backgroundImage.length - 1;\n _loop_1 = function (backgroundImage) {\n var image, url, _c, path, x, y, width, height, pattern, _d, path, x, y, width, height, _e, lineLength, x0, x1, y0, y1, canvas, ctx, gradient_1, pattern, _f, path, left, top_1, width, height, position, x, y, _g, rx, ry, radialGradient_1, midX, midY, f, invF;\n return __generator(this, function (_h) {\n switch (_h.label) {\n case 0:\n if (!(backgroundImage.type === 0 /* URL */)) return [3 /*break*/, 5];\n image = void 0;\n url = backgroundImage.url;\n _h.label = 1;\n case 1:\n _h.trys.push([1, 3, , 4]);\n return [4 /*yield*/, this_1.context.cache.match(url)];\n case 2:\n image = _h.sent();\n return [3 /*break*/, 4];\n case 3:\n _h.sent();\n this_1.context.logger.error(\"Error loading background-image \" + url);\n return [3 /*break*/, 4];\n case 4:\n if (image) {\n _c = calculateBackgroundRendering(container, index, [\n image.width,\n image.height,\n image.width / image.height\n ]), path = _c[0], x = _c[1], y = _c[2], width = _c[3], height = _c[4];\n pattern = this_1.ctx.createPattern(this_1.resizeImage(image, width, height), 'repeat');\n this_1.renderRepeat(path, pattern, x, y);\n }\n return [3 /*break*/, 6];\n case 5:\n if (isLinearGradient(backgroundImage)) {\n _d = calculateBackgroundRendering(container, index, [null, null, null]), path = _d[0], x = _d[1], y = _d[2], width = _d[3], height = _d[4];\n _e = calculateGradientDirection(backgroundImage.angle, width, height), lineLength = _e[0], x0 = _e[1], x1 = _e[2], y0 = _e[3], y1 = _e[4];\n canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n ctx = canvas.getContext('2d');\n gradient_1 = ctx.createLinearGradient(x0, y0, x1, y1);\n processColorStops(backgroundImage.stops, lineLength).forEach(function (colorStop) {\n return gradient_1.addColorStop(colorStop.stop, asString(colorStop.color));\n });\n ctx.fillStyle = gradient_1;\n ctx.fillRect(0, 0, width, height);\n if (width > 0 && height > 0) {\n pattern = this_1.ctx.createPattern(canvas, 'repeat');\n this_1.renderRepeat(path, pattern, x, y);\n }\n }\n else if (isRadialGradient(backgroundImage)) {\n _f = calculateBackgroundRendering(container, index, [\n null,\n null,\n null\n ]), path = _f[0], left = _f[1], top_1 = _f[2], width = _f[3], height = _f[4];\n position = backgroundImage.position.length === 0 ? [FIFTY_PERCENT] : backgroundImage.position;\n x = getAbsoluteValue(position[0], width);\n y = getAbsoluteValue(position[position.length - 1], height);\n _g = calculateRadius(backgroundImage, x, y, width, height), rx = _g[0], ry = _g[1];\n if (rx > 0 && ry > 0) {\n radialGradient_1 = this_1.ctx.createRadialGradient(left + x, top_1 + y, 0, left + x, top_1 + y, rx);\n processColorStops(backgroundImage.stops, rx * 2).forEach(function (colorStop) {\n return radialGradient_1.addColorStop(colorStop.stop, asString(colorStop.color));\n });\n this_1.path(path);\n this_1.ctx.fillStyle = radialGradient_1;\n if (rx !== ry) {\n midX = container.bounds.left + 0.5 * container.bounds.width;\n midY = container.bounds.top + 0.5 * container.bounds.height;\n f = ry / rx;\n invF = 1 / f;\n this_1.ctx.save();\n this_1.ctx.translate(midX, midY);\n this_1.ctx.transform(1, 0, 0, f, 0, 0);\n this_1.ctx.translate(-midX, -midY);\n this_1.ctx.fillRect(left, invF * (top_1 - midY) + midY, width, height * invF);\n this_1.ctx.restore();\n }\n else {\n this_1.ctx.fill();\n }\n }\n }\n _h.label = 6;\n case 6:\n index--;\n return [2 /*return*/];\n }\n });\n };\n this_1 = this;\n _i = 0, _a = container.styles.backgroundImage.slice(0).reverse();\n _b.label = 1;\n case 1:\n if (!(_i < _a.length)) return [3 /*break*/, 4];\n backgroundImage = _a[_i];\n return [5 /*yield**/, _loop_1(backgroundImage)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n _i++;\n return [3 /*break*/, 1];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderSolidBorder = function (color, side, curvePoints) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.path(parsePathForBorder(curvePoints, side));\n this.ctx.fillStyle = asString(color);\n this.ctx.fill();\n return [2 /*return*/];\n });\n });\n };\n CanvasRenderer.prototype.renderDoubleBorder = function (color, width, side, curvePoints) {\n return __awaiter(this, void 0, void 0, function () {\n var outerPaths, innerPaths;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(width < 3)) return [3 /*break*/, 2];\n return [4 /*yield*/, this.renderSolidBorder(color, side, curvePoints)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n case 2:\n outerPaths = parsePathForBorderDoubleOuter(curvePoints, side);\n this.path(outerPaths);\n this.ctx.fillStyle = asString(color);\n this.ctx.fill();\n innerPaths = parsePathForBorderDoubleInner(curvePoints, side);\n this.path(innerPaths);\n this.ctx.fill();\n return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderNodeBackgroundAndBorders = function (paint) {\n return __awaiter(this, void 0, void 0, function () {\n var styles, hasBackground, borders, backgroundPaintingArea, side, _i, borders_1, border;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.applyEffects(paint.getEffects(2 /* BACKGROUND_BORDERS */));\n styles = paint.container.styles;\n hasBackground = !isTransparent(styles.backgroundColor) || styles.backgroundImage.length;\n borders = [\n { style: styles.borderTopStyle, color: styles.borderTopColor, width: styles.borderTopWidth },\n { style: styles.borderRightStyle, color: styles.borderRightColor, width: styles.borderRightWidth },\n { style: styles.borderBottomStyle, color: styles.borderBottomColor, width: styles.borderBottomWidth },\n { style: styles.borderLeftStyle, color: styles.borderLeftColor, width: styles.borderLeftWidth }\n ];\n backgroundPaintingArea = calculateBackgroundCurvedPaintingArea(getBackgroundValueForIndex(styles.backgroundClip, 0), paint.curves);\n if (!(hasBackground || styles.boxShadow.length)) return [3 /*break*/, 2];\n this.ctx.save();\n this.path(backgroundPaintingArea);\n this.ctx.clip();\n if (!isTransparent(styles.backgroundColor)) {\n this.ctx.fillStyle = asString(styles.backgroundColor);\n this.ctx.fill();\n }\n return [4 /*yield*/, this.renderBackgroundImage(paint.container)];\n case 1:\n _a.sent();\n this.ctx.restore();\n styles.boxShadow\n .slice(0)\n .reverse()\n .forEach(function (shadow) {\n _this.ctx.save();\n var borderBoxArea = calculateBorderBoxPath(paint.curves);\n var maskOffset = shadow.inset ? 0 : MASK_OFFSET;\n var shadowPaintingArea = transformPath(borderBoxArea, -maskOffset + (shadow.inset ? 1 : -1) * shadow.spread.number, (shadow.inset ? 1 : -1) * shadow.spread.number, shadow.spread.number * (shadow.inset ? -2 : 2), shadow.spread.number * (shadow.inset ? -2 : 2));\n if (shadow.inset) {\n _this.path(borderBoxArea);\n _this.ctx.clip();\n _this.mask(shadowPaintingArea);\n }\n else {\n _this.mask(borderBoxArea);\n _this.ctx.clip();\n _this.path(shadowPaintingArea);\n }\n _this.ctx.shadowOffsetX = shadow.offsetX.number + maskOffset;\n _this.ctx.shadowOffsetY = shadow.offsetY.number;\n _this.ctx.shadowColor = asString(shadow.color);\n _this.ctx.shadowBlur = shadow.blur.number;\n _this.ctx.fillStyle = shadow.inset ? asString(shadow.color) : 'rgba(0,0,0,1)';\n _this.ctx.fill();\n _this.ctx.restore();\n });\n _a.label = 2;\n case 2:\n side = 0;\n _i = 0, borders_1 = borders;\n _a.label = 3;\n case 3:\n if (!(_i < borders_1.length)) return [3 /*break*/, 13];\n border = borders_1[_i];\n if (!(border.style !== 0 /* NONE */ && !isTransparent(border.color) && border.width > 0)) return [3 /*break*/, 11];\n if (!(border.style === 2 /* DASHED */)) return [3 /*break*/, 5];\n return [4 /*yield*/, this.renderDashedDottedBorder(border.color, border.width, side, paint.curves, 2 /* DASHED */)];\n case 4:\n _a.sent();\n return [3 /*break*/, 11];\n case 5:\n if (!(border.style === 3 /* DOTTED */)) return [3 /*break*/, 7];\n return [4 /*yield*/, this.renderDashedDottedBorder(border.color, border.width, side, paint.curves, 3 /* DOTTED */)];\n case 6:\n _a.sent();\n return [3 /*break*/, 11];\n case 7:\n if (!(border.style === 4 /* DOUBLE */)) return [3 /*break*/, 9];\n return [4 /*yield*/, this.renderDoubleBorder(border.color, border.width, side, paint.curves)];\n case 8:\n _a.sent();\n return [3 /*break*/, 11];\n case 9: return [4 /*yield*/, this.renderSolidBorder(border.color, side, paint.curves)];\n case 10:\n _a.sent();\n _a.label = 11;\n case 11:\n side++;\n _a.label = 12;\n case 12:\n _i++;\n return [3 /*break*/, 3];\n case 13: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderDashedDottedBorder = function (color, width, side, curvePoints, style) {\n return __awaiter(this, void 0, void 0, function () {\n var strokePaths, boxPaths, startX, startY, endX, endY, length, dashLength, spaceLength, useLineDash, multiplier, numberOfDashes, minSpace, maxSpace, path1, path2, path1, path2;\n return __generator(this, function (_a) {\n this.ctx.save();\n strokePaths = parsePathForBorderStroke(curvePoints, side);\n boxPaths = parsePathForBorder(curvePoints, side);\n if (style === 2 /* DASHED */) {\n this.path(boxPaths);\n this.ctx.clip();\n }\n if (isBezierCurve(boxPaths[0])) {\n startX = boxPaths[0].start.x;\n startY = boxPaths[0].start.y;\n }\n else {\n startX = boxPaths[0].x;\n startY = boxPaths[0].y;\n }\n if (isBezierCurve(boxPaths[1])) {\n endX = boxPaths[1].end.x;\n endY = boxPaths[1].end.y;\n }\n else {\n endX = boxPaths[1].x;\n endY = boxPaths[1].y;\n }\n if (side === 0 || side === 2) {\n length = Math.abs(startX - endX);\n }\n else {\n length = Math.abs(startY - endY);\n }\n this.ctx.beginPath();\n if (style === 3 /* DOTTED */) {\n this.formatPath(strokePaths);\n }\n else {\n this.formatPath(boxPaths.slice(0, 2));\n }\n dashLength = width < 3 ? width * 3 : width * 2;\n spaceLength = width < 3 ? width * 2 : width;\n if (style === 3 /* DOTTED */) {\n dashLength = width;\n spaceLength = width;\n }\n useLineDash = true;\n if (length <= dashLength * 2) {\n useLineDash = false;\n }\n else if (length <= dashLength * 2 + spaceLength) {\n multiplier = length / (2 * dashLength + spaceLength);\n dashLength *= multiplier;\n spaceLength *= multiplier;\n }\n else {\n numberOfDashes = Math.floor((length + spaceLength) / (dashLength + spaceLength));\n minSpace = (length - numberOfDashes * dashLength) / (numberOfDashes - 1);\n maxSpace = (length - (numberOfDashes + 1) * dashLength) / numberOfDashes;\n spaceLength =\n maxSpace <= 0 || Math.abs(spaceLength - minSpace) < Math.abs(spaceLength - maxSpace)\n ? minSpace\n : maxSpace;\n }\n if (useLineDash) {\n if (style === 3 /* DOTTED */) {\n this.ctx.setLineDash([0, dashLength + spaceLength]);\n }\n else {\n this.ctx.setLineDash([dashLength, spaceLength]);\n }\n }\n if (style === 3 /* DOTTED */) {\n this.ctx.lineCap = 'round';\n this.ctx.lineWidth = width;\n }\n else {\n this.ctx.lineWidth = width * 2 + 1.1;\n }\n this.ctx.strokeStyle = asString(color);\n this.ctx.stroke();\n this.ctx.setLineDash([]);\n // dashed round edge gap\n if (style === 2 /* DASHED */) {\n if (isBezierCurve(boxPaths[0])) {\n path1 = boxPaths[3];\n path2 = boxPaths[0];\n this.ctx.beginPath();\n this.formatPath([new Vector(path1.end.x, path1.end.y), new Vector(path2.start.x, path2.start.y)]);\n this.ctx.stroke();\n }\n if (isBezierCurve(boxPaths[1])) {\n path1 = boxPaths[1];\n path2 = boxPaths[2];\n this.ctx.beginPath();\n this.formatPath([new Vector(path1.end.x, path1.end.y), new Vector(path2.start.x, path2.start.y)]);\n this.ctx.stroke();\n }\n }\n this.ctx.restore();\n return [2 /*return*/];\n });\n });\n };\n CanvasRenderer.prototype.render = function (element) {\n return __awaiter(this, void 0, void 0, function () {\n var stack;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.options.backgroundColor) {\n this.ctx.fillStyle = asString(this.options.backgroundColor);\n this.ctx.fillRect(this.options.x, this.options.y, this.options.width, this.options.height);\n }\n stack = parseStackingContexts(element);\n return [4 /*yield*/, this.renderStack(stack)];\n case 1:\n _a.sent();\n this.applyEffects([]);\n return [2 /*return*/, this.canvas];\n }\n });\n });\n };\n return CanvasRenderer;\n }(Renderer));\n var isTextInputElement = function (container) {\n if (container instanceof TextareaElementContainer) {\n return true;\n }\n else if (container instanceof SelectElementContainer) {\n return true;\n }\n else if (container instanceof InputElementContainer && container.type !== RADIO && container.type !== CHECKBOX) {\n return true;\n }\n return false;\n };\n var calculateBackgroundCurvedPaintingArea = function (clip, curves) {\n switch (clip) {\n case 0 /* BORDER_BOX */:\n return calculateBorderBoxPath(curves);\n case 2 /* CONTENT_BOX */:\n return calculateContentBoxPath(curves);\n case 1 /* PADDING_BOX */:\n default:\n return calculatePaddingBoxPath(curves);\n }\n };\n var canvasTextAlign = function (textAlign) {\n switch (textAlign) {\n case 1 /* CENTER */:\n return 'center';\n case 2 /* RIGHT */:\n return 'right';\n case 0 /* LEFT */:\n default:\n return 'left';\n }\n };\n // see https://github.com/niklasvh/html2canvas/pull/2645\n var iOSBrokenFonts = ['-apple-system', 'system-ui'];\n var fixIOSSystemFonts = function (fontFamilies) {\n return /iPhone OS 15_(0|1)/.test(window.navigator.userAgent)\n ? fontFamilies.filter(function (fontFamily) { return iOSBrokenFonts.indexOf(fontFamily) === -1; })\n : fontFamilies;\n };\n\n var ForeignObjectRenderer = /** @class */ (function (_super) {\n __extends(ForeignObjectRenderer, _super);\n function ForeignObjectRenderer(context, options) {\n var _this = _super.call(this, context, options) || this;\n _this.canvas = options.canvas ? options.canvas : document.createElement('canvas');\n _this.ctx = _this.canvas.getContext('2d');\n _this.options = options;\n _this.canvas.width = Math.floor(options.width * options.scale);\n _this.canvas.height = Math.floor(options.height * options.scale);\n _this.canvas.style.width = options.width + \"px\";\n _this.canvas.style.height = options.height + \"px\";\n _this.ctx.scale(_this.options.scale, _this.options.scale);\n _this.ctx.translate(-options.x, -options.y);\n _this.context.logger.debug(\"EXPERIMENTAL ForeignObject renderer initialized (\" + options.width + \"x\" + options.height + \" at \" + options.x + \",\" + options.y + \") with scale \" + options.scale);\n return _this;\n }\n ForeignObjectRenderer.prototype.render = function (element) {\n return __awaiter(this, void 0, void 0, function () {\n var svg, img;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n svg = createForeignObjectSVG(this.options.width * this.options.scale, this.options.height * this.options.scale, this.options.scale, this.options.scale, element);\n return [4 /*yield*/, loadSerializedSVG(svg)];\n case 1:\n img = _a.sent();\n if (this.options.backgroundColor) {\n this.ctx.fillStyle = asString(this.options.backgroundColor);\n this.ctx.fillRect(0, 0, this.options.width * this.options.scale, this.options.height * this.options.scale);\n }\n this.ctx.drawImage(img, -this.options.x * this.options.scale, -this.options.y * this.options.scale);\n return [2 /*return*/, this.canvas];\n }\n });\n });\n };\n return ForeignObjectRenderer;\n }(Renderer));\n var loadSerializedSVG = function (svg) {\n return new Promise(function (resolve, reject) {\n var img = new Image();\n img.onload = function () {\n resolve(img);\n };\n img.onerror = reject;\n img.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(new XMLSerializer().serializeToString(svg));\n });\n };\n\n var Logger = /** @class */ (function () {\n function Logger(_a) {\n var id = _a.id, enabled = _a.enabled;\n this.id = id;\n this.enabled = enabled;\n this.start = Date.now();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Logger.prototype.debug = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.enabled) {\n // eslint-disable-next-line no-console\n if (typeof window !== 'undefined' && window.console && typeof console.debug === 'function') {\n // eslint-disable-next-line no-console\n console.debug.apply(console, __spreadArray([this.id, this.getTime() + \"ms\"], args));\n }\n else {\n this.info.apply(this, args);\n }\n }\n };\n Logger.prototype.getTime = function () {\n return Date.now() - this.start;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Logger.prototype.info = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.enabled) {\n // eslint-disable-next-line no-console\n if (typeof window !== 'undefined' && window.console && typeof console.info === 'function') {\n // eslint-disable-next-line no-console\n console.info.apply(console, __spreadArray([this.id, this.getTime() + \"ms\"], args));\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Logger.prototype.warn = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.enabled) {\n // eslint-disable-next-line no-console\n if (typeof window !== 'undefined' && window.console && typeof console.warn === 'function') {\n // eslint-disable-next-line no-console\n console.warn.apply(console, __spreadArray([this.id, this.getTime() + \"ms\"], args));\n }\n else {\n this.info.apply(this, args);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Logger.prototype.error = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.enabled) {\n // eslint-disable-next-line no-console\n if (typeof window !== 'undefined' && window.console && typeof console.error === 'function') {\n // eslint-disable-next-line no-console\n console.error.apply(console, __spreadArray([this.id, this.getTime() + \"ms\"], args));\n }\n else {\n this.info.apply(this, args);\n }\n }\n };\n Logger.instances = {};\n return Logger;\n }());\n\n var Context = /** @class */ (function () {\n function Context(options, windowBounds) {\n var _a;\n this.windowBounds = windowBounds;\n this.instanceName = \"#\" + Context.instanceCount++;\n this.logger = new Logger({ id: this.instanceName, enabled: options.logging });\n this.cache = (_a = options.cache) !== null && _a !== void 0 ? _a : new Cache(this, options);\n }\n Context.instanceCount = 1;\n return Context;\n }());\n\n var html2canvas = function (element, options) {\n if (options === void 0) { options = {}; }\n return renderElement(element, options);\n };\n if (typeof window !== 'undefined') {\n CacheStorage.setContext(window);\n }\n var renderElement = function (element, opts) { return __awaiter(void 0, void 0, void 0, function () {\n var ownerDocument, defaultView, resourceOptions, contextOptions, windowOptions, windowBounds, context, foreignObjectRendering, cloneOptions, documentCloner, clonedElement, container, _a, width, height, left, top, backgroundColor, renderOptions, canvas, renderer, root, renderer;\n var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;\n return __generator(this, function (_u) {\n switch (_u.label) {\n case 0:\n if (!element || typeof element !== 'object') {\n return [2 /*return*/, Promise.reject('Invalid element provided as first argument')];\n }\n ownerDocument = element.ownerDocument;\n if (!ownerDocument) {\n throw new Error(\"Element is not attached to a Document\");\n }\n defaultView = ownerDocument.defaultView;\n if (!defaultView) {\n throw new Error(\"Document is not attached to a Window\");\n }\n resourceOptions = {\n allowTaint: (_b = opts.allowTaint) !== null && _b !== void 0 ? _b : false,\n imageTimeout: (_c = opts.imageTimeout) !== null && _c !== void 0 ? _c : 15000,\n proxy: opts.proxy,\n useCORS: (_d = opts.useCORS) !== null && _d !== void 0 ? _d : false\n };\n contextOptions = __assign({ logging: (_e = opts.logging) !== null && _e !== void 0 ? _e : true, cache: opts.cache }, resourceOptions);\n windowOptions = {\n windowWidth: (_f = opts.windowWidth) !== null && _f !== void 0 ? _f : defaultView.innerWidth,\n windowHeight: (_g = opts.windowHeight) !== null && _g !== void 0 ? _g : defaultView.innerHeight,\n scrollX: (_h = opts.scrollX) !== null && _h !== void 0 ? _h : defaultView.pageXOffset,\n scrollY: (_j = opts.scrollY) !== null && _j !== void 0 ? _j : defaultView.pageYOffset\n };\n windowBounds = new Bounds(windowOptions.scrollX, windowOptions.scrollY, windowOptions.windowWidth, windowOptions.windowHeight);\n context = new Context(contextOptions, windowBounds);\n foreignObjectRendering = (_k = opts.foreignObjectRendering) !== null && _k !== void 0 ? _k : false;\n cloneOptions = {\n allowTaint: (_l = opts.allowTaint) !== null && _l !== void 0 ? _l : false,\n onclone: opts.onclone,\n ignoreElements: opts.ignoreElements,\n inlineImages: foreignObjectRendering,\n copyStyles: foreignObjectRendering\n };\n context.logger.debug(\"Starting document clone with size \" + windowBounds.width + \"x\" + windowBounds.height + \" scrolled to \" + -windowBounds.left + \",\" + -windowBounds.top);\n documentCloner = new DocumentCloner(context, element, cloneOptions);\n clonedElement = documentCloner.clonedReferenceElement;\n if (!clonedElement) {\n return [2 /*return*/, Promise.reject(\"Unable to find element in cloned iframe\")];\n }\n return [4 /*yield*/, documentCloner.toIFrame(ownerDocument, windowBounds)];\n case 1:\n container = _u.sent();\n _a = isBodyElement(clonedElement) || isHTMLElement(clonedElement)\n ? parseDocumentSize(clonedElement.ownerDocument)\n : parseBounds(context, clonedElement), width = _a.width, height = _a.height, left = _a.left, top = _a.top;\n backgroundColor = parseBackgroundColor(context, clonedElement, opts.backgroundColor);\n renderOptions = {\n canvas: opts.canvas,\n backgroundColor: backgroundColor,\n scale: (_o = (_m = opts.scale) !== null && _m !== void 0 ? _m : defaultView.devicePixelRatio) !== null && _o !== void 0 ? _o : 1,\n x: ((_p = opts.x) !== null && _p !== void 0 ? _p : 0) + left,\n y: ((_q = opts.y) !== null && _q !== void 0 ? _q : 0) + top,\n width: (_r = opts.width) !== null && _r !== void 0 ? _r : Math.ceil(width),\n height: (_s = opts.height) !== null && _s !== void 0 ? _s : Math.ceil(height)\n };\n if (!foreignObjectRendering) return [3 /*break*/, 3];\n context.logger.debug(\"Document cloned, using foreign object rendering\");\n renderer = new ForeignObjectRenderer(context, renderOptions);\n return [4 /*yield*/, renderer.render(clonedElement)];\n case 2:\n canvas = _u.sent();\n return [3 /*break*/, 5];\n case 3:\n context.logger.debug(\"Document cloned, element located at \" + left + \",\" + top + \" with size \" + width + \"x\" + height + \" using computed rendering\");\n context.logger.debug(\"Starting DOM parsing\");\n root = parseTree(context, clonedElement);\n if (backgroundColor === root.styles.backgroundColor) {\n root.styles.backgroundColor = COLORS.TRANSPARENT;\n }\n context.logger.debug(\"Starting renderer for element at \" + renderOptions.x + \",\" + renderOptions.y + \" with size \" + renderOptions.width + \"x\" + renderOptions.height);\n renderer = new CanvasRenderer(context, renderOptions);\n return [4 /*yield*/, renderer.render(root)];\n case 4:\n canvas = _u.sent();\n _u.label = 5;\n case 5:\n if ((_t = opts.removeContainer) !== null && _t !== void 0 ? _t : true) {\n if (!DocumentCloner.destroy(container)) {\n context.logger.error(\"Cannot detach cloned iframe as it is not in the DOM anymore\");\n }\n }\n context.logger.debug(\"Finished rendering\");\n return [2 /*return*/, canvas];\n }\n });\n }); };\n var parseBackgroundColor = function (context, element, backgroundColorOverride) {\n var ownerDocument = element.ownerDocument;\n // http://www.w3.org/TR/css3-background/#special-backgrounds\n var documentBackgroundColor = ownerDocument.documentElement\n ? parseColor(context, getComputedStyle(ownerDocument.documentElement).backgroundColor)\n : COLORS.TRANSPARENT;\n var bodyBackgroundColor = ownerDocument.body\n ? parseColor(context, getComputedStyle(ownerDocument.body).backgroundColor)\n : COLORS.TRANSPARENT;\n var defaultBackgroundColor = typeof backgroundColorOverride === 'string'\n ? parseColor(context, backgroundColorOverride)\n : backgroundColorOverride === null\n ? COLORS.TRANSPARENT\n : 0xffffffff;\n return element === ownerDocument.documentElement\n ? isTransparent(documentBackgroundColor)\n ? isTransparent(bodyBackgroundColor)\n ? defaultBackgroundColor\n : bodyBackgroundColor\n : documentBackgroundColor\n : defaultBackgroundColor;\n };\n\n return html2canvas;\n\n})));\n//# sourceMappingURL=html2canvas.js.map\n","import { csvParse, autoType } from \"d3-dsv\";\nimport html2canvas from \"html2canvas\";\n\nexport async function getData(url) {\n let response = await fetch(url);\n let string = await response.text();\n\tlet data = await csvParse(string, autoType);\n return data;\n}\n\nexport function capitalise(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport function getAngle(x, y) {\n\treturn Math.atan2(y, x) * 180 / Math.PI;\t\n}\n\nexport function getCompass(angle) {\n\tif (Math.abs(angle) <= 22.5) {\n\t\treturn \"east\";\n\t} else if (angle > 22.5 && angle <= 67.5) {\n\t\treturn \"northeast\";\n\t} else if (angle > 67.5 && angle <= 112.5) {\n\t\treturn \"north\";\n\t} else if (angle > 112.5 && angle <= 157.5) {\n\t\treturn \"northwest\";\n\t} else if (Math.abs(angle) > 157.5) {\n\t\treturn \"west\";\n\t} else if (angle < -112.5 && angle >= -157.5) {\n\t\treturn \"southwest\";\n\t} else if (angle < -67.5 && angle >= -112.5) {\n\t\treturn \"south\";\n\t} else {\n\t\treturn \"southeast\";\n\t}\n}\n\nexport function getAdjacents(data) {\n\tlet adj = {};\n\tdata.forEach(d => {\n\t\tadj[d.key] = [];\n\t\tdata.forEach(e => {\n\t\t\tlet found = false;\n\t\t\td.vertices.forEach(dv => {\n\t\t\t\tlet dx = (d.x + dv.x).toFixed(3);\n\t\t\t\tlet dy = (d.y + dv.y).toFixed(3);\n\t\t\t\te.vertices.forEach(ev => {\n\t\t\t\t\tlet ex = (e.x + ev.x).toFixed(3);\n\t\t\t\t\tlet ey = (e.y + ev.y).toFixed(3);\n\t\t\t\t\tif (dx == ex && dy == ey && d.key != e.key) {\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t\tif (found) {\n\t\t\t\tadj[d.key].push(e.key);\n\t\t\t}\n\t\t});\n\t});\nreturn adj;\n}\n\nexport function calcSteps(start, end, adj, prev = []) {\n\tlet visited = [start]; // Array of area codes visited\n\tlet rings = [[start]]; // Area codes grouped by number of steps from {start}\n\tlet found = false; // True if {end} code reached\n\tlet deadend = false; // True if no more adjacent hexes left\n\tlet steps = [];\n\n\t// \"Flood fill\" the board to calculate number of steps to {end}\n\tlet i = 0; // Current step\n\twhile (!found && !deadend) {\n\t\trings.push([]);\n\t\tfor (const code of rings[i]) {\n\t\t\tfor (const adj_code of adj[code]) {\n\t\t\t\tif (!visited.includes(adj_code) && !prev.includes(adj_code)) {\n\t\t\t\t\tvisited.push(adj_code);\n\t\t\t\t\trings[i + 1].push(adj_code);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (visited.includes(end)) {\n\t\t\tfound = true;\n\t\t} else if (!rings[i + 1][0]) {\n\t\t\tdeadend = true;\n\t\t}\n\t\ti ++;\n\t}\n\n\t// Trace back a valid route from {end} back to {start} using rings\n\tif (!deadend) {\n\t\tlet step = end;\n\t\tsteps.push(end);\n\n\t\tfor (let i = rings.length - 2; i >= 0; i -- ) {\n\t\t\tlet neighbours = rings[i].filter(d => adj[step].includes(d));\n\t\t\tlet prev = neighbours[0];\n\t\t\tsteps.unshift(prev);\n\t\t\tstep = prev;\n\t\t}\n\t}\n\n\treturn deadend ? null : steps;\n}\n\nexport function sleep (ms = 1000) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function iniframe (window) {\n\ttry {\n\t\treturn window.self !== window.top;\n\t} catch (e) {\n\t\treturn true;\n\t}\n}\n\nexport function setStorage(name, value) {\n\tlet val = JSON.stringify(value);\n\tlocalStorage.setItem(name, val);\n}\n\nexport function getStorage(name) {\n\tif (localStorage.getItem(name)) {\n\t\treturn JSON.parse(localStorage.getItem(name));\n\t}\n\treturn null;\n}\n\nexport function deleteStorage(name) {\n\tlocalStorage.removeItem(name);\n}\n\nexport function getPNG(target, filename) {\n html2canvas(target)\n .then(canvas => {\n let content = canvas.toDataURL();\n download(content, filename + '.png');\n });\n}\n\nfunction download(content, filename) {\n var a = document.createElement('a');\n a.href = content;\n a.download = filename;\n a.click();\n}","export const hexurl = './data/lad-2021.json';\nexport const adjurl = './data/lad-2021-adj.json';\nexport const dataurl = './data/datasets-2021.csv';\n\nexport const routes = [\n\t{\n\t\tlabel: \"Select route on map\",\n\t\tcode: \"map\"\n\t},\n\t{\n\t\tlabel: \"Random route\",\n\t\tcode: \"random\"\n\t},\n\t{\n\t\tlabel: \"Daily route\",\n\t\tcode: \"daily\"\n\t}\n];\n\nexport const datasets = [\n\t{\n\t\tlabel: \"Total population\",\n\t\tcode: \"population\",\n\t\tunit: \"people\"\n\t},\n\t{\n\t\tlabel: \"Population density\",\n\t\tcode: \"density\",\n\t\tunit: \"people per square km\"\n\t},\n\t{\n\t\tlabel: \"Area in square km\",\n\t\tlabel_long: \"Area in square kilometres\",\n\t\tcode: \"area\",\n\t\tunit: \"square km\"\n\t}\n];\n\nexport const modes = [\n\t{\n\t\tlabel: \"Daily\",\n\t\tcode: \"daily\"\n\t},\n\t{\n\t\tlabel: \"Regular\",\n\t\tcode: \"classic\"\n\t},\n\t{\n\t\tlabel: \"Beat the clock\",\n\t\tcode: \"timed\"\n\t},\n\t// {\n\t// \tlabel: \"Fixed route\",\n\t// \tcode: \"fixed\"\n\t// }\n];\n\nexport const game_defaults = {\n\tmode: \"daily\",\n\tdataset: \"population\",\n route: \"daily\",\n\tstart: null,\n\tend: null,\n next: null,\n bearing: null,\n selected: null,\n steps: [], // Pre-defined/shortest route\n right: [], // Array of place codes correctly guessed\n wrong: [], // Array of place codes wrongly guessed\n\trecord: [] // Array of true/false for order of right/wrong answers\n};\n\nexport const history_defaults = {\n\tdaily: {\n\t\tday: null,\n\t\tgame: null,\n\t\tresult: null\n\t},\n\tstats: Object.fromEntries(modes.map(mode => [\n\t\tmode.code,\n\t\t{\n\t\t\twon: 0,\n\t\t\tlost: 0,\n\t\t\tstreak: 0,\n\t\t\tstreak_max: 0,\n\t\t\tright: 0,\n\t\t\twrong: 0\n\t\t}]\n\t)),\n\thexes : {}\n};\n\nexport const sample_hexes = [\n \"E08000025\",\n \"E07000234\",\n \"E07000192\",\n \"E08000026\",\n \"E08000027\",\n \"E06000019\",\n \"E07000235\",\n \"E07000218\",\n \"E07000219\",\n \"E07000236\",\n \"E07000220\",\n \"E08000028\",\n \"E06000051\",\n \"E08000029\",\n \"E07000196\",\n \"E07000221\",\n \"E06000020\",\n \"E08000030\",\n \"E07000222\",\n \"E08000031\",\n \"E07000237\",\n \"E07000238\",\n \"E07000239\"\n]","<script>\n\texport let title;\n\texport let x;\n\texport let y;\n\texport let width;\n\t\n\tlet w;\n\t\n\tconst xPad = 4;\n\t\n\t$: xPos = w && x + (w / 2) > width - xPad ? width - (w / 2) - xPad : w && x - (w / 2) < 0 + xPad ? (w / 2) + xPad : x;\n</script>\n\n<div class=\"tooltip\" style:top=\"{y}px\" style:left=\"{xPos}px\" bind:clientWidth={w}>\n {title}\n <div class=\"caret\" style:transform=\"translateX({(w / x) + (x - xPos)}px)\"></div>\n</div>\n\n<style>\n\t.tooltip {\n\t\tbackground: #333;\n\t\tcolor: white;\n\t\tborder-radius: 2px;\n\t\tpadding: 4px;\n\t\tposition: absolute;\n\t\ttransform: translate(-50%,7px);\n font-size: 0.85em;\n white-space: nowrap;\n\t}\n\t.caret {\n\t\tcontent: \" \";\n\t\tposition: absolute;\n\t\tbottom: 100%; /* At the top of the tooltip */\n\t\tleft: 50%;\n\t\tmargin-left: -5px;\n\t\tborder-width: 5px;\n\t\tborder-style: solid;\n\t\tborder-color: transparent transparent #333 transparent;\n\t}\n</style>","import Tooltip from './Tooltip.svelte';\n\nexport default function tooltip(element) {\n\tlet title;\n\tlet tooltipComponent;\n\tfunction mouseOver(event) {\n\t\t// NOTE: remove the `title` attribute, to prevent showing the default browser tooltip\n\t\t// remember to set it back on `mouseleave`\n\t\ttitle = element.getAttribute('title');\n\t\telement.removeAttribute('title');\n\n let body = document.body.getBoundingClientRect();\n\t\tlet pos = element.getBoundingClientRect();\n\t\tlet y = pos.bottom - 3;\n\t\tlet x = (pos.left + pos.right) / 2;\n\n\t\ttooltipComponent = new Tooltip({\n\t\t\tprops: {\n\t\t\t\ttitle: title,\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\twidth: body.width\n\t\t\t},\n\t\t\ttarget: document.body,\n\t\t});\n\t}\n\tfunction mouseLeave() {\n\t\ttooltipComponent.$destroy();\n\t\t// NOTE: restore the `title` attribute\n\t\telement.setAttribute('title', title);\n\t}\n\t\n\telement.addEventListener('mouseover', mouseOver);\n \telement.addEventListener('mouseleave', mouseLeave);\n\t\n\treturn {\n\t\tdestroy() {\n\t\t\tif (tooltipComponent) tooltipComponent.$destroy();\n\t\t\telement.removeEventListener('mouseover', mouseOver);\n\t\t\telement.removeEventListener('mouseleave', mouseLeave);\n\t\t}\n\t}\n}","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n","export default function(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, nonpassivecapture);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n sourceEvent,\n target,\n transform,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n transform: {value: transform, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","export function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute(\"viewBox\")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nexport default function() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled, {passive: false})\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .event(event)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p, event) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function(selection, k, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function(selection, x, y, event) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function(selection, x, y, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function(event) {\n if (event) this.sourceEvent = event;\n return this;\n },\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new ZoomEvent(type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type,\n transform: this.that.__zoom,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function wheeled(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = pointer(event);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event, ...args) {\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = pointer(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation(event);\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved(event) {\n noevent(event);\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.event(event)\n .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n dragEnable(event.view, g.moved);\n noevent(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n noevent(event);\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n else select(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started, i, t, p;\n\n nopropagation(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n t = pointer(t, this);\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function(_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n","<script>\n export let type = \"compass\";\n export let rotation = 0;\n export let position = \"inline\";\n export let clickable = false;\n export let margin = false;\n\n const paths = {\n compass: \"M22 12c0-5.52-4.48-10-10-10S2 6.48 2 12s4.48 10 10 10 10-4.48 10-10zm-10 1H8v-2h4V8l4 4-4 4v-3z\",\n\t\tinfo: \"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-6.99 15c-.7 0-1.26-.56-1.26-1.26 0-.71.56-1.25 1.26-1.25.71 0 1.25.54 1.25 1.25-.01.69-.54 1.26-1.25 1.26zm3.01-7.4c-.76 1.11-1.48 1.46-1.87 2.17-.16.29-.22.48-.22 1.41h-1.82c0-.49-.08-1.29.31-1.98.49-.87 1.42-1.39 1.96-2.16.57-.81.25-2.33-1.37-2.33-1.06 0-1.58.8-1.8 1.48l-1.65-.7C9.01 7.15 10.22 6 11.99 6c1.48 0 2.49.67 3.01 1.52.44.72.7 2.07.02 3.08z\",\n\t\tchart: \"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM8 17c-.55 0-1-.45-1-1v-5c0-.55.45-1 1-1s1 .45 1 1v5c0 .55-.45 1-1 1zm4 0c-.55 0-1-.45-1-1V8c0-.55.45-1 1-1s1 .45 1 1v8c0 .55-.45 1-1 1zm4 0c-.55 0-1-.45-1-1v-2c0-.55.45-1 1-1s1 .45 1 1v2c0 .55-.45 1-1 1z\",\n\t\tshare: \"M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z\",\n chevron: \"M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\",\n full: \"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\",\n full_exit: \"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z\",\n shuffle: \"M10.59 9.17 5.41 4 4 5.41l5.17 5.17 1.42-1.41zM14.5 4l2.04 2.04L4 18.59 5.41 20 17.96 7.46 20 9.5V4h-5.5zm.33 9.41-1.41 1.41 3.13 3.13L14.5 20H20v-5.5l-2.04 2.04-3.13-3.13z\",\n replay: \"M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z\",\n save: \"M19 12v7H5v-7H3v7c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-7h-2zm-6 .67 2.59-2.58L17 11.5l-5 5-5-5 1.41-1.41L11 12.67V3h2z\",\n tick: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\",\n cross: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\",\n arrow: \"M5,13h11.2l-2.9,2.9c-0.4,0.4-0.4,1,0,1.4s1,0.4,1.4,0l4.6-4.6c0.4-0.4,0.4-1,0-1.4l-4.6-4.6c-0.4-0.4-1-0.4-1.4,0c0,0,0,0,0,0c-0.4,0.4-0.4,1,0,1.4l2.9,2.9H5c-0.6,0-1,0.4-1,1S4.4,13,5,13z\",\n plus: \"M18 13h-5v5c0 .55-.45 1-1 1s-1-.45-1-1v-5H6c-.55 0-1-.45-1-1s.45-1 1-1h5V6c0-.55.45-1 1-1s1 .45 1 1v5h5c.55 0 1 .45 1 1s-.45 1-1 1z\",\n minus: \"M18 13H6c-.55 0-1-.45-1-1s.45-1 1-1h12c.55 0 1 .45 1 1s-.45 1-1 1z\"\n\t}\n\n let style = `transform: translate(0, 15%) scale(1.5) rotate(${-rotation}deg);`;\n if ([\"left\", \"right\"].includes(position)) style += ` position: absolute; ${position}: 10px;`\n</script>\n\n<svg\n class=\"icon\"\n viewBox=\"0 0 24 24\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {style}\n class:margin\n class:noclick={!clickable}>\n <path d={paths[type]}></path>\n</svg>\n\n<style>\n .icon {\n position: inherit;\n width: 1em;\n height: 1em;\n fill: currentColor;\n overflow: visible;\n transition: all 0.3s ease-out;\n }\n .noclick {\n pointer-events: none;\n }\n .margin {\n margin: 0 6px 0 1px;\n }\n</style>","<script>\n\timport { createEventDispatcher, onMount } from 'svelte';\n\tconst dispatch = createEventDispatcher();\n\timport { select } from 'd3-selection';\n\timport { zoom } from 'd3-zoom';\n\timport tooltip from '../ui/tooltip';\n\timport Icon from '../ui/Icon.svelte';\n\t\n\texport let data;\n\texport let next = null;\n\texport let selected = null;\n\texport let simple = false;\n\texport let interactive = true;\n\texport let el = undefined; // DOM element for map container\n\texport let hexes = {}; // DOM elements for hexes\n\texport let width = 100;\n\texport let height = 100;\n\texport let transform = null;\n\texport let route = null;\n\texport let vis = null;\n\texport let message = null;\n\n\tconst colors = ['#f66068', '#ef9f91', '#dbd6bd', '#8ebdb2', '#00a3a6'];\n\tconst breaks = [0, 20, 40, 60, 80, 100];\n\n\tlet next_index = 0;\n\tlet hexdata;\n\n\tlet svg\n\tlet w, h;\n\tlet x, y, z;\n\n\tconst _zoom = zoom().on('zoom', ({ transform }) => {\n\t\tz = transform.k;\n\t\tx = transform.x;\n\t\ty = transform.y;\n\t}).scaleExtent([0.5, 2]);\n\n\tconst doZoom = (factor) => _zoom.scaleBy(select(svg).transition().duration(500), factor);\n\t\n\tfunction makePoints(vertices) {\n\t\tlet points = [];\n\t\tvertices.forEach(d => points.push(d.x + ',' + d.y));\n\t\treturn points.join(' ');\n\t}\n\t\n\tfunction onClick(e, d) {\n\t\tdispatch('select', {\n\t\t\tcode: d.key,\n\t\t\tobj: d,\n\t\t\tevent: e\n\t\t});\n\t}\n\n\tfunction onKeydown(e, d) {\n\t\tif ([\" \", \"Enter\", \"Spacebar\"].includes(e.key)) {\n\t\t\tonClick(e, d);\n\t\t\tnext_index = 0;\n\t\t} else if ([\"ArrowRight\", \"ArrowDown\"].includes(e.key)) {\n\t\t\tnext_index = next_index + 1 == next.length ? 0 : next_index + 1;\n\t\t\thexes['next' + next_index].focus({preventScroll: true});\n\t\t} else if ([\"ArrowLeft\", \"ArrowUp\"].includes(e.key)) {\n\t\t\tnext_index = next_index - 1 < 0 ? next.length - 1 : next_index - 1;\n\t\t\thexes['next' + next_index].focus({preventScroll: true});\n\t\t}\n\t}\n\n\tfunction getStatus(key, route) {\n\t\tif (key == route[0]) {\n\t\t\treturn \"start\";\n\t\t} else if (key == route[route.length - 1]) {\n\t\t\treturn \"end\";\n\t\t} else if (route.includes(key)) {\n\t\t\treturn \"route\";\n\t\t} else {\n\t\t\treturn \"\";\n\t\t}\n\t}\n\n\tfunction setHexColors() {\n\t\tlet keys = Object.keys(vis);\n\t\tlet hexdata_new = {};\n\t\tfor (const key of keys) {\n\t\t\tlet value = [\"S\", \"N\"].includes(key.slice(0,1)) ? null : 100 * vis[key].r / (vis[key].r + vis[key].w);\n\t\t\thexdata_new[key] = {value, color: getColor(value, colors, breaks)};\n\t\t}\n\t\thexdata = hexdata_new;\n\t}\n\n\tfunction getColor(val, colors, breaks) {\n\t\tif (val != null) {\n\t\t\tfor (let i = 1; i < breaks.length; i ++) {\n\t\t\t\tif (val <= breaks[i]) {\n\t\t\t\t\treturn colors[i - 1];\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"lightgrey\";\n\t\t}\n\t}\n\n\tif (vis) setHexColors();\n\t\n\tonMount(async () => {\n\t\tif (interactive) {\n\t\t\tselect(svg).call(_zoom);\n\t\t\treCenter(selected, 1000);\n\t\t}\n\t});\n\t\n\tfunction reCenter(selected, duration=500) {\n\t\tif (interactive && selected && hexes[selected.key]) {\n\t\t\t_zoom.translateTo(select(svg).transition().duration(duration), selected.x, selected.y);\n\t\t}\n\t}\n\t\n\t$: reCenter(selected);\n</script>\n\n{#if interactive}\n<div class=\"control\">\n\t<button on:click={() => doZoom(2)} title=\"Zoom in\"><div class=\"icon\"><Icon type=\"plus\"/></div></button>\n\t<button on:click={() => doZoom(0.5)} title=\"Zoom out\"><div class=\"icon\"><Icon type=\"minus\"/></div></button>\n</div>\n{/if}\n\n<div\n\tbind:this={el}\n\tbind:clientWidth={w}\n\tbind:clientHeight={h}\n\tclass=\"map\"\n\tclass:pos-absolute={!simple}\n\taria-hidden=\"{simple || !interactive ? 'true' : 'false'}\">\n\t<svg viewBox=\"0 0 {interactive ? w : width} {interactive ? h : height}\" xmlns=\"http://www.w3.org/2000/svg\" bind:this={svg}>\n\t\t<g style:transform=\"{transform ? transform : `translate(${x}px, ${y}px) scale(${z})`}\">\n\t\t\t{#each data as d}\n\t\t\t<g on:click=\"{!simple && d.status != 'disabled' ? (e) => onClick(e, d) : null}\" bind:this={hexes[d.key]} class=\"{!route ? d.status : vis ? '' : getStatus(d.key, route)}\" transform=\"translate({d.x} {d.y})\">\n\t\t\t\t<polygon class=\"hex\" points=\"{makePoints(d.vertices)}\" style:fill={vis ? hexdata[d.key].color : null} style:stroke={vis ? hexdata[d.key].color : null} title=\"{d.n}\" use:tooltip/>\n\t\t\t\t{#if !simple}\n\t\t\t\t<text class=\"text\" aria-hidden=\"true\">{d.n.slice(0,1)}</text>\n\t\t\t\t{/if}\n\t\t\t\t<title>{d.n}{vis ? ` ${hexdata[d.key].value}%` : ''}</title>\n\t\t\t</g>\n\t\t\t{/each}\n\t\t\t{#if next && next[0]}\n\t\t\t<g\n\t\t\t\tbind:this={hexes['nextgroup']}\n\t\t\t\trole={message ? 'form' : ''}\n\t\t\t\taria-label={message}>\n\t\t\t\t{#each next as d, i}\n\t\t\t\t<g role=\"button\" tabindex={i == next_index ? 0 : -1} on:click=\"{(e) => onClick(e, d)}\" on:keydown=\"{(e) => onKeydown(e, d)}\" bind:this={hexes['next' + i]} class=\"adjacent-button\" transform=\"translate({d.x} {d.y})\">\n\t\t\t\t\t<polygon class=\"hex\" points=\"{makePoints(d.vertices)}\" title=\"{d.n}\" use:tooltip/>\n\t\t\t\t\t{#if i == next_index}<polygon class=\"hex outline\" points=\"{makePoints(d.vertices)}\"/>{/if}\n\t\t\t\t\t<text class=\"text\" aria-hidden=\"true\">{d.n.slice(0,1)}</text>\n\t\t\t\t\t<title>{`${d.n}, ${d.direction}`}</title>\n\t\t\t\t</g>\n\t\t\t\t{/each}\n\t\t\t</g>\n\t\t\t{/if}\n\t\t</g>\n\t</svg>\n</div>\n\n<style>\n\t.hex {\n\t\tfill: #b0b0b0;\n\t\tstroke: #b0b0b0;\n\t\tstroke-width: 4px;\n\t\ttransform: scale(0.82);\n\t}\n\t.text {\n\t\tfill: white;\n\t\tfont-family: 'Orbitron', sans-serif;\n\t\tfont-size: 16px;\n\t\tfont-weight: bold;\n\t\ttext-anchor: middle;\n\t\tdominant-baseline: middle;\n\t\tpointer-events: none;\n\t\ttransform: translateY(1px);\n\t}\n\t.start > polygon, .selected > polygon, .right > polygon {\n\t\tfill: #00A3A6;\n\t\tstroke: #00A3A6;\n\t}\n\t.wrong > polygon {\n\t\tfill: #F66068;\n\t\tstroke: #F66068;\n\t}\n\t.wrong > text {\n\t\topacity: 0.4;\n\t}\n\t.next > polygon {\n\t\tfill: grey;\n\t\tstroke: #00A3A6;\n\t}\n\t.end > polygon {\n\t\tfill: #206095;\n\t\tstroke: #206095;\n\t}\n\t.route > polygon {\n\t\tfill: grey;\n\t\tstroke: grey;\n\t}\n\t.adjacent {\n\t\tdisplay: none;\n\t}\n\t.adjacent-button {\n\t\tcursor: pointer;\n\t\toutline: none;\n\t}\n\t.adjacent-button > .hex, .adjacent-button > text {\n\t\tanimation: blink 1s linear infinite;\n\t}\n\t.adjacent-button:focus > .outline {\n\t\tanimation: none;\n\t\tfill: none;\n\t\tstroke: orange;\n\t}\n\t.disabled > polygon {\n\t\tfill: #ddd;\n\t\tstroke: #ddd;\n\t}\n\t.adjacent-button > .hex, .adjacent-button > text {\n\t\tanimation: blink 1s linear infinite;\n\t}\n\t.adjacent-button:focus > .outline {\n\t\tanimation: none;\n\t\tfill: none;\n\t\tstroke: orange;\n\t}\n\t.disabled > polygon {\n\t\tfill: #ddd;\n\t\tstroke: #ddd;\n\t}\n\t.selectable {\n\t\tcursor: pointer;\n\t}\n\t.map {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t}\n\t.pos-absolute {\n\t\tposition: absolute;\n\t}\n\tsvg {\n\t\tposition: relative;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\ttransform: translateY(5px);\n\t}\n\t.control {\n\t\tposition: absolute;\n\t\ttop: 15px;\n\t\tright: 15px;\n\t\tz-index: 1;\n\t}\n\t.control > button {\n\t\tdisplay: inline-flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\twidth: 36px;\n\t\theight: 36px;\n\t\tfont-size: 0.9em;\n\t\tfont-weight: bold;\n\t\tline-height: 0;\n\t\tclear: right;\n float: right;\n\t\tmargin: 0 0 5px 0;\n\t\tborder: 2px solid #777;\n\t\tcursor: pointer;\n\t}\n\t@keyframes blink {\n\t\t50% {\n\t\t\topacity: 0.2;\n\t\t}\n\t}\n\t.icon {\n\t\ttransform: translateY(-2px);\n\t}\n</style>","<script>\n\texport let value = null;\n\texport let lineWidth = 3;\n\texport let height = 10;\n\texport let breaks = [0,20,40,60,80,100];\n\texport let colors = ['#f66068', '#ef9f91', '#dbd6bd', '#8ebdb2', '#00a3a6'];\n export let suffix = \"%\";\n\texport let snapticks = true;\n\t\n\tconst pos = (val) => {\n\t\tlet i = 0;\n\t\twhile (val > breaks[i + 1]) i += 1;\n\t\tlet unit = 100 / (breaks.length - 1);\n\t\tlet offset = (val - breaks[i]) / (breaks[i + 1] - breaks[i]);\n\t\treturn (i + offset) * unit;\n\t}\n</script>\n\n<div class=\"container\" style=\"height: {height}px\">\n\t{#each breaks.slice(1) as brk, i}\n\t\t<div class=\"block\" style:width=\"{100 / (breaks.length - 1)}%\" style:left=\"{i * (100 / (breaks.length - 1))}%\" style:background-color=\"{colors[i % colors.length]}\"/>\n\t\t<div class=\"line\" style:left=\"{i * (100 / (breaks.length - 1))}%\"/>\n\t\t<div class=\"tick\" style:left=\"{i * (100 / (breaks.length - 1))}%\" style:transform=\"translateX({snapticks && i == 0 ? '-1px' : '-50%'})\">{breaks[i]}</div>\n\t{/each}\n\t<div class=\"line\" style:right=\"0\"/>\n\t<div class=\"tick\" style:left=\"100%\" style:transform=\"translateX({snapticks ? 'calc(-100% + 1px)' : '-50%'})\">{breaks[breaks.length - 1]}{suffix}</div>\n {#if value}\n\t <div class=\"marker\" style:width=\"{lineWidth}px\" style:left=\"calc({pos(value)}% - {lineWidth / 2}px)\"/>\n\t <div class=\"value\" style:left=\"{pos(value)}%\">{value}</div>\n {/if}\n</div>\n\n<style>\n\t.container {\n\t\tmargin: 4px 0 28px 0;\n\t\tbox-sizing: border-box;\n\t\tposition: relative;\n\t\twidth: 100%;\n\t}\n\t.block {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\theight: 100%;\n\t}\n\t.line {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\theight: calc(100% + 10px);\n\t\tborder-left: solid 1px black;\n\t}\n\t.tick {\n\t\tposition: absolute;\n\t\tz-index: 1;\n\t\ttop: calc(100% + 8px);\n\t\ttext-align: center;\n\t}\n\t.marker {\n\t\tposition: absolute;\n\t\tz-index: 2;\n\t\ttop: -10px;\n\t\theight: calc(100% + 10px);\n\t\tbackground-color: black;\n\t}\n\t.value {\n\t\tposition: absolute;\n\t\ttop: -32px;\n\t\ttext-align: center;\n\t\ttransform: translateX(-50%);\n\t}\n</style>","<script>\n export let data;\n export let colors = ['grey'];\n\n let blocks = [];\n data.forEach((val, i) => {\n for (let j = 0; j < val; j ++) {\n blocks.push(colors[i % colors.length]);\n }\n });\n</script>\n\n<div class=\"bar-group\">\n {#each blocks as block, i}\n {#if block}\n <div style:left=\"{100 *(i / blocks.length)}%\" style:width=\"calc({100 * (1 / blocks.length)}% - 1.5px)\" style:background-color=\"{block}\"/>\n {/if}\n {/each}\n</div>\n\n<style>\n .bar-group {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\twidth: 100%;\n\t\theight: 15px;\n margin-bottom: 1.5px;\n\t}\n\t.bar-group > div {\n\t\tposition: absolute;\n\t\theight: 100%;\n\t\ttop: 0;\n\t}\n</style>","<script>\n export let isActive = false;\n export let isFirst = false;\n export let isHover = false;\n export let isSelectable = false;\n export let getOptionLabel = undefined;\n export let item = undefined;\n export let filterText = '';\n\n let itemClasses = '';\n\n $: {\n const classes = [];\n if (isActive) {\n classes.push('active');\n }\n if (isFirst) {\n classes.push('first');\n }\n if (isHover) {\n classes.push('hover');\n }\n if (item.isGroupHeader) {\n classes.push('groupHeader');\n }\n if (item.isGroupItem) {\n classes.push('groupItem');\n }\n if (!isSelectable) {\n classes.push('notSelectable');\n }\n itemClasses = classes.join(' ');\n }\n</script>\n\n<style>\n .item {\n cursor: default;\n height: var(--height, 42px);\n line-height: var(--height, 42px);\n padding: var(--itemPadding, 0 20px);\n color: var(--itemColor, inherit);\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n .groupHeader {\n text-transform: var(--groupTitleTextTransform, uppercase);\n }\n\n .groupItem {\n padding-left: var(--groupItemPaddingLeft, 40px);\n }\n\n .item:active {\n background: var(--itemActiveBackground, #b9daff);\n }\n\n .item.active {\n background: var(--itemIsActiveBG, #007aff);\n color: var(--itemIsActiveColor, #fff);\n }\n\n .item.notSelectable {\n color: var(--itemIsNotSelectableColor, #999);\n }\n\n .item.first {\n border-radius: var(--itemFirstBorderRadius, 4px 4px 0 0);\n }\n\n .item.hover:not(.active) {\n background: var(--itemHoverBG, #e7f2ff);\n color: var(--itemHoverColor, inherit);\n }\n</style>\n\n<div class=\"item {itemClasses}\">\n {@html getOptionLabel(item, filterText)}\n</div>\n","<script>\n import { beforeUpdate, createEventDispatcher, onMount, tick } from 'svelte';\n import isOutOfViewport from './utils/isOutOfViewport';\n import ItemComponent from './Item.svelte';\n\n const dispatch = createEventDispatcher();\n\n export let container = undefined;\n export let VirtualList = null;\n export let Item = ItemComponent;\n export let isVirtualList = false;\n export let items = [];\n export let labelIdentifier = 'label';\n export let getOptionLabel = (option, filterText) => {\n if (option)\n return option.isCreator\n ? `Create \\\"${filterText}\\\"`\n : option[labelIdentifier];\n };\n export let getGroupHeaderLabel = null;\n export let itemHeight = 40;\n export let hoverItemIndex = 0;\n export let value = undefined;\n export let optionIdentifier = 'value';\n export let hideEmptyState = false;\n export let noOptionsMessage = 'No options';\n export let isMulti = false;\n export let activeItemIndex = 0;\n export let filterText = '';\n export let parent = null;\n export let listPlacement = null;\n export let listAutoWidth = null;\n export let listOffset = 5;\n\n let isScrollingTimer = 0;\n let isScrolling = false;\n let prev_items;\n\n onMount(() => {\n if (items.length > 0 && !isMulti && value) {\n const _hoverItemIndex = items.findIndex(\n (item) => item[optionIdentifier] === value[optionIdentifier]\n );\n\n if (_hoverItemIndex) {\n hoverItemIndex = _hoverItemIndex;\n }\n }\n\n scrollToActiveItem('active');\n\n container.addEventListener(\n 'scroll',\n () => {\n clearTimeout(isScrollingTimer);\n\n isScrollingTimer = setTimeout(() => {\n isScrolling = false;\n }, 100);\n },\n false\n );\n });\n\n beforeUpdate(() => {\n if (!items) items = [];\n if (items !== prev_items && items.length > 0) {\n hoverItemIndex = 0;\n }\n\n prev_items = items;\n });\n\n function handleSelect(item) {\n if (item.isCreator) return;\n dispatch('itemSelected', item);\n }\n\n function handleHover(i) {\n if (isScrolling) return;\n hoverItemIndex = i;\n }\n\n function handleClick(args) {\n const { item, i, event } = args;\n event.stopPropagation();\n\n if (\n value &&\n !isMulti &&\n value[optionIdentifier] === item[optionIdentifier]\n )\n return closeList();\n\n if (item.isCreator) {\n dispatch('itemCreated', filterText);\n } else if (isItemSelectable(item)) {\n activeItemIndex = i;\n hoverItemIndex = i;\n handleSelect(item);\n }\n }\n\n function closeList() {\n dispatch('closeList');\n }\n\n async function updateHoverItem(increment) {\n if (isVirtualList) return;\n\n let isNonSelectableItem = true;\n\n while (isNonSelectableItem) {\n if (increment > 0 && hoverItemIndex === items.length - 1) {\n hoverItemIndex = 0;\n } else if (increment < 0 && hoverItemIndex === 0) {\n hoverItemIndex = items.length - 1;\n } else {\n hoverItemIndex = hoverItemIndex + increment;\n }\n\n isNonSelectableItem = !isItemSelectable(items[hoverItemIndex]);\n }\n\n await tick();\n\n scrollToActiveItem('hover');\n }\n\n function handleKeyDown(e) {\n switch (e.key) {\n case 'Escape':\n e.preventDefault();\n closeList();\n break;\n case 'ArrowDown':\n e.preventDefault();\n items.length && updateHoverItem(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n items.length && updateHoverItem(-1);\n break;\n case 'Enter':\n e.preventDefault();\n if (items.length === 0) break;\n const hoverItem = items[hoverItemIndex];\n if (\n value &&\n !isMulti &&\n value[optionIdentifier] === hoverItem[optionIdentifier]\n ) {\n closeList();\n break;\n }\n if (hoverItem.isCreator) {\n dispatch('itemCreated', filterText);\n } else {\n activeItemIndex = hoverItemIndex;\n handleSelect(items[hoverItemIndex]);\n }\n break;\n case 'Tab':\n e.preventDefault();\n if (items.length === 0) {\n return closeList();\n }\n if (\n value &&\n value[optionIdentifier] ===\n items[hoverItemIndex][optionIdentifier]\n )\n return closeList();\n activeItemIndex = hoverItemIndex;\n handleSelect(items[hoverItemIndex]);\n break;\n }\n }\n\n function scrollToActiveItem(className) {\n if (isVirtualList || !container) return;\n\n let offsetBounding;\n const focusedElemBounding = container.querySelector(\n `.listItem .${className}`\n );\n\n if (focusedElemBounding) {\n offsetBounding =\n container.getBoundingClientRect().bottom -\n focusedElemBounding.getBoundingClientRect().bottom;\n }\n\n container.scrollTop -= offsetBounding;\n }\n\n function isItemActive(item, value, optionIdentifier) {\n return value && value[optionIdentifier] === item[optionIdentifier];\n }\n\n function isItemFirst(itemIndex) {\n return itemIndex === 0;\n }\n\n function isItemHover(hoverItemIndex, item, itemIndex, items) {\n return isItemSelectable(item) && (hoverItemIndex === itemIndex || items.length === 1);\n }\n\n function isItemSelectable(item) {\n return (item.isGroupHeader && item.isSelectable) ||\n item.selectable ||\n !item.hasOwnProperty('selectable') // Default; if `selectable` was not specified, the object is selectable\n }\n\n let listStyle;\n function computePlacement() {\n const { height, width } = parent.getBoundingClientRect();\n\n listStyle = '';\n listStyle += `min-width:${width}px;width:${\n listAutoWidth ? 'auto' : '100%'\n };`;\n\n if (\n listPlacement === 'top' ||\n (listPlacement === 'auto' && isOutOfViewport(parent, container).bottom)\n ) {\n listStyle += `bottom:${height + listOffset}px;`;\n } else {\n listStyle += `top:${height + listOffset}px;`;\n }\n }\n\n $: {\n if (parent && container) computePlacement();\n }\n</script>\n\n<style>\n .listContainer {\n box-shadow: var(--listShadow, 0 2px 3px 0 rgba(44, 62, 80, 0.24));\n border-radius: var(--listBorderRadius, 4px);\n max-height: var(--listMaxHeight, 250px);\n overflow-y: auto;\n background: var(--listBackground, #fff);\n border: var(--listBorder, none);\n position: var(--listPosition, absolute);\n z-index: var(--listZIndex, 2);\n width: 100%;\n left: var(--listLeft, 0);\n right: var(--listRight, 0);\n }\n\n .virtualList {\n height: var(--virtualListHeight, 200px);\n }\n\n .listGroupTitle {\n color: var(--groupTitleColor, #8f8f8f);\n cursor: default;\n font-size: var(--groupTitleFontSize, 12px);\n font-weight: var(--groupTitleFontWeight, 600);\n height: var(--height, 42px);\n line-height: var(--height, 42px);\n padding: var(--groupTitlePadding, 0 20px);\n text-overflow: ellipsis;\n overflow-x: hidden;\n white-space: nowrap;\n text-transform: var(--groupTitleTextTransform, uppercase);\n }\n\n .empty {\n text-align: var(--listEmptyTextAlign, center);\n padding: var(--listEmptyPadding, 20px 0);\n color: var(--listEmptyColor, #78848f);\n }\n</style>\n\n<svelte:window on:keydown={handleKeyDown} on:resize={computePlacement} />\n\n<div\n class=\"listContainer\"\n class:virtualList={isVirtualList}\n bind:this={container}\n style={listStyle}>\n {#if isVirtualList}\n <svelte:component\n this={VirtualList}\n {items}\n {itemHeight}\n let:item\n let:i>\n <div\n on:mouseover={() => handleHover(i)}\n on:focus={() => handleHover(i)}\n on:click={(event) => handleClick({ item, i, event })}\n class=\"listItem\">\n <svelte:component\n this={Item}\n {item}\n {filterText}\n {getOptionLabel}\n isFirst={isItemFirst(i)}\n isActive={isItemActive(item, value, optionIdentifier)}\n isHover={isItemHover(hoverItemIndex, item, i, items)}\n isSelectable={isItemSelectable(item)} />\n </div>\n </svelte:component>\n {:else}\n {#each items as item, i}\n {#if item.isGroupHeader && !item.isSelectable}\n <div class=\"listGroupTitle\">{getGroupHeaderLabel(item)}</div>\n {:else}\n <div\n on:mouseover={() => handleHover(i)}\n on:focus={() => handleHover(i)}\n on:click={(event) => handleClick({ item, i, event })}\n class=\"listItem\"\n tabindex=\"-1\">\n <svelte:component\n this={Item}\n {item}\n {filterText}\n {getOptionLabel}\n isFirst={isItemFirst(i)}\n isActive={isItemActive(item, value, optionIdentifier)}\n isHover={isItemHover(hoverItemIndex, item, i, items)}\n isSelectable={isItemSelectable(item)} />\n </div>\n {/if}\n {:else}\n {#if !hideEmptyState}\n <div class=\"empty\">{noOptionsMessage}</div>\n {/if}\n {/each}\n {/if}\n</div>\n","export default function (parent, container) {\n const parentBounding = parent.getBoundingClientRect();\n const boundingContainer = container.getBoundingClientRect();\n const out = {};\n\n out.top = parentBounding.top < 0;\n out.left = parentBounding.left < 0;\n out.bottom =\n parentBounding.bottom + boundingContainer.height >\n (window.innerHeight || document.documentElement.clientHeight);\n\n out.right =\n parentBounding.right >\n (window.innerWidth || document.documentElement.clientWidth);\n out.any = out.top || out.left || out.bottom || out.right;\n\n return out;\n}\n","<script>\n export let getSelectionLabel = undefined;\n export let item = undefined;\n</script>\n\n<style>\n .selection {\n text-overflow: ellipsis;\n overflow-x: hidden;\n white-space: nowrap;\n }\n</style>\n\n<div class=\"selection\">\n {@html getSelectionLabel(item)}\n</div>\n","<script>\n import { createEventDispatcher } from 'svelte';\n\n const dispatch = createEventDispatcher();\n\n export let value = [];\n export let activeValue = undefined;\n export let isDisabled = false;\n export let multiFullItemClearable = false;\n export let getSelectionLabel = undefined;\n\n function handleClear(i, event) {\n event.stopPropagation();\n dispatch('multiItemClear', { i });\n }\n</script>\n\n<style>\n .multiSelectItem {\n background: var(--multiItemBG, #ebedef);\n margin: var(--multiItemMargin, 5px 5px 0 0);\n border-radius: var(--multiItemBorderRadius, 16px);\n height: var(--multiItemHeight, 32px);\n line-height: var(--multiItemHeight, 32px);\n display: flex;\n cursor: default;\n padding: var(--multiItemPadding, 0 10px 0 15px);\n max-width: 100%;\n }\n\n .multiSelectItem_label {\n margin: var(--multiLabelMargin, 0 5px 0 0);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .multiSelectItem:hover,\n .multiSelectItem.active {\n background-color: var(--multiItemActiveBG, #006fff);\n color: var(--multiItemActiveColor, #fff);\n }\n\n .multiSelectItem.disabled:hover {\n background: var(--multiItemDisabledHoverBg, #ebedef);\n color: var(--multiItemDisabledHoverColor, #c1c6cc);\n }\n\n .multiSelectItem_clear {\n border-radius: var(--multiClearRadius, 50%);\n background: var(--multiClearBG, #52616f);\n min-width: var(--multiClearWidth, 16px);\n max-width: var(--multiClearWidth, 16px);\n height: var(--multiClearHeight, 16px);\n position: relative;\n top: var(--multiClearTop, 8px);\n text-align: var(--multiClearTextAlign, center);\n padding: var(--multiClearPadding, 1px);\n }\n\n .multiSelectItem_clear:hover,\n .active .multiSelectItem_clear {\n background: var(--multiClearHoverBG, #fff);\n }\n\n .multiSelectItem_clear:hover svg,\n .active .multiSelectItem_clear svg {\n fill: var(--multiClearHoverFill, #006fff);\n }\n\n .multiSelectItem_clear svg {\n fill: var(--multiClearFill, #ebedef);\n vertical-align: top;\n }\n</style>\n\n{#each value as item, i}\n <div\n class=\"multiSelectItem {activeValue === i ? 'active' : ''} {isDisabled\n ? 'disabled'\n : ''}\"\n on:click={(event) =>\n multiFullItemClearable ? handleClear(i, event) : {}}>\n <div class=\"multiSelectItem_label\">\n {@html getSelectionLabel(item)}\n </div>\n {#if !isDisabled && !multiFullItemClearable}\n <div\n class=\"multiSelectItem_clear\"\n on:click={(event) => handleClear(i, event)}>\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox=\"-2 -2 50 50\"\n focusable=\"false\"\n aria-hidden=\"true\"\n role=\"presentation\">\n <path\n d=\"M34.923,37.251L24,26.328L13.077,37.251L9.436,33.61l10.923-10.923L9.436,11.765l3.641-3.641L24,19.047L34.923,8.124 l3.641,3.641L27.641,22.688L38.564,33.61L34.923,37.251z\" />\n </svg>\n </div>\n {/if}\n </div>\n{/each}\n","<script>\n import { onMount, tick } from 'svelte';\n\n export let items = undefined;\n export let height = '100%';\n export let itemHeight = 40;\n export let hoverItemIndex = 0;\n export let start = 0;\n export let end = 0;\n\n let height_map = [];\n let rows;\n let viewport;\n let contents;\n let viewport_height = 0;\n let visible;\n let mounted;\n\n let top = 0;\n let bottom = 0;\n let average_height;\n\n $: visible = items.slice(start, end).map((data, i) => {\n return { index: i + start, data };\n });\n\n $: if (mounted) refresh(items, viewport_height, itemHeight);\n\n async function refresh(items, viewport_height, itemHeight) {\n const { scrollTop } = viewport;\n\n await tick();\n\n let content_height = top - scrollTop;\n let i = start;\n\n while (content_height < viewport_height && i < items.length) {\n let row = rows[i - start];\n\n if (!row) {\n end = i + 1;\n await tick();\n row = rows[i - start];\n }\n\n const row_height = (height_map[i] = itemHeight || row.offsetHeight);\n content_height += row_height;\n i += 1;\n }\n\n end = i;\n\n const remaining = items.length - end;\n average_height = (top + content_height) / end;\n\n bottom = remaining * average_height;\n height_map.length = items.length;\n\n if (viewport) viewport.scrollTop = 0;\n }\n\n async function handle_scroll() {\n const { scrollTop } = viewport;\n\n const old_start = start;\n\n for (let v = 0; v < rows.length; v += 1) {\n height_map[start + v] = itemHeight || rows[v].offsetHeight;\n }\n\n let i = 0;\n let y = 0;\n\n while (i < items.length) {\n const row_height = height_map[i] || average_height;\n if (y + row_height > scrollTop) {\n start = i;\n top = y;\n\n break;\n }\n\n y += row_height;\n i += 1;\n }\n\n while (i < items.length) {\n y += height_map[i] || average_height;\n i += 1;\n\n if (y > scrollTop + viewport_height) break;\n }\n\n end = i;\n\n const remaining = items.length - end;\n average_height = y / end;\n\n while (i < items.length) height_map[i++] = average_height;\n bottom = remaining * average_height;\n\n if (start < old_start) {\n await tick();\n\n let expected_height = 0;\n let actual_height = 0;\n\n for (let i = start; i < old_start; i += 1) {\n if (rows[i - start]) {\n expected_height += height_map[i];\n actual_height += itemHeight || rows[i - start].offsetHeight;\n }\n }\n\n const d = actual_height - expected_height;\n viewport.scrollTo(0, scrollTop + d);\n }\n }\n\n onMount(() => {\n rows = contents.getElementsByTagName('svelte-virtual-list-row');\n mounted = true;\n });\n</script>\n\n<style>\n svelte-virtual-list-viewport {\n position: relative;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n display: block;\n }\n\n svelte-virtual-list-contents,\n svelte-virtual-list-row {\n display: block;\n }\n\n svelte-virtual-list-row {\n overflow: hidden;\n }\n</style>\n\n<svelte-virtual-list-viewport\n bind:this={viewport}\n bind:offsetHeight={viewport_height}\n on:scroll={handle_scroll}\n style=\"height: {height};\">\n <svelte-virtual-list-contents\n bind:this={contents}\n style=\"padding-top: {top}px; padding-bottom: {bottom}px;\">\n {#each visible as row (row.index)}\n <svelte-virtual-list-row>\n <slot item={row.data} i={row.index} {hoverItemIndex}>Missing template</slot>\n </svelte-virtual-list-row>\n {/each}\n </svelte-virtual-list-contents>\n</svelte-virtual-list-viewport>\n","<svg\n width=\"100%\"\n height=\"100%\"\n viewBox=\"-2 -2 50 50\"\n focusable=\"false\"\n aria-hidden=\"true\"\n role=\"presentation\"\n>\n <path\n fill=\"currentColor\"\n d=\"M34.923,37.251L24,26.328L13.077,37.251L9.436,33.61l10.923-10.923L9.436,11.765l3.641-3.641L24,19.047L34.923,8.124\n l3.641,3.641L27.641,22.688L38.564,33.61L34.923,37.251z\"\n />\n</svg>\n","<script>\n import { beforeUpdate, createEventDispatcher, onMount } from 'svelte';\n\n import _List from './List.svelte';\n import _Item from './Item.svelte';\n import _Selection from './Selection.svelte';\n import _MultiSelection from './MultiSelection.svelte';\n import _VirtualList from './VirtualList.svelte';\n import _ClearIcon from './ClearIcon.svelte';\n import debounce from './utils/debounce';\n\n const dispatch = createEventDispatcher();\n\n export let id = null;\n export let container = undefined;\n export let input = undefined;\n export let isMulti = false;\n export let multiFullItemClearable = false;\n export let isDisabled = false;\n export let isCreatable = false;\n export let isFocused = false;\n export let value = null;\n export let filterText = '';\n export let placeholder = 'Select...';\n export let placeholderAlwaysShow = false;\n export let items = null;\n export let itemFilter = (label, filterText, option) =>\n `${label}`.toLowerCase().includes(filterText.toLowerCase());\n export let groupBy = undefined;\n export let groupFilter = (groups) => groups;\n export let isGroupHeaderSelectable = false;\n export let getGroupHeaderLabel = (option) => {\n return option[labelIdentifier] || option.id;\n };\n export let labelIdentifier = 'label';\n export let getOptionLabel = (option, filterText) => {\n return option.isCreator\n ? `Create \\\"${filterText}\\\"`\n : option[labelIdentifier];\n };\n export let optionIdentifier = 'value';\n export let loadOptions = undefined;\n export let hasError = false;\n export let containerStyles = '';\n export let getSelectionLabel = (option) => {\n if (option) return option[labelIdentifier];\n else return null;\n };\n\n export let createGroupHeaderItem = (groupValue) => {\n return {\n value: groupValue,\n label: groupValue,\n };\n };\n\n export let createItem = (filterText) => {\n return {\n value: filterText,\n label: filterText,\n };\n };\n\n export const getFilteredItems = () => {\n return filteredItems;\n };\n\n export let isSearchable = true;\n export let inputStyles = '';\n export let isClearable = true;\n export let isWaiting = false;\n export let listPlacement = 'auto';\n export let listOpen = false;\n export let isVirtualList = false;\n export let loadOptionsInterval = 300;\n export let noOptionsMessage = 'No options';\n export let hideEmptyState = false;\n export let inputAttributes = {};\n export let listAutoWidth = true;\n export let itemHeight = 40;\n export let Icon = undefined;\n export let iconProps = {};\n export let showChevron = false;\n export let showIndicator = false;\n export let containerClasses = '';\n export let indicatorSvg = undefined;\n export let listOffset = 5;\n\n export let ClearIcon = _ClearIcon;\n export let Item = _Item;\n export let List = _List;\n export let Selection = _Selection;\n export let MultiSelection = _MultiSelection;\n export let VirtualList = _VirtualList;\n\n function filterMethod(args) {\n if (args.loadOptions && args.filterText.length > 0) return;\n if (!args.items) return [];\n\n if (\n args.items &&\n args.items.length > 0 &&\n typeof args.items[0] !== 'object'\n ) {\n args.items = convertStringItemsToObjects(args.items);\n }\n\n let filterResults = args.items.filter((item) => {\n let matchesFilter = itemFilter(\n getOptionLabel(item, args.filterText),\n args.filterText,\n item\n );\n\n if (\n matchesFilter &&\n args.isMulti &&\n args.value &&\n Array.isArray(args.value)\n ) {\n matchesFilter = !args.value.some((x) => {\n return (\n x[args.optionIdentifier] === item[args.optionIdentifier]\n );\n });\n }\n\n return matchesFilter;\n });\n\n if (args.groupBy) {\n filterResults = filterGroupedItems(filterResults);\n }\n\n if (args.isCreatable) {\n filterResults = addCreatableItem(filterResults, args.filterText);\n }\n\n return filterResults;\n }\n\n function addCreatableItem(_items, _filterText) {\n if (_filterText.length === 0) return _items;\n const itemToCreate = createItem(_filterText);\n if (_items[0] && _filterText === _items[0][labelIdentifier])\n return _items;\n itemToCreate.isCreator = true;\n return [..._items, itemToCreate];\n }\n\n $: filteredItems = filterMethod({\n loadOptions,\n filterText,\n items,\n value,\n isMulti,\n optionIdentifier,\n groupBy,\n isCreatable,\n });\n\n export let selectedValue = null;\n $: {\n if (selectedValue)\n console.warn(\n 'selectedValue is no longer used. Please use value instead.'\n );\n }\n\n let activeValue;\n let prev_value;\n let prev_filterText;\n let prev_isFocused;\n let prev_isMulti;\n let hoverItemIndex;\n\n const getItems = debounce(async () => {\n isWaiting = true;\n let res = await loadOptions(filterText).catch((err) => {\n console.warn('svelte-select loadOptions error :>> ', err);\n dispatch('error', { type: 'loadOptions', details: err });\n });\n\n if (res && !res.cancelled) {\n if (res) {\n if (res && res.length > 0 && typeof res[0] !== 'object') {\n res = convertStringItemsToObjects(res);\n }\n filteredItems = [...res];\n dispatch('loaded', { items: filteredItems });\n } else {\n filteredItems = [];\n }\n\n if (isCreatable) {\n filteredItems = addCreatableItem(filteredItems, filterText);\n }\n\n isWaiting = false;\n isFocused = true;\n listOpen = true;\n }\n }, loadOptionsInterval);\n\n $: updateValueDisplay(items);\n\n function setValue() {\n if (typeof value === 'string') {\n value = {\n [optionIdentifier]: value,\n label: value,\n };\n } else if (isMulti && Array.isArray(value) && value.length > 0) {\n value = value.map((item) =>\n typeof item === 'string' ? { value: item, label: item } : item\n );\n }\n }\n\n let _inputAttributes;\n function assignInputAttributes() {\n _inputAttributes = Object.assign(\n {\n autocapitalize: 'none',\n autocomplete: 'off',\n autocorrect: 'off',\n spellcheck: false,\n tabindex: 0,\n type: 'text',\n 'aria-autocomplete': 'list',\n },\n inputAttributes\n );\n\n if (id) {\n _inputAttributes.id = id;\n }\n\n if (!isSearchable) {\n _inputAttributes.readonly = true;\n }\n }\n\n function convertStringItemsToObjects(_items) {\n return _items.map((item, index) => {\n return {\n index,\n value: item,\n label: `${item}`,\n };\n });\n }\n\n function filterGroupedItems(_items) {\n const groupValues = [];\n const groups = {};\n\n _items.forEach((item) => {\n const groupValue = groupBy(item);\n\n if (!groupValues.includes(groupValue)) {\n groupValues.push(groupValue);\n groups[groupValue] = [];\n\n if (groupValue) {\n groups[groupValue].push(\n Object.assign(createGroupHeaderItem(groupValue, item), {\n id: groupValue,\n isGroupHeader: true,\n isSelectable: isGroupHeaderSelectable,\n })\n );\n }\n }\n\n groups[groupValue].push(\n Object.assign({ isGroupItem: !!groupValue }, item)\n );\n });\n\n const sortedGroupedItems = [];\n\n groupFilter(groupValues).forEach((groupValue) => {\n sortedGroupedItems.push(...groups[groupValue]);\n });\n\n return sortedGroupedItems;\n }\n\n function dispatchSelectedItem() {\n if (isMulti) {\n if (JSON.stringify(value) !== JSON.stringify(prev_value)) {\n if (checkValueForDuplicates()) {\n dispatch('select', value);\n }\n }\n return;\n }\n\n if (\n !prev_value ||\n JSON.stringify(value[optionIdentifier]) !==\n JSON.stringify(prev_value[optionIdentifier])\n ) {\n dispatch('select', value);\n }\n }\n\n function setupFocus() {\n if (isFocused || listOpen) {\n handleFocus();\n } else {\n if (input) input.blur();\n }\n }\n\n function setupMulti() {\n if (value) {\n if (Array.isArray(value)) {\n value = [...value];\n } else {\n value = [value];\n }\n }\n }\n\n function setupSingle() {\n if (value) value = null;\n }\n\n $: {\n if (value) setValue();\n }\n\n $: {\n if (inputAttributes || !isSearchable) assignInputAttributes();\n }\n\n $: {\n if (isMulti) {\n setupMulti();\n }\n\n if (prev_isMulti && !isMulti) {\n setupSingle();\n }\n }\n\n $: {\n if (isMulti && value && value.length > 1) {\n checkValueForDuplicates();\n }\n }\n\n $: {\n if (value) dispatchSelectedItem();\n }\n\n $: {\n if (!value && isMulti && prev_value) {\n dispatch('select', value);\n }\n }\n\n $: {\n if (isFocused !== prev_isFocused) {\n setupFocus();\n }\n }\n\n $: {\n if (filterText !== prev_filterText) {\n setupFilterText();\n }\n }\n\n function setupFilterText() {\n if (filterText.length === 0) return;\n\n isFocused = true;\n listOpen = true;\n\n if (loadOptions) {\n getItems();\n } else {\n listOpen = true;\n\n if (isMulti) {\n activeValue = undefined;\n }\n }\n }\n\n $: showSelectedItem = value && filterText.length === 0;\n $: showClearIcon =\n showSelectedItem && isClearable && !isDisabled && !isWaiting;\n $: placeholderText =\n placeholderAlwaysShow && isMulti\n ? placeholder\n : value\n ? ''\n : placeholder;\n $: showMultiSelect = isMulti && value && value.length > 0;\n\n beforeUpdate(async () => {\n prev_value = value;\n prev_filterText = filterText;\n prev_isFocused = isFocused;\n prev_isMulti = isMulti;\n });\n\n function checkValueForDuplicates() {\n let noDuplicates = true;\n if (value) {\n const ids = [];\n const uniqueValues = [];\n\n value.forEach((val) => {\n if (!ids.includes(val[optionIdentifier])) {\n ids.push(val[optionIdentifier]);\n uniqueValues.push(val);\n } else {\n noDuplicates = false;\n }\n });\n\n if (!noDuplicates) value = uniqueValues;\n }\n return noDuplicates;\n }\n\n function findItem(selection) {\n let matchTo = selection\n ? selection[optionIdentifier]\n : value[optionIdentifier];\n return items.find((item) => item[optionIdentifier] === matchTo);\n }\n\n function updateValueDisplay(items) {\n if (\n !items ||\n items.length === 0 ||\n items.some((item) => typeof item !== 'object')\n )\n return;\n if (\n !value ||\n (isMulti\n ? value.some(\n (selection) => !selection || !selection[optionIdentifier]\n )\n : !value[optionIdentifier])\n )\n return;\n\n if (Array.isArray(value)) {\n value = value.map((selection) => findItem(selection) || selection);\n } else {\n value = findItem() || value;\n }\n }\n\n function handleMultiItemClear(event) {\n const { detail } = event;\n const itemToRemove = value[detail ? detail.i : value.length - 1];\n\n if (value.length === 1) {\n value = undefined;\n } else {\n value = value.filter((item) => {\n return item !== itemToRemove;\n });\n }\n\n dispatch('clear', itemToRemove);\n }\n\n function handleKeyDown(e) {\n if (!isFocused) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n listOpen = true;\n activeValue = undefined;\n break;\n case 'ArrowUp':\n e.preventDefault();\n listOpen = true;\n activeValue = undefined;\n break;\n case 'Tab':\n if (!listOpen) isFocused = false;\n break;\n case 'Backspace':\n if (!isMulti || filterText.length > 0) return;\n if (isMulti && value && value.length > 0) {\n handleMultiItemClear(\n activeValue !== undefined\n ? activeValue\n : value.length - 1\n );\n if (activeValue === 0 || activeValue === undefined) break;\n activeValue =\n value.length > activeValue\n ? activeValue - 1\n : undefined;\n }\n break;\n case 'ArrowLeft':\n if (!isMulti || filterText.length > 0) return;\n if (activeValue === undefined) {\n activeValue = value.length - 1;\n } else if (value.length > activeValue && activeValue !== 0) {\n activeValue -= 1;\n }\n break;\n case 'ArrowRight':\n if (\n !isMulti ||\n filterText.length > 0 ||\n activeValue === undefined\n )\n return;\n if (activeValue === value.length - 1) {\n activeValue = undefined;\n } else if (activeValue < value.length - 1) {\n activeValue += 1;\n }\n break;\n }\n }\n\n function handleFocus() {\n isFocused = true;\n if (input) input.focus();\n }\n\n function handleWindowEvent(event) {\n if (!container) return;\n const eventTarget =\n event.path && event.path.length > 0 ? event.path[0] : event.target;\n if (container.contains(eventTarget) || container.contains(event.relatedTarget)) {\n return;\n }\n isFocused = false;\n listOpen = false;\n activeValue = undefined;\n if (input) input.blur();\n }\n\n function handleClick() {\n if (isDisabled) return;\n isFocused = true;\n listOpen = !listOpen;\n }\n\n export function handleClear() {\n value = undefined;\n listOpen = false;\n dispatch('clear', value);\n handleFocus();\n }\n\n onMount(() => {\n if (isFocused && input) input.focus();\n });\n\n $: listProps = {\n Item,\n filterText,\n optionIdentifier,\n noOptionsMessage,\n hideEmptyState,\n isVirtualList,\n VirtualList,\n value,\n isMulti,\n getGroupHeaderLabel,\n items: filteredItems,\n itemHeight,\n getOptionLabel,\n listPlacement,\n parent: container,\n listAutoWidth,\n listOffset,\n };\n\n function itemSelected(event) {\n const { detail } = event;\n\n if (detail) {\n filterText = '';\n const item = Object.assign({}, detail);\n\n if (!item.isGroupHeader || item.isSelectable) {\n if (isMulti) {\n value = value ? value.concat([item]) : [item];\n } else {\n value = item;\n }\n\n value = value;\n\n setTimeout(() => {\n listOpen = false;\n activeValue = undefined;\n });\n }\n }\n }\n\n function itemCreated(event) {\n const { detail } = event;\n if (isMulti) {\n value = value || [];\n value = [...value, createItem(detail)];\n } else {\n value = createItem(detail);\n }\n\n dispatch('itemCreated', detail);\n filterText = '';\n listOpen = false;\n activeValue = undefined;\n }\n\n function closeList() {\n filterText = '';\n listOpen = false;\n }\n\n export let ariaValues = (values) => {\n return `Option ${values}, selected.`;\n };\n\n export let ariaListOpen = (label, count) => {\n return `You are currently focused on option ${label}. There are ${count} results available.`;\n };\n\n export let ariaFocused = () => {\n return `Select is focused, type to refine list, press down to open the menu.`;\n };\n\n function handleAriaSelection() {\n let selected = undefined;\n\n if (isMulti && value.length > 0) {\n selected = value.map((v) => getSelectionLabel(v)).join(', ');\n } else {\n selected = getSelectionLabel(value);\n }\n\n return ariaValues(selected);\n }\n\n function handleAriaContent() {\n if (!isFocused || !filteredItems || filteredItems.length === 0)\n return '';\n\n let _item = filteredItems[hoverItemIndex];\n if (listOpen && _item) {\n let label = getSelectionLabel(_item);\n let count = filteredItems ? filteredItems.length : 0;\n\n return ariaListOpen(label, count);\n } else {\n return ariaFocused();\n }\n }\n\n $: ariaSelection = value ? handleAriaSelection(isMulti) : '';\n $: ariaContext = handleAriaContent(\n filteredItems,\n hoverItemIndex,\n isFocused,\n listOpen\n );\n</script>\n\n<style>\n .selectContainer {\n --internalPadding: 0 16px;\n border: var(--border, 1px solid #d8dbdf);\n border-radius: var(--borderRadius, 3px);\n box-sizing: border-box;\n height: var(--height, 42px);\n position: relative;\n display: flex;\n align-items: center;\n padding: var(--padding, var(--internalPadding));\n background: var(--background, #fff);\n margin: var(--margin, 0);\n }\n\n .selectContainer input {\n cursor: default;\n border: none;\n color: var(--inputColor, #3f4f5f);\n height: var(--height, 42px);\n line-height: var(--height, 42px);\n padding: var(--inputPadding, var(--padding, var(--internalPadding)));\n width: 100%;\n background: transparent;\n font-size: var(--inputFontSize, 14px);\n letter-spacing: var(--inputLetterSpacing, -0.08px);\n position: absolute;\n left: var(--inputLeft, 0);\n margin: var(--inputMargin, 0);\n }\n\n .selectContainer input::placeholder {\n color: var(--placeholderColor, #78848f);\n opacity: var(--placeholderOpacity, 1);\n }\n\n .selectContainer input:focus {\n outline: none;\n }\n\n .selectContainer:hover {\n border-color: var(--borderHoverColor, #b2b8bf);\n }\n\n .selectContainer.focused {\n border-color: var(--borderFocusColor, #006fe8);\n }\n\n .selectContainer.disabled {\n background: var(--disabledBackground, #ebedef);\n border-color: var(--disabledBorderColor, #ebedef);\n color: var(--disabledColor, #c1c6cc);\n }\n\n .selectContainer.disabled input::placeholder {\n color: var(--disabledPlaceholderColor, #c1c6cc);\n opacity: var(--disabledPlaceholderOpacity, 1);\n }\n\n .selectedItem {\n line-height: var(--height, 42px);\n height: var(--height, 42px);\n overflow-x: hidden;\n padding: var(--selectedItemPadding, 0 20px 0 0);\n }\n\n .selectedItem:focus {\n outline: none;\n }\n\n .clearSelect {\n position: absolute;\n right: var(--clearSelectRight, 10px);\n top: var(--clearSelectTop, 11px);\n bottom: var(--clearSelectBottom, 11px);\n width: var(--clearSelectWidth, 20px);\n color: var(--clearSelectColor, #c5cacf);\n flex: none !important;\n }\n\n .clearSelect:hover {\n color: var(--clearSelectHoverColor, #2c3e50);\n }\n\n .selectContainer.focused .clearSelect {\n color: var(--clearSelectFocusColor, #3f4f5f);\n }\n\n .indicator {\n position: absolute;\n right: var(--indicatorRight, 10px);\n top: var(--indicatorTop, 11px);\n width: var(--indicatorWidth, 20px);\n height: var(--indicatorHeight, 20px);\n color: var(--indicatorColor, #c5cacf);\n }\n\n .indicator svg {\n display: inline-block;\n fill: var(--indicatorFill, currentcolor);\n line-height: 1;\n stroke: var(--indicatorStroke, currentcolor);\n stroke-width: 0;\n }\n\n .spinner {\n position: absolute;\n right: var(--spinnerRight, 10px);\n top: var(--spinnerLeft, 11px);\n width: var(--spinnerWidth, 20px);\n height: var(--spinnerHeight, 20px);\n color: var(--spinnerColor, #51ce6c);\n animation: rotate 0.75s linear infinite;\n }\n\n .spinner_icon {\n display: block;\n height: 100%;\n transform-origin: center center;\n width: 100%;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n margin: auto;\n -webkit-transform: none;\n }\n\n .spinner_path {\n stroke-dasharray: 90;\n stroke-linecap: round;\n }\n\n .multiSelect {\n display: flex;\n padding: var(--multiSelectPadding, 0 35px 0 16px);\n height: auto;\n flex-wrap: wrap;\n align-items: stretch;\n }\n\n .multiSelect > * {\n flex: 1 1 50px;\n }\n\n .selectContainer.multiSelect input {\n padding: var(--multiSelectInputPadding, 0);\n position: relative;\n margin: var(--multiSelectInputMargin, 0);\n }\n\n .hasError {\n border: var(--errorBorder, 1px solid #ff2d55);\n background: var(--errorBackground, #fff);\n }\n\n .a11yText {\n z-index: 9999;\n border: 0px;\n clip: rect(1px, 1px, 1px, 1px);\n height: 1px;\n width: 1px;\n position: absolute;\n overflow: hidden;\n padding: 0px;\n white-space: nowrap;\n }\n\n @keyframes rotate {\n 100% {\n transform: rotate(360deg);\n }\n }\n</style>\n\n<svelte:window\n on:click={handleWindowEvent}\n on:focusin={handleWindowEvent}\n on:keydown={handleKeyDown} />\n\n<div\n class=\"selectContainer {containerClasses}\"\n class:hasError\n class:multiSelect={isMulti}\n class:disabled={isDisabled}\n class:focused={isFocused}\n style={containerStyles}\n on:click={handleClick}\n bind:this={container}>\n <span\n aria-live=\"polite\"\n aria-atomic=\"false\"\n aria-relevant=\"additions text\"\n class=\"a11yText\">\n {#if isFocused}\n <span id=\"aria-selection\">{ariaSelection}</span>\n <span id=\"aria-context\">\n {ariaContext}\n </span>\n {/if}\n </span>\n\n {#if Icon}\n <svelte:component this={Icon} {...iconProps} />\n {/if}\n\n {#if showMultiSelect}\n <svelte:component\n this={MultiSelection}\n {value}\n {getSelectionLabel}\n {activeValue}\n {isDisabled}\n {multiFullItemClearable}\n on:multiItemClear={handleMultiItemClear}\n on:focus={handleFocus} />\n {/if}\n\n <input\n readOnly={!isSearchable}\n {..._inputAttributes}\n bind:this={input}\n on:focus={handleFocus}\n bind:value={filterText}\n placeholder={placeholderText}\n style={inputStyles}\n disabled={isDisabled} />\n\n {#if !isMulti && showSelectedItem}\n <div class=\"selectedItem\" on:focus={handleFocus}>\n <svelte:component\n this={Selection}\n item={value}\n {getSelectionLabel} />\n </div>\n {/if}\n\n {#if showClearIcon}\n <div\n class=\"clearSelect\"\n on:click|preventDefault={handleClear}\n aria-hidden=\"true\">\n <svelte:component this={ClearIcon} />\n </div>\n {/if}\n\n {#if !showClearIcon && (showIndicator || (showChevron && !value) || (!isSearchable && !isDisabled && !isWaiting && ((showSelectedItem && !isClearable) || !showSelectedItem)))}\n <div class=\"indicator\" aria-hidden=\"true\">\n {#if indicatorSvg}\n {@html indicatorSvg}\n {:else}\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 20 20\"\n focusable=\"false\"\n aria-hidden=\"true\">\n <path\n d=\"M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747\n 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0\n 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502\n 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0\n 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z\" />\n </svg>\n {/if}\n </div>\n {/if}\n\n {#if isWaiting}\n <div class=\"spinner\">\n <svg class=\"spinner_icon\" viewBox=\"25 25 50 50\">\n <circle\n class=\"spinner_path\"\n cx=\"50\"\n cy=\"50\"\n r=\"20\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"5\"\n stroke-miterlimit=\"10\" />\n </svg>\n </div>\n {/if}\n\n {#if listOpen}\n <svelte:component\n this={List}\n {...listProps}\n bind:hoverItemIndex\n on:itemSelected={itemSelected}\n on:itemCreated={itemCreated}\n on:closeList={closeList} />\n {/if}\n\n {#if !isMulti || (isMulti && !showMultiSelect)}\n <input\n name={inputAttributes.name}\n type=\"hidden\"\n value={value ? getSelectionLabel(value) : null} />\n {/if}\n\n {#if isMulti && showMultiSelect}\n {#each value as item}\n <input\n name={inputAttributes.name}\n type=\"hidden\"\n value={item ? getSelectionLabel(item) : null} />\n {/each}\n {/if}\n</div>\n","export default function debounce(func, wait, immediate) {\n let timeout;\n\n return function executedFunction() {\n let context = this;\n let args = arguments;\n\n let later = function () {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n\n let callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n\n timeout = setTimeout(later, wait);\n\n if (callNow) func.apply(context, args);\n };\n}\n","<script>\n\timport { onMount, createEventDispatcher } from \"svelte\";\n\timport Select from \"svelte-select\";\n\tconst searchIcon = `<svg viewBox=\"0 0 20 20\" fill-rule=\"evenodd\"><path d=\"M0,8a8,8,0,1,0,16,0a8,8,0,1,0,-16,0ZM3,8a5,5,0,1,0,10,0a5,5,0,1,0,-10,0Z\"/><path d=\"M18,20L20,18L14,12L12,14Z\"/></svg>`;\n\tconst chevronIcon = `<svg viewBox=\"0 0 20 20\"><path d=\"M1,6L19,6L10,15Z\"/></svg>`;\n\tconst dispatch = createEventDispatcher();\n\n\texport let id = \"\";\n\texport let container = undefined;\n\texport let mode = \"default\";\n\texport let items;\n\texport let placeholder = \"Select one...\";\n\texport let value = null;\n\texport let filterText = \"\";\n\texport let isSearchable = true;\n\texport let isClearable = true;\n\texport let autoClear = false;\n\texport let idKey = \"value\";\n\texport let labelKey = \"label\";\n\texport let groupKey = null;\n\texport let groupItems = false;\n\texport let loadOptions = undefined;\n\texport let fontSize = \"1em\";\n\texport let height = 42;\n\texport let isMulti = false;\n\texport let maxSelected = 4;\n\texport let colors = [\"#206095\", \"#a8bd3a\", \"#871a5b\", \"#27a0cc\"];\n\texport let darkMode = false;\n\texport let borderColor = darkMode ? \"white\" : \"#206095\";\n\t\n\tconst getOptionLabel = groupKey && !groupItems ? (option) => `${option[labelKey]} <span class=\"group\">${option[groupKey]}</span>` : (option) => option[labelKey];\n\texport let getSelectionLabel = (option) => {\n\t\tif (option) return getOptionLabel(option)\n\t\telse return null;\n\t};\n\tconst groupBy = groupItems && groupKey ? (item) => item[groupKey] : undefined;\n\tconst indicatorSvg = mode == \"search\" ? searchIcon : chevronIcon;\n\tconst containerStyles = `--inputFontSize: ${fontSize}; --groupTitleFontSize: ${fontSize}; --height: ${height}px; font-size: ${fontSize};`;\n\t\n\tconst ariaValues = (values) => `${values}, selected.`;\n\tconst ariaListOpen = (label, count) => `You are currently focused on ${label}. There are ${count} results available.`;\n\tconst ariaFocused = () => `Select is focused, type to refine list, press down to open the menu.`;\n\t\n\t$: noOptionsMessage = isWaiting ? \"Loading...\" : mode == \"search\" && filterText.length < 3 ? \"Enter 3 or more characters for suggestions\" : `No results match ${filterText}`;\n\t$: itemFilter = (Array.isArray(value) && value.length >= maxSelected) || mode == \"search\" && filterText.length < 3\n\t? (label, filterText, option) => false\n\t: (label, filterText, option) => `${label}`.split(\"<\")[0].toLowerCase().slice(0, filterText.length) == filterText.toLowerCase();\n\t\n\tlet el;\n\tlet isFocused;\n\tlet listOpen;\n\tlet isWaiting;\n\tlet handleClear;\n\t\n\tconst sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n\n\tasync function doSelect(e) {\n\t\tdispatch(\"select\", e.detail);\n\t\tif (autoClear) {\n\t\t\thandleClear();\n\t\t} else if (isClearable) {\n\t\t\t// Hack to allow selection to be cleared by keyboard\n\t\t\tawait sleep(10);\n\t\t\tlet clearSelect = el.getElementsByClassName(\"clearSelect\")[0];\n\t\t\tif (clearSelect) {\n\t\t\t\tclearSelect.tabIndex = 0;\n\t\t\t\tclearSelect.onkeypress = (e) => { if (e.key == \"Enter\") handleClear() };\n\t\t\t\tclearSelect.removeAttribute(\"aria-hidden\");\n\t\t\t\tclearSelect.setAttribute(\"aria-label\", \"Clear selection\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\tonMount(() => {\n\t\tlet style = el.style;\n\t\tstyle.setProperty(\"--firstItem\", colors[0 % colors.length]);\n\t\tstyle.setProperty(\"--secondItem\", colors[1 % colors.length]);\n\t\tstyle.setProperty(\"--thirdItem\", colors[2 % colors.length]);\n\t\tstyle.setProperty(\"--fourthItem\", colors[3 % colors.length]);\n\t\tstyle.setProperty(\"--borderColor\", borderColor);\n\t});\n</script>\n\n<div class=\"selectbox\" class:multi-selected={value && isMulti} class:focused={isFocused} class:selected={value && !listOpen && !isMulti} bind:this={el}>\n\t<Select\n\t\t{id} {items} {placeholder} {isMulti} {isSearchable}\n\t\t{groupBy} {loadOptions} {getSelectionLabel} {getOptionLabel} {itemFilter}\n\t\t{ariaValues} {ariaListOpen} {ariaFocused} {noOptionsMessage} {indicatorSvg}\n\t\t{containerStyles}\n\t\toptionIdentifier={idKey}\n\t\tbind:container bind:isFocused bind:value bind:listOpen bind:filterText bind:isWaiting bind:handleClear\n\t\ton:select={doSelect} on:clear on:loaded on:error\n\t\tshowIndicator isClearable={!isClearable ? false : !isMulti}/>\n</div>\n\n<style>\n\t.selectbox {\n\t\tbox-sizing: border-box;\n\t\tmargin: 0;\n\t\tborder: 0;\n\t}\n\t.selectbox {\n --border: 2px solid var(--borderColor, #206095);\n --borderRadius: 0;\n\t\t--listBorderRadius: 0;\n\t\t--itemFirstBorderRadius: 0;\n\t\t--multiItemBorderRadius: 0;\n\t\t--padding: 0 8px;\n\t\t--multiSelectPadding: 0 8px;\n\t\t--clearSelectBottom: auto;\n\t\t--clearSelectRight: 8px;\n\t\t--clearSelectTop: auto;\n\t\t--clearSelectWidth: 24px;\n\t\t--clearSelectColor: #206095;\n\t\t--borderHoverColor: var(--borderColor, #206095);\n\t\t--borderFocusColor: var(--borderColor, #206095);\n\t\t--inputColor: #206095;\n\t\t--itemColor: #206095;\n\t\t--placeholderColor: #206095;\n\t\t--itemIsActiveBG: #206095;\n\t\t--itemHoverBG: #3875d7;\n\t\t--itemHoverColor: white;\n\t\t--clearSelectColor: white;\n\t\t--clearSelectFocusColor: white;\n\t\t--clearSelectHoverColor: white;\n\t\t--indicatorColor: white;\n\t\t--multiItemActiveColor: white;\n\t\t--multiClearFill: white;\n\t\t--multiClearBG: none;\n\t\t--multiClearHoverBG: none;\n\t\t--multiItemBG: grey;\n\t\t--multiItemActiveBG: grey;\n\t\t--spinnerColor: rgba(255,255,255,0);\n }\n\t:global(.selectbox, .selectbox input, .selectbox .item, .selectbox svg) {\n\t\tcursor: pointer !important;\n\t}\n\t:global(.selectbox input:focus) {\n\t\tcursor: default !important;\n\t}\n\t:global(.selectbox > .selectContainer) {\n\t\tbox-shadow: inset -40px 0px #206095;\n\t}\n\t:global(.selectbox.multi-selected > .selectContainer) {\n\t\tbox-shadow: none !important;\n\t}\n\t:global(.selectbox.focused > .selectContainer) {\n\t\toutline: 4px solid orange;\n\t}\n\t:global(.selectbox.selected > .selectContainer) {\n\t\tbackground-color: #206095 !important;\n\t}\n\t:global(.selectbox.selected .selectedItem) {\n\t\tcolor: white !important;\n\t\tfont-weight: bold;\n\t}\n\t:global(.selectbox .selectedItem .group) {\n\t\tdisplay: none;\n\t}\n\t:global(.selectbox .item > .group) {\n\t\tfont-size: smaller;\n\t\topacity: 0.7;\n\t}\n\t:global(.selectbox .selectContainer > .multiSelectItem) {\n\t\tcolor: white !important;\n\t\tfont-weight: bold;\n\t}\n\t:global(.selectbox .selectContainer > .multiSelectItem:nth-of-type(1)) {\n\t\tbackground-color: var(--firstItem) !important;\n\t}\n\t:global(.selectbox .selectContainer > .multiSelectItem:nth-of-type(2)) {\n\t\tbackground-color: var(--secondItem) !important;\n\t}\n\t:global(.selectbox .selectContainer > .multiSelectItem:nth-of-type(3)) {\n\t\tbackground-color: var(--thirdItem) !important;\n\t}\n\t:global(.selectbox .selectContainer > .multiSelectItem:nth-of-type(4)) {\n\t\tbackground-color: var(--fourthItem) !important;\n\t}\n\t:global(.selectbox .indicator svg) {\n\t\tfill: white;\n\t}\n\t:global(.selectbox .clearSelect) {\n\t\theight: 24px;\n\t}\n\t:global(.selectbox .clearSelect:focus) {\n\t\toutline: 4px solid orange;\n\t}\n\t:global(.selectbox .indicator) {\n\t\twidth: 20px;\n\t\theight: 20px;\n\t\tline-height: 1;\n\t}\n\t:global(.selectbox .multiSelectItem .group) {\n\t\tdisplay: none;\n\t}\n</style>","<script>\n export let primary = \"#003c57\";\n export let secondary = \"#a8bd3a\";\n</script>\n\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 651 60\" role=\"img\" focusable=\"false\" aria-labelledby=\"ons-logo-en-alt\">\n <title id=\"ons-logo-en-alt\">Office for National Statistics</title>\n <path\n d=\"M0,34.6c.8-1.69,1.39-3,2.32-4.6A38.28,38.28,0,0,1,0,23.4V34.6M5,3S0,3,0,9.25v1A62.12,62.12,0,0,0,4.2,27a43.77,43.77,0,0,1,9.42-10.79C21.69,9.21,31.16,5.13,45.9,3Z\"\n fill={secondary}\n />\n <path\n d=\"M53.06,6.42C36.2,8,24.68,12.92,16.43,20.07A41.46,41.46,0,0,0,6.4,32.2C12.87,44.93,28.88,57,46.6,57H47s6.32.21,6.32-6.91V6.36a1.22,1.22,0,0,1-.26.06M9.72,42.67a44.25,44.25,0,0,1-5-7.42A80.59,80.59,0,0,0,0,46.38V56.91L31.06,57c-9.83-3-15.74-7.64-21.34-14.3Z M82,47.49c-9.07,0-13.13-7.51-13.13-16.77S72.91,14,82,14s13.1,7.61,13.1,16.77S91.1,47.54,82,47.54m0-30.91c-6.69,0-9.07,7.33-9.07,14.05s2.16,13.9,9.07,13.9,9-7.28,9-13.9-2.34-14-9-14 M106.36,23.81V46.88h-3.67V23.81H98.93V21.56h3.76V17.9c0-4.61,2.72-7.95,8.08-7.95.38,0,.86.05.86.05v2.35h-.43c-2.55,0-4.84,1.64-4.84,5.12v4.09h5.27v2.25Z M121.53,23.81V46.88h-3.67V23.81H114.1V21.56h3.76V17.9c0-4.61,2.72-7.95,8.08-7.95.38,0,.86.05.86.05v2.35h-.43c-2.55,0-4.84,1.64-4.84,5.12v4.09h5.27v2.25Z M132.85,16.72a2.28,2.28,0,0,1-2.33-2.23v0a2.34,2.34,0,0,1,4.67,0,2.28,2.28,0,0,1-2.3,2.26h0M131,21.56h3.71V46.88H131Z M150.53,47.49c-6,0-10.63-5.16-10.63-13.29S144.52,21,150.66,21a9.76,9.76,0,0,1,6.17,1.74l-1,2.25a7.53,7.53,0,0,0-4.4-1.36c-5.15,0-7.78,4.46-7.78,10.48,0,6.2,3,10.62,7.65,10.62a8,8,0,0,0,4.49-1.37l1,2.45a10.21,10.21,0,0,1-6.3,1.73Z M162.84,35.75c.48,6,3.76,9,8.9,9a14.66,14.66,0,0,0,6.88-1.55l1.08,2.59a18,18,0,0,1-8.22,1.73c-7.12,0-12.18-4.23-12.18-13.34,0-8.69,4.67-13.2,11-13.2s10.37,3.95,10.37,12.4Zm7.35-12.41c-4.1,0-7.56,3.2-7.52,10.29l14.39-2c0-5.87-2.81-8.32-6.87-8.32Z M198.57,23.81V46.88H194.9V23.81h-3.76V21.56h3.76V17.9c0-4.61,2.72-7.95,8.08-7.95.39,0,.87.05.87.05v2.35h-.44c-2.54,0-4.84,1.64-4.84,5.12v4.09h5.28v2.25Z M217.28,47.49c-7.47,0-10.89-5.78-10.89-13.24S209.81,21,217.28,21s10.85,5.82,10.85,13.3-3.37,13.24-10.85,13.24m0-24c-5.53,0-7.13,5.59-7.13,10.81s1.73,10.56,7.13,10.56,7.13-5.35,7.13-10.56-1.6-10.81-7.13-10.81Z M244.08,23.91c-2.34-.61-5.75-.52-7.35.47v22.5H233V22.69c2.67-1.13,5.36-1.74,10.11-1.74H245Z M277.42,47.13,263.07,25a32.2,32.2,0,0,1-1.85-3.29h-.09s.13,1.88.13,3.85V47.13h-4.71V14.8h5.31l13.61,20.82A28.76,28.76,0,0,1,277.38,39h.08s-.17-1.84-.17-3.77V14.8H282V47.13Z M297.52,47.79c-7.43,0-10.93-3-10.93-7.81,0-6.8,7.12-8.64,15.59-9.39V29.13c0-3.47-2.37-4.51-5.83-4.51a18,18,0,0,0-6.87,1.46L288.23,23a24,24,0,0,1,9.12-1.83c5.61,0,9.93,2.3,9.93,8.78V46a22.71,22.71,0,0,1-9.76,1.83m4.66-14.67c-6.26.67-10.45,1.84-10.45,6.73,0,3.42,2.42,4.88,6.22,4.88a10.09,10.09,0,0,0,4.23-.84Z M322,47.69c-5.31,0-7.34-3.43-7.34-6.86V25.09h-3.55V21.81h3.55V16.12l5.4-1.5v7.19H325v3.28h-5V40.55a3.26,3.26,0,0,0,3,3.52h.5a5.5,5.5,0,0,0,1.46-.23v3.33a7.69,7.69,0,0,1-3,.52 M331.91,17.43a3,3,0,0,1-3.15-2.81,3.17,3.17,0,0,1,6.31,0,3,3,0,0,1-3.16,2.81m-2.72,4.38h5.44V47.13h-5.44Z M350.88,47.79c-7.73,0-11.57-5.74-11.57-13.3s3.84-13.34,11.57-13.34,11.54,5.78,11.54,13.34-3.8,13.3-11.54,13.3m0-23.17c-4.66,0-6.05,4.89-6.05,9.82s1.47,9.63,6.05,9.63,6.05-4.7,6.05-9.63-1.38-9.82-6.05-9.82Z M382.52,47.13V29c0-3.24-2.77-4.47-5.88-4.47a12.3,12.3,0,0,0-4.37.76v21.8h-5.39V23a26.81,26.81,0,0,1,10.06-1.83c6.61,0,11,2.25,11,7.8V47.13Z M403.18,47.79c-7.43,0-10.94-3-10.94-7.81,0-6.8,7.13-8.64,15.6-9.39V29.13c0-3.47-2.37-4.51-5.83-4.51a18,18,0,0,0-6.87,1.46L393.89,23A24,24,0,0,1,403,21.15c5.62,0,9.94,2.3,9.94,8.78V46a22.71,22.71,0,0,1-9.76,1.83m4.66-14.67c-6.27.67-10.46,1.84-10.46,6.73,0,3.42,2.43,4.88,6.23,4.88a10.09,10.09,0,0,0,4.23-.84Z M445.39,47.79A19.11,19.11,0,0,1,436.58,46l1.51-4a13.48,13.48,0,0,0,6.22,1.55c3.76,0,6.44-2.21,6.44-5.41,0-7.09-13.44-4.36-13.44-14.42,0-5.13,4.15-9.59,10.72-9.59A15.82,15.82,0,0,1,455.8,16l-1.38,3.52a11.93,11.93,0,0,0-5.66-1.5c-3.5,0-5.79,2.11-5.79,5.12,0,7,13.74,3.94,13.74,14.65,0,5.74-4.71,10-11.32,10Z M470.41,47.69c-5.31,0-7.34-3.43-7.34-6.86V25.09h-3.54V21.81h3.54V16.12l5.4-1.5v7.19h4.92v3.28h-4.92V40.55a3.27,3.27,0,0,0,3,3.52h.48a5.12,5.12,0,0,0,1.46-.23v3.33a7.69,7.69,0,0,1-3,.52Z M487.27,47.79c-7.44,0-10.93-3-10.93-7.81,0-6.8,7.13-8.64,15.6-9.39V29.13c0-3.47-2.38-4.51-5.84-4.51a18,18,0,0,0-6.87,1.46L478,23a23.94,23.94,0,0,1,9.11-1.83c5.62,0,9.94,2.3,9.94,8.78V46a22.71,22.71,0,0,1-9.76,1.83M492,33.16c-6.27.67-10.46,1.84-10.46,6.73,0,3.42,2.42,4.88,6.22,4.88a10,10,0,0,0,4.24-.84Z M511.73,47.69c-5.32,0-7.35-3.43-7.35-6.86V25.09h-3.54V21.81h3.54V16.12l5.4-1.5v7.19h4.92v3.28h-4.92V40.55a3.26,3.26,0,0,0,3,3.52h.5a5.5,5.5,0,0,0,1.46-.23v3.33a7.69,7.69,0,0,1-3,.52Z M521.66,17.43a3,3,0,0,1-3.15-2.81,3.17,3.17,0,0,1,6.31,0,3,3,0,0,1-3.16,2.81m-2.72,4.38h5.45V47.13h-5.45Z M536.19,47.79A15.9,15.9,0,0,1,528.54,46L530,42.48a10.53,10.53,0,0,0,5.52,1.5c2.77,0,5-1.78,5-3.94,0-6-11.1-3.2-11.1-11.47,0-3.76,3.37-7.42,8.86-7.42A13.56,13.56,0,0,1,545.34,23l-1.42,3.14a8.47,8.47,0,0,0-4.62-1.45c-2.81,0-4.54,1.69-4.54,3.62,0,5.64,11.32,3.14,11.32,11.6,0,4-3.85,7.9-9.89,7.9Z M559.83,47.69c-5.31,0-7.35-3.43-7.35-6.86V25.09h-3.54V21.81h3.54V16.12l5.4-1.5v7.19h4.93v3.28h-4.93V40.55a3.27,3.27,0,0,0,3,3.52h.48a5.64,5.64,0,0,0,1.47-.23v3.33a7.72,7.72,0,0,1-3,.52Z M569.77,17.43a3,3,0,0,1-3.15-2.81,3.17,3.17,0,0,1,6.31,0,3,3,0,0,1-3.16,2.81m-2.72,4.38h5.44V47.13h-5.44Z M588.14,47.79c-6.23,0-11-5.08-11-13.35s4.88-13.29,11-13.29A10.51,10.51,0,0,1,594.66,23l-1.21,3a6.87,6.87,0,0,0-4-1.22c-4.4,0-6.69,3.81-6.69,9.49s2.63,9.59,6.61,9.59a6.74,6.74,0,0,0,4-1.28L594.7,46c-1.12.94-3.33,1.84-6.56,1.84Z M605.1,47.79A15.9,15.9,0,0,1,597.45,46l1.42-3.47A10.54,10.54,0,0,0,604.4,44c2.77,0,5-1.78,5-3.94,0-6-11.1-3.2-11.1-11.47,0-3.76,3.37-7.42,8.85-7.42a13.49,13.49,0,0,1,7.1,1.83l-1.42,3.14a8.42,8.42,0,0,0-4.63-1.45c-2.8,0-4.53,1.69-4.53,3.62,0,5.64,11.32,3.14,11.32,11.6,0,4-3.85,7.9-9.89,7.9Z M418.52 47.13 418.52 34.91 418.52 10.25 423.92 10.25 423.92 22.76 423.92 47.13 418.52 47.13z\"\n fill={primary}\n />\n</svg>\n\n<style>\n svg {\n position: relative;\n width: 100%;\n padding: 0;\n margin: 0;\n }\n</style>","<script>\n export let color = \"#902082\";\n</script>\n\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 4 228 34\" role=\"img\" focusable=\"false\" aria-labelledby=\"census-logo-en-alt\">\n <title id=\"census-logo-en-alt\">Census 2021</title>\n <path style:fill={color} d=\"M35.85,10a12,12,0,0,0,0,24,2.73,2.73,0,0,0,0-5.45,6.57,6.57,0,0,1-6-3.82H45.12A2.73,2.73,0,0,0,47.85,22,12,12,0,0,0,35.85,10Zm-6,9.27a6.55,6.55,0,0,1,11.91,0Z M62.42,10a12,12,0,0,0-12,12v9.12a2.73,2.73,0,0,0,5.45,0V22A6.55,6.55,0,1,1,69,22v9.12a2.73,2.73,0,0,0,5.45,0V22A12,12,0,0,0,62.42,10Z M120.41,10a2.72,2.72,0,0,0-2.72,2.73v9.11a6.55,6.55,0,1,1-13.1,0V12.73a2.73,2.73,0,1,0-5.45,0v9.11a12,12,0,0,0,24,0V12.73A2.73,2.73,0,0,0,120.41,10Z M88.64,19.78c-3.85-.82-5.4-1.15-5.4-2.55s2-2.17,4.15-2.17a8.87,8.87,0,0,1,3.15.63,3.2,3.2,0,0,0,1.12.24,2.55,2.55,0,0,0,2.55-2.55,2.58,2.58,0,0,0-1.79-2.47,14.64,14.64,0,0,0-5-.9c-6.27,0-9.83,3.56-9.83,7.13,0,4.33,4,6.26,8.48,7.22,3.47.72,4.53,1,4.53,2.5s-2,2.08-4.34,2.08a11,11,0,0,1-5.13-1.58,2.91,2.91,0,0,0-1-.22A2.57,2.57,0,0,0,79,32a14.84,14.84,0,0,0,7.47,2c5.83,0,10-3.13,10-7C96.39,22.24,93.17,20.75,88.64,19.78Z M81.1,27.36Z M129.43,27.34h0Z M129.42,27.33Z M137,19.78c-3.86-.82-5.4-1.15-5.4-2.55s2-2.17,4.14-2.17a8.78,8.78,0,0,1,3.15.63,3.18,3.18,0,0,0,1.13.24,2.55,2.55,0,0,0,2.54-2.55,2.61,2.61,0,0,0-1.79-2.47,14.59,14.59,0,0,0-5-.9c-6.26,0-9.82,3.56-9.82,7.13,0,4.33,3.95,6.26,8.47,7.22,3.47.72,4.53,1,4.53,2.5s-2,2.08-4.33,2.08a11.16,11.16,0,0,1-5.18-1.6,2.44,2.44,0,0,0-1-.2,2.57,2.57,0,0,0-2.58,2.57A2.64,2.64,0,0,0,127.33,32a14.81,14.81,0,0,0,7.47,2c5.83,0,10-3.13,10-7C144.77,22.24,141.54,20.75,137,19.78Z M12,15.45a6.45,6.45,0,0,1,4.78,2.09,2.72,2.72,0,1,0,4-3.71,12,12,0,1,0,0,16.34,2.73,2.73,0,0,0-4-3.72A6.46,6.46,0,0,1,12,28.55a6.55,6.55,0,0,1,0-13.1Z\"/>\n <path style:fill={color} style:opacity=\"{0.7}\" d=\"M166.51,30.35H154.9a4.74,4.74,0,0,1,.14-1c.6-2.45,3.08-3.72,6.09-5.06,3.46-1.6,6.72-3.22,6.72-7.33s-3-6.83-8-6.83a9.6,9.6,0,0,0-6.15,2,5.15,5.15,0,0,0-2.09,3.75c0,1.92,2.4,1.88,2.4,1.77a5.43,5.43,0,0,1,5.6-4.38c2.93,0,4.67,1.41,4.67,3.78s-2.69,3.61-5.7,5.1c-3.43,1.7-7.08,3.78-7.08,8.49v.88c0,1.46.67,2,2.27,2h12.74c1.2,0,1.73-.53,1.73-1.49v-.21C168.24,30.85,167.71,30.35,166.51,30.35Z M207.91,30.35H196.3a4.74,4.74,0,0,1,.14-1c.6-2.45,3.08-3.72,6.09-5.06,3.47-1.6,6.72-3.22,6.72-7.33s-3-6.83-8-6.83a9.6,9.6,0,0,0-6.15,2A5.15,5.15,0,0,0,193,15.84c0,1.92,2.4,1.88,2.4,1.77a5.43,5.43,0,0,1,5.6-4.38c2.93,0,4.67,1.41,4.67,3.78s-2.69,3.61-5.7,5.1c-3.43,1.7-7.08,3.78-7.08,8.49v.88c0,1.46.67,2,2.27,2h12.74c1.2,0,1.73-.53,1.73-1.49v-.21C209.64,30.85,209.11,30.35,207.91,30.35Z M226.17,30.39h-3.08l0-18.33a1.49,1.49,0,0,0-1.63-1.67h-1.23l-6.83,4.5a2,2,0,0,0,1.87,2.23,2.9,2.9,0,0,0,1.88-.78c.67-.53,1.24-1.17,2.62-2.27V30.39H216c-1.09,0-1.66.46-1.66,1.48v.18c0,1,.57,1.42,1.66,1.42h10.2c1.09,0,1.66-.43,1.66-1.42v-.18C227.83,30.85,227.26,30.39,226.17,30.39Z M180.31,10.11c-5.88,0-9.52,4.14-9.52,10.76V23.2c0,6.62,3.57,10.73,9.52,10.73s9.55-4.18,9.55-10.8v-2.3C189.86,14.22,186.25,10.11,180.31,10.11Zm5.91,13.2c0,4.81-2.13,7.54-5.91,7.54s-5.84-2.76-5.84-7.57V20.69c0-4.81,2.12-7.57,5.84-7.57s5.91,2.83,5.91,7.64Z\"></path>\n</svg>\n\n<style>\n svg {\n position: relative;\n width: 100%;\n padding: 0;\n margin: 0;\n }\n</style>","<script>\n\timport { onMount } from \"svelte\";\n\timport { format } from \"d3-format\";\n\timport { renderHexJSON } from \"./lib/hexjson\";\n\timport Random from \"./lib/random\";\n\timport { getData, getAngle, getCompass, calcSteps, sleep, getStorage, setStorage, getPNG } from \"./utils\";\n\timport { hexurl, adjurl, dataurl, game_defaults, history_defaults, routes, datasets, modes, sample_hexes } from \"./config\";\n\timport tooltip from \"./ui/tooltip\";\n\timport HexMap from \"./vis/HexMap.svelte\";\n\timport Legend from \"./vis/Legend.svelte\";\n\timport Bar from \"./vis/Bar.svelte\";\n\timport Icon from \"./ui/Icon.svelte\";\n\timport Select from \"./ui/Select.svelte\";\n\timport ONSLogo from \"./ui/ONSLogo.svelte\";\n\timport CensusLogo from \"./ui/CensusLogo.svelte\";\n\n\t// Hexmap settings\n\tconst width = 800;\n\tconst height = 1000;\n\tconst adjdist = 32.653; // Pixel distance between two adjacent hexes\n\n\t// Constants for calculating daily game. 28 June 2022 is daily game #1\n\tconst zeroday = Math.floor(new Date(\"2022-06-27\").setHours(0,0,0,0) / (60 * 60 * 24 * 1000));\n\tconst today = Math.floor(new Date().setHours(0,0,0,0) / (60 * 60 * 24 * 1000));\n\tconst midnight = new Date().setHours(24,0,0,0);\n\n\t// Parent page URL, if defined\n\tlet parent_url = \"https://www.ons.gov.uk/peoplepopulationandcommunity/populationandmigration/populationestimates/articles/playthecensus2021populationmapgame/2022-06-28\";\n\tonMount(() => {\n\t\tlet url_string = new URLSearchParams(window.location.search).get(\"parentUrl\");\n\t\tif (url_string) parent_url = decodeURIComponent(url_string);\n\t});\n\n\t// Initialise number formatter. Zero decimal places, 1,000s comma separated\n\tconst f = format(\",.0f\");\n\n\t// Countdown in seconds to next daily game\n\tlet countdown;\n\tsetInterval(() => {\n\t\tlet cd = midnight - new Date();\n\t\tcountdown = cd < 0 ? 0 : cd;\n\t}, 1000);\n\n\t// DOM\n\tlet el = {}; // For binding DOM elements to keys\n\tlet mapel; // DOM element for map container\n\tlet maphexes; // Keyed DOM elements for individual map hexes (used for scrolling into view)\n\tlet qhigher, qlower; // \"Higher\" and \"Lower\" buttons, for focus\n\n\t// DATA\n\tlet data; // Keyed object with data per LAD\n\tlet hexes; // Array of hexagon geometries + metadata per LAD\n\tlet nexthexes = []; // Adjacent hexes for selection\n\tlet adj; // Keyed object with adjacencies per LAD code\n\n\t// GAME STATE\n\tlet fullscreen = false; // true if game is showing full screen\n\tlet status = \"mode\"; // mode, dataset, route, select, question, lost, won, info, scores\n\tlet status_prev = [];\n\tlet game = JSON.parse(JSON.stringify(game_defaults));\n\tlet history; // Game history (synced with localStorage)\n\tlet clock = 0; // Number of seconds on game clock (for \"timed\" mode)\n\tlet timer; // Variable for clock setInterval / clearInterval\n\tlet message_guess = \"\"; // Message for correct/incorrect guesses\n\tlet message_select = null; // Message for selection of areas on map\n\n\tfunction setHexes() {\n\t\tlet nexthexes_new = [];\n\t\thexes.forEach((d) => {\n\t\t\td.direction = null;\n\n\t\t\t//if the place is the same as the entry - mark as selected\n\t\t\tif ([\"S\", \"N\"].includes(d.key.slice(0,1))){\n\t\t\t\td.status = \"disabled\";\n\t\t\t} else if (game.selected && d.key == game.selected.key) {\n\t\t\t\td.status = \"selected\";\n\t\t\t} else if (game.next && d.key == game.next.key) {\n\t\t\t\td.status = \"next\";\n\t\t\t} else if (game.wrong.includes(d.key)) {\n\t\t\t\td.status = \"wrong\";\n\t\t\t} else if (game.right.includes(d.key)) {\n\t\t\t\tif (d.key == game.end) {\n\t\t\t\t\td.status = \"end\";\n\t\t\t\t} else { \n\t\t\t\t\td.status = \"right\"; //'right' meaning correct\n\t\t\t\t}\n\t\t\t} else if (status == \"select\" && game.selected.adj.includes(d.key)) {\n\t\t\t\td.status = \"adjacent\";\n\t\t\t\td.direction = getCompass(getAngle(d.x - game.selected.x, game.selected.y - d.y));\n\t\t\t\tnexthexes_new.push(d);\n\t\t\t} else if (d.key == game.end) {\n\t\t\t\td.status = \"end\";\n\t\t\t} else if (d.key == game.start) {\n\t\t\t\td.status = \"start\";\n\t\t\t} else if ((status == \"route\" || game.mode == \"fixed\") && game.steps.includes(d.key)) {\n\t\t\t\td.status = \"route\";\n\t\t\t} else if (status == \"route\" && !(game.start && game.end)) {\n\t\t\t\td.status = \"selectable\";\n\t\t\t} else {\n\t\t\t\td.status = \"\";\n\t\t\t}\n\t\t});\n\t\thexes = [...hexes];\n\n\t\t// Sort array of adjacent hexes clockwise, starting with next step towards finish\n\t\t// This is for keyboard navigation of adjacent hexes\n\t\tif (nexthexes_new[1]) {\n\t\t\tlet nexthexes_sorted = [];\n\t\t\tconst compass = [\"east\", \"southeast\", \"south\", \"southwest\", \"west\", \"northwest\", \"north\", \"northeast\"];\n\t\t\tlet hexbearings = nexthexes_new.map(d => getCompass(getAngle(d.x - game.selected.x, game.selected.y - d.y)));\n\t\t\tlet nextstep = calcSteps(game.selected.key, game.end, adj, [...game.right, ...game.wrong])[1];\n\t\t\tlet nextbearing = hexbearings[nexthexes_new.map(d => d.key).indexOf(nextstep)];\n\t\t\tfor (let i = 0; i < compass.length; i ++) {\n\t\t\t\tlet thisbearing = compass[(i + compass.indexOf(nextbearing)) % compass.length];\n\t\t\t\tlet thisindex = hexbearings.indexOf(thisbearing);\n\t\t\t\tif (thisindex > -1) {\n\t\t\t\t\tnexthexes_sorted.push(nexthexes_new[thisindex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tnexthexes = nexthexes_sorted;\n\t\t} else {\n\t\t\tnexthexes = nexthexes_new;\n\t\t};\n\n\t\tif (nexthexes[0]) {\n\t\t\tmessage_select = `Destination is ${getCompass(game.bearing)}. Press left of right to select next place.`\n\t\t} else {\n\t\t\tmessage_select = null;\n\t\t}\n\t}\n\n\tasync function doSelect(e) {\n\t\tif (status == \"select\" && game.selected.adj.includes(e.detail.obj.key) && !game.wrong.includes(e.detail.obj.key)) {\n\t\t\tgame.next = e.detail.obj;\n\t\t\tstatus = \"question\";\n\t\t\tawait sleep(50);\n\t\t\tsetHexes();\n\t\t\tawait sleep(50);\n\t\t\tqhigher.focus({preventScroll: true});\n\t\t} else if (status == \"route\" && game.route == \"map\") {\n\t\t\tif (!game.start) {\n\t\t\t\tgame.start = e.detail.obj.key;\n\t\t\t} else if (!game.end) {\n\t\t\t\tgame.end = e.detail.obj.key;\n\t\t\t}\n\t\t\tif (game.start && game.end) {\n\t\t\t\tgame.steps = calcSteps(game.start, game.end, adj);\n\t\t\t} else {\n\t\t\t\tgame.steps = [];\n\t\t\t}\n\t\t\tawait sleep(50);\n\t\t\tsetHexes();\n\t\t}\n\t}\n\n\tasync function guess(hl, e) {\n\t\tif (\n\t\t\t(hl == \"higher\" && data[game.next.key][game.dataset] >= data[game.selected.key][game.dataset]) ||\n\t\t\t(hl == \"lower\" && data[game.next.key][game.dataset] <= data[game.selected.key][game.dataset])\n\t\t) {\n\t\t\te.target.style[\"background-color\"] = \"#00A3A6\";\n\t\t\tmessage_guess = \"Correct!\";\n\t\t\tawait sleep(750);\n\t\t\tgame.right.push(game.next.key);\n\t\t\tgame.record.push(true);\n\t\t\thistory.stats[game.mode].right += 1;\n\t\t\thistory.hexes[game.next.key].r += 1;\n\n\t\t\tif (game.next.key == game.end) {\n\t\t\t\tstatus = \"won\";\n\t\t\t\thistory.stats[game.mode].won += 1;\n\t\t\t\thistory.stats[game.mode].streak += 1;\n\t\t\t\tif (history.stats[game.mode].streak > history.stats[game.mode].streak_max) history.stats[game.mode].streak_max += 1;\n\n\t\t\t\tif (game.mode == \"daily\") {\n\t\t\t\t\thistory.daily.result = \"won\";\n\t\t\t\t}\n\t\t\t\tif (game.mode == \"timed\") {\n\t\t\t\t\tclearInterval(timer);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tgame.selected = game.next;\n\t\t\t\tstatus = \"select\";\n\t\t\t}\n\t\t} else {\n\t\t\te.target.style[\"background-color\"] = \"#F66068\";\n\t\t\tmessage_guess = \"Wrong...\"\n\t\t\tawait sleep(750);\n\t\t\tgame.wrong.push(game.next.key);\n\t\t\tgame.record.push(false);\n\t\t\thistory.stats[game.mode].wrong += 1;\n\t\t\thistory.hexes[game.next.key].w += 1;\n\n\t\t\tlet adjacent = hexes.filter((d) => game.selected.adj.includes(d.key));\n\t\t\tadjacent = adjacent.filter(\n\t\t\t\t(d) => !game.wrong.includes(d.key) && !game.right.includes(d.key)\n\t\t\t);\n\t\t\tif (!adjacent[0] || !calcSteps(game.selected.key, game.end, adj, [...game.right, ...game.wrong]) || game.next.key == game.end) {\n\t\t\t\tstatus = \"lost\";\n\t\t\t\thistory.stats[game.mode].lost += 1;\n\t\t\t\thistory.stats[game.mode].streak = 0;\n\n\t\t\t\tif (game.mode == \"daily\") {\n\t\t\t\t\thistory.daily.result = \"lost\";\n\t\t\t\t}\n\t\t\t\tif (game.mode == \"timed\") {\n\t\t\t\t\tclearInterval(timer);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstatus = \"select\";\n\t\t\t}\n\t\t}\n\n\t\tif (game.mode == \"fixed\" && status != \"won\") {\n\t\t\tgame.selected = game.next;\n\t\t\tlet step = game.steps.indexOf(game.selected.key);\n\t\t\tgame.next = step < game.steps.length - 1 ? hexes.find(d => d.key == game.steps[step + 1]) : null;\n\t\t\tstatus = game.next ? \"question\" : \"won\";\n\t\t} else {\n\t\t\tgame.next = null;\n\t\t}\n\n\t\tlet end = hexes.find(d => d.key == game.end);\n\t\tgame.bearing = getAngle(end.x - game.selected.x, game.selected.y - end.y);\n\t\te.target.style[\"background-color\"] = null;\n\t\tmessage_guess = \"\";\n\t\t\n\t\tsetHexes();\n\t\tif (game.mode == \"daily\") {\n\t\t\thistory.daily.game = JSON.parse(JSON.stringify(game));\n\t\t}\n\t\tsetStorage(\"hexgame-history\", history);\n\n\t\tif (status == \"select\") {\n\t\t\tawait sleep(50);\n\t\t\tmaphexes[\"next0\"].focus({preventScroll: true});\n\t\t}\n\n\t\tif (status == \"won\" || status == \"lost\") {\n\t\t\tdataLayer.push({\n\t\t\t\tevent: \"gameEnd\",\n\t\t\t\tresult: status,\n\t\t\t\tmode: game.mode == \"classic\" ? \"regular\" : game.mode,\n\t\t\t\tdataset: game.dataset,\n\t\t\t\tstart: data[game.start].name,\n\t\t\t\tend: data[game.end].name\n\t\t\t});\n\t\t}\n\t}\n\n\tasync function startGame() {\n\t\tgame.right = [];\n\t\tgame.wrong = [];\n\t\tgame.next = game.mode == \"fixed\" ? hexes.find(d => d.key == game.steps[1]) : null;\n\t\tgame.selected = hexes.find(d => d.key == game.start);\n\t\tgame.right.push(game.start);\n\t\tstatus = game.mode == \"fixed\" ? \"question\" : \"select\";\n\n\t\tif (game.mode == \"timed\") {\n\t\t\tclock = 7 * (game.steps.length - 1);\n\t\t\ttimer = setInterval(updateTimer, 1000);\n\t\t\tfunction updateTimer() {\n\t\t\t\tclock -= 1;\n\t\t\t\tif (clock == 0) {\n\t\t\t\t\tif (status != \"won\") status = \"lost\";\n\n\t\t\t\t\tdataLayer.push({\n\t\t\t\t\t\tevent: \"gameEnd\",\n\t\t\t\t\t\tresult: status,\n\t\t\t\t\t\tmode: game.mode == \"classic\" ? \"regular\" : game.mode,\n\t\t\t\t\t\tdataset: game.dataset,\n\t\t\t\t\t\tstart: data[game.start].name,\n\t\t\t\t\t\tend: data[game.end].name\n\t\t\t\t\t});\n\n\t\t\t\t\tsleep(50).then(() => {\n\t\t\t\t\t\tclearInterval(timer);\n\t\t\t\t\t\ttimer = null;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet end = hexes.find(d => d.key == game.end);\n\t\tgame.bearing = getAngle(end.x - game.selected.x, game.selected.y - end.y);\n\t\tsetHexes();\n\n\t\tif (game.mode == \"daily\") {\n\t\t\thistory.daily.result = null;\n\t\t\thistory.daily.game = JSON.parse(JSON.stringify(game));\n\t\t\tsetStorage(\"hexgame-history\", history);\n\t\t}\n\n\t\tdataLayer.push({\n\t\t\tevent: \"gameStart\",\n\t\t\tmode: game.mode == \"classic\" ? \"regular\" : game.mode,\n\t\t\tdataset: game.dataset,\n\t\t\tstart: data[game.start].name,\n\t\t\tend: data[game.end].name\n\t\t});\n\n\t\tawait sleep(50);\n\t\tif (game.mode == \"fixed\") {\n\t\t\tqhigher.focus({preventScroll: true});\n\t\t} else {\n\t\t\tmaphexes[\"next0\"].focus({preventScroll: true});\n\t\t}\n\t}\n\n\tasync function startDaily() {\n\t\tif (history.daily.day == today && history.daily.game) {\n\t\t\tgame = JSON.parse(JSON.stringify(history.daily.game));\n\t\t\tstatus = history.daily.result ? history.daily.result : game.next ? \"question\" : \"select\";\n\t\t\tsetHexes();\n\t\t\tif(status == \"select\") {\n\t\t\t\tawait sleep(50);\n\t\t\t\tmaphexes[\"next0\"].focus({preventScroll: true});\n\t\t\t}\n\t\t} else {\n\t\t\thistory.daily.day = today;\n\t\t\tstartGame();\n\t\t}\n\t}\n\n\tfunction quitGame() {\n\t\tstatus = \"mode\";\n\t\tgame.start = null;\n\t\tgame.end = null;\n\t\tgame.next = null;\n\t\tgame.bearing = null;\n\t\tgame.selected = null;\n\t\tgame.steps = [];\n\t\tgame.right = [];\n\t\tgame.wrong = [];\n\t\tgame.record = [];\n\t\tif (game.mode == \"timed\") {\n\t\t\tclearInterval(timer);\n\t\t\tclock = 0;\n\t\t}\n\t}\n\n\tfunction randomRoute(random = Math.random) {\n\t\tlet moves = 10; // Minimum number of moves\n\t\tlet hexes_ew = hexes.filter(d => [\"E\", \"W\"].includes(d.key.slice(0,1)));\n\n\t\tlet obj = hexes_ew[Math.floor(random() * hexes_ew.length)]; // Select random start place\n\t\tlet start = obj.key;\n\n\t\tlet arr = []; // Array of places that are at least {moves} away\n\t\thexes_ew.forEach((d) => {\n\t\t\tlet dist = Math.sqrt((d.x - obj.x) ** 2 + (d.y - obj.y) ** 2);\n\t\t\tif (dist > (moves - 1) * adjdist) {\n\t\t\t\tarr.push(d.key);\n\t\t\t}\n\t\t});\n\n\t\tlet end = arr[Math.floor(random() * arr.length)];\n\n\t\treturn {start, end};\n\t}\n\n\tasync function resetRoute() {\t\t\n\t\tlet route = routes.find(d => d.code == game.route);\n\t\tif (route.start && route.end) {\n\t\t\tgame.start = route.start;\n\t\t\tgame.end = route.end;\n\t\t\tgame.steps = calcSteps(game.start, game.end, adj);\n\t\t\tawait sleep(50);\n\t\t\tsetHexes();\n\t\t} else if (route.code == \"random\" || route.code == \"daily\") {\n\t\t\tlet {start, end} = randomRoute(route.code == \"daily\" ? new Random(today) : Math.random);\n\t\t\tgame.start = start;\n\t\t\tgame.end = end;\n\t\t\tgame.steps = calcSteps(game.start, game.end, adj);\n\t\t\tawait sleep(50);\n\t\t\tsetHexes();\n\t\t} else {\n\t\t\tgame.start = game.end = null;\n\t\t\tgame.steps = [];\n\t\t\tawait sleep(50);\n\t\t\tsetHexes();\n\t\t}\n\t}\n\n\tfunction setStatus(status_new) {\n\t\tif (status_new == \"prev\") {\n\t\t\tstatus = status_prev.pop();\n\t\t} else {\n\t\t\tstatus_prev.push(status);\n\t\t\tstatus = status_new;\n\t\t}\n\t}\n\t\n\tfunction toggleFullscreen() {\n\t\tif (!fullscreen) {\n\t\t\tdocument.body.requestFullscreen();\n\t\t\tfullscreen = true;\n\t\t} else {\n\t\t\tdocument.exitFullscreen();\n\t\t\tfullscreen = false;\n\t\t}\n\t}\n\n\tfunction toggleHL(e) {\n\t\tif ([\"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(e.key)) {\n\t\t\tif (e.target == qhigher) {\n\t\t\t\tqlower.focus({preventScroll: true});\n\t\t\t} else {\n\t\t\t\tqhigher.focus({preventScroll: true});\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction cycleMenu(e) {\n\t\tif ([\"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(e.key)) {\n\t\t\tlet buttonText = e.target.innerText;\n\t\t\tlet buttons = document.getElementById(\"menu\").getElementsByTagName(\"button\");\n\t\t\tlet arr = Array.prototype.slice.call(buttons).map(button => button.innerText);\n\t\t\tlet index = arr.indexOf(buttonText);\n\t\t\tlet newindex = e.key == \"ArrowDown\" || e.key == \"ArrowRight\" ? (index + 1) % buttons.length : (index + buttons.length - 1) % buttons.length;\n\t\t\tbuttons[newindex].focus({preventScroll: true});\n\t\t}\n\t}\n\n\tfunction loadHistory() {\n\t\tlet stored = getStorage(\"hexgame-history\");\n\t\tif (stored) {\n\t\t\thistory = stored;\n\t\t} else {\n\t\t\thistory = JSON.parse(JSON.stringify(history_defaults));\n\t\t\tsetStorage(\"hexgame-history\", stored);\n\t\t}\n\t}\n\n\tasync function setStartEnd(e, pos) {\n\t\tlet other = pos == 'start' ? 'end' : 'start';\n\t\tgame[pos] = e.detail.key;\n\t\tgame.steps = game[other] ? calcSteps(game.start, game.end, adj) : [];\n\n\t\tawait sleep(50);\n\t\tsetHexes();\n\n\t\tawait sleep(50);\n\t\tif (!game[other]) {\n\t\t\tel['select-' + other].getElementsByTagName('input')[0].focus({preventScroll: true});\n\t\t} else {\n\t\t\tel['select-confirm'].focus({preventScroll: true});\n\t\t}\n\t}\n\n\tasync function unSelect(start_end) {\n\t\tgame[start_end] = null;\n\t\tgame.steps = [];\n\n\t\tawait sleep(50);\n\t\tsetHexes();\n\n\t\tawait sleep(50);\n\t\tif (start_end == \"end\" && !game.start) start_end = \"start\";\n\t\tel[\"select-\" + start_end].getElementsByTagName(\"input\")[0].focus({preventScroll: true});\n\t}\n\n\tfunction share() {\n\t\tlet mode = game.mode == \"daily\" ? `Daily game ${today - zeroday}` : modes.find(d => d.code == game.mode).label;\n\t\tlet dataset = datasets.find(d => d.code == game.dataset).label;\n\t\tlet str = `#CensusMapGame | ${mode}\n${data[game.start].name} to ${data[game.end].name} | ${dataset}\n${game.record.map((d, i) => status == 'won' && i == game.record.length - 1 ? '☑️' : d ? '✅' : '🟥').join('')}\n${status == 'won' ? 'Won' : 'Lost'} in ${game.record.length} turns (shortest route ${game.steps.length - 1}) | ${Math.floor(100 * ((game.right.length - 1) / game.record.length))}% correct\n${parent_url}`;\n\t\tnavigator.clipboard.writeText(str)\n\t\t.then(() => alert(\"Copied: \" + str));\n\t}\n\n\t// INITIALISE APP\n\n\t// Load history\n\tloadHistory();\n\n\t// Load hexes\n\tfetch(hexurl)\n\t.then(res => res.json())\n\t.then(hexjson => {\n\t\tlet newhexes = renderHexJSON(hexjson, width, height);\n\n\t\tfetch(adjurl)\n\t\t.then(res => res.json())\n\t\t.then(adjjson => {\n\t\t\tnewhexes.forEach(d => {\n\t\t\t\td.adj = adjjson[d.key];\n\t\t\t});\n\t\t\tnewhexes.sort((a, b) => a.n.localeCompare(b.n));\n\t\t\thexes = newhexes;\n\t\t\tadj = adjjson;\n\t\t\tif (!history.hexes[hexes[0].key]) {\n\t\t\t\thistory.hexes = Object.fromEntries(hexes.map(hex => [hex.key, {r: 0, w: 0}]));\n\t\t\t}\n\t\t});\n\t});\n\n\t// Load data\n\tgetData(dataurl).then((arr) => {\n\t\tlet obj = {};\n\t\tarr.forEach(d => (obj[d.code] = d));\n\n\t\tdata = obj;\n\t});\n</script>\n\n<svelte:body bind:this={main}/>\n\n<main>\n<header>\n\t<button on:click={() => setStatus(\"mode\")} class=\"btn-link btn-title\" title=\"Census map game. Return to menu\"><h1>Census map game</h1></button>\n\t<nav>\n\t\t<button class=\"btn-nav\" on:click={() => setStatus(\"info\")} title=\"About the game\" data-gtm-label=\"About the game\" use:tooltip><Icon type=\"info\"/></button>\n\t\t<button class=\"btn-nav\" on:click={() => setStatus(\"scores\")} title=\"View game history\" data-gtm-label=\"View game history\" use:tooltip><Icon type=\"chart\"/></button>\n\t\t<button class=\"btn-nav\" on:click={toggleFullscreen} title=\"Full screen mode\" data-gtm-label=\"Full screen mode\" use:tooltip><Icon type=\"{fullscreen ? 'full_exit' : 'full'}\"/></button>\n\t</nav>\n</header>\n\n{#if data && hexes}\n\t{#if status === \"mode\"}\n\t<div id=\"breadcrumb\"/>\n\t<div id=\"q-container\">\n\t\t<h2><span class=\"text-lrg\">Choose game mode</span></h2>\n\t</div>\n\t<div id=\"game-container\">\n\t\t<section class=\"columns flex-reverse\">\n\t\t\t<div>\n\t\t\t\t<div id=\"menu\" role=\"form\" aria-label=\"Press up or down to choose game mode. Enter to select.\">\n\t\t\t\t\t<button autofocus bind:this={el['daily-game']} class=\"btn-menu btn-primary mb-20\" on:click={() => { game.mode = \"daily\"; game.dataset = \"population\"; game.route = \"daily\"; resetRoute(); startDaily(); }} on:keydown={cycleMenu}>Daily game</button>\n\t\t\t\t\t{#each modes.filter(mode => mode.code != 'daily') as mode}\n\t\t\t\t\t<button bind:this={el[mode.code]} class=\"btn-menu\" on:click={() => { game.mode = mode.code; setStatus(\"dataset\"); }} on:keydown={cycleMenu}>{mode.label + ' mode'} <Icon type=\"chevron\" position=\"right\"/></button>\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<h3>About this game</h3>\n\t\t\t\t<div class=\"mini-map\" style:margin-top=\"5px\" style:height=\"150px\" style:max-width=\"500px\">\n\t\t\t\t\t<HexMap\n\t\t\t\t\t\tdata={hexes.filter(d => sample_hexes.includes(d.key))}\n\t\t\t\t\t\troute={calcSteps('E06000019', 'E07000236', adj)}\n\t\t\t\t\t\twidth={width}\n\t\t\t\t\t\theight={100}\n\t\t\t\t\t\ttransform=\"translate(-320px, -1260px) scale(2)\"\n\t\t\t\t\t\tinteractive={false}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<p><strong>Census map game</strong> is a guessing game made with Census 2021 data.</p>\n\t\t\t\t<p><button class=\"btn-link\" on:click={() => setStatus(\"info\")}>Read about how to play</button><Icon type=\"chevron\"/></p>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\t{:else if status === \"dataset\"}\n\t<div id=\"breadcrumb\">\n\t\t<span>\n\t\t\t<Icon type=\"chevron\" rotation={180}/><button class=\"btn-link\" on:click={() => setStatus(\"prev\")}>Back</button> |\n\t\t\t<span class=\"nowrap\">{`${modes.find(d => d.code == game.mode).label} mode`}</span>\n\t\t</span>\n\t</div>\n\t<div id=\"q-container\" aria-live=\"assertive\">\n\t\t<h2><span class=\"text-lrg\">Choose topic</span></h2>\n\t</div>\n\t<div id=\"game-container\">\n\t\t<section class=\"columns\">\n\t\t\t<div>\n\t\t\t\t<form\n\t\t\t\t\tid=\"menu\"\n\t\t\t\t\ton:submit|preventDefault={() => { game.route = \"random\"; resetRoute(); startGame(); }}\n\t\t\t\t\taria-label=\"Press up or down to choose dataset. Enter to select.\">\n\t\t\t\t\t{#each datasets as dataset, i}\n\t\t\t\t\t<label class:label-active={game.dataset == dataset.code} bind:this={el['dataset-' + i]}>\n\t\t\t\t\t\t<input type=\"radio\" bind:group={game.dataset} name=\"scoops\" value={dataset.code}>\n\t\t\t\t\t\t{dataset.label_long ? dataset.label_long : dataset.label}\n\t\t\t\t\t</label>\n\t\t\t\t\t{/each}\n\t\t\t\t\t<button type=\"submit\" class=\"btn-menu btn-primary mt-10\" style:width=\"100%\" on:click={async () => { setStatus(\"route\"); game.route = \"map\"; resetRoute(); await sleep(50); el['select-start'].getElementsByTagName('input')[0].focus({preventScroll: true}); }}>Select route</button>\n\t\t\t\t</form>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\t{:else if status === \"info\"}\n\t<div id=\"breadcrumb\">\n\t\t<span><Icon type=\"chevron\" rotation={180}/><button class=\"btn-link\" on:click={() => setStatus(\"prev\")}>Back</button></span>\n\t</div>\n\t<div id=\"q-container\" aria-live=\"assertive\">\n\t\t<h2><span class=\"text-lrg\">About the game</span></h2>\n\t</div>\n\t<div id=\"game-container\">\n\t\t<section class=\"columns\">\n\t\t\t<div>\n\t\t\t\t<h3>How to play</h3>\n\t\t\t\t<p><strong>Census map game</strong> is a guessing game made with Census 2021 data. Each hexagon on the map is a local authority in England and Wales.</p>\n\t\t\t\t<div class=\"mini-map\" style:margin-top=\"5px\" style:height=\"150px\" style:max-width=\"500px\">\n\t\t\t\t\t<HexMap\n\t\t\t\t\t\tdata={hexes.filter(d => sample_hexes.includes(d.key))}\n\t\t\t\t\t\troute={calcSteps('E06000019', 'E07000236', adj)}\n\t\t\t\t\t\twidth={width}\n\t\t\t\t\t\theight={100}\n\t\t\t\t\t\ttransform=\"translate(-320px, -1260px) scale(2)\"\n\t\t\t\t\t\tinteractive={false}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<p>\n\t\t\t\t\tMove from a <mark class=\"mark-start\">start point</mark> to an \n\t\t\t\t\t<mark class=\"mark-end\">end point</mark> on the map by guessing if the number \n\t\t\t\t\tof people who live in each local authority is <strong>higher</strong> or \n\t\t\t\t\t<strong>lower</strong> than the previous one. If you guess incorrectly, \n\t\t\t\t\tyou will have to choose a different route.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<h3>Game modes</h3>\n\t\t\t\t<p><strong>Regular</strong><br/>Find your own route from start to finish. No time limit.</p>\n\t\t\t\t<p><strong>Beat the clock</strong><br/>The same as regular mode but with a time limit. The clock gives you seven seconds per area on your most direct route.</p>\n\t\t\t\t<p><strong>Daily game</strong><br/>Play a new set route each day, in regular mode.</p>\n\t\t\t</div>\n\t\t</section>\n\t\t<section class=\"columns\">\n\t\t\t<div>\n\t\t\t\t<hr/>\n\t\t\t\t<h3>Credits</h3>\n\t\t\t\t<p>\n\t\t\t\t\tGame developed by the Office for National Statistics (ONS).\n\t\t\t\t\tData from <a href=\"https://www.ons.gov.uk/releases/initialfindingsfromthe2021censusinenglandandwales/\" target=\"_blank\" class=\"game-ref-link\">Census 2021 first release</a>, ONS.\n\t\t\t\t\tCoded using <a href=\"https://svelte.dev/\" target=\"_blank\">Svelte</a>.\n\t\t\t\t\t<a href=\"https://github.com/odileeds/hexmaps/\" target=\"_blank\">Local authorities hexmap</a> by Open Innovations.\n\t\t\t\t\t<a href=\"https://github.com/olihawkins/d3-hexjson/\" target=\"_blank\">Hexmap rendering script</a> by Oli Hawkins.\n\t\t\t\t</p>\n\t\t\t\t<div class=\"logo-block\">\n\t\t\t\t\t<a href=\"https://www.ons.gov.uk/\" target=\"_blank\" class=\"logo game-ref-link\" style:width=\"230px\">\n\t\t\t\t\t\t<ONSLogo/>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a href=\"https://www.ons.gov.uk/census/\" target=\"_blank\" class=\"logo game-ref-link\" style:width=\"135px\">\n\t\t\t\t\t\t<CensusLogo/>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\t\n\t{:else if status === \"scores\"}\n\t<div id=\"breadcrumb\">\n\t\t<span><Icon type=\"chevron\" rotation={180}/><button class=\"btn-link\" on:click={() => setStatus(\"prev\")}>Back</button></span>\n\t</div>\n\t<div id=\"q-container\">\n\t\t<h2><span class=\"text-lrg\" aria-live=\"assertive\">Your game history</span></h2>\n\t</div>\n\t<div id=\"game-container\">\n\t\t<section class=\"columns flex-reverse\">\n\t\t\t<div>\n\t\t\t\t{#if modes.filter(mode => history.stats[mode.code].won + history.stats[mode.code].lost > 0).length > 0}\n\t\t\t\t{#each modes.filter(mode => history.stats[mode.code].won + history.stats[mode.code].lost > 0) as mode}\n\t\t\t\t<h3>{mode.label} {mode.code == 'daily' ? 'game' : 'mode'}</h3>\n\t\t\t\t<div class=\"stats-grid\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<span class=\"text-xl\">{history.stats[mode.code].won + history.stats[mode.code].lost}</span>\n\t\t\t\t\t\t<br/>played\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<span class=\"text-xl\">{history.stats[mode.code].won + history.stats[mode.code].lost > 0 ? (100 * history.stats[mode.code].won / (history.stats[mode.code].won + history.stats[mode.code].lost)).toFixed(0) : 'NA'}%</span>\n\t\t\t\t\t\t<br/>win record\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<span class=\"text-xl\">{history.stats[mode.code].streak}</span>\n\t\t\t\t\t\t<br/>current streak\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<span class=\"text-xl\">{history.stats[mode.code].streak_max}</span>\n\t\t\t\t\t\t<br/>max streak\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<hr/>\n\t\t\t\t{/each}\n\t\t\t\t<div class=\"stats-block\" style:margin-top=\"25px\">\n\t\t\t\t\t<button class=\"btn-menu btn-menu-inline\" on:click={() => getPNG(mapel, 'CensusMapGame')}><Icon type=\"save\" margin/> Download map</button>\n\t\t\t\t</div>\n\t\t\t\t{:else}\n\t\t\t\t<div class=\"stats-block\">\n\t\t\t\t\t<h3>Your game stats will appear here once you've played the game.</h3>\n\t\t\t\t</div>\n\t\t\t\t{/if}\n\t\t\t\t<hr/>\n\t\t\t\t<div class=\"stats-block\">\n\t\t\t\t\t<p>\n\t\t\t\t\t\tFind out more about the <a href=\"https://www.ons.gov.uk/census\" target=\"_blank\" class=\"game-ref-link\">results from Census 2021 on the ONS website.</a>\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"mini-map\" bind:this={mapel}>\n\t\t\t\t<HexMap\n\t\t\t\t\tdata={hexes}\n\t\t\t\t\t{width}\n\t\t\t\t\t{height}\n\t\t\t\t\tsimple\n\t\t\t\t\tinteractive={false}\n\t\t\t\t\tvis={history.hexes}\n\t\t\t\t/>\n\t\t\t\tProportion of correct guesses (all modes)\n\t\t\t\t<Legend/>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\t\n\t{:else if status === \"route\"}\n\t<div id=\"breadcrumb\">\n\t\t<span>\n\t\t\t<Icon type=\"chevron\" rotation={180}/><button class=\"btn-link\" on:click={() => setStatus(\"prev\")}>Back</button> |\n\t\t\t<span class=\"nowrap\">{`${modes.find(d => d.code == game.mode).label} mode`} |</span>\n\t\t\t<span class=\"nowrap\">{datasets.find(d => d.code == game.dataset).label}</span>\n\t\t</span>\n\t</div>\n\t<div id=\"q-container\">\n\t\t\t<div>\n\t\t\t\tStart<br/>\n\t\t\t\t<Select\n\t\t\t\t\tbind:container={el['select-start']}\n\t\t\t\t\titems={hexes.filter(d => ![\"S\", \"N\"].includes(d.key.slice(0,1)) && d.key != game.end)}\n\t\t\t\t\tvalue={hexes.find(d => d.key == game.start)}\n\t\t\t\t\tidKey=\"key\" labelKey=\"n\" placeholder=\"Select start of route\"\n\t\t\t\t\ton:select={e => setStartEnd(e, 'start')}\n\t\t\t\t\ton:clear={() => unSelect('start')}/>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\tEnd<br/>\n\t\t\t\t{#if game.end || game.start}\n\t\t\t\t<Select\n\t\t\t\t\tbind:container={el['select-end']}\n\t\t\t\t\titems={hexes.filter(d => ![\"S\", \"N\"].includes(d.key.slice(0,1)) && d.key != game.start)}\n\t\t\t\t\tvalue={hexes.find(d => d.key == game.end)}\n\t\t\t\t\tidKey=\"key\" labelKey=\"n\" placeholder=\"Select end of route\"\n\t\t\t\t\ton:select={e => setStartEnd(e, 'end')}\n\t\t\t\t\ton:clear={() => unSelect('end')}/>\n\t\t\t\t{/if}\n\t\t\t</div>\n\t</div>\n\t{:else if status === \"won\" || status === \"lost\"}\n\t<div id=\"breadcrumb\">\n\t\t<span>\n\t\t\t{#if game.route == 'daily'}\n\t\t\t<span class=\"nowrap\">{`Daily game ${today - zeroday}`} |</span>\n\t\t\t{:else}\n\t\t\t<span class=\"nowrap\">{`${modes.find(d => d.code == game.mode).label} mode`} |</span>\n\t\t\t{/if}\n\t\t\t<span class=\"nowrap\">{datasets.find(d => d.code == game.dataset).label} |</span>\n\t\t\t{`${data[game.start].name} to ${data[game.end].name}`}\n\t\t</span>\n\t\t<span>\n\t\t\t{#if game.mode != \"daily\"}\n\t\t\t<button class=\"btn-link\" on:click={startGame}>Replay game</button> |\n\t\t\t{/if}\n\t\t\t<button class=\"btn-link\" on:click={quitGame}>Return to menu</button>\n\t\t</span>\n\t</div>\n\t<div id=\"q-container\" aria-live=\"assertive\">\n\t\t<div>\n\t\t\t<span class=\"text-lrg\">{status == \"won\" ? 'Congratulations!' : 'Oops...'}</span><br />\n\t\t\t<span style:margin-left=\"2px\"><Icon type={status == \"won\" ? 'tick' : 'cross'} margin/> {status == \"won\" ? `You made it from ${data[game.start].name} to ${data[game.end].name}` : `You did not make it from ${data[game.start].name} to ${data[game.end].name}`}</span>\n\t\t</div>\n\t</div>\n\t<div id=\"game-container\">\n\t\t<section class=\"columns flex-reverse\">\n\t\t\t<div>\n\t\t\t\t<h3>Game statistics</h3>\n\t\t\t\t{#if status === 'won'}\n\t\t\t\t<div class=\"stats-block\">\n\t\t\t\t\tYou took<br/>\n\t\t\t\t\t<span class=\"text-lrg\">{game.record.length} turns</span>\n\t\t\t\t\t<span class=\"muted\">(the shortest route was {game.steps.length - 1} turns)</span>\n\t\t\t\t\t<Bar data={[game.record.length]} colors={['#333']}/>\n\t\t\t\t\t<Bar data={[game.steps.length - 1, game.record.length + 1 - game.steps.length]} colors={['darkgrey', null]}/>\n\t\t\t\t</div>\n\t\t\t\t<hr/>\n\t\t\t\t{/if}\n\t\t\t\t<div class=\"stats-block\">\n\t\t\t\t\tYou scored<br/>\n\t\t\t\t\t<span class=\"text-lrg\">{Math.round(100 * ((game.right.length - 1) / game.record.length))}%</span>\n\t\t\t\t\t<span class=\"muted\">({game.right.length - 1} correct out of {game.record.length})</span><br/>\n\t\t\t\t\t<Bar data={[game.right.length - 1, game.wrong.length]} colors={['#00A3A6', '#F66068']}/>\n\t\t\t\t</div>\n\t\t\t\t<hr/>\n\t\t\t\t{#if game.mode == \"daily\"}\n\t\t\t\t<div class=\"stats-block\">\n\t\t\t\t\tNext daily game<br/>\n\t\t\t\t\t<span class=\"text-xl\" style:line-height={1.1}>\n\t\t\t\t\t\t{String(Math.floor((countdown % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))).padStart(2, '0')} :\n\t\t\t\t\t\t{String(Math.floor((countdown % (1000 * 60 * 60)) / (1000 * 60))).padStart(2, '0')} :\n\t\t\t\t\t\t{String(Math.floor((countdown % (1000 * 60)) / 1000)).padStart(2, '0')}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<hr/>\n\t\t\t\t{/if}\n\t\t\t\t<div class=\"stats-block\" style:margin=\"25px 0 calc(25px - 0.5em) 0\">\n\t\t\t\t\t<button class=\"btn-menu btn-menu-inline btn-primary\" on:click={share}><Icon type=\"share\" margin/> Share score</button>\n\t\t\t\t\t<button class=\"btn-menu btn-menu-inline\" on:click={() => getPNG(mapel, 'CensusMapGame')}><Icon type=\"save\" margin/> Download map</button>\n\t\t\t\t</div>\n\t\t\t\t<hr/>\n\t\t\t\t<div class=\"stats-block\">\n\t\t\t\t\t<p>\n\t\t\t\t\t\tFind out more about the <a href=\"https://www.ons.gov.uk/census\" target=\"_blank\" class=\"game-ref-link\">results from Census 2021 on the ONS website.</a>\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"mini-map\" bind:this={mapel}>\n\t\t\t\t<HexMap\n\t\t\t\t\tdata={hexes}\n\t\t\t\t\t{width}\n\t\t\t\t\t{height}\n\t\t\t\t\tsimple\n\t\t\t\t\tinteractive={false}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n\n\t{:else}\n\t<div id=\"breadcrumb\">\n\t\t<span>\n\t\t\t{#if game.route == 'daily'}\n\t\t\t<span class=\"nowrap\">{`Daily game ${today - zeroday}`} |</span>\n\t\t\t{:else}\n\t\t\t<span class=\"nowrap\">{`${modes.find(d => d.code == game.mode).label} mode`} |</span>\n\t\t\t{/if}\n\t\t\t<span class=\"nowrap\">{datasets.find(d => d.code == game.dataset).label} |</span>\n\t\t\t{`${data[game.start].name} to ${data[game.end].name}`}\n\t\t\t{#if game.mode == \"timed\"}\n\t\t\t| <strong class=\"nowrap\">{clock} seconds left</strong>\n\t\t\t{/if}\n\t\t</span>\n\t\t<span><button class=\"btn-link\" on:click={quitGame}>Quit game</button></span>\n\t</div>\n\t<div id=\"q-container\">\n\t\t<div area-hidden=\"true\">\n\t\t\t<span class=\"text-lrg\">{game.selected.n}</span><br/>\n\t\t\t<strong>{f(data[game.selected.key][game.dataset])}</strong>\n\t\t\t{datasets.find(d => d.code == game.dataset).unit}\n\t\t</div>\n\t\t{#if !game.next}\n\t\t<div>\n\t\t\t<span class=\"text-lrg\">Select next place</span><br/>\n\t\t\t<Icon type=\"compass\" rotation={game.bearing}/>\n\t\t\tDestination is {getCompass(game.bearing)}\n\t\t</div>\n\t\t{:else}\n\t\t<div role=\"form\" aria-label=\"{\n\t\t\t`You are on ${game.selected.n}, ${datasets.find(d => d.code == game.dataset).label} ${data[game.selected.key][game.dataset]} ${datasets.find(d => d.code == game.dataset).unit}.\n\t\t\tIs the ${datasets.find(d => d.code == game.dataset).label} of ${game.next.n} higher or lower? Press left or right to choose next place. Enter to select.`\n\t\t\t}\">\n\t\t\t<span class=\"text-lrg\" aria-hidden=\"true\">{game.next.n}</span><br/>\n\t\t\t<button bind:this={qhigher} on:keydown={toggleHL} on:click={(e) => guess(\"higher\", e)} class=\"btn-hilo\">Higher <Icon type=\"arrow\" rotation={90}/></button>\n\t\t\t<button bind:this={qlower} on:keydown={toggleHL} on:click|preventDefault={(e) => guess(\"lower\", e)} class=\"btn-hilo\">Lower <Icon type=\"arrow\" rotation={-90}/></button>\n\t\t\t<button class=\"btn-link\" on:click={async () => {game.next = null; status = \"select\"; setHexes(); await sleep(50); maphexes[\"next0\"].focus({preventScroll: true});}}>Unselect</button>\n\t\t\t<span aria-live=\"assertive\">{message_guess}</span>\n\t\t</div>\n\t\t{/if}\n\t</div>\n\t{/if}\n\n\t{#if ![\"mode\", \"dataset\", \"info\", \"scores\", \"won\", \"lost\"].includes(status)}\n\t\t<div id=\"game-container\" class=\"noscroll\">\n\t\t\t{#if status === \"route\"}\n\t\t\t<div id=\"button-container\">\n\t\t\t\t<button class=\"btn-menu btn-menu-inline\" on:click={() => { game.route = \"random\"; resetRoute(); }}>Random route <Icon type=\"shuffle\"/></button>\n\t\t\t\t<button class=\"btn-menu btn-menu-inline btn-primary\" disabled={ !game.start || !game.end } on:click={startGame} bind:this={el['select-confirm']}>Start game</button>\n\t\t\t</div>\n\t\t\t{/if}\n\t\t\t<HexMap\n\t\t\t\tdata={hexes}\n\t\t\t\tnext={nexthexes}\n\t\t\t\t{width}\n\t\t\t\tselected={game.selected}\n\t\t\t\tbind:hexes={maphexes}\n\t\t\t\ton:select={doSelect}\n\t\t\t\tmessage={message_select}\n\t\t\t/>\n\t\t</div>\n\t{/if}\n{/if}\n</main>\n\n<style>\n\ta {\n\t\tcolor: #206095;\n\t\ttext-decoration: underline;\n\t}\n\ta:hover {\n\t\tcolor: black;\n\t}\n\th1 {\n\t\tfont-size: 1.8em;\n\t\tmargin: 0 0 5px 0;\n\t\ttext-align: left;\n\t\tcolor: white;\n\t}\n\t@media(max-width: 440px){\n h1 {\n\t\t\tfont-size: 1.55em;\n\t\t\tmargin-top: 2px;\n }\n }\n\th2 {\n\t\tmargin: 0 0 5px 0;\n\t}\n\th3 {\n\t\tmargin: 0;\n\t}\n\thr {\n\t\tborder: none;\n\t\theight: 1px;\n\t\tbackground-color: darkgrey;\n\t}\n\tmain {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\theight: 100vh;\n\t\tmax-height: 100vh;\n\t\tmargin: 0 auto;\n\t\ttext-align: center;\n\t\twidth: 100%;\n\t\tmax-width: 980px;\n\t\tbackground-color: #44368F;\n\t\tbackground-image: linear-gradient(to right, #44368F, #8C2292);\n\t}\n\theader {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\talign-items: flex-start;\n\t\tjustify-content: space-between;\n\t\tflex-wrap: nowrap;\n\t\tmargin: 0 auto;\n\t\tpadding: 6px 12px 0 12px;\n\t\twidth: 100%;\n\t\tcolor: white;\n\t}\n\tnav {\n\t\twhite-space: nowrap;\n\t}\n\tnav button:hover {\n\t\tcolor: #bbb;\n\t}\n\t#breadcrumb {\n\t\tdisplay: flex;\n\t\tflex-shrink: 0;\n\t\tflex-direction: row;\n\t\talign-items: stretch;\n\t\tjustify-content: space-between;\n\t\twidth: calc(100% - 8px);\n\t\tmin-height: 27px;\n\t\tbackground-color: white;\n\t\tmargin: 0 4px;\n\t\tpadding: 2px 9px 0 9px;\n\t}\n\t#breadcrumb > span:nth-of-type(1) {\n\t\ttext-align: left;\n\t\tflex-grow: 1;\n\t}\n\t#breadcrumb > span:nth-of-type(2) {\n\t\ttext-align: right;\n\t\tmin-width: 120px;\n\t\tflex-grow: 1;\n\t}\n\t#game-container {\n\t\tbox-sizing: border-box;\n\t\tflex-grow: 1;\n\t\tmargin: 0 4px 4px 4px;\n\t\tpadding: 0;\n\t\tposition: relative;\n\t\toverflow-y: auto;\n\t\twidth: calc(100% - 8px);\n\t\tbackground-color: white;\n\t}\n\t#q-container {\n\t\tdisplay: flex;\n\t\twidth: calc(100% - 8px);\n\t\tflex-direction: row;\n\t\talign-items: stretch;\n\t\tbox-sizing: border-box;\n\t\tmin-height: 85px;\n\t\tmargin: 0 4px;\n\t\tpadding: 10px 0;\n\t\tborder-bottom: none;\n\t\ttext-align: left;\n\t\tbackground-color: #ddd;\n\t}\n\t@media(max-width: 600px){\n #q-container {\n\t\t\tflex-wrap: wrap;\n }\n }\n\t#q-container > div {\n\t\tbox-sizing: border-box;\n\t\tflex-basis: 100%;\n\t\tmargin: 0;\n\t\tpadding: 0 10px;\n\t\tvertical-align: top;\n\t\tmin-height: 65px;\n\t}\n\t#q-container > h2 {\n\t\twidth: 100%;\n\t\ttext-align: center;\n\t\tmargin: 0;\n\t}\n\t#menu {\n\t\twidth: 360px;\n\t\tmax-width: 100%;\n\t\theight: calc(100% - 75px);\n\t\tmargin: 0 auto;\n\t\tpadding: 20px 0 10px 0;\n\t\ttext-align: left;\n\t}\n\t#button-container {\n\t\tposition: absolute;\n\t\ttop: 15px;\n\t\tleft: 15px;\n\t\ttext-align: left;\n\t\tz-index: 1;\n\t}\n\t.columns {\n\t\tpadding: 0;\n\t\tmargin: 10px;\n \tlist-style: none;\n \tdisplay: flex;\n \tflex-wrap: wrap;\n\t\ttext-align: left;\n\t}\n\t.columns > div {\n\t\twidth: 300px;\n\t\tmax-width: 100%;\n\t\tpadding: 10px;\n\t\tflex-grow: 1;\n\t}\n\t.flex-reverse {\n\t\tflex-direction: row-reverse !important;\n\t}\n\t.stats-grid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(4, 1fr);\n\t\tgrid-gap: 6px;\n\t\twidth: 100%;\n\t\tmargin: 15px 0;\n\t\ttext-align: center;\n\t}\n\t.mini-map {\n\t\tposition: relative;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n\tbutton {\n\t\tcursor: pointer;\n\t\tborder: none;\n\t\tborder-radius: 0;\n\t\tposition: relative;\n\t}\n\theader button {\n\t\tcolor: white;\n\t}\n\tbutton:focus {\n\t\toutline: 3px solid orange;\n\t}\n\tbutton:disabled {\n\t\tbackground-color: grey;\n\t\tcursor: default;\n\t}\n\tnav > button {\n\t\tbackground: none;\n\t\tborder: none;\n\t\tfont-size: 1.2rem;\n\t\tpadding: 0.4em 0.1em;\n\t\tmargin: 0 0 0.5em 0.5em;\n\t}\n\t.btn-menu {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\theight: 40px;\n\t\tmargin: 0 auto 0.5em auto;\n\t\tbackground-color: #bcbcbc;\n\t\tcolor: black;\n\t\tborder: none;\n\t\tfont-weight: bold;\n\t}\n\t.btn-menu:hover {\n\t\tbackground-color: #b0b0b0;\n\t}\n\t.btn-primary {\n\t\tbackground-color: #902082;\n\t\tcolor: white;\n\t}\n\t.btn-primary:hover {\n\t\tbackground-color: #7d1c71;\n\t}\n\t.btn-menu-inline {\n\t\tdisplay: inline-block;\n\t\twidth: auto;\n\t\tmax-width: auto;\n\t\ttext-align: left;\n\t\tpadding: 0.4em 0.8em;\n\t}\n\t.btn-link {\n\t\tbackground: none !important;\n\t\tborder: none;\n\t\tpadding: 0 !important;\n\t\tmargin: 0 !important;\n\t\tcolor: #206095;\n\t\tfont-weight: normal;\n\t\ttext-decoration: underline;\n\t\tcursor: pointer;\n\t}\n\t.btn-link:hover {\n\t\tcolor: black;\n\t}\n\t.btn-title {\n\t\tcolor: white;\n\t\tfont-weight: bold !important;\n\t\ttext-decoration: none;\n\t}\n\t.btn-hilo {\n\t\tborder: 2px solid black;\n\t\tmargin: 0;\n\t\tpadding: 0.2em 0.6em;\n\t}\n\t.btn-hilo:hover {\n\t\tbackground-color: lightgrey;\n\t}\n\t#menu label {\n\t\tbox-sizing: border-box;\n\t\tdisplay: block;\n\t\tpadding: 0.4em 0.4em 0.4em 2.5em;\n\t\twidth: 100%;\n\t\tborder: 1px solid black;\n\t\tmargin: 0 0 5px 0;\n\t\tcursor: pointer;\n\t\tposition: relative;\n\t}\n\tlabel:focus-within {\n\t\toutline: 3px solid orange;\n\t}\n\tlabel:hover {\n\t\tbackground-color: #eee;\n\t}\n\t.label-active {\n\t\tbackground-color: #eee;\n\t}\n\t.label-active:before {\n\t\tcontent: \" \";\n\t\tposition: absolute;\n\t\tz-index: 3;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\tleft: 0;\n\t\tright: 0;\n\t\tborder: 1px solid black;\n\t}\n\tinput[type=\"radio\"] {\n position: absolute;\n margin: 0;\n padding: 0;\n appearance: none;\n border: 2px solid #222;\n\t\tbackground: white;\n height: 22px;\n left: 8px;\n top: 50%;\n width: 22px;\n z-index: 1;\n border-radius: 50%;\n outline: none;\n\t\ttransform: translateY(-50%);\n\t}\n\tinput[type=\"radio\"]:checked {\n background: #222;\n box-shadow: inset 0 0 0 3px white;\n\t}\n\t.text-lrg {\n\t\tfont-size: 1.4rem;\n\t\tfont-weight: bold;\n\t}\n\t.text-xl {\n\t\tfont-size: 2.2rem;\n\t\tfont-weight: bold;\n\t}\n\t.mt-10 {\n\t\tmargin-top: 10px;\n\t}\n\t.mb-20 {\n\t\tmargin-bottom: 20px;\n\t}\n\tmark {\n\t\tfont-weight: bold;\n\t\tcolor: white;\n\t\tpadding: 0 0.2em;\n\t}\n\t.mark-start {\n\t\tbackground-color: #00A3A6;\n\t}\n\t.mark-end {\n\t\tbackground-color: #206095;\n\t}\n\t.nowrap {\n\t\twhite-space: nowrap;\n\t}\n\t.stats-block {\n\t\tmargin: 20px 0 25px 0;\n\t}\n\t.muted {\n\t\tcolor: #777;\n\t}\n\t.logo-block {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\talign-items: center;\n\t\tmax-width: 100%;\n\t}\n\t.logo {\n\t\tcursor: pointer;\n\t\tpadding: 2px;\n\t\tmargin: 0;\n\t\tline-height: 1;\n\t}\n\t.noscroll {\n\t\toverflow-y: hidden !important;\n\t}\n</style>\n","// SCRIPT BY OLI HAWKINS https://github.com/olihawkins/d3-hexjson\nimport {min, max} from \"d3-array\";\n\n// Main render method\nexport function renderHexJSON (hexjson, width, height) {\n\t// Get the layout\n\tvar layout = hexjson.layout;\n\n\t// Get the hex objects as an array\n\tvar hexes = [];\n\tvar hexRadius = 0;\n\n\tObject.keys(hexjson.hexes).forEach(function (key) {\n\t\thexjson.hexes[key].key = key;\n\t\thexes.push(hexjson.hexes[key]);\n\t});\n\n\t// Calculate the number of rows and columns\n\tvar qmax = max(hexes, function (d) { return +d.q }),\n\t\tqmin = min(hexes, function (d) { return +d.q }),\n\t\trmax = max(hexes, function (d) { return +d.r }),\n\t\trmin = min(hexes, function (d) { return +d.r });\n\n\tvar qnum = qmax - qmin + 1,\n\t\trnum = rmax - rmin + 1;\n\n\t// Calculate maximum radius the hexagons can have to fit the svg\n\tif (layout === \"odd-r\" || layout === \"even-r\") {\n\t\thexRadius = min([(width) / ((qnum + 0.5) * Math.sqrt(3)),\n\t\t\theight / ((rnum + 1 / 3) * 1.5)]);\n\t} else {\n\t\thexRadius = min([(height) / ((rnum + 0.5) * Math.sqrt(3)),\n\t\t\twidth / ((qnum + 1 / 3) * 1.5)]);\n\t}\n\n\t// Calculate the hexagon width\n\tvar hexWidth = hexRadius * Math.sqrt(3);\n\n\t// Get the vertices and points for this layout\n\tvar vertices = getVertices(layout, hexWidth, hexRadius);\n\tvar points = getPoints(vertices);\n\n\t// Calculate the values needed to render each hex and add to hexes\n\thexes.forEach(function (hex) {\n\t\t// Calculate the absolute co-ordinates of each hex\n\t\thex.qc = hex.q - qmin;\n\t\thex.rc = rmax - hex.r;\n\n\t\t// Calculate the x and y position of each hex for this svg\n\t\thex.x = getX(hex, layout, hexWidth, hexRadius);\n\t\thex.y = getY(hex, layout, hexWidth, hexRadius);\n\n\t\t// Add the vertex positions and points relative to x and y\n\t\thex.vertices = vertices;\n\t\thex.points = points;\n\t});\n\n\treturn hexes;\n}\n\n// Get the x position for a hex\nfunction getX (hex, layout, hexWidth, hexRadius) {\n\tvar x = 0,\n\t\txOffset = 0;\n\n\tswitch (layout) {\n\t\tcase \"odd-r\":\n\t\t\txOffset = (hex.rc % 2 === 1) ? hexWidth : (hexWidth / 2);\n\t\t\tx = (hex.qc * hexWidth) + xOffset;\n\t\t\tbreak;\n\n\t\tcase \"even-r\":\n\t\t\txOffset = (hex.rc % 2 === 0) ? hexWidth : (hexWidth / 2);\n\t\t\tx = (hex.qc * hexWidth) + xOffset;\n\t\t\tbreak;\n\n\t\tcase \"odd-q\":\n\t\tcase \"even-q\":\n\t\t\tx = (hex.qc * hexRadius * 1.5) + hexRadius;\n\t\t\tbreak;\n\t}\n\n\treturn x;\n}\n\n// Get the y position for a hex\nfunction getY (hex, layout, hexWidth, hexRadius) {\n\tvar y = 0,\n\t\tyOffset = 0;\n\n\tswitch (layout) {\n\t\tcase \"odd-r\":\n\t\tcase \"even-r\":\n\t\t\ty = (hex.rc * hexRadius * 1.5) + hexRadius;\n\t\t\tbreak;\n\n\t\tcase \"odd-q\":\n\t\t\tyOffset = (hex.qc % 2 === 1) ? hexWidth : (hexWidth / 2);\n\t\t\ty = (hex.rc * hexWidth) + yOffset;\n\t\t\tbreak;\n\n\t\tcase \"even-q\":\n\t\t\tyOffset = (hex.qc % 2 === 0) ? hexWidth : (hexWidth / 2);\n\t\t\ty = (hex.rc * hexWidth) + yOffset;\n\t\t\tbreak;\n\t}\n\n\treturn y;\n}\n\n// Get the positions of the vertices for the hex:\n// - Row layouts are ordered from the topmost vertex clockwise\n// - Column layouts are ordered from the leftmost vertex clockwise\nfunction getVertices (layout, hexWidth, hexRadius) {\n\tvar vertices = [];\n\n\tswitch (layout) {\n\t\tcase \"odd-r\":\n\t\tcase \"even-r\":\n\n\t\t\tvertices.push({x: 0, y: (0 - hexRadius)});\n\t\t\tvertices.push({x: (0 + hexWidth * 0.5), y: (0 - 0.5 * hexRadius)});\n\t\t\tvertices.push({x: (0 + hexWidth * 0.5), y: (0 + 0.5 * hexRadius)});\n\t\t\tvertices.push({x: 0, y: (0 + hexRadius)});\n\t\t\tvertices.push({x: (0 - hexWidth * 0.5), y: (0 + 0.5 * hexRadius)});\n\t\t\tvertices.push({x: (0 - hexWidth * 0.5), y: (0 - 0.5 * hexRadius)});\n\t\t\tbreak;\n\n\t\tcase \"odd-q\":\n\t\tcase \"even-q\":\n\n\t\t\tvertices.push({x: (0 - hexRadius), y: 0});\n\t\t\tvertices.push({x: (0 - 0.5 * hexRadius), y: (0 - hexWidth * 0.5)});\n\t\t\tvertices.push({x: (0 + 0.5 * hexRadius), y: (0 - hexWidth * 0.5)});\n\t\t\tvertices.push({x: (0 + hexRadius), y: 0});\n\t\t\tvertices.push({x: (0 + 0.5 * hexRadius), y: (0 + hexWidth * 0.5)});\n\t\t\tvertices.push({x: (0 - 0.5 * hexRadius), y: (0 + hexWidth * 0.5)});\n\t\t\tbreak;\n\t}\n\n\treturn vertices;\n}\n\n// Get the points attribute for a polygon with these vertices\nfunction getPoints (vertices) {\n\tvar points = \"\";\n\tvertices.forEach(function (v) { points += v.x + \",\" + v.y + \" \" });\n\treturn points.substring(0, points.length - 1);\n}\n\n// Creates a hexjson grid with the layout and dimensions of the given hexjson\nexport function getGridForHexJSON (hexjson) {\n\t// Create a new HexJSON object for the grid\n\tvar grid = {};\n\tgrid.layout = hexjson.layout;\n\tgrid.hexes = {};\n\n\t// Get the hex objects from the hexjson as an array\n\tvar hexes = [];\n\n\tObject.keys(hexjson.hexes).forEach(function (key) {\n\t\thexes.push(hexjson.hexes[key]);\n\t});\n\n\t// Calculate the number of rows and columns in the grid\n\tvar qmax = max(hexes, function (d) { return +d.q }),\n\t\tqmin = min(hexes, function (d) { return +d.q }),\n\t\trmax = max(hexes, function (d) { return +d.r }),\n\t\trmin = min(hexes, function (d) { return +d.r });\n\n\t// Create the hexjson grid\n\tvar i, j, fkey;\n\tfor (i = qmin; i <= qmax; i++) {\n\t\tfor (j = rmin; j <= rmax; j++) {\n\t\t\tfkey = \"Q\" + i + \"R\" + j;\n\t\t\tgrid.hexes[fkey] = {q: i, r: j};\n\t\t}\n\t}\n\n\treturn grid;\n}\n\n// Creates a list of dots along the boundaries between\n// hexes which have different values of \"field\"\nexport function getBoundaryDotsForHexJSON (hexjson, width, height, field) {\n\t// Get the hex objects from the hexjson as an array\n\tvar hexes = [];\n\tvar layout = hexjson.layout;\n\n\tObject.keys(hexjson.hexes).forEach(function (key) {\n\t\thexes.push(hexjson.hexes[key]);\n\t});\n\n\t// Calculate the number of rows and columns\n\tvar qmax = max(hexes, function (d) { return +d.q }),\n\t\tqmin = min(hexes, function (d) { return +d.q }),\n\t\trmax = max(hexes, function (d) { return +d.r }),\n\t\trmin = min(hexes, function (d) { return +d.r });\n\n\tvar qnum = qmax - qmin + 1,\n\t\trnum = rmax - rmin + 1;\n\tvar hexRadius;\n\n\t// Calculate maximum radius the hexagons can have to fit the svg\n\tif (layout === \"odd-r\" || layout === \"even-r\") {\n\t\thexRadius = min([(width) / ((qnum + 0.5) * Math.sqrt(3)),\n\t\t\theight / ((rnum + 1 / 3) * 1.5)]);\n\t} else {\n\t\thexRadius = min([(height) / ((rnum + 0.5) * Math.sqrt(3)),\n\t\t\twidth / ((qnum + 1 / 3) * 1.5)]);\n\t}\n\n\t// Calculate the hexagon width\n\tvar hexWidth = hexRadius * Math.sqrt(3);\n\t// Create an array into which we will put points along the\n\t// boundaries between differing hexes.\n\t// Each edge has five points, equally spaced.\n\n\tvar lines = [];\n\tvar hexRadiusSquared = hexRadius * hexRadius * 4;\n\tvar maxHex = hexes.length;\n\tif (maxHex > 1) {\n\t\thexes.forEach(function (hex) {\n\t\t\thex.qc = hex.q - qmin;\n\t\t\thex.rc = rmax - hex.r;\n\n\t\t\t// Calculate the x and y position of each hex for this svg\n\t\t\thex.x = getX(hex, layout, hexWidth, hexRadius);\n\t\t\thex.y = getY(hex, layout, hexWidth, hexRadius);\n\t\t});\n\t\tfor (var i = 0; i < maxHex - 1; i++) {\n\t\t\tfor (var j = i + 1; j < maxHex; j++) {\n\t\t\t\tvar hex = hexes[i];\n\t\t\t\tvar otherHex = hexes[j];\n\t\t\t\tif (hex[field] !== otherHex[field]) {\n\t\t\t\t\tif (Math.abs(hex.q - otherHex.q) <= 1 &&\n\t\t\t\t\t\tMath.abs(hex.r - otherHex.r) <= 1) {\n\t\t\t\t\t\tif (((hex.x - otherHex.x) * (hex.x - otherHex.x)) +\n\t\t\t\t\t\t\t((hex.y - otherHex.y) * (hex.y - otherHex.y)) < hexRadiusSquared) {\n\t\t\t\t\t\t\t// They're neighbours\n\t\t\t\t\t\t\tvar midpoint = {};\n\t\t\t\t\t\t\tmidpoint.x = otherHex.x + (hex.x - otherHex.x) / 2;\n\t\t\t\t\t\t\tmidpoint.y = otherHex.y + (hex.y - otherHex.y) / 2;\n\t\t\t\t\t\t\tvar perp = {};\n\t\t\t\t\t\t\tvar denom = Math.sqrt(3) * 4;\n\t\t\t\t\t\t\tperp.dx = (hex.y - otherHex.y) / denom;\n\t\t\t\t\t\t\tperp.dy = -(hex.x - otherHex.x) / denom;\n\t\t\t\t\t\t\tlines.push({x: midpoint.x - 2 * perp.dx, y: midpoint.y - 2 * perp.dy});\n\t\t\t\t\t\t\tlines.push({x: midpoint.x - perp.dx, y: midpoint.y - perp.dy});\n\t\t\t\t\t\t\tlines.push({x: midpoint.x, y: midpoint.y});\n\t\t\t\t\t\t\tlines.push({x: midpoint.x + perp.dx, y: midpoint.y + perp.dy});\n\t\t\t\t\t\t\tlines.push({x: midpoint.x + 2 * perp.dx, y: midpoint.y + 2 * perp.dy});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn lines;\n}\n\n// Creates a list of line segments along the boundaries\n// between hexes which have different values of \"field\"\nexport function getBoundarySegmentsForHexJSON (hexjson, width, height, field) {\n\t// Get the hex objects from the hexjson as an array\n\tvar hexes = [];\n\tvar layout = hexjson.layout;\n\n\tObject.keys(hexjson.hexes).forEach(function (key) {\n\t\thexes.push(hexjson.hexes[key]);\n\t});\n\n\t// Calculate the number of rows and columns\n\tvar qmax = max(hexes, function (d) { return +d.q }),\n\t\tqmin = min(hexes, function (d) { return +d.q }),\n\t\trmax = max(hexes, function (d) { return +d.r }),\n\t\trmin = min(hexes, function (d) { return +d.r });\n\n\tvar qnum = qmax - qmin + 1,\n\t\trnum = rmax - rmin + 1;\n\tvar hexRadius;\n\n\t// Calculate maximum radius the hexagons can have to fit the svg\n\tif (layout === \"odd-r\" || layout === \"even-r\") {\n\t\thexRadius = min([(width) / ((qnum + 0.5) * Math.sqrt(3)),\n\t\t\theight / ((rnum + 1 / 3) * 1.5)]);\n\t} else {\n\t\thexRadius = min([(height) / ((rnum + 0.5) * Math.sqrt(3)),\n\t\t\twidth / ((qnum + 1 / 3) * 1.5)]);\n\t}\n\n\t// Calculate the hexagon width\n\tvar hexWidth = hexRadius * Math.sqrt(3);\n\t// Create an array into which we will put points along the\n\t// boundaries between differing hexes.\n\n\t// Each segment will be of the form\n\t// {x: <start point X>, y: <start point Y>, cx: <difference X>, cy: <difference Y> }\n\t// intended to be used with the simple line drawing functionality of d3\n\t//\n\n\tvar segments = [];\n\tvar hexRadiusSquared = hexRadius * hexRadius * 4;\n\tvar maxHex = hexes.length;\n\tif (maxHex > 1) {\n\t\thexes.forEach(function (hex) {\n\t\t\thex.qc = hex.q - qmin;\n\t\t\thex.rc = rmax - hex.r;\n\n\t\t\t// Calculate the x and y position of each hex for this svg\n\t\t\thex.x = getX(hex, layout, hexWidth, hexRadius);\n\t\t\thex.y = getY(hex, layout, hexWidth, hexRadius);\n\t\t});\n\t\tfor (var i = 0; i < maxHex - 1; i++) {\n\t\t\tfor (var j = i + 1; j < maxHex; j++) {\n\t\t\t\tvar hex = hexes[i];\n\t\t\t\tvar otherHex = hexes[j];\n\t\t\t\tif (hex[field] !== otherHex[field]) {\n\t\t\t\t\tif (Math.abs(hex.q - otherHex.q) <= 1 &&\n\t\t\t\t\t\tMath.abs(hex.r - otherHex.r) <= 1) {\n\t\t\t\t\t\tif (((hex.x - otherHex.x) * (hex.x - otherHex.x)) +\n\t\t\t\t\t\t\t((hex.y - otherHex.y) * (hex.y - otherHex.y)) < hexRadiusSquared) {\n\t\t\t\t\t\t\t// They're neighbours\n\t\t\t\t\t\t\tvar midpoint = {};\n\t\t\t\t\t\t\tmidpoint.x = otherHex.x + (hex.x - otherHex.x) / 2;\n\t\t\t\t\t\t\tmidpoint.y = otherHex.y + (hex.y - otherHex.y) / 2;\n\t\t\t\t\t\t\tvar perp = {};\n\t\t\t\t\t\t\tvar direction = +1;\n\t\t\t\t\t\t\tif (hex[field] < otherHex[field]) {\n\t\t\t\t\t\t\t\tdirection = -1;\n\t\t\t\t\t\t\t} // otherwise, direction will be +1\n\t\t\t\t\t\t\tvar denom = Math.sqrt(3) * 2 * direction;\n\t\t\t\t\t\t\tperp.dx = (hex.y - otherHex.y) / denom;\n\t\t\t\t\t\t\tperp.dy = -(hex.x - otherHex.x) / denom;\n\t\t\t\t\t\t\tsegments.push({\n\t\t\t\t\t\t\t\tx1: midpoint.x - perp.dx,\n\t\t\t\t\t\t\t\ty1: midpoint.y - perp.dy,\n\t\t\t\t\t\t\t\tx2: midpoint.x + perp.dx,\n\t\t\t\t\t\t\t\ty2: midpoint.y + perp.dy});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn segments;\n}","import App from './App.svelte';\n\nvar app = new App({\n\ttarget: document.body\n});\n\nexport default app;"],"names":["noop","assign","tar","src","k","run","fn","blank_object","Object","create","run_all","fns","forEach","is_function","thing","safe_not_equal","a","b","get_slot_context","definition","ctx","$$scope","slice","null_to_empty","value","action_destroyer","action_result","destroy","append","target","node","appendChild","insert","anchor","insertBefore","detach","parentNode","removeChild","destroy_each","iterations","detaching","i","length","d","element","name","document","createElement","svg_element","createElementNS","text","data","createTextNode","space","empty","listen","event","handler","options","addEventListener","removeEventListener","prevent_default","preventDefault","call","this","attr","attribute","removeAttribute","getAttribute","setAttribute","set_attributes","attributes","descriptors","getOwnPropertyDescriptors","__proto__","key","style","cssText","set","set_custom_element_data","prop","set_data","wholeText","set_input_value","input","set_style","important","removeProperty","setProperty","crossorigin","current_component","is_crossorigin","undefined","window","parent","error","add_resize_listener","getComputedStyle","position","iframe","tabIndex","unsubscribe","source","contentWindow","onload","toggle_class","toggle","classList","HtmlTag","constructor","e","n","c","html","h","m","nodeName","t","innerHTML","Array","from","childNodes","p","set_current_component","component","get_current_component","Error","beforeUpdate","$$","before_update","push","onMount","on_mount","createEventDispatcher","type","detail","callbacks","bubbles","createEvent","initCustomEvent","custom_event","bubble","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","Promise","resolve","update_scheduled","schedule_update","then","flush","tick","add_render_callback","add_flush_callback","seen_callbacks","Set","flushidx","saved_component","update","pop","callback","has","add","clear","fragment","dirty","after_update","outroing","outros","group_outros","r","check_outros","transition_in","block","local","delete","transition_out","o","outro_and_destroy_block","lookup","get_spread_update","levels","updates","to_null_out","accounted_for","get_spread_object","spread_props","bind","index","props","bound","create_component","mount_component","customElement","on_destroy","new_on_destroy","map","filter","destroy_component","init","instance","create_fragment","not_equal","append_styles","parent_component","on_disconnect","context","Map","skip_bound","root","ready","ret","rest","fill","make_dirty","hydrate","nodes","children","l","intro","SvelteComponent","$destroy","$on","indexOf","splice","$set","$$props","obj","$$set","keys","formatDecimalParts","x","toExponential","coefficient","prefixExponent","re","formatSpecifier","specifier","match","exec","FormatSpecifier","align","sign","symbol","zero","width","comma","precision","trim","exponent","join","prototype","toString","Math","max","toFixed","round","abs","toLocaleString","replace","f","g","toPrecision","formatRounded","s","min","floor","X","toUpperCase","locale","format","prefixes","grouping","thousands","group","identity","Number","j","substring","reverse","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","String","percent","minus","nan","newFormat","formatTypes","prefix","test","toLowerCase","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","isNaN","out","i1","i0","formatTrim","charCodeAt","Infinity","padding","formatPrefix","NaN","pow","values","valueof","formatLocale","u","next","s0","s1","s2","state","int32","double","quick","exports","amd","alea","module","EOL","EOF","objectConverter","columns","Function","JSON","stringify","inferColumns","rows","columnSet","row","column","pad","formatDate","date","year","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","csv","delimiter","reFormat","RegExp","DELIMITER","parseRows","N","I","eof","eol","token","preformatBody","formatValue","formatRow","Date","parse","convert","object","customConverter","concat","formatBody","formatRows","dsv","csvParse","autoType","number","fixtz","getHours","extendStatics","setPrototypeOf","hasOwnProperty","__extends","TypeError","__","__assign","arguments","apply","__awaiter","thisArg","_arguments","P","generator","adopt","reject","fulfilled","step","rejected","result","done","__generator","body","y","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","__spreadArray","to","pack","ar","Bounds","left","top","height","w","fromClientRect","clientRect","windowBounds","fromDOMRectList","domRectList","domRect","find","rect","EMPTY","parseBounds","getBoundingClientRect","parseDocumentSize","documentElement","scrollWidth","offsetWidth","clientWidth","scrollHeight","offsetHeight","clientHeight","toCodePoints$1","str","codePoints","extra","fromCodePoint$1","_i","fromCodePoint","codeUnits","codePoint","fromCharCode","chars$2","lookup$2","Uint8Array","i$2","chars$1$1","lookup$1$1","i$1$1","decode$1","base64","encoded1","encoded2","encoded3","encoded4","bufferLength","len","buffer","ArrayBuffer","bytes","isArray","polyUint16Array$1","polyUint32Array$1","UTRIE2_SHIFT_2$1","UTRIE2_SHIFT_1$1","UTRIE2_INDEX_SHIFT$1","UTRIE2_LSCP_INDEX_2_OFFSET$1","UTRIE2_DATA_MASK$1","UTRIE2_INDEX_1_OFFSET$1","UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1","UTRIE2_INDEX_2_MASK$1","slice16$1","view","start","end","Uint16Array","slice32$1","Uint32Array","createTrieFromBase64$1","_byteLength","view32","view16","headerLength","ceil","Trie$1","Trie","initialValue","errorValue","highStart","highValueIndex","get","ix","chars$3","lookup$3","i$3","LETTER_NUMBER_MODIFIER","BK","CR$1","LF$1","CM","NL","WJ","ZW","GL","SP","ZWJ$1","B2","BA","BB","HY","CB","CL","CP","EX","IN","NS","OP","QU","IS","NU","PO","PR","SY","AI","AL","CJ","EB","EM","H2","H3","HL","ID","JL","JV","JT","RI$1","SA","XX","ea_OP","BREAK_MANDATORY","BREAK_NOT_ALLOWED$1","BREAK_ALLOWED$1","UnicodeTrie$1","ALPHABETICS","HARD_LINE_BREAKS","SPACE$1","PREFIX_POSTFIX","LINE_BREAKS","KOREAN_SYLLABLE_BLOCK","HYPHEN","codePointsToCharacterClasses","lineBreak","types","indices","categories","classType","prev","isAdjacentWithSpaceIgnored","currentIndex","classTypes","current","previousNonSpaceClassType","_lineBreakAtIndex","indicies","forbiddenBreaks","beforeIndex","afterIndex","before","prevIndex","count","cssFormattedClasses","wordBreak","_a","isLetterNumber","forbiddenBreakpoints","letterNumber","Break","required","LineBreaker","lastEnd","nextIndex","FLAG_UNRESTRICTED","FLAG_ID","FLAG_INTEGER","FLAG_NUMBER","LINE_FEED","SOLIDUS","REVERSE_SOLIDUS","CHARACTER_TABULATION","SPACE","QUOTATION_MARK","EQUALS_SIGN","NUMBER_SIGN","DOLLAR_SIGN","PERCENTAGE_SIGN","APOSTROPHE","LEFT_PARENTHESIS","RIGHT_PARENTHESIS","LOW_LINE","HYPHEN_MINUS","EXCLAMATION_MARK","LESS_THAN_SIGN","GREATER_THAN_SIGN","COMMERCIAL_AT","LEFT_SQUARE_BRACKET","RIGHT_SQUARE_BRACKET","CIRCUMFLEX_ACCENT","LEFT_CURLY_BRACKET","QUESTION_MARK","RIGHT_CURLY_BRACKET","VERTICAL_LINE","TILDE","CONTROL","REPLACEMENT_CHARACTER","ASTERISK","PLUS_SIGN","COMMA","COLON","SEMICOLON","FULL_STOP","NULL","BACKSPACE","LINE_TABULATION","SHIFT_OUT","INFORMATION_SEPARATOR_ONE","DELETE","ZERO","z","A","E","F","U","Z","isDigit","isSurrogateCodePoint","isHex","isLowerCaseLetter","isUpperCaseLetter","isLetter","isNonASCIICodePoint","isWhiteSpace","isNameStartCodePoint","isNameCodePoint","isNonPrintableCodePoint","isValidEscape","c1","c2","isIdentifierStart","c3","isNumberStart","stringToNumber","integers","int","parseInt","fraction","fracd","frac","expsign","exp","LEFT_PARENTHESIS_TOKEN","RIGHT_PARENTHESIS_TOKEN","COMMA_TOKEN","SUFFIX_MATCH_TOKEN","PREFIX_MATCH_TOKEN","COLUMN_TOKEN","DASH_MATCH_TOKEN","INCLUDE_MATCH_TOKEN","LEFT_CURLY_BRACKET_TOKEN","RIGHT_CURLY_BRACKET_TOKEN","SUBSTRING_MATCH_TOKEN","BAD_URL_TOKEN","BAD_STRING_TOKEN","CDO_TOKEN","CDC_TOKEN","COLON_TOKEN","SEMICOLON_TOKEN","LEFT_SQUARE_BRACKET_TOKEN","RIGHT_SQUARE_BRACKET_TOKEN","WHITESPACE_TOKEN","EOF_TOKEN","Tokenizer","_value","write","chunk","read","tokens","consumeToken","consumeCodePoint","consumeStringToken","peekCodePoint","flags","consumeName","reconsumeCodePoint","consumeNumericToken","e1","e2","e3","consumeIdentLikeToken","a1","a2","a3","u1","u2","consumeUnicodeRangeToken","consumeWhiteSpace","shift","unshift","delta","digits","questionMarks","digit","endDigits","consumeUrlToken","stringToken","consumeBadUrlRemnants","consumeEscapedCodePoint","consumeStringSlice","SLICE_STACK_SIZE","amount","endingCodePoint","consumeNumber","repr","unit","hex","hexCodePoint","Parser","_tokens","tokenizer","parseValue","parseComponentValue","parseValues","parseComponentValues","SyntaxError","reconsumeToken","consumeComponentValue","consumeSimpleBlock","consumeFunction","isEndingTokenFor","functionToken","cssFunction","isDimensionToken","isNumberToken","isIdentToken","isStringToken","isIdentWithValue","nonWhiteSpace","nonFunctionArgSeparator","parseFunctionArgs","args","arg","isLength","isLengthPercentage","parseLengthPercentageTuple","ZERO_LENGTH","FIFTY_PERCENT","HUNDRED_PERCENT","getAbsoluteValueForTuple","tuple","getAbsoluteValue","DEG","GRAD","RAD","TURN","angle","_context","PI","isAngle","parseNamedSide","ident","deg","color$1","colorFunction","SUPPORTED_COLOR_FUNCTIONS","namedColor","COLORS","TRANSPARENT","isTransparent","color","asString","alpha","blue","green","red","getTokenColorValue","rgb","_b","hue2rgb","t1","t2","hue","hsl","saturation","lightness","hsla","rgba","parseColor","ALICEBLUE","ANTIQUEWHITE","AQUA","AQUAMARINE","AZURE","BEIGE","BISQUE","BLACK","BLANCHEDALMOND","BLUE","BLUEVIOLET","BROWN","BURLYWOOD","CADETBLUE","CHARTREUSE","CHOCOLATE","CORAL","CORNFLOWERBLUE","CORNSILK","CRIMSON","CYAN","DARKBLUE","DARKCYAN","DARKGOLDENROD","DARKGRAY","DARKGREEN","DARKGREY","DARKKHAKI","DARKMAGENTA","DARKOLIVEGREEN","DARKORANGE","DARKORCHID","DARKRED","DARKSALMON","DARKSEAGREEN","DARKSLATEBLUE","DARKSLATEGRAY","DARKSLATEGREY","DARKTURQUOISE","DARKVIOLET","DEEPPINK","DEEPSKYBLUE","DIMGRAY","DIMGREY","DODGERBLUE","FIREBRICK","FLORALWHITE","FORESTGREEN","FUCHSIA","GAINSBORO","GHOSTWHITE","GOLD","GOLDENROD","GRAY","GREEN","GREENYELLOW","GREY","HONEYDEW","HOTPINK","INDIANRED","INDIGO","IVORY","KHAKI","LAVENDER","LAVENDERBLUSH","LAWNGREEN","LEMONCHIFFON","LIGHTBLUE","LIGHTCORAL","LIGHTCYAN","LIGHTGOLDENRODYELLOW","LIGHTGRAY","LIGHTGREEN","LIGHTGREY","LIGHTPINK","LIGHTSALMON","LIGHTSEAGREEN","LIGHTSKYBLUE","LIGHTSLATEGRAY","LIGHTSLATEGREY","LIGHTSTEELBLUE","LIGHTYELLOW","LIME","LIMEGREEN","LINEN","MAGENTA","MAROON","MEDIUMAQUAMARINE","MEDIUMBLUE","MEDIUMORCHID","MEDIUMPURPLE","MEDIUMSEAGREEN","MEDIUMSLATEBLUE","MEDIUMSPRINGGREEN","MEDIUMTURQUOISE","MEDIUMVIOLETRED","MIDNIGHTBLUE","MINTCREAM","MISTYROSE","MOCCASIN","NAVAJOWHITE","NAVY","OLDLACE","OLIVE","OLIVEDRAB","ORANGE","ORANGERED","ORCHID","PALEGOLDENROD","PALEGREEN","PALETURQUOISE","PALEVIOLETRED","PAPAYAWHIP","PEACHPUFF","PERU","PINK","PLUM","POWDERBLUE","PURPLE","REBECCAPURPLE","RED","ROSYBROWN","ROYALBLUE","SADDLEBROWN","SALMON","SANDYBROWN","SEAGREEN","SEASHELL","SIENNA","SILVER","SKYBLUE","SLATEBLUE","SLATEGRAY","SLATEGREY","SNOW","SPRINGGREEN","STEELBLUE","TAN","TEAL","THISTLE","TOMATO","TURQUOISE","VIOLET","WHEAT","WHITE","WHITESMOKE","YELLOW","YELLOWGREEN","backgroundClip","backgroundColor","parseColorStop","stop","processColorStops","stops","lineLength","first","last","processStops","previous","stop_1","absoluteValue","gapBegin","stop_2","gapLength","gapValue","getAngleFromCorner","corner","centerX","centerY","atan2","calculateGradientDirection","radian","sin","cos","halfWidth","halfHeight","halfLineLength","yDiff","xDiff","distance","sqrt","findCorner","closest","reduce","stat","cx","cy","optimumDistance","optimumCorner","calculateRadius","gradient","rx","ry","size","shape","linearGradient","angle$1","firstToken","colorStop","prefixLinearGradient","webkitGradient","CLOSEST_SIDE","FARTHEST_SIDE","CLOSEST_CORNER","FARTHEST_CORNER","CIRCLE","ELLIPSE","COVER","CONTAIN","radialGradient","isColorStop","isAtPosition_1","acc","prefixRadialGradient","isLinearGradient","background","isRadialGradient","image","image_1","url","cache","addImage","imageFunction","SUPPORTED_IMAGE_FUNCTIONS","isSupportedImage","BACKGROUND_SIZE","backgroundImage","backgroundOrigin","backgroundPosition","backgroundRepeat","parseBackgroundRepeat","LINE_BREAK","backgroundSize","isBackgroundSizeInfoToken","borderColorForSide","side","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","borderRadiusForSide","borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius","borderStyleForSide","borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle","borderWidthForSide","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","direction","display","bit","parseDisplayValue","float","letterSpacing","WORD_BREAK","STRICT","NORMAL","lineHeight","computeLineHeight","fontSize","listStyleImage","listStylePosition","listStyleType","marginForSide","marginTop","marginRight","marginBottom","marginLeft","overflow","overflowWrap","paddingForSide","paddingTop","paddingRight","paddingBottom","paddingLeft","textAlign","textShadow","shadow","offsetX","offsetY","blur","textTransform","transform$1","transformFunction","SUPPORTED_TRANSFORM_FUNCTIONS","matrix","matrix3d","b1","b2","a4","b4","DEFAULT_VALUE","DEFAULT","transformOrigin","origins","visibility","BREAK_ALL","KEEP_ALL","zIndex","auto","order","time","opacity","textDecorationColor","textDecorationLine","line","fontFamily","accumulator","results","fontWeight","fontVariant","fontStyle","contains","content","counterIncrement","increments","filtered","counter","increment","counterReset","resets","reset","duration","quotes","open_1","close_1","open","close","getQuote","depth","quote","boxShadow","spread","inset","paintOrder","layers","webkitTextStrokeColor","webkitTextStrokeWidth","CSSParsedDeclaration","declaration","animationDuration","cssFloat","overflowTuple","overflowX","overflowY","textDecoration","transform","isVisible","isTransformed","isPositioned","isPositionedWithZIndex","isFloating","isInlineLevel","CSSParsedPseudoDeclaration","CSSParsedCounterDeclaration","descriptor","parser","length_1","value_1","elementDebuggerAttribute","getElementDebugType","isDebugging","elementType","ElementContainer","textNodes","elements","styles","isHTMLElementNode","some","bounds","chars$1","lookup$1","i$1","decode","polyUint16Array","polyUint32Array","UTRIE2_SHIFT_2","UTRIE2_SHIFT_1","UTRIE2_INDEX_SHIFT","UTRIE2_LSCP_INDEX_2_OFFSET","UTRIE2_DATA_MASK","UTRIE2_INDEX_1_OFFSET","UTRIE2_OMITTED_BMP_INDEX_1_LENGTH","UTRIE2_INDEX_2_MASK","slice16","slice32","createTrieFromBase64","chars","PseudoElementType","Prepend","CR","LF","Control","Extend","SpacingMark","L","V","T","LV","LVT","ZWJ","Extended_Pictographic","RI","toCodePoints","UnicodeTrie","BREAK_NOT_ALLOWED","BREAK_ALLOWED","codePointToClass","_graphemeBreakAtIndex","_codePoints","countRI","GraphemeBreaker","graphemeBreak","splitGraphemes","bk","breaker","graphemes","testRangeBounds","TEST_HEIGHT","createRange","range","testElement","selectNode","rangeBounds","rangeHeight","testIOSLineBreak","wordSpacing","repeat","firstChild","textList","offset","supports","every","setStart","setEnd","boundAhead","testCORS","Image","crossOrigin","testResponseType","XMLHttpRequest","responseType","testSVG","img","canvas","getContext","drawImage","toDataURL","isGreenPixel","testForeignObject","fillStyle","fillRect","greenImageSrc","svg","createForeignObjectSVG","loadSerializedSVG$1","getImageData","catch","xmlns","foreignObject","setAttributeNS","onerror","encodeURIComponent","XMLSerializer","serializeToString","FEATURES","SUPPORT_RANGE_BOUNDS","defineProperty","SUPPORT_WORD_BREAKING","SUPPORT_SVG_DRAWING","SUPPORT_FOREIGNOBJECT_DRAWING","fetch","SUPPORT_CORS_IMAGES","SUPPORT_RESPONSE_TYPE","SUPPORT_CORS_XHR","SUPPORT_NATIVE_TEXT_SEGMENTATION","Intl","Segmenter","TextBounds","parseTextBounds","breakText","textBounds","clientRects","getClientRects","subSegments","segmentGraphemes","subOffset_1","subSegment","replacementNode","splitText","getWrapperBounds","ownerDocument","wrapper","cloneNode","replaceChild","segmenter","granularity","segment","segmentWords","breakWords","wordSeparators","words","_loop_1","word_1","TextContainer","CAPITALIZE","capitalize","p1","p2","ImageElementContainer","_super","_this","currentSrc","intrinsicWidth","naturalWidth","intrinsicHeight","naturalHeight","CanvasElementContainer","SVGElementContainer","baseVal","LIElementContainer","OLElementContainer","reversed","CHECKBOX_BORDER_RADIUS","RADIO_BORDER_RADIUS","reformatInputBounds","getInputValue","PASSWORD","placeholder","CHECKBOX","RADIO","INPUT_COLOR","InputElementContainer","checked","SelectElementContainer","option","selectedIndex","TextareaElementContainer","IFrameElementContainer","tree","parseTree","documentBackgroundColor","bodyBackgroundColor","LIST_OWNERS","parseNodeTree","childNode","nextNode","nextSibling","isTextNode","isElementNode","isSlotElement","assignedNodes","container","createContainer","createsRealStackingContext","createsStackingContext","tagName","slot","shadowRoot","isTextareaElement","isSVGElement","isSelectElement","isImageElement","isCanvasElement","isLIElement","isOLElement","isInputElement","isIFrameElement","isBodyElement","nodeType","Node","TEXT_NODE","ELEMENT_NODE","isSVGElementNode","className","isHTMLElement","isVideoElement","isStyleElement","isScriptElement","isCustomElement","CounterState","counters","getCounterValue","getCounterValues","canReset","entry","counterNames","ROMAN_UPPER","ARMENIAN","HEBREW","GEORGIAN","createAdditiveCounter","symbols","fallback","createCounterText","string","integer","createCounterStyleWithSymbolResolver","codePointRangeLength","isNumeric","resolver","createCounterStyleFromRange","codePointRangeStart","codePointRangeEnd","createCounterStyleFromSymbols","CJK_ZEROS","CJK_TEN_COEFFICIENTS","CJK_TEN_HIGH_COEFFICIENTS","CJK_HUNDRED_COEFFICIENTS","createCJKCounter","numbers","multipliers","negativeSign","tmp","CHINESE_INFORMAL_MULTIPLIERS","CHINESE_FORMAL_MULTIPLIERS","JAPANESE_NEGATIVE","KOREAN_NEGATIVE","appendSuffix","defaultSuffix","cjkSuffix","koreanSuffix","spaceSuffix","IGNORE_ATTRIBUTE","DocumentCloner","scrolledElements","referenceElement","quoteDepth","toIFrame","windowSize","createIFrameContainer","scrollX","defaultView","pageXOffset","scrollY","pageYOffset","cloneWindow","documentClone","iframeLoad","iframeLoader","onclone","restoreNodeScroll","scrollTo","navigator","userAgent","logger","warn","clonedReferenceElement","fonts","imagesReady","serializeDoctype","doctype","restoreOwnerScroll","adoptNode","createElementClone","createCanvasClone","createVideoClone","createStyleClone","clone","srcset","loading","createCustomElementClone","copyCSSStyles","sheet","cssRules","css","rule","textContent","inlineImages","info","clonedCanvas","clonedCtx","allowTaint","putImageData","gl","attribs","getContextAttributes","preserveDrawingBuffer","video","blankCanvas","appendChildNode","child","copyStyles","hasAttribute","ignoreElements","cloneChildNodes","assignedNode","transitionProperty","styleBefore","styleAfter","createPseudoHideStyles","resolvePseudoContent","BEFORE","after","AFTER","scrollTop","scrollLeft","pseudoElt","anonymousReplacedElement","counterStyle","counterState","counterType","delim","counterStates","counterType_1","separator","PSEUDO_HIDE_ELEMENT_CLASS_BEFORE","PSEUDO_HIDE_ELEMENT_CLASS_AFTER","newClassName","baseValue","CORNER","cloneIframeContainer","border","scrolling","imageReady","complete","all","images","interval","setInterval","readyState","clearInterval","ignoredStyleProperties","property","item","getPropertyValue","internalSubset","publicId","systemId","PSEUDO_BEFORE","PSEUDO_AFTER","PSEUDO_HIDE_ELEMENT_STYLE","createStyles","CacheStorage","getOrigin","link","_link","href","protocol","hostname","port","isSameOrigin","_origin","setContext","location","Cache","_options","_cache","isBlobImage","isRenderable","loadImage","useCORS","useProxy","isInlineImage","proxy","debug","isInlineBase64Image","setTimeout","imageTimeout","xhr","status","response","reader_1","FileReader","readAsDataURL","queryString","timeout_1","timeout","ontimeout","send","INLINE_SVG","INLINE_BASE64","INLINE_IMG","isSVG","substr","Vector","deltaX","deltaY","lerp","BezierCurve","startControl","endControl","subdivide","firstHalf","ab","bc","cd","abbc","bccd","dest","isBezierCurve","path","BoundCurves","tlh","tlv","trh","trv","_c","brh","brv","_d","blh","blv","factors","maxFactor","topWidth","rightHeight","bottomWidth","leftHeight","topLeftBorderDoubleOuterBox","getCurvePoints","TOP_LEFT","topRightBorderDoubleOuterBox","TOP_RIGHT","bottomRightBorderDoubleOuterBox","BOTTOM_RIGHT","bottomLeftBorderDoubleOuterBox","BOTTOM_LEFT","topLeftBorderDoubleInnerBox","topRightBorderDoubleInnerBox","bottomRightBorderDoubleInnerBox","bottomLeftBorderDoubleInnerBox","topLeftBorderStroke","topRightBorderStroke","bottomRightBorderStroke","bottomLeftBorderStroke","topLeftBorderBox","topRightBorderBox","bottomRightBorderBox","bottomLeftBorderBox","topLeftPaddingBox","topRightPaddingBox","bottomRightPaddingBox","bottomLeftPaddingBox","topLeftContentBox","topRightContentBox","bottomRightContentBox","bottomLeftContentBox","r1","r2","kappa","ox","oy","xm","ym","calculateBorderBoxPath","curves","calculateContentBoxPath","calculatePaddingBoxPath","TransformEffect","ClipEffect","OpacityEffect","isTransformEffect","effect","isClipEffect","isOpacityEffect","equalPath","transformPath","deltaW","deltaH","point","StackingContext","inlineLevel","nonInlineLevel","negativeZIndex","zeroOrAutoZIndexOrTransformedOrOpacity","positiveZIndex","nonPositionedFloats","nonPositionedInlineLevel","ElementPaint","effects","borderBox","paddingBox","getEffects","inFlow","croplessEffects","parseStackTree","stackingContext","realStackingContext","listItems","treatAsRealStackingContext","paintContainer","listOwnerItems","parentStack","stack","order_1","index_1","index_2","processListItems","owner","numbering","listValue","parseStackingContexts","parsePathForBorder","borderSide","createPathFromCurves","parsePathForBorderDoubleOuter","parsePathForBorderDoubleInner","parsePathForBorderStroke","createStrokePathFromCurves","outer1","outer2","inner1","inner2","contentBox","calculateBackgroundPositioningArea","calculateBackgroundPaintingArea","calculateBackgroundRendering","intrinsicSize","backgroundPositioningArea","getBackgroundValueForIndex","backgroundPaintingArea","backgroundImageSize","calculateBackgroundSize","sizeWidth","sizeHeight","calculateBackgroundRepeatPath","isAuto","AUTO","hasIntrinsicValue","intrinsicProportion","second","hasIntrinsicProportion","hasIntrinsicWidth","hasIntrinsicHeight","hasIntrinsicDimensions","width_3","height_3","SMALL_IMAGE","SAMPLE_TEXT","FontMetrics","_data","_document","parseMetrics","span","margin","whiteSpace","verticalAlign","baseline","offsetTop","middle","getMetrics","Renderer","MASK_OFFSET","CanvasRenderer","_activeEffects","scale","fontMetrics","translate","textBaseline","applyEffects","popEffect","applyEffect","save","globalAlpha","clip","restore","renderStack","renderStackContent","renderNode","paint","renderNodeBackgroundAndBorders","renderNodeContent","renderTextWithLetterSpacing","fillText","letter","measureText","createFontStyle","variant","fixIOSSystemFonts","renderTextNode","font","paintOrderLayer","textShadows","shadowColor","shadowOffsetX","shadowOffsetY","shadowBlur","strokeStyle","lineWidth","lineJoin","chrome","strokeText","renderReplacedElement","box","render","beginPath","arc","isTextInputElement","canvasTextAlign","_e","_f","_g","_h","_j","_k","_l","_m","_o","_p","mask","paths","moveTo","lineTo","formatPath","closePath","bezierCurveTo","renderRepeat","pattern","resizeImage","renderBackgroundImage","this_1","x0","x1","y0","y1","gradient_1","top_1","radialGradient_1","midX","midY","invF","createPattern","createLinearGradient","addColorStop","createRadialGradient","renderSolidBorder","curvePoints","renderDoubleBorder","outerPaths","innerPaths","hasBackground","borders","borders_1","calculateBackgroundCurvedPaintingArea","borderBoxArea","maskOffset","shadowPaintingArea","renderDashedDottedBorder","strokePaths","boxPaths","startX","startY","endX","endY","dashLength","spaceLength","useLineDash","multiplier","numberOfDashes","minSpace","maxSpace","path1","path2","setLineDash","lineCap","stroke","iOSBrokenFonts","fontFamilies","ForeignObjectRenderer","loadSerializedSVG","Logger","id","enabled","now","console","getTime","instances","Context","instanceName","instanceCount","logging","html2canvas","renderElement","opts","resourceOptions","contextOptions","windowOptions","foreignObjectRendering","cloneOptions","documentCloner","clonedElement","renderOptions","_q","_r","_s","_t","_u","windowWidth","innerWidth","windowHeight","innerHeight","parseBackgroundColor","devicePixelRatio","removeContainer","backgroundColorOverride","defaultBackgroundColor","factory","getAngle","getCompass","calcSteps","adj","visited","rings","found","deadend","steps","code","adj_code","includes","sleep","ms","setStorage","val","localStorage","setItem","getPNG","filename","download","click","routes","datasets","label_long","modes","game_defaults","mode","dataset","route","bearing","selected","right","wrong","record","history_defaults","daily","day","game","stats","fromEntries","won","lost","streak","streak_max","hexes","sample_hexes","title","xPos","tooltip","tooltipComponent","mouseOver","pos","bottom","Tooltip","mouseLeave","xhtml","xlink","xml","namespaces","creatorInherit","uri","namespaceURI","creatorFixed","fullname","namespace","none","selector","querySelector","array","querySelectorAll","matches","childMatcher","childFirst","firstElementChild","EnterNode","datum","_next","_parent","__data__","bindIndex","enter","exit","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","keyValues","arraylike","ascending","attrRemove","attrRemoveNS","removeAttributeNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","styleRemove","styleConstant","priority","styleFunction","styleValue","propertyRemove","propertyConstant","propertyFunction","classArray","split","ClassList","_node","_names","classedAdd","names","list","classedRemove","remove","classedTrue","classedFalse","classedFunction","textRemove","textConstant","textFunction","htmlRemove","htmlConstant","htmlFunction","raise","lower","previousSibling","constantNull","selection_cloneShallow","selection_cloneDeep","parseTypenames","typenames","onRemove","typename","on","__on","listener","onAdd","contextListener","dispatchEvent","params","CustomEvent","initEvent","cancelable","dispatchConstant","dispatchFunction","Selection","groups","parents","_groups","_parents","selection","sourceEvent","currentTarget","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","clientLeft","clientTop","pageX","pageY","select","subgroups","subnode","subgroup","selectAll","arrayAll","selectorAll","selectChild","childFind","selectChildren","childrenFilter","matcher","constant","enterGroup","updateGroup","exitGroup","_enter","_exit","sparse","onenter","onupdate","onexit","merge","groups0","groups1","m0","m1","merges","group0","group1","compareDocumentPosition","sort","compare","compareNode","sortgroups","sortgroup","each","getAttributeNS","classed","creator","deep","dispatch","Dispatch","copy","that","nonpassivecapture","capture","passive","stopImmediatePropagation","noevent","__noselect","MozUserSelect","yesdrag","noclick","extend","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","formatHex","color_formatRgb","formatRgb","rgbn","Rgb","rgbConvert","rgb_formatHex","rgb_formatRgb","clampa","clampi","Hsl","hslConvert","clamph","clampt","hsl2rgb","m2","define","channels","displayable","formatHex8","formatHsl","clamp","gamma","nogamma","exponential","linear","rgbGamma","colorRgb","reA","reB","am","bm","bs","bi","lastIndex","q","one","svgNode","degrees","translateX","translateY","rotate","skewX","scaleX","scaleY","atan","interpolateTransform","pxComma","pxParen","degParen","xa","ya","xb","yb","interpolateTransformCss","DOMMatrix","WebKitCSSMatrix","isIdentity","decompose","interpolateTransformSvg","consolidate","cosh","taskHead","taskTail","zoomRho","rho","rho2","rho4","zoom","p0","S","ux0","uy0","w0","ux1","uy1","w1","dx","dy","d2","log","d1","b0","r0","coshr0","sinh","SQRT2","_1","_2","frame","clockLast","clockNow","clockSkew","clock","performance","setFrame","requestAnimationFrame","clearNow","Timer","_call","_time","timer","delay","restart","wake","timerFlush","t0","nap","poke","clearTimeout","elapsed","emptyOn","emptyTween","timing","schedules","__transition","self","tween","schedule","ease","active","tweenRemove","tween0","tween1","tweenFunction","tweenValue","transition","_id","interpolateNumber","interpolateRgb","interpolateString","interpolate","value1","string00","interpolate0","string1","string0","string10","attrInterpolate","attrInterpolateNS","attrTweenNS","attrTween","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","onFunction","on0","on1","sit","styleInterpolate","styleTween","textInterpolate","textTween","Transition","_name","newId","selection_prototype","inherit","id0","id1","styleNull","listener0","styleMaybeRemove","removeFunction","easeVarying","cancel","interrupt","defaultTiming","ZoomEvent","defineProperties","enumerable","configurable","Transform","applyX","applyY","invert","invertX","invertY","rescaleX","domain","rescaleY","nopropagation","defaultFilter","ctrlKey","button","defaultExtent","SVGElement","viewBox","defaultTransform","__zoom","defaultWheelDelta","deltaMode","defaultTouchable","maxTouchPoints","defaultConstrain","extent","translateExtent","dx0","dx1","dy0","dy1","touchstarting","touchfirst","touchending","constrain","wheelDelta","touchable","scaleExtent","interpolateZoom","listeners","touchDelay","clickDistance2","tapDistance","wheeled","mousedowned","dblclicked","touchstarted","touchmoved","touchended","centroid","gesture","clean","__zooming","Gesture","taps","pointer","wheel","mouse","wheelidled","mousemoved","mouseupped","dragDisable","moved","dragEnable","changedTouches","k1","shiftKey","started","touches","identifier","touch0","touch1","l0","l1","dp","dl","hypot","collection","scaleBy","scaleTo","k0","translateBy","translateTo","emit","clickDistance","rotation","clickable","compass","chart","share","chevron","full","full_exit","shuffle","replay","cross","arrow","plus","makePoints","vertices","getStatus","points","getColor","colors","breaks","simple","interactive","el","vis","message","hexdata","next_index","_zoom","doZoom","factor","onClick","onKeydown","focus","preventScroll","reCenter","hexdata_new","setHexColors","snapticks","blocks","isActive","isFirst","isHover","isSelectable","getOptionLabel","filterText","itemClasses","classes","isGroupHeader","isGroupItem","isItemFirst","isItemActive","isItemHover","isItemSelectable","optionIdentifier","itemIndex","hoverItemIndex","items","selectable","prev_items","listStyle","VirtualList","Item","ItemComponent","isVirtualList","labelIdentifier","isCreator","getGroupHeaderLabel","itemHeight","hideEmptyState","noOptionsMessage","isMulti","activeItemIndex","listPlacement","listAutoWidth","listOffset","isScrollingTimer","isScrolling","handleSelect","handleHover","handleClick","stopPropagation","closeList","updateHoverItem","isNonSelectableItem","scrollToActiveItem","offsetBounding","focusedElemBounding","computePlacement","parentBounding","boundingContainer","any","isOutOfViewport","_hoverItemIndex","findIndex","hoverItem","getSelectionLabel","activeValue","isDisabled","multiFullItemClearable","handleClear","slot_ctx","slot_definition","slot_changes","get_slot_context_fn","slot_context","lets","merged","old_blocks","get_key","dynamic","create_each_block","get_context","old_indexes","new_blocks","new_lookup","deltas","child_ctx","will_move","did_move","new_block","old_block","new_key","old_key","viewport","contents","visible","mounted","average_height","height_map","viewport_height","getElementsByTagName","content_height","remaining","refresh","old_start","row_height","expected_height","actual_height","convertStringItemsToObjects","_items","isCreatable","isFocused","placeholderAlwaysShow","itemFilter","groupBy","groupFilter","isGroupHeaderSelectable","loadOptions","hasError","containerStyles","createGroupHeaderItem","groupValue","createItem","isSearchable","inputStyles","isClearable","isWaiting","listOpen","loadOptionsInterval","inputAttributes","Icon","iconProps","showChevron","showIndicator","containerClasses","indicatorSvg","ClearIcon","_ClearIcon","_Item","List","_List","_Selection","MultiSelection","_MultiSelection","_VirtualList","filterMethod","filterResults","matchesFilter","groupValues","sortedGroupedItems","filterGroupedItems","addCreatableItem","_filterText","itemToCreate","prev_value","prev_filterText","prev_isFocused","prev_isMulti","selectedValue","getItems","func","wait","immediate","later","callNow","debounce","res","err","details","cancelled","filteredItems","_inputAttributes","checkValueForDuplicates","noDuplicates","ids","uniqueValues","findItem","matchTo","handleMultiItemClear","itemToRemove","handleFocus","ariaValues","ariaListOpen","ariaFocused","updateValueDisplay","autocapitalize","autocomplete","autocorrect","spellcheck","tabindex","readonly","showSelectedItem","showClearIcon","placeholderText","showMultiSelect","listProps","ariaSelection","handleAriaSelection","ariaContext","_item","handleAriaContent","eventTarget","relatedTarget","autoClear","idKey","labelKey","groupKey","groupItems","maxSelected","darkMode","borderColor","clearSelect","getElementsByClassName","onkeypress","primary","secondary","cycleMenu","padStart","buttonText","innerText","buttons","getElementById","zeroday","setHours","today","midnight","parent_url","url_string","URLSearchParams","search","decodeURIComponent","countdown","mapel","maphexes","qhigher","qlower","history","nexthexes","fullscreen","status_prev","message_guess","message_select","setHexes","nexthexes_new","nexthexes_sorted","hexbearings","nextstep","nextbearing","thisbearing","thisindex","guess","hl","adjacent","dataLayer","startGame","updateTimer","startDaily","resetRoute","random","hexes_ew","arr","randomRoute","Random","setStatus","status_new","setStartEnd","other","unSelect","start_end","stored","getItem","loadHistory","json","hexjson","newhexes","layout","hexRadius","qmax","qmin","rmax","rmin","qnum","rnum","hexWidth","getVertices","getPoints","qc","rc","xOffset","getX","yOffset","getY","renderHexJSON","adjjson","localeCompare","async","getData","exitFullscreen","requestFullscreen","clipboard","writeText","alert"],"mappings":"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"}