Index: imaps-frontend/node_modules/html2canvas/dist/html2canvas.js.map
===================================================================
--- imaps-frontend/node_modules/html2canvas/dist/html2canvas.js.map	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/html2canvas/dist/html2canvas.js.map	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,1 @@
+{"version":3,"file":"html2canvas.js","sources":["../node_modules/tslib/tslib.es6.js","../../src/css/layout/bounds.ts","../node_modules/src/Util.ts","../node_modules/css-line-break/node_modules/src/Util.ts","../node_modules/css-line-break/node_modules/src/Trie.ts","../node_modules/css-line-break/node_modules/utrie/node_modules/src/index.ts","../node_modules/src/linebreak-trie.ts","../node_modules/src/LineBreak.ts","../../src/css/syntax/tokenizer.ts","../../src/css/syntax/parser.ts","../../src/css/types/length.ts","../../src/css/types/length-percentage.ts","../../src/css/types/angle.ts","../../src/css/types/color.ts","../../src/css/property-descriptors/background-clip.ts","../../src/css/property-descriptors/background-color.ts","../../src/css/types/functions/gradient.ts","../../src/css/types/functions/linear-gradient.ts","../../src/css/types/functions/-prefix-linear-gradient.ts","../../src/css/types/functions/-webkit-gradient.ts","../../src/css/types/functions/radial-gradient.ts","../../src/css/types/functions/-prefix-radial-gradient.ts","../../src/css/types/image.ts","../../src/css/property-descriptors/background-image.ts","../../src/css/property-descriptors/background-origin.ts","../../src/css/property-descriptors/background-position.ts","../../src/css/property-descriptors/background-repeat.ts","../../src/css/property-descriptors/background-size.ts","../../src/css/property-descriptors/border-color.ts","../../src/css/property-descriptors/border-radius.ts","../../src/css/property-descriptors/border-style.ts","../../src/css/property-descriptors/border-width.ts","../../src/css/property-descriptors/color.ts","../../src/css/property-descriptors/direction.ts","../../src/css/property-descriptors/display.ts","../../src/css/property-descriptors/float.ts","../../src/css/property-descriptors/letter-spacing.ts","../../src/css/property-descriptors/line-break.ts","../../src/css/property-descriptors/line-height.ts","../../src/css/property-descriptors/list-style-image.ts","../../src/css/property-descriptors/list-style-position.ts","../../src/css/property-descriptors/list-style-type.ts","../../src/css/property-descriptors/margin.ts","../../src/css/property-descriptors/overflow.ts","../../src/css/property-descriptors/overflow-wrap.ts","../../src/css/property-descriptors/padding.ts","../../src/css/property-descriptors/text-align.ts","../../src/css/property-descriptors/position.ts","../../src/css/property-descriptors/text-shadow.ts","../../src/css/property-descriptors/text-transform.ts","../../src/css/property-descriptors/transform.ts","../../src/css/property-descriptors/transform-origin.ts","../../src/css/property-descriptors/visibility.ts","../../src/css/property-descriptors/word-break.ts","../../src/css/property-descriptors/z-index.ts","../../src/css/types/time.ts","../../src/css/property-descriptors/opacity.ts","../../src/css/property-descriptors/text-decoration-color.ts","../../src/css/property-descriptors/text-decoration-line.ts","../../src/css/property-descriptors/font-family.ts","../../src/css/property-descriptors/font-size.ts","../../src/css/property-descriptors/font-weight.ts","../../src/css/property-descriptors/font-variant.ts","../../src/css/property-descriptors/font-style.ts","../../src/core/bitwise.ts","../../src/css/property-descriptors/content.ts","../../src/css/property-descriptors/counter-increment.ts","../../src/css/property-descriptors/counter-reset.ts","../../src/css/property-descriptors/duration.ts","../../src/css/property-descriptors/quotes.ts","../../src/css/property-descriptors/box-shadow.ts","../../src/css/property-descriptors/paint-order.ts","../../src/css/property-descriptors/webkit-text-stroke-color.ts","../../src/css/property-descriptors/webkit-text-stroke-width.ts","../../src/css/index.ts","../../src/core/debugger.ts","../../src/dom/element-container.ts","../node_modules/src/grapheme-break-trie.ts","../node_modules/text-segmentation/node_modules/src/Util.ts","../node_modules/text-segmentation/node_modules/src/Trie.ts","../node_modules/text-segmentation/node_modules/utrie/node_modules/src/index.ts","../node_modules/src/GraphemeBreak.ts","../../src/core/features.ts","../../src/css/layout/text.ts","../../src/dom/text-container.ts","../../src/dom/replaced-elements/image-element-container.ts","../../src/dom/replaced-elements/canvas-element-container.ts","../../src/dom/replaced-elements/svg-element-container.ts","../../src/dom/elements/li-element-container.ts","../../src/dom/elements/ol-element-container.ts","../../src/dom/replaced-elements/input-element-container.ts","../../src/dom/elements/select-element-container.ts","../../src/dom/elements/textarea-element-container.ts","../../src/dom/replaced-elements/iframe-element-container.ts","../../src/dom/node-parser.ts","../../src/css/types/functions/counter.ts","../../src/dom/document-cloner.ts","../../src/core/cache-storage.ts","../../src/render/vector.ts","../../src/render/bezier-curve.ts","../../src/render/bound-curves.ts","../../src/render/effects.ts","../../src/render/path.ts","../../src/render/stacking-context.ts","../../src/render/border.ts","../../src/render/box-sizing.ts","../../src/render/background.ts","../../src/core/util.ts","../../src/render/font-metrics.ts","../../src/render/renderer.ts","../../src/render/canvas/canvas-renderer.ts","../../src/render/canvas/foreignobject-renderer.ts","../../src/core/logger.ts","../../src/core/context.ts","../../src/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar 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\nexport 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\nexport 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\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport 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\nexport 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\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport 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}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import {Context} from '../../core/context';\n\nexport class Bounds {\n    constructor(readonly left: number, readonly top: number, readonly width: number, readonly height: number) {}\n\n    add(x: number, y: number, w: number, h: number): Bounds {\n        return new Bounds(this.left + x, this.top + y, this.width + w, this.height + h);\n    }\n\n    static fromClientRect(context: Context, clientRect: ClientRect): Bounds {\n        return new Bounds(\n            clientRect.left + context.windowBounds.left,\n            clientRect.top + context.windowBounds.top,\n            clientRect.width,\n            clientRect.height\n        );\n    }\n\n    static fromDOMRectList(context: Context, domRectList: DOMRectList): Bounds {\n        const domRect = Array.from(domRectList).find((rect) => rect.width !== 0);\n        return domRect\n            ? new Bounds(\n                  domRect.left + context.windowBounds.left,\n                  domRect.top + context.windowBounds.top,\n                  domRect.width,\n                  domRect.height\n              )\n            : Bounds.EMPTY;\n    }\n\n    static EMPTY = new Bounds(0, 0, 0, 0);\n}\n\nexport const parseBounds = (context: Context, node: Element): Bounds => {\n    return Bounds.fromClientRect(context, node.getBoundingClientRect());\n};\n\nexport const parseDocumentSize = (document: Document): Bounds => {\n    const body = document.body;\n    const documentElement = document.documentElement;\n\n    if (!body || !documentElement) {\n        throw new Error(`Unable to get document size`);\n    }\n    const width = Math.max(\n        Math.max(body.scrollWidth, documentElement.scrollWidth),\n        Math.max(body.offsetWidth, documentElement.offsetWidth),\n        Math.max(body.clientWidth, documentElement.clientWidth)\n    );\n\n    const height = Math.max(\n        Math.max(body.scrollHeight, documentElement.scrollHeight),\n        Math.max(body.offsetHeight, documentElement.offsetHeight),\n        Math.max(body.clientHeight, documentElement.clientHeight)\n    );\n\n    return new Bounds(0, 0, width, height);\n};\n","export const toCodePoints = (str: string): number[] => {\n    const codePoints = [];\n    let i = 0;\n    const length = str.length;\n    while (i < length) {\n        const value = str.charCodeAt(i++);\n        if (value >= 0xd800 && value <= 0xdbff && i < length) {\n            const extra = str.charCodeAt(i++);\n            if ((extra & 0xfc00) === 0xdc00) {\n                codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\n            } else {\n                codePoints.push(value);\n                i--;\n            }\n        } else {\n            codePoints.push(value);\n        }\n    }\n    return codePoints;\n};\n\nexport const fromCodePoint = (...codePoints: number[]): string => {\n    if (String.fromCodePoint) {\n        return String.fromCodePoint(...codePoints);\n    }\n\n    const length = codePoints.length;\n    if (!length) {\n        return '';\n    }\n\n    const codeUnits = [];\n\n    let index = -1;\n    let result = '';\n    while (++index < length) {\n        let codePoint = codePoints[index];\n        if (codePoint <= 0xffff) {\n            codeUnits.push(codePoint);\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(...codeUnits);\n            codeUnits.length = 0;\n        }\n    }\n    return result;\n};\n\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const decode = (base64: string): ArrayBuffer | number[] => {\n    let bufferLength = base64.length * 0.75,\n        len = base64.length,\n        i,\n        p = 0,\n        encoded1,\n        encoded2,\n        encoded3,\n        encoded4;\n\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    const buffer =\n        typeof ArrayBuffer !== 'undefined' &&\n        typeof Uint8Array !== 'undefined' &&\n        typeof Uint8Array.prototype.slice !== 'undefined'\n            ? new ArrayBuffer(bufferLength)\n            : new Array(bufferLength);\n    const bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n\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\n    return buffer;\n};\n\nexport const polyUint16Array = (buffer: number[]): number[] => {\n    const length = buffer.length;\n    const bytes = [];\n    for (let i = 0; i < length; i += 2) {\n        bytes.push((buffer[i + 1] << 8) | buffer[i]);\n    }\n    return bytes;\n};\n\nexport const polyUint32Array = (buffer: number[]): number[] => {\n    const length = buffer.length;\n    const bytes = [];\n    for (let 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","const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const decode = (base64: string): ArrayBuffer | number[] => {\n    let bufferLength = base64.length * 0.75,\n        len = base64.length,\n        i,\n        p = 0,\n        encoded1,\n        encoded2,\n        encoded3,\n        encoded4;\n\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    const buffer =\n        typeof ArrayBuffer !== 'undefined' &&\n        typeof Uint8Array !== 'undefined' &&\n        typeof Uint8Array.prototype.slice !== 'undefined'\n            ? new ArrayBuffer(bufferLength)\n            : new Array(bufferLength);\n    const bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n\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\n    return buffer;\n};\n\nexport const polyUint16Array = (buffer: number[]): number[] => {\n    const length = buffer.length;\n    const bytes = [];\n    for (let i = 0; i < length; i += 2) {\n        bytes.push((buffer[i + 1] << 8) | buffer[i]);\n    }\n    return bytes;\n};\n\nexport const polyUint32Array = (buffer: number[]): number[] => {\n    const length = buffer.length;\n    const bytes = [];\n    for (let 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","import {decode, polyUint16Array, polyUint32Array} from './Util';\n\nexport type int = number;\n\n/** Shift size for getting the index-2 table offset. */\nexport const UTRIE2_SHIFT_2 = 5;\n\n/** Shift size for getting the index-1 table offset. */\nexport const UTRIE2_SHIFT_1 = 6 + 5;\n\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 */\nexport const UTRIE2_INDEX_SHIFT = 2;\n\n/**\n * Difference between the two shift sizes,\n * for getting an index-1 offset from an index-2 offset. 6=11-5\n */\nexport const UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2;\n\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 */\nexport const UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2;\n\n/** Number of entries in a data block. 32=0x20 */\nexport const UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2;\n/** Mask for getting the lower bits for the in-data-block offset. */\nexport const UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1;\n\nexport const UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2;\n/** Count the lengths of both BMP pieces. 2080=0x820 */\nexport const 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 */\nexport const UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH;\nexport const 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 */\nexport const UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH;\n\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 */\nexport const UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1;\n\n/** Number of entries in an index-2 block. 64=0x40 */\nexport const UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2;\n/** Mask for getting the lower bits for the in-index-2-block offset. */\nexport const UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1;\n\nconst slice16 = (view: number[] | Uint16Array, start: number, end?: number) => {\n    if (view.slice) {\n        return view.slice(start, end);\n    }\n\n    return new Uint16Array(Array.prototype.slice.call(view, start, end));\n};\n\nconst slice32 = (view: number[] | Uint32Array, start: number, end?: number) => {\n    if (view.slice) {\n        return view.slice(start, end);\n    }\n\n    return new Uint32Array(Array.prototype.slice.call(view, start, end));\n};\n\nexport const createTrieFromBase64 = (base64: string, _byteLength: number): Trie => {\n    const buffer = decode(base64);\n    const view32 = Array.isArray(buffer) ? polyUint32Array(buffer) : new Uint32Array(buffer);\n    const view16 = Array.isArray(buffer) ? polyUint16Array(buffer) : new Uint16Array(buffer);\n    const headerLength = 24;\n\n    const index = slice16(view16, headerLength / 2, view32[4] / 2);\n    const data =\n        view32[5] === 2\n            ? slice16(view16, (headerLength + view32[4]) / 2)\n            : slice32(view32, Math.ceil((headerLength + view32[4]) / 4));\n\n    return new Trie(view32[0], view32[1], view32[2], view32[3], index, data);\n};\n\nexport class Trie {\n    initialValue: int;\n    errorValue: int;\n    highStart: int;\n    highValueIndex: int;\n    index: Uint16Array | number[];\n    data: Uint32Array | Uint16Array | number[];\n\n    constructor(\n        initialValue: int,\n        errorValue: int,\n        highStart: int,\n        highValueIndex: int,\n        index: Uint16Array | number[],\n        data: Uint32Array | Uint16Array | number[]\n    ) {\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    /**\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    get(codePoint: number): number {\n        let 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\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\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\n        // Fall through.  The code point is outside of the legal range of 0..0x10ffff.\n        return this.errorValue;\n    }\n}\n","const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const encode = (arraybuffer: ArrayBuffer): string => {\n    let bytes = new Uint8Array(arraybuffer),\n        i,\n        len = bytes.length,\n        base64 = '';\n\n    for (i = 0; i < len; i += 3) {\n        base64 += chars[bytes[i] >> 2];\n        base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n        base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n        base64 += chars[bytes[i + 2] & 63];\n    }\n\n    if (len % 3 === 2) {\n        base64 = base64.substring(0, base64.length - 1) + '=';\n    } else if (len % 3 === 1) {\n        base64 = base64.substring(0, base64.length - 2) + '==';\n    }\n\n    return base64;\n};\n\nexport const decode = (base64: string): ArrayBuffer => {\n    let bufferLength = base64.length * 0.75,\n        len = base64.length,\n        i,\n        p = 0,\n        encoded1,\n        encoded2,\n        encoded3,\n        encoded4;\n\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    const arraybuffer = new ArrayBuffer(bufferLength),\n        bytes = new Uint8Array(arraybuffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n\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\n    return arraybuffer;\n};\n","export const base64 =\n    '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==';\nexport const byteLength = 39664;\n","'use strict';\n\nimport {createTrieFromBase64} from 'utrie';\nimport {base64, byteLength} from './linebreak-trie';\nimport {fromCodePoint, toCodePoints} from './Util';\n\nexport const LETTER_NUMBER_MODIFIER = 50;\n\n// Non-tailorable Line Breaking Classes\nconst BK = 1; //  Cause a line break (after)\nconst CR = 2; //  Cause a line break (after), except between CR and LF\nconst LF = 3; //  Cause a line break (after)\nconst CM = 4; //  Prohibit a line break between the character and the preceding character\nconst NL = 5; //  Cause a line break (after)\nconst SG = 6; //  Do not occur in well-formed text\nconst WJ = 7; //  Prohibit line breaks before and after\nconst ZW = 8; //  Provide a break opportunity\nconst GL = 9; //  Prohibit line breaks before and after\nconst SP = 10; // Enable indirect line breaks\nconst ZWJ = 11; // Prohibit line breaks within joiner sequences\n// Break Opportunities\nconst B2 = 12; //  Provide a line break opportunity before and after the character\nconst BA = 13; //  Generally provide a line break opportunity after the character\nconst BB = 14; //  Generally provide a line break opportunity before the character\nconst HY = 15; //  Provide a line break opportunity after the character, except in numeric context\nconst CB = 16; //   Provide a line break opportunity contingent on additional information\n// Characters Prohibiting Certain Breaks\nconst CL = 17; //  Prohibit line breaks before\nconst CP = 18; //  Prohibit line breaks before\nconst EX = 19; //  Prohibit line breaks before\nconst IN = 20; //  Allow only indirect line breaks between pairs\nconst NS = 21; //  Allow only indirect line breaks before\nconst OP = 22; //  Prohibit line breaks after\nconst QU = 23; //  Act like they are both opening and closing\n// Numeric Context\nconst IS = 24; //  Prevent breaks after any and before numeric\nconst NU = 25; //  Form numeric expressions for line breaking purposes\nconst PO = 26; //  Do not break following a numeric expression\nconst PR = 27; //  Do not break in front of a numeric expression\nconst SY = 28; //  Prevent a break before; and allow a break after\n// Other Characters\nconst AI = 29; //  Act like AL when the resolvedEAW is N; otherwise; act as ID\nconst AL = 30; //  Are alphabetic characters or symbols that are used with alphabetic characters\nconst CJ = 31; //  Treat as NS or ID for strict or normal breaking.\nconst EB = 32; //  Do not break from following Emoji Modifier\nconst EM = 33; //  Do not break from preceding Emoji Base\nconst H2 = 34; //  Form Korean syllable blocks\nconst H3 = 35; //  Form Korean syllable blocks\nconst HL = 36; //  Do not break around a following hyphen; otherwise act as Alphabetic\nconst ID = 37; //  Break before or after; except in some numeric context\nconst JL = 38; //  Form Korean syllable blocks\nconst JV = 39; //  Form Korean syllable blocks\nconst JT = 40; //  Form Korean syllable blocks\nconst RI = 41; //  Keep pairs together. For pairs; break before and after other classes\nconst SA = 42; //  Provide a line break opportunity contingent on additional, language-specific context analysis\nconst XX = 43; //  Have as yet unknown line breaking behavior or unassigned code positions\n\nconst ea_OP = [0x2329, 0xff08];\n\nexport const classes: {[key: string]: number} = {\n    BK,\n    CR,\n    LF,\n    CM,\n    NL,\n    SG,\n    WJ,\n    ZW,\n    GL,\n    SP,\n    ZWJ,\n    B2,\n    BA,\n    BB,\n    HY,\n    CB,\n    CL,\n    CP,\n    EX,\n    IN,\n    NS,\n    OP,\n    QU,\n    IS,\n    NU,\n    PO,\n    PR,\n    SY,\n    AI,\n    AL,\n    CJ,\n    EB,\n    EM,\n    H2,\n    H3,\n    HL,\n    ID,\n    JL,\n    JV,\n    JT,\n    RI,\n    SA,\n    XX,\n};\n\nexport const BREAK_MANDATORY = '!';\nexport const BREAK_NOT_ALLOWED = '×';\nexport const BREAK_ALLOWED = '÷';\nexport const UnicodeTrie = createTrieFromBase64(base64, byteLength);\n\nconst ALPHABETICS = [AL, HL];\nconst HARD_LINE_BREAKS = [BK, CR, LF, NL];\nconst SPACE = [SP, ZW];\nconst PREFIX_POSTFIX = [PR, PO];\nconst LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE);\nconst KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3];\nconst HYPHEN = [HY, BA];\n\nexport const codePointsToCharacterClasses = (\n    codePoints: number[],\n    lineBreak: string = 'strict'\n): [number[], number[], boolean[]] => {\n    const types: number[] = [];\n    const indices: number[] = [];\n    const categories: boolean[] = [];\n    codePoints.forEach((codePoint, index) => {\n        let classType = UnicodeTrie.get(codePoint);\n        if (classType > LETTER_NUMBER_MODIFIER) {\n            categories.push(true);\n            classType -= LETTER_NUMBER_MODIFIER;\n        } else {\n            categories.push(false);\n        }\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\n        if (classType === CM || classType === ZWJ) {\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\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            const 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\n        indices.push(index);\n\n        if (classType === CJ) {\n            return types.push(lineBreak === 'strict' ? NS : ID);\n        }\n\n        if (classType === SA) {\n            return types.push(AL);\n        }\n\n        if (classType === AI) {\n            return types.push(AL);\n        }\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            } else {\n                return types.push(AL);\n            }\n        }\n\n        types.push(classType);\n    });\n\n    return [indices, types, categories];\n};\n\nconst isAdjacentWithSpaceIgnored = (\n    a: number[] | number,\n    b: number,\n    currentIndex: number,\n    classTypes: number[]\n): boolean => {\n    const current = classTypes[currentIndex];\n    if (Array.isArray(a) ? a.indexOf(current) !== -1 : a === current) {\n        let i = currentIndex;\n        while (i <= classTypes.length) {\n            i++;\n            let next = classTypes[i];\n\n            if (next === b) {\n                return true;\n            }\n\n            if (next !== SP) {\n                break;\n            }\n        }\n    }\n\n    if (current === SP) {\n        let i = currentIndex;\n\n        while (i > 0) {\n            i--;\n            const prev = classTypes[i];\n\n            if (Array.isArray(a) ? a.indexOf(prev) !== -1 : a === prev) {\n                let n = currentIndex;\n                while (n <= classTypes.length) {\n                    n++;\n                    let next = classTypes[n];\n\n                    if (next === b) {\n                        return true;\n                    }\n\n                    if (next !== SP) {\n                        break;\n                    }\n                }\n            }\n\n            if (prev !== SP) {\n                break;\n            }\n        }\n    }\n    return false;\n};\n\nconst previousNonSpaceClassType = (currentIndex: number, classTypes: number[]): number => {\n    let i = currentIndex;\n    while (i >= 0) {\n        let type = classTypes[i];\n        if (type === SP) {\n            i--;\n        } else {\n            return type;\n        }\n    }\n    return 0;\n};\n\nexport type BREAK_OPPORTUNITIES = typeof BREAK_NOT_ALLOWED | typeof BREAK_ALLOWED | typeof BREAK_MANDATORY;\n\nconst _lineBreakAtIndex = (\n    codePoints: number[],\n    classTypes: number[],\n    indicies: number[],\n    index: number,\n    forbiddenBreaks?: boolean[]\n): BREAK_OPPORTUNITIES => {\n    if (indicies[index] === 0) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    let currentIndex = index - 1;\n    if (Array.isArray(forbiddenBreaks) && forbiddenBreaks[currentIndex] === true) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    let beforeIndex = currentIndex - 1;\n    let afterIndex = currentIndex + 1;\n    let current = classTypes[currentIndex];\n\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    let before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0;\n    let next = classTypes[afterIndex];\n\n    if (current === CR && next === LF) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    if (HARD_LINE_BREAKS.indexOf(current) !== -1) {\n        return BREAK_MANDATORY;\n    }\n\n    // LB6 Do not break before hard line breaks.\n    if (HARD_LINE_BREAKS.indexOf(next) !== -1) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB7 Do not break before spaces or zero width space.\n    if (SPACE.indexOf(next) !== -1) {\n        return BREAK_NOT_ALLOWED;\n    }\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;\n    }\n\n    // LB8a Do not break after a zero width joiner.\n    if (UnicodeTrie.get(codePoints[currentIndex]) === ZWJ) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // zwj emojis\n    if ((current === EB || current === EM) && UnicodeTrie.get(codePoints[afterIndex]) === ZWJ) {\n        return BREAK_NOT_ALLOWED;\n    }\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;\n    }\n\n    // LB12 Do not break after NBSP and related characters.\n    if (current === GL) {\n        return BREAK_NOT_ALLOWED;\n    }\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;\n    }\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;\n    }\n\n    // LB14 Do not break after ‘[’, even after spaces.\n    if (previousNonSpaceClassType(currentIndex, classTypes) === OP) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB15 Do not break within ‘”[’, even with intervening spaces.\n    if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) {\n        return BREAK_NOT_ALLOWED;\n    }\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;\n    }\n\n    // LB17 Do not break within ‘——’, even with intervening spaces.\n    if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB18 Break after spaces.\n    if (current === SP) {\n        return BREAK_ALLOWED;\n    }\n\n    // LB19 Do not break before or after quotation marks, such as ‘ ” ’.\n    if (current === QU || next === QU) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB20 Break before and after unresolved CB.\n    if (next === CB || current === CB) {\n        return BREAK_ALLOWED;\n    }\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;\n    }\n\n    // LB21a Don't break after Hebrew + Hyphen.\n    if (before === HL && HYPHEN.indexOf(current) !== -1) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB21b Don’t break between Solidus and Hebrew letters.\n    if (current === SY && next === HL) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB22 Do not break before ellipsis.\n    if (next === IN) {\n        return BREAK_NOT_ALLOWED;\n    }\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;\n    }\n\n    // LB23a Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes.\n    if (\n        (current === PR && [ID, EB, EM].indexOf(next) !== -1) ||\n        ([ID, EB, EM].indexOf(current) !== -1 && next === PO)\n    ) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB24 Do not break between numeric prefix/postfix and letters, or between letters and prefix/postfix.\n    if (\n        (ALPHABETICS.indexOf(current) !== -1 && PREFIX_POSTFIX.indexOf(next) !== -1) ||\n        (PREFIX_POSTFIX.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1)\n    ) {\n        return BREAK_NOT_ALLOWED;\n    }\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    ) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // NU (NU | SY | IS)* × (NU | SY | IS | CL | CP)\n    if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) {\n        let prevIndex = currentIndex;\n        while (prevIndex >= 0) {\n            let type = classTypes[prevIndex];\n            if (type === NU) {\n                return BREAK_NOT_ALLOWED;\n            } else if ([SY, IS].indexOf(type) !== -1) {\n                prevIndex--;\n            } else {\n                break;\n            }\n        }\n    }\n\n    // NU (NU | SY | IS)* (CL | CP)? × (PO | PR))\n    if ([PR, PO].indexOf(next) !== -1) {\n        let prevIndex = [CL, CP].indexOf(current) !== -1 ? beforeIndex : currentIndex;\n        while (prevIndex >= 0) {\n            let type = classTypes[prevIndex];\n            if (type === NU) {\n                return BREAK_NOT_ALLOWED;\n            } else if ([SY, IS].indexOf(type) !== -1) {\n                prevIndex--;\n            } else {\n                break;\n            }\n        }\n    }\n\n    // LB26 Do not break a Korean syllable.\n    if (\n        (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    ) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB27 Treat a Korean Syllable Block the same as ID.\n    if (\n        (KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 && [IN, PO].indexOf(next) !== -1) ||\n        (KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR)\n    ) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB28 Do not break between alphabetics (“at”).\n    if (ALPHABETICS.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) {\n        return BREAK_NOT_ALLOWED;\n    }\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;\n    }\n\n    // LB30 Do not break between letters, numbers, or ordinary symbols and opening or closing parentheses.\n    if (\n        (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    ) {\n        return BREAK_NOT_ALLOWED;\n    }\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 && next === RI) {\n        let i = indicies[currentIndex];\n        let count = 1;\n        while (i > 0) {\n            i--;\n            if (classTypes[i] === RI) {\n                count++;\n            } else {\n                break;\n            }\n        }\n        if (count % 2 !== 0) {\n            return BREAK_NOT_ALLOWED;\n        }\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;\n    }\n\n    return BREAK_ALLOWED;\n};\n\nexport const lineBreakAtIndex = (codePoints: number[], index: number): BREAK_OPPORTUNITIES => {\n    // LB2 Never break at the start of text.\n    if (index === 0) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB3 Always break at the end of text.\n    if (index >= codePoints.length) {\n        return BREAK_MANDATORY;\n    }\n\n    const [indices, classTypes] = codePointsToCharacterClasses(codePoints);\n\n    return _lineBreakAtIndex(codePoints, classTypes, indices, index);\n};\n\nexport type LINE_BREAK = 'auto' | 'normal' | 'strict';\nexport type WORD_BREAK = 'normal' | 'break-all' | 'break-word' | 'keep-all';\n\ninterface IOptions {\n    lineBreak?: LINE_BREAK;\n    wordBreak?: WORD_BREAK;\n}\n\nconst cssFormattedClasses = (codePoints: number[], options?: IOptions): [number[], number[], boolean[] | undefined] => {\n    if (!options) {\n        options = {lineBreak: 'normal', wordBreak: 'normal'};\n    }\n    let [indicies, classTypes, isLetterNumber] = codePointsToCharacterClasses(codePoints, options.lineBreak);\n\n    if (options.wordBreak === 'break-all' || options.wordBreak === 'break-word') {\n        classTypes = classTypes.map((type) => ([NU, AL, SA].indexOf(type) !== -1 ? ID : type));\n    }\n\n    const forbiddenBreakpoints =\n        options.wordBreak === 'keep-all'\n            ? isLetterNumber.map((letterNumber, i) => {\n                  return letterNumber && codePoints[i] >= 0x4e00 && codePoints[i] <= 0x9fff;\n              })\n            : undefined;\n\n    return [indicies, classTypes, forbiddenBreakpoints];\n};\n\nexport const inlineBreakOpportunities = (str: string, options?: IOptions): string => {\n    const codePoints = toCodePoints(str);\n    let output = BREAK_NOT_ALLOWED;\n    const [indicies, classTypes, forbiddenBreakpoints] = cssFormattedClasses(codePoints, options);\n\n    codePoints.forEach((codePoint, i) => {\n        output +=\n            fromCodePoint(codePoint) +\n            (i >= codePoints.length - 1\n                ? BREAK_MANDATORY\n                : _lineBreakAtIndex(codePoints, classTypes, indicies, i + 1, forbiddenBreakpoints));\n    });\n\n    return output;\n};\n\nclass Break {\n    private readonly codePoints: number[];\n    readonly required: boolean;\n    readonly start: number;\n    readonly end: number;\n\n    constructor(codePoints: number[], lineBreak: string, start: number, end: number) {\n        this.codePoints = codePoints;\n        this.required = lineBreak === BREAK_MANDATORY;\n        this.start = start;\n        this.end = end;\n    }\n\n    slice(): string {\n        return fromCodePoint(...this.codePoints.slice(this.start, this.end));\n    }\n}\n\nexport type LineBreak =\n    | {\n          done: true;\n          value: null;\n      }\n    | {\n          done: false;\n          value: Break;\n      };\n\ninterface ILineBreakIterator {\n    next: () => LineBreak;\n}\n\nexport const LineBreaker = (str: string, options?: IOptions): ILineBreakIterator => {\n    const codePoints = toCodePoints(str);\n    const [indicies, classTypes, forbiddenBreakpoints] = cssFormattedClasses(codePoints, options);\n    const length = codePoints.length;\n    let lastEnd = 0;\n    let nextIndex = 0;\n\n    return {\n        next: () => {\n            if (nextIndex >= length) {\n                return {done: true, value: null};\n            }\n            let lineBreak = BREAK_NOT_ALLOWED;\n            while (\n                nextIndex < length &&\n                (lineBreak = _lineBreakAtIndex(codePoints, classTypes, indicies, ++nextIndex, forbiddenBreakpoints)) ===\n                    BREAK_NOT_ALLOWED\n            ) {}\n\n            if (lineBreak !== BREAK_NOT_ALLOWED || nextIndex === length) {\n                const value = new Break(codePoints, lineBreak, lastEnd, nextIndex);\n                lastEnd = nextIndex;\n                return {value, done: false};\n            }\n\n            return {done: true, value: null};\n        },\n    };\n};\n","// https://www.w3.org/TR/css-syntax-3\n\nimport {fromCodePoint, toCodePoints} from 'css-line-break';\n\nexport const enum TokenType {\n    STRING_TOKEN,\n    BAD_STRING_TOKEN,\n    LEFT_PARENTHESIS_TOKEN,\n    RIGHT_PARENTHESIS_TOKEN,\n    COMMA_TOKEN,\n    HASH_TOKEN,\n    DELIM_TOKEN,\n    AT_KEYWORD_TOKEN,\n    PREFIX_MATCH_TOKEN,\n    DASH_MATCH_TOKEN,\n    INCLUDE_MATCH_TOKEN,\n    LEFT_CURLY_BRACKET_TOKEN,\n    RIGHT_CURLY_BRACKET_TOKEN,\n    SUFFIX_MATCH_TOKEN,\n    SUBSTRING_MATCH_TOKEN,\n    DIMENSION_TOKEN,\n    PERCENTAGE_TOKEN,\n    NUMBER_TOKEN,\n    FUNCTION,\n    FUNCTION_TOKEN,\n    IDENT_TOKEN,\n    COLUMN_TOKEN,\n    URL_TOKEN,\n    BAD_URL_TOKEN,\n    CDC_TOKEN,\n    CDO_TOKEN,\n    COLON_TOKEN,\n    SEMICOLON_TOKEN,\n    LEFT_SQUARE_BRACKET_TOKEN,\n    RIGHT_SQUARE_BRACKET_TOKEN,\n    UNICODE_RANGE_TOKEN,\n    WHITESPACE_TOKEN,\n    EOF_TOKEN\n}\n\ninterface IToken {\n    type: TokenType;\n}\n\nexport interface Token extends IToken {\n    type:\n        | TokenType.BAD_URL_TOKEN\n        | TokenType.BAD_STRING_TOKEN\n        | TokenType.LEFT_PARENTHESIS_TOKEN\n        | TokenType.RIGHT_PARENTHESIS_TOKEN\n        | TokenType.COMMA_TOKEN\n        | TokenType.SUBSTRING_MATCH_TOKEN\n        | TokenType.PREFIX_MATCH_TOKEN\n        | TokenType.SUFFIX_MATCH_TOKEN\n        | TokenType.COLON_TOKEN\n        | TokenType.SEMICOLON_TOKEN\n        | TokenType.LEFT_SQUARE_BRACKET_TOKEN\n        | TokenType.RIGHT_SQUARE_BRACKET_TOKEN\n        | TokenType.LEFT_CURLY_BRACKET_TOKEN\n        | TokenType.RIGHT_CURLY_BRACKET_TOKEN\n        | TokenType.DASH_MATCH_TOKEN\n        | TokenType.INCLUDE_MATCH_TOKEN\n        | TokenType.COLUMN_TOKEN\n        | TokenType.WHITESPACE_TOKEN\n        | TokenType.CDC_TOKEN\n        | TokenType.CDO_TOKEN\n        | TokenType.EOF_TOKEN;\n}\n\nexport interface StringValueToken extends IToken {\n    type:\n        | TokenType.STRING_TOKEN\n        | TokenType.DELIM_TOKEN\n        | TokenType.FUNCTION_TOKEN\n        | TokenType.IDENT_TOKEN\n        | TokenType.URL_TOKEN\n        | TokenType.AT_KEYWORD_TOKEN;\n    value: string;\n}\n\nexport interface HashToken extends IToken {\n    type: TokenType.HASH_TOKEN;\n    flags: number;\n    value: string;\n}\n\nexport interface NumberValueToken extends IToken {\n    type: TokenType.PERCENTAGE_TOKEN | TokenType.NUMBER_TOKEN;\n    flags: number;\n    number: number;\n}\n\nexport interface DimensionToken extends IToken {\n    type: TokenType.DIMENSION_TOKEN;\n    flags: number;\n    unit: string;\n    number: number;\n}\n\nexport interface UnicodeRangeToken extends IToken {\n    type: TokenType.UNICODE_RANGE_TOKEN;\n    start: number;\n    end: number;\n}\n\nexport type CSSToken = Token | StringValueToken | NumberValueToken | DimensionToken | UnicodeRangeToken | HashToken;\n\nexport const FLAG_UNRESTRICTED = 1 << 0;\nexport const FLAG_ID = 1 << 1;\nexport const FLAG_INTEGER = 1 << 2;\nexport const FLAG_NUMBER = 1 << 3;\n\nconst LINE_FEED = 0x000a;\nconst SOLIDUS = 0x002f;\nconst REVERSE_SOLIDUS = 0x005c;\nconst CHARACTER_TABULATION = 0x0009;\nconst SPACE = 0x0020;\nconst QUOTATION_MARK = 0x0022;\nconst EQUALS_SIGN = 0x003d;\nconst NUMBER_SIGN = 0x0023;\nconst DOLLAR_SIGN = 0x0024;\nconst PERCENTAGE_SIGN = 0x0025;\nconst APOSTROPHE = 0x0027;\nconst LEFT_PARENTHESIS = 0x0028;\nconst RIGHT_PARENTHESIS = 0x0029;\nconst LOW_LINE = 0x005f;\nconst HYPHEN_MINUS = 0x002d;\nconst EXCLAMATION_MARK = 0x0021;\nconst LESS_THAN_SIGN = 0x003c;\nconst GREATER_THAN_SIGN = 0x003e;\nconst COMMERCIAL_AT = 0x0040;\nconst LEFT_SQUARE_BRACKET = 0x005b;\nconst RIGHT_SQUARE_BRACKET = 0x005d;\nconst CIRCUMFLEX_ACCENT = 0x003d;\nconst LEFT_CURLY_BRACKET = 0x007b;\nconst QUESTION_MARK = 0x003f;\nconst RIGHT_CURLY_BRACKET = 0x007d;\nconst VERTICAL_LINE = 0x007c;\nconst TILDE = 0x007e;\nconst CONTROL = 0x0080;\nconst REPLACEMENT_CHARACTER = 0xfffd;\nconst ASTERISK = 0x002a;\nconst PLUS_SIGN = 0x002b;\nconst COMMA = 0x002c;\nconst COLON = 0x003a;\nconst SEMICOLON = 0x003b;\nconst FULL_STOP = 0x002e;\nconst NULL = 0x0000;\nconst BACKSPACE = 0x0008;\nconst LINE_TABULATION = 0x000b;\nconst SHIFT_OUT = 0x000e;\nconst INFORMATION_SEPARATOR_ONE = 0x001f;\nconst DELETE = 0x007f;\nconst EOF = -1;\nconst ZERO = 0x0030;\nconst a = 0x0061;\nconst e = 0x0065;\nconst f = 0x0066;\nconst u = 0x0075;\nconst z = 0x007a;\nconst A = 0x0041;\nconst E = 0x0045;\nconst F = 0x0046;\nconst U = 0x0055;\nconst Z = 0x005a;\n\nconst isDigit = (codePoint: number) => codePoint >= ZERO && codePoint <= 0x0039;\nconst isSurrogateCodePoint = (codePoint: number) => codePoint >= 0xd800 && codePoint <= 0xdfff;\nconst isHex = (codePoint: number) =>\n    isDigit(codePoint) || (codePoint >= A && codePoint <= F) || (codePoint >= a && codePoint <= f);\nconst isLowerCaseLetter = (codePoint: number) => codePoint >= a && codePoint <= z;\nconst isUpperCaseLetter = (codePoint: number) => codePoint >= A && codePoint <= Z;\nconst isLetter = (codePoint: number) => isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint);\nconst isNonASCIICodePoint = (codePoint: number) => codePoint >= CONTROL;\nconst isWhiteSpace = (codePoint: number): boolean =>\n    codePoint === LINE_FEED || codePoint === CHARACTER_TABULATION || codePoint === SPACE;\nconst isNameStartCodePoint = (codePoint: number): boolean =>\n    isLetter(codePoint) || isNonASCIICodePoint(codePoint) || codePoint === LOW_LINE;\nconst isNameCodePoint = (codePoint: number): boolean =>\n    isNameStartCodePoint(codePoint) || isDigit(codePoint) || codePoint === HYPHEN_MINUS;\nconst isNonPrintableCodePoint = (codePoint: number): boolean => {\n    return (\n        (codePoint >= NULL && codePoint <= BACKSPACE) ||\n        codePoint === LINE_TABULATION ||\n        (codePoint >= SHIFT_OUT && codePoint <= INFORMATION_SEPARATOR_ONE) ||\n        codePoint === DELETE\n    );\n};\nconst isValidEscape = (c1: number, c2: number): boolean => {\n    if (c1 !== REVERSE_SOLIDUS) {\n        return false;\n    }\n\n    return c2 !== LINE_FEED;\n};\nconst isIdentifierStart = (c1: number, c2: number, c3: number): boolean => {\n    if (c1 === HYPHEN_MINUS) {\n        return isNameStartCodePoint(c2) || isValidEscape(c2, c3);\n    } else if (isNameStartCodePoint(c1)) {\n        return true;\n    } else if (c1 === REVERSE_SOLIDUS && isValidEscape(c1, c2)) {\n        return true;\n    }\n    return false;\n};\n\nconst isNumberStart = (c1: number, c2: number, c3: number): boolean => {\n    if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\n        if (isDigit(c2)) {\n            return true;\n        }\n\n        return c2 === FULL_STOP && isDigit(c3);\n    }\n\n    if (c1 === FULL_STOP) {\n        return isDigit(c2);\n    }\n\n    return isDigit(c1);\n};\n\nconst stringToNumber = (codePoints: number[]): number => {\n    let c = 0;\n    let 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\n    const integers = [];\n\n    while (isDigit(codePoints[c])) {\n        integers.push(codePoints[c++]);\n    }\n\n    const int = integers.length ? parseInt(fromCodePoint(...integers), 10) : 0;\n\n    if (codePoints[c] === FULL_STOP) {\n        c++;\n    }\n\n    const fraction = [];\n    while (isDigit(codePoints[c])) {\n        fraction.push(codePoints[c++]);\n    }\n\n    const fracd = fraction.length;\n    const frac = fracd ? parseInt(fromCodePoint(...fraction), 10) : 0;\n\n    if (codePoints[c] === E || codePoints[c] === e) {\n        c++;\n    }\n\n    let expsign = 1;\n\n    if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {\n        if (codePoints[c] === HYPHEN_MINUS) {\n            expsign = -1;\n        }\n        c++;\n    }\n\n    const exponent = [];\n\n    while (isDigit(codePoints[c])) {\n        exponent.push(codePoints[c++]);\n    }\n\n    const exp = exponent.length ? parseInt(fromCodePoint(...exponent), 10) : 0;\n\n    return sign * (int + frac * Math.pow(10, -fracd)) * Math.pow(10, expsign * exp);\n};\n\nconst LEFT_PARENTHESIS_TOKEN: Token = {\n    type: TokenType.LEFT_PARENTHESIS_TOKEN\n};\nconst RIGHT_PARENTHESIS_TOKEN: Token = {\n    type: TokenType.RIGHT_PARENTHESIS_TOKEN\n};\nconst COMMA_TOKEN: Token = {type: TokenType.COMMA_TOKEN};\nconst SUFFIX_MATCH_TOKEN: Token = {type: TokenType.SUFFIX_MATCH_TOKEN};\nconst PREFIX_MATCH_TOKEN: Token = {type: TokenType.PREFIX_MATCH_TOKEN};\nconst COLUMN_TOKEN: Token = {type: TokenType.COLUMN_TOKEN};\nconst DASH_MATCH_TOKEN: Token = {type: TokenType.DASH_MATCH_TOKEN};\nconst INCLUDE_MATCH_TOKEN: Token = {type: TokenType.INCLUDE_MATCH_TOKEN};\nconst LEFT_CURLY_BRACKET_TOKEN: Token = {\n    type: TokenType.LEFT_CURLY_BRACKET_TOKEN\n};\nconst RIGHT_CURLY_BRACKET_TOKEN: Token = {\n    type: TokenType.RIGHT_CURLY_BRACKET_TOKEN\n};\nconst SUBSTRING_MATCH_TOKEN: Token = {type: TokenType.SUBSTRING_MATCH_TOKEN};\nconst BAD_URL_TOKEN: Token = {type: TokenType.BAD_URL_TOKEN};\nconst BAD_STRING_TOKEN: Token = {type: TokenType.BAD_STRING_TOKEN};\nconst CDO_TOKEN: Token = {type: TokenType.CDO_TOKEN};\nconst CDC_TOKEN: Token = {type: TokenType.CDC_TOKEN};\nconst COLON_TOKEN: Token = {type: TokenType.COLON_TOKEN};\nconst SEMICOLON_TOKEN: Token = {type: TokenType.SEMICOLON_TOKEN};\nconst LEFT_SQUARE_BRACKET_TOKEN: Token = {\n    type: TokenType.LEFT_SQUARE_BRACKET_TOKEN\n};\nconst RIGHT_SQUARE_BRACKET_TOKEN: Token = {\n    type: TokenType.RIGHT_SQUARE_BRACKET_TOKEN\n};\nconst WHITESPACE_TOKEN: Token = {type: TokenType.WHITESPACE_TOKEN};\nexport const EOF_TOKEN: Token = {type: TokenType.EOF_TOKEN};\n\nexport class Tokenizer {\n    private _value: number[];\n\n    constructor() {\n        this._value = [];\n    }\n\n    write(chunk: string): void {\n        this._value = this._value.concat(toCodePoints(chunk));\n    }\n\n    read(): CSSToken[] {\n        const tokens = [];\n        let token = this.consumeToken();\n        while (token !== EOF_TOKEN) {\n            tokens.push(token);\n            token = this.consumeToken();\n        }\n        return tokens;\n    }\n\n    private consumeToken(): CSSToken {\n        const codePoint = this.consumeCodePoint();\n\n        switch (codePoint) {\n            case QUOTATION_MARK:\n                return this.consumeStringToken(QUOTATION_MARK);\n            case NUMBER_SIGN:\n                const c1 = this.peekCodePoint(0);\n                const c2 = this.peekCodePoint(1);\n                const c3 = this.peekCodePoint(2);\n                if (isNameCodePoint(c1) || isValidEscape(c2, c3)) {\n                    const flags = isIdentifierStart(c1, c2, c3) ? FLAG_ID : FLAG_UNRESTRICTED;\n                    const value = this.consumeName();\n\n                    return {type: TokenType.HASH_TOKEN, value, 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                const e1 = codePoint;\n                const e2 = this.peekCodePoint(0);\n                const e3 = this.peekCodePoint(1);\n\n                if (isNumberStart(e1, e2, e3)) {\n                    this.reconsumeCodePoint(codePoint);\n                    return this.consumeNumericToken();\n                }\n\n                if (isIdentifierStart(e1, e2, e3)) {\n                    this.reconsumeCodePoint(codePoint);\n                    return this.consumeIdentLikeToken();\n                }\n\n                if (e2 === HYPHEN_MINUS && e3 === GREATER_THAN_SIGN) {\n                    this.consumeCodePoint();\n                    this.consumeCodePoint();\n                    return CDC_TOKEN;\n                }\n                break;\n\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                        let 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 (\n                    this.peekCodePoint(0) === EXCLAMATION_MARK &&\n                    this.peekCodePoint(1) === HYPHEN_MINUS &&\n                    this.peekCodePoint(2) === HYPHEN_MINUS\n                ) {\n                    this.consumeCodePoint();\n                    this.consumeCodePoint();\n                    return CDO_TOKEN;\n                }\n                break;\n            case COMMERCIAL_AT:\n                const a1 = this.peekCodePoint(0);\n                const a2 = this.peekCodePoint(1);\n                const a3 = this.peekCodePoint(2);\n                if (isIdentifierStart(a1, a2, a3)) {\n                    const value = this.consumeName();\n                    return {type: TokenType.AT_KEYWORD_TOKEN, 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                const u1 = this.peekCodePoint(0);\n                const 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\n        if (isWhiteSpace(codePoint)) {\n            this.consumeWhiteSpace();\n            return WHITESPACE_TOKEN;\n        }\n\n        if (isDigit(codePoint)) {\n            this.reconsumeCodePoint(codePoint);\n            return this.consumeNumericToken();\n        }\n\n        if (isNameStartCodePoint(codePoint)) {\n            this.reconsumeCodePoint(codePoint);\n            return this.consumeIdentLikeToken();\n        }\n\n        return {type: TokenType.DELIM_TOKEN, value: fromCodePoint(codePoint)};\n    }\n\n    private consumeCodePoint(): number {\n        const value = this._value.shift();\n\n        return typeof value === 'undefined' ? -1 : value;\n    }\n\n    private reconsumeCodePoint(codePoint: number) {\n        this._value.unshift(codePoint);\n    }\n\n    private peekCodePoint(delta: number): number {\n        if (delta >= this._value.length) {\n            return -1;\n        }\n\n        return this._value[delta];\n    }\n\n    private consumeUnicodeRangeToken(): UnicodeRangeToken {\n        const digits = [];\n        let codePoint = this.consumeCodePoint();\n        while (isHex(codePoint) && digits.length < 6) {\n            digits.push(codePoint);\n            codePoint = this.consumeCodePoint();\n        }\n        let questionMarks = false;\n        while (codePoint === QUESTION_MARK && digits.length < 6) {\n            digits.push(codePoint);\n            codePoint = this.consumeCodePoint();\n            questionMarks = true;\n        }\n\n        if (questionMarks) {\n            const start = parseInt(\n                fromCodePoint(...digits.map((digit) => (digit === QUESTION_MARK ? ZERO : digit))),\n                16\n            );\n            const end = parseInt(fromCodePoint(...digits.map((digit) => (digit === QUESTION_MARK ? F : digit))), 16);\n            return {type: TokenType.UNICODE_RANGE_TOKEN, start, end};\n        }\n\n        const start = parseInt(fromCodePoint(...digits), 16);\n        if (this.peekCodePoint(0) === HYPHEN_MINUS && isHex(this.peekCodePoint(1))) {\n            this.consumeCodePoint();\n            codePoint = this.consumeCodePoint();\n            const endDigits = [];\n            while (isHex(codePoint) && endDigits.length < 6) {\n                endDigits.push(codePoint);\n                codePoint = this.consumeCodePoint();\n            }\n            const end = parseInt(fromCodePoint(...endDigits), 16);\n\n            return {type: TokenType.UNICODE_RANGE_TOKEN, start, end};\n        } else {\n            return {type: TokenType.UNICODE_RANGE_TOKEN, start, end: start};\n        }\n    }\n\n    private consumeIdentLikeToken(): StringValueToken | Token {\n        const value = this.consumeName();\n        if (value.toLowerCase() === 'url' && this.peekCodePoint(0) === LEFT_PARENTHESIS) {\n            this.consumeCodePoint();\n            return this.consumeUrlToken();\n        } else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) {\n            this.consumeCodePoint();\n            return {type: TokenType.FUNCTION_TOKEN, value};\n        }\n\n        return {type: TokenType.IDENT_TOKEN, value};\n    }\n\n    private consumeUrlToken(): StringValueToken | Token {\n        const value = [];\n        this.consumeWhiteSpace();\n\n        if (this.peekCodePoint(0) === EOF) {\n            return {type: TokenType.URL_TOKEN, value: ''};\n        }\n\n        const next = this.peekCodePoint(0);\n        if (next === APOSTROPHE || next === QUOTATION_MARK) {\n            const stringToken = this.consumeStringToken(this.consumeCodePoint());\n            if (stringToken.type === TokenType.STRING_TOKEN) {\n                this.consumeWhiteSpace();\n\n                if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {\n                    this.consumeCodePoint();\n                    return {type: TokenType.URL_TOKEN, value: stringToken.value};\n                }\n            }\n\n            this.consumeBadUrlRemnants();\n            return BAD_URL_TOKEN;\n        }\n\n        while (true) {\n            const codePoint = this.consumeCodePoint();\n            if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) {\n                return {type: TokenType.URL_TOKEN, value: fromCodePoint(...value)};\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: TokenType.URL_TOKEN, value: fromCodePoint(...value)};\n                }\n                this.consumeBadUrlRemnants();\n                return BAD_URL_TOKEN;\n            } else if (\n                codePoint === QUOTATION_MARK ||\n                codePoint === APOSTROPHE ||\n                codePoint === LEFT_PARENTHESIS ||\n                isNonPrintableCodePoint(codePoint)\n            ) {\n                this.consumeBadUrlRemnants();\n                return BAD_URL_TOKEN;\n            } else if (codePoint === REVERSE_SOLIDUS) {\n                if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n                    value.push(this.consumeEscapedCodePoint());\n                } else {\n                    this.consumeBadUrlRemnants();\n                    return BAD_URL_TOKEN;\n                }\n            } else {\n                value.push(codePoint);\n            }\n        }\n    }\n\n    private consumeWhiteSpace(): void {\n        while (isWhiteSpace(this.peekCodePoint(0))) {\n            this.consumeCodePoint();\n        }\n    }\n\n    private consumeBadUrlRemnants(): void {\n        while (true) {\n            const codePoint = this.consumeCodePoint();\n            if (codePoint === RIGHT_PARENTHESIS || codePoint === EOF) {\n                return;\n            }\n\n            if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n                this.consumeEscapedCodePoint();\n            }\n        }\n    }\n\n    private consumeStringSlice(count: number): string {\n        const SLICE_STACK_SIZE = 50000;\n        let value = '';\n        while (count > 0) {\n            const amount = Math.min(SLICE_STACK_SIZE, count);\n            value += fromCodePoint(...this._value.splice(0, amount));\n            count -= amount;\n        }\n        this._value.shift();\n\n        return value;\n    }\n\n    private consumeStringToken(endingCodePoint: number): StringValueToken | Token {\n        let value = '';\n        let i = 0;\n\n        do {\n            const codePoint = this._value[i];\n            if (codePoint === EOF || codePoint === undefined || codePoint === endingCodePoint) {\n                value += this.consumeStringSlice(i);\n                return {type: TokenType.STRING_TOKEN, value};\n            }\n\n            if (codePoint === LINE_FEED) {\n                this._value.splice(0, i);\n                return BAD_STRING_TOKEN;\n            }\n\n            if (codePoint === REVERSE_SOLIDUS) {\n                const 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                    } else if (isValidEscape(codePoint, next)) {\n                        value += this.consumeStringSlice(i);\n                        value += fromCodePoint(this.consumeEscapedCodePoint());\n                        i = -1;\n                    }\n                }\n            }\n\n            i++;\n        } while (true);\n    }\n\n    private consumeNumber() {\n        const repr = [];\n        let type = FLAG_INTEGER;\n        let c1 = this.peekCodePoint(0);\n        if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\n            repr.push(this.consumeCodePoint());\n        }\n\n        while (isDigit(this.peekCodePoint(0))) {\n            repr.push(this.consumeCodePoint());\n        }\n        c1 = this.peekCodePoint(0);\n        let 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\n        c1 = this.peekCodePoint(0);\n        c2 = this.peekCodePoint(1);\n        const 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\n        return [stringToNumber(repr), type];\n    }\n\n    private consumeNumericToken(): NumberValueToken | DimensionToken {\n        const [number, flags] = this.consumeNumber();\n        const c1 = this.peekCodePoint(0);\n        const c2 = this.peekCodePoint(1);\n        const c3 = this.peekCodePoint(2);\n\n        if (isIdentifierStart(c1, c2, c3)) {\n            const unit = this.consumeName();\n            return {type: TokenType.DIMENSION_TOKEN, number, flags, unit};\n        }\n\n        if (c1 === PERCENTAGE_SIGN) {\n            this.consumeCodePoint();\n            return {type: TokenType.PERCENTAGE_TOKEN, number, flags};\n        }\n\n        return {type: TokenType.NUMBER_TOKEN, number, flags};\n    }\n\n    private consumeEscapedCodePoint(): number {\n        const codePoint = this.consumeCodePoint();\n\n        if (isHex(codePoint)) {\n            let hex = fromCodePoint(codePoint);\n            while (isHex(this.peekCodePoint(0)) && hex.length < 6) {\n                hex += fromCodePoint(this.consumeCodePoint());\n            }\n\n            if (isWhiteSpace(this.peekCodePoint(0))) {\n                this.consumeCodePoint();\n            }\n\n            const hexCodePoint = parseInt(hex, 16);\n\n            if (hexCodePoint === 0 || isSurrogateCodePoint(hexCodePoint) || hexCodePoint > 0x10ffff) {\n                return REPLACEMENT_CHARACTER;\n            }\n\n            return hexCodePoint;\n        }\n\n        if (codePoint === EOF) {\n            return REPLACEMENT_CHARACTER;\n        }\n\n        return codePoint;\n    }\n\n    private consumeName(): string {\n        let result = '';\n        while (true) {\n            const codePoint = this.consumeCodePoint();\n            if (isNameCodePoint(codePoint)) {\n                result += fromCodePoint(codePoint);\n            } else if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n                result += fromCodePoint(this.consumeEscapedCodePoint());\n            } else {\n                this.reconsumeCodePoint(codePoint);\n                return result;\n            }\n        }\n    }\n}\n","import {\n    CSSToken,\n    DimensionToken,\n    EOF_TOKEN,\n    NumberValueToken,\n    StringValueToken,\n    Tokenizer,\n    TokenType\n} from './tokenizer';\n\nexport type CSSBlockType =\n    | TokenType.LEFT_PARENTHESIS_TOKEN\n    | TokenType.LEFT_SQUARE_BRACKET_TOKEN\n    | TokenType.LEFT_CURLY_BRACKET_TOKEN;\n\nexport interface CSSBlock {\n    type: CSSBlockType;\n    values: CSSValue[];\n}\n\nexport interface CSSFunction {\n    type: TokenType.FUNCTION;\n    name: string;\n    values: CSSValue[];\n}\n\nexport type CSSValue = CSSFunction | CSSToken | CSSBlock;\n\nexport class Parser {\n    private _tokens: CSSToken[];\n\n    constructor(tokens: CSSToken[]) {\n        this._tokens = tokens;\n    }\n\n    static create(value: string): Parser {\n        const tokenizer = new Tokenizer();\n        tokenizer.write(value);\n        return new Parser(tokenizer.read());\n    }\n\n    static parseValue(value: string): CSSValue {\n        return Parser.create(value).parseComponentValue();\n    }\n\n    static parseValues(value: string): CSSValue[] {\n        return Parser.create(value).parseComponentValues();\n    }\n\n    parseComponentValue(): CSSValue {\n        let token = this.consumeToken();\n        while (token.type === TokenType.WHITESPACE_TOKEN) {\n            token = this.consumeToken();\n        }\n\n        if (token.type === TokenType.EOF_TOKEN) {\n            throw new SyntaxError(`Error parsing CSS component value, unexpected EOF`);\n        }\n\n        this.reconsumeToken(token);\n        const value = this.consumeComponentValue();\n\n        do {\n            token = this.consumeToken();\n        } while (token.type === TokenType.WHITESPACE_TOKEN);\n\n        if (token.type === TokenType.EOF_TOKEN) {\n            return value;\n        }\n\n        throw new SyntaxError(`Error parsing CSS component value, multiple values found when expecting only one`);\n    }\n\n    parseComponentValues(): CSSValue[] {\n        const values = [];\n        while (true) {\n            const value = this.consumeComponentValue();\n            if (value.type === TokenType.EOF_TOKEN) {\n                return values;\n            }\n            values.push(value);\n            values.push();\n        }\n    }\n\n    private consumeComponentValue(): CSSValue {\n        const token = this.consumeToken();\n\n        switch (token.type) {\n            case TokenType.LEFT_CURLY_BRACKET_TOKEN:\n            case TokenType.LEFT_SQUARE_BRACKET_TOKEN:\n            case TokenType.LEFT_PARENTHESIS_TOKEN:\n                return this.consumeSimpleBlock(token.type);\n            case TokenType.FUNCTION_TOKEN:\n                return this.consumeFunction(token);\n        }\n\n        return token;\n    }\n\n    private consumeSimpleBlock(type: CSSBlockType): CSSBlock {\n        const block: CSSBlock = {type, values: []};\n\n        let token = this.consumeToken();\n        while (true) {\n            if (token.type === TokenType.EOF_TOKEN || isEndingTokenFor(token, type)) {\n                return block;\n            }\n\n            this.reconsumeToken(token);\n            block.values.push(this.consumeComponentValue());\n            token = this.consumeToken();\n        }\n    }\n\n    private consumeFunction(functionToken: StringValueToken): CSSFunction {\n        const cssFunction: CSSFunction = {\n            name: functionToken.value,\n            values: [],\n            type: TokenType.FUNCTION\n        };\n\n        while (true) {\n            const token = this.consumeToken();\n            if (token.type === TokenType.EOF_TOKEN || token.type === TokenType.RIGHT_PARENTHESIS_TOKEN) {\n                return cssFunction;\n            }\n\n            this.reconsumeToken(token);\n            cssFunction.values.push(this.consumeComponentValue());\n        }\n    }\n\n    private consumeToken(): CSSToken {\n        const token = this._tokens.shift();\n        return typeof token === 'undefined' ? EOF_TOKEN : token;\n    }\n\n    private reconsumeToken(token: CSSToken): void {\n        this._tokens.unshift(token);\n    }\n}\n\nexport const isDimensionToken = (token: CSSValue): token is DimensionToken => token.type === TokenType.DIMENSION_TOKEN;\nexport const isNumberToken = (token: CSSValue): token is NumberValueToken => token.type === TokenType.NUMBER_TOKEN;\nexport const isIdentToken = (token: CSSValue): token is StringValueToken => token.type === TokenType.IDENT_TOKEN;\nexport const isStringToken = (token: CSSValue): token is StringValueToken => token.type === TokenType.STRING_TOKEN;\nexport const isIdentWithValue = (token: CSSValue, value: string): boolean =>\n    isIdentToken(token) && token.value === value;\n\nexport const nonWhiteSpace = (token: CSSValue): boolean => token.type !== TokenType.WHITESPACE_TOKEN;\nexport const nonFunctionArgSeparator = (token: CSSValue): boolean =>\n    token.type !== TokenType.WHITESPACE_TOKEN && token.type !== TokenType.COMMA_TOKEN;\n\nexport const parseFunctionArgs = (tokens: CSSValue[]): CSSValue[][] => {\n    const args: CSSValue[][] = [];\n    let arg: CSSValue[] = [];\n    tokens.forEach((token) => {\n        if (token.type === TokenType.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\n        if (token.type !== TokenType.WHITESPACE_TOKEN) {\n            arg.push(token);\n        }\n    });\n    if (arg.length) {\n        args.push(arg);\n    }\n\n    return args;\n};\n\nconst isEndingTokenFor = (token: CSSToken, type: CSSBlockType): boolean => {\n    if (type === TokenType.LEFT_CURLY_BRACKET_TOKEN && token.type === TokenType.RIGHT_CURLY_BRACKET_TOKEN) {\n        return true;\n    }\n    if (type === TokenType.LEFT_SQUARE_BRACKET_TOKEN && token.type === TokenType.RIGHT_SQUARE_BRACKET_TOKEN) {\n        return true;\n    }\n\n    return type === TokenType.LEFT_PARENTHESIS_TOKEN && token.type === TokenType.RIGHT_PARENTHESIS_TOKEN;\n};\n","import {CSSValue} from '../syntax/parser';\nimport {DimensionToken, NumberValueToken, TokenType} from '../syntax/tokenizer';\n\nexport type Length = DimensionToken | NumberValueToken;\n\nexport const isLength = (token: CSSValue): token is Length =>\n    token.type === TokenType.NUMBER_TOKEN || token.type === TokenType.DIMENSION_TOKEN;\n","import {DimensionToken, FLAG_INTEGER, NumberValueToken, TokenType} from '../syntax/tokenizer';\nimport {CSSValue, isDimensionToken} from '../syntax/parser';\nimport {isLength} from './length';\nexport type LengthPercentage = DimensionToken | NumberValueToken;\nexport type LengthPercentageTuple = [LengthPercentage] | [LengthPercentage, LengthPercentage];\n\nexport const isLengthPercentage = (token: CSSValue): token is LengthPercentage =>\n    token.type === TokenType.PERCENTAGE_TOKEN || isLength(token);\nexport const parseLengthPercentageTuple = (tokens: LengthPercentage[]): LengthPercentageTuple =>\n    tokens.length > 1 ? [tokens[0], tokens[1]] : [tokens[0]];\nexport const ZERO_LENGTH: NumberValueToken = {\n    type: TokenType.NUMBER_TOKEN,\n    number: 0,\n    flags: FLAG_INTEGER\n};\n\nexport const FIFTY_PERCENT: NumberValueToken = {\n    type: TokenType.PERCENTAGE_TOKEN,\n    number: 50,\n    flags: FLAG_INTEGER\n};\n\nexport const HUNDRED_PERCENT: NumberValueToken = {\n    type: TokenType.PERCENTAGE_TOKEN,\n    number: 100,\n    flags: FLAG_INTEGER\n};\n\nexport const getAbsoluteValueForTuple = (\n    tuple: LengthPercentageTuple,\n    width: number,\n    height: number\n): [number, number] => {\n    const [x, y] = tuple;\n    return [getAbsoluteValue(x, width), getAbsoluteValue(typeof y !== 'undefined' ? y : x, height)];\n};\nexport const getAbsoluteValue = (token: LengthPercentage, parent: number): number => {\n    if (token.type === TokenType.PERCENTAGE_TOKEN) {\n        return (token.number / 100) * parent;\n    }\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\n    return token.number;\n};\n","import {CSSValue, isIdentToken} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {ITypeDescriptor} from '../ITypeDescriptor';\nimport {HUNDRED_PERCENT, ZERO_LENGTH} from './length-percentage';\nimport {GradientCorner} from './image';\nimport {Context} from '../../core/context';\n\nconst DEG = 'deg';\nconst GRAD = 'grad';\nconst RAD = 'rad';\nconst TURN = 'turn';\n\nexport const angle: ITypeDescriptor<number> = {\n    name: 'angle',\n    parse: (_context: Context, value: CSSValue): number => {\n        if (value.type === TokenType.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\n        throw new Error(`Unsupported angle type`);\n    }\n};\n\nexport const isAngle = (value: CSSValue): boolean => {\n    if (value.type === TokenType.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\nexport const parseNamedSide = (tokens: CSSValue[]): number | GradientCorner => {\n    const sideOrCorner = tokens\n        .filter(isIdentToken)\n        .map((ident) => ident.value)\n        .join(' ');\n\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\n    return 0;\n};\n\nexport const deg = (deg: number): number => (Math.PI * deg) / 180;\n","import {CSSValue, nonFunctionArgSeparator, Parser} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {ITypeDescriptor} from '../ITypeDescriptor';\nimport {angle, deg} from './angle';\nimport {getAbsoluteValue, isLengthPercentage} from './length-percentage';\nimport {Context} from '../../core/context';\nexport type Color = number;\n\nexport const color: ITypeDescriptor<Color> = {\n    name: 'color',\n    parse: (context: Context, value: CSSValue): Color => {\n        if (value.type === TokenType.FUNCTION) {\n            const 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\n        if (value.type === TokenType.HASH_TOKEN) {\n            if (value.value.length === 3) {\n                const r = value.value.substring(0, 1);\n                const g = value.value.substring(1, 2);\n                const b = value.value.substring(2, 3);\n                return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), 1);\n            }\n\n            if (value.value.length === 4) {\n                const r = value.value.substring(0, 1);\n                const g = value.value.substring(1, 2);\n                const b = value.value.substring(2, 3);\n                const 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\n            if (value.value.length === 6) {\n                const r = value.value.substring(0, 2);\n                const g = value.value.substring(2, 4);\n                const b = value.value.substring(4, 6);\n                return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), 1);\n            }\n\n            if (value.value.length === 8) {\n                const r = value.value.substring(0, 2);\n                const g = value.value.substring(2, 4);\n                const b = value.value.substring(4, 6);\n                const 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\n        if (value.type === TokenType.IDENT_TOKEN) {\n            const namedColor = COLORS[value.value.toUpperCase()];\n            if (typeof namedColor !== 'undefined') {\n                return namedColor;\n            }\n        }\n\n        return COLORS.TRANSPARENT;\n    }\n};\n\nexport const isTransparent = (color: Color): boolean => (0xff & color) === 0;\n\nexport const asString = (color: Color): string => {\n    const alpha = 0xff & color;\n    const blue = 0xff & (color >> 8);\n    const green = 0xff & (color >> 16);\n    const red = 0xff & (color >> 24);\n    return alpha < 255 ? `rgba(${red},${green},${blue},${alpha / 255})` : `rgb(${red},${green},${blue})`;\n};\n\nexport const pack = (r: number, g: number, b: number, a: number): Color =>\n    ((r << 24) | (g << 16) | (b << 8) | (Math.round(a * 255) << 0)) >>> 0;\n\nconst getTokenColorValue = (token: CSSValue, i: number): number => {\n    if (token.type === TokenType.NUMBER_TOKEN) {\n        return token.number;\n    }\n\n    if (token.type === TokenType.PERCENTAGE_TOKEN) {\n        const max = i === 3 ? 1 : 255;\n        return i === 3 ? (token.number / 100) * max : Math.round((token.number / 100) * max);\n    }\n\n    return 0;\n};\n\nconst rgb = (_context: Context, args: CSSValue[]): number => {\n    const tokens = args.filter(nonFunctionArgSeparator);\n\n    if (tokens.length === 3) {\n        const [r, g, b] = tokens.map(getTokenColorValue);\n        return pack(r, g, b, 1);\n    }\n\n    if (tokens.length === 4) {\n        const [r, g, b, a] = tokens.map(getTokenColorValue);\n        return pack(r, g, b, a);\n    }\n\n    return 0;\n};\n\nfunction hue2rgb(t1: number, t2: number, hue: number): number {\n    if (hue < 0) {\n        hue += 1;\n    }\n    if (hue >= 1) {\n        hue -= 1;\n    }\n\n    if (hue < 1 / 6) {\n        return (t2 - t1) * hue * 6 + t1;\n    } else if (hue < 1 / 2) {\n        return t2;\n    } else if (hue < 2 / 3) {\n        return (t2 - t1) * 6 * (2 / 3 - hue) + t1;\n    } else {\n        return t1;\n    }\n}\n\nconst hsl = (context: Context, args: CSSValue[]): number => {\n    const tokens = args.filter(nonFunctionArgSeparator);\n    const [hue, saturation, lightness, alpha] = tokens;\n\n    const h = (hue.type === TokenType.NUMBER_TOKEN ? deg(hue.number) : angle.parse(context, hue)) / (Math.PI * 2);\n    const s = isLengthPercentage(saturation) ? saturation.number / 100 : 0;\n    const l = isLengthPercentage(lightness) ? lightness.number / 100 : 0;\n    const a = typeof alpha !== 'undefined' && isLengthPercentage(alpha) ? getAbsoluteValue(alpha, 1) : 1;\n\n    if (s === 0) {\n        return pack(l * 255, l * 255, l * 255, 1);\n    }\n\n    const t2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n\n    const t1 = l * 2 - t2;\n    const r = hue2rgb(t1, t2, h + 1 / 3);\n    const g = hue2rgb(t1, t2, h);\n    const b = hue2rgb(t1, t2, h - 1 / 3);\n    return pack(r * 255, g * 255, b * 255, a);\n};\n\nconst SUPPORTED_COLOR_FUNCTIONS: {\n    [key: string]: (context: Context, args: CSSValue[]) => number;\n} = {\n    hsl: hsl,\n    hsla: hsl,\n    rgb: rgb,\n    rgba: rgb\n};\n\nexport const parseColor = (context: Context, value: string): Color =>\n    color.parse(context, Parser.create(value).parseComponentValue());\n\nexport const COLORS: {[key: string]: Color} = {\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","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\nexport const enum BACKGROUND_CLIP {\n    BORDER_BOX = 0,\n    PADDING_BOX = 1,\n    CONTENT_BOX = 2\n}\n\nexport type BackgroundClip = BACKGROUND_CLIP[];\n\nexport const backgroundClip: IPropertyListDescriptor<BackgroundClip> = {\n    name: 'background-clip',\n    initialValue: 'border-box',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): BackgroundClip => {\n        return tokens.map((token) => {\n            if (isIdentToken(token)) {\n                switch (token.value) {\n                    case 'padding-box':\n                        return BACKGROUND_CLIP.PADDING_BOX;\n                    case 'content-box':\n                        return BACKGROUND_CLIP.CONTENT_BOX;\n                }\n            }\n            return BACKGROUND_CLIP.BORDER_BOX;\n        });\n    }\n};\n","import {IPropertyTypeValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\n\nexport const backgroundColor: IPropertyTypeValueDescriptor = {\n    name: `background-color`,\n    initialValue: 'transparent',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TYPE_VALUE,\n    format: 'color'\n};\n","import {CSSValue} from '../../syntax/parser';\nimport {\n    CSSRadialExtent,\n    CSSRadialGradientImage,\n    CSSRadialShape,\n    GradientColorStop,\n    GradientCorner,\n    UnprocessedGradientColorStop\n} from '../image';\nimport {color as colorType} from '../color';\nimport {getAbsoluteValue, HUNDRED_PERCENT, isLengthPercentage, ZERO_LENGTH} from '../length-percentage';\nimport {Context} from '../../../core/context';\n\nexport const parseColorStop = (context: Context, args: CSSValue[]): UnprocessedGradientColorStop => {\n    const color = colorType.parse(context, args[0]);\n    const stop = args[1];\n    return stop && isLengthPercentage(stop) ? {color, stop} : {color, stop: null};\n};\n\nexport const processColorStops = (stops: UnprocessedGradientColorStop[], lineLength: number): GradientColorStop[] => {\n    const first = stops[0];\n    const last = stops[stops.length - 1];\n    if (first.stop === null) {\n        first.stop = ZERO_LENGTH;\n    }\n\n    if (last.stop === null) {\n        last.stop = HUNDRED_PERCENT;\n    }\n\n    const processStops: (number | null)[] = [];\n    let previous = 0;\n    for (let i = 0; i < stops.length; i++) {\n        const stop = stops[i].stop;\n        if (stop !== null) {\n            const absoluteValue = getAbsoluteValue(stop, lineLength);\n            if (absoluteValue > previous) {\n                processStops.push(absoluteValue);\n            } else {\n                processStops.push(previous);\n            }\n            previous = absoluteValue;\n        } else {\n            processStops.push(null);\n        }\n    }\n\n    let gapBegin = null;\n    for (let i = 0; i < processStops.length; i++) {\n        const stop = processStops[i];\n        if (stop === null) {\n            if (gapBegin === null) {\n                gapBegin = i;\n            }\n        } else if (gapBegin !== null) {\n            const gapLength = i - gapBegin;\n            const beforeGap = processStops[gapBegin - 1] as number;\n            const gapValue = (stop - beforeGap) / (gapLength + 1);\n            for (let g = 1; g <= gapLength; g++) {\n                processStops[gapBegin + g - 1] = gapValue * g;\n            }\n            gapBegin = null;\n        }\n    }\n\n    return stops.map(({color}, i) => {\n        return {color, stop: Math.max(Math.min(1, (processStops[i] as number) / lineLength), 0)};\n    });\n};\n\nconst getAngleFromCorner = (corner: GradientCorner, width: number, height: number): number => {\n    const centerX = width / 2;\n    const centerY = height / 2;\n    const x = getAbsoluteValue(corner[0], width) - centerX;\n    const y = centerY - getAbsoluteValue(corner[1], height);\n\n    return (Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2);\n};\n\nexport const calculateGradientDirection = (\n    angle: number | GradientCorner,\n    width: number,\n    height: number\n): [number, number, number, number, number] => {\n    const radian = typeof angle === 'number' ? angle : getAngleFromCorner(angle, width, height);\n\n    const lineLength = Math.abs(width * Math.sin(radian)) + Math.abs(height * Math.cos(radian));\n\n    const halfWidth = width / 2;\n    const halfHeight = height / 2;\n    const halfLineLength = lineLength / 2;\n\n    const yDiff = Math.sin(radian - Math.PI / 2) * halfLineLength;\n    const xDiff = Math.cos(radian - Math.PI / 2) * halfLineLength;\n\n    return [lineLength, halfWidth - xDiff, halfWidth + xDiff, halfHeight - yDiff, halfHeight + yDiff];\n};\n\nconst distance = (a: number, b: number): number => Math.sqrt(a * a + b * b);\n\nconst findCorner = (width: number, height: number, x: number, y: number, closest: boolean): [number, number] => {\n    const corners = [\n        [0, 0],\n        [0, height],\n        [width, 0],\n        [width, height]\n    ];\n\n    return corners.reduce(\n        (stat, corner) => {\n            const [cx, cy] = corner;\n            const 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\n            return stat;\n        },\n        {\n            optimumDistance: closest ? Infinity : -Infinity,\n            optimumCorner: null\n        }\n    ).optimumCorner as [number, number];\n};\n\nexport const calculateRadius = (\n    gradient: CSSRadialGradientImage,\n    x: number,\n    y: number,\n    width: number,\n    height: number\n): [number, number] => {\n    let rx = 0;\n    let ry = 0;\n\n    switch (gradient.size) {\n        case CSSRadialExtent.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 === CSSRadialShape.CIRCLE) {\n                rx = ry = Math.min(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\n            } else if (gradient.shape === CSSRadialShape.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\n        case CSSRadialExtent.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 === CSSRadialShape.CIRCLE) {\n                rx = ry = Math.min(\n                    distance(x, y),\n                    distance(x, y - height),\n                    distance(x - width, y),\n                    distance(x - width, y - height)\n                );\n            } else if (gradient.shape === CSSRadialShape.ELLIPSE) {\n                // Compute the ratio ry/rx (which is to be the same as for \"closest-side\")\n                const c = Math.min(Math.abs(y), Math.abs(y - height)) / Math.min(Math.abs(x), Math.abs(x - width));\n                const [cx, cy] = findCorner(width, height, x, y, true);\n                rx = distance(cx - x, (cy - y) / c);\n                ry = c * rx;\n            }\n            break;\n\n        case CSSRadialExtent.FARTHEST_SIDE:\n            // Same as closest-side, except the ending shape is sized based on the farthest side(s)\n            if (gradient.shape === CSSRadialShape.CIRCLE) {\n                rx = ry = Math.max(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\n            } else if (gradient.shape === CSSRadialShape.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\n        case CSSRadialExtent.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 === CSSRadialShape.CIRCLE) {\n                rx = ry = Math.max(\n                    distance(x, y),\n                    distance(x, y - height),\n                    distance(x - width, y),\n                    distance(x - width, y - height)\n                );\n            } else if (gradient.shape === CSSRadialShape.ELLIPSE) {\n                // Compute the ratio ry/rx (which is to be the same as for \"farthest-side\")\n                const c = Math.max(Math.abs(y), Math.abs(y - height)) / Math.max(Math.abs(x), Math.abs(x - width));\n                const [cx, cy] = findCorner(width, height, x, y, false);\n                rx = distance(cx - x, (cy - y) / c);\n                ry = c * rx;\n            }\n            break;\n    }\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\n    return [rx, ry];\n};\n","import {CSSValue, parseFunctionArgs} from '../../syntax/parser';\nimport {TokenType} from '../../syntax/tokenizer';\nimport {isAngle, angle as angleType, parseNamedSide, deg} from '../angle';\nimport {CSSImageType, CSSLinearGradientImage, GradientCorner, UnprocessedGradientColorStop} from '../image';\nimport {parseColorStop} from './gradient';\nimport {Context} from '../../../core/context';\n\nexport const linearGradient = (context: Context, tokens: CSSValue[]): CSSLinearGradientImage => {\n    let angle: number | GradientCorner = deg(180);\n    const stops: UnprocessedGradientColorStop[] = [];\n\n    parseFunctionArgs(tokens).forEach((arg, i) => {\n        if (i === 0) {\n            const firstToken = arg[0];\n            if (firstToken.type === TokenType.IDENT_TOKEN && firstToken.value === 'to') {\n                angle = parseNamedSide(arg);\n                return;\n            } else if (isAngle(firstToken)) {\n                angle = angleType.parse(context, firstToken);\n                return;\n            }\n        }\n        const colorStop = parseColorStop(context, arg);\n        stops.push(colorStop);\n    });\n\n    return {angle, stops, type: CSSImageType.LINEAR_GRADIENT};\n};\n","import {CSSValue, parseFunctionArgs} from '../../syntax/parser';\nimport {CSSImageType, CSSLinearGradientImage, GradientCorner, UnprocessedGradientColorStop} from '../image';\nimport {TokenType} from '../../syntax/tokenizer';\nimport {isAngle, angle as angleType, parseNamedSide, deg} from '../angle';\nimport {parseColorStop} from './gradient';\nimport {Context} from '../../../core/context';\n\nexport const prefixLinearGradient = (context: Context, tokens: CSSValue[]): CSSLinearGradientImage => {\n    let angle: number | GradientCorner = deg(180);\n    const stops: UnprocessedGradientColorStop[] = [];\n\n    parseFunctionArgs(tokens).forEach((arg, i) => {\n        if (i === 0) {\n            const firstToken = arg[0];\n            if (\n                firstToken.type === TokenType.IDENT_TOKEN &&\n                ['top', 'left', 'right', 'bottom'].indexOf(firstToken.value) !== -1\n            ) {\n                angle = parseNamedSide(arg);\n                return;\n            } else if (isAngle(firstToken)) {\n                angle = (angleType.parse(context, firstToken) + deg(270)) % deg(360);\n                return;\n            }\n        }\n        const colorStop = parseColorStop(context, arg);\n        stops.push(colorStop);\n    });\n\n    return {\n        angle,\n        stops,\n        type: CSSImageType.LINEAR_GRADIENT\n    };\n};\n","import {CSSValue, isIdentToken, isNumberToken, nonFunctionArgSeparator, parseFunctionArgs} from '../../syntax/parser';\nimport {\n    CSSImageType,\n    CSSLinearGradientImage,\n    CSSRadialExtent,\n    CSSRadialGradientImage,\n    CSSRadialShape,\n    CSSRadialSize,\n    UnprocessedGradientColorStop\n} from '../image';\nimport {deg} from '../angle';\nimport {TokenType} from '../../syntax/tokenizer';\nimport {color as colorType} from '../color';\nimport {HUNDRED_PERCENT, LengthPercentage, ZERO_LENGTH} from '../length-percentage';\nimport {Context} from '../../../core/context';\n\nexport const webkitGradient = (\n    context: Context,\n    tokens: CSSValue[]\n): CSSLinearGradientImage | CSSRadialGradientImage => {\n    const angle = deg(180);\n    const stops: UnprocessedGradientColorStop[] = [];\n    let type = CSSImageType.LINEAR_GRADIENT;\n    const shape: CSSRadialShape = CSSRadialShape.CIRCLE;\n    const size: CSSRadialSize = CSSRadialExtent.FARTHEST_CORNER;\n    const position: LengthPercentage[] = [];\n    parseFunctionArgs(tokens).forEach((arg, i) => {\n        const firstToken = arg[0];\n        if (i === 0) {\n            if (isIdentToken(firstToken) && firstToken.value === 'linear') {\n                type = CSSImageType.LINEAR_GRADIENT;\n                return;\n            } else if (isIdentToken(firstToken) && firstToken.value === 'radial') {\n                type = CSSImageType.RADIAL_GRADIENT;\n                return;\n            }\n        }\n\n        if (firstToken.type === TokenType.FUNCTION) {\n            if (firstToken.name === 'from') {\n                const color = colorType.parse(context, firstToken.values[0]);\n                stops.push({stop: ZERO_LENGTH, color});\n            } else if (firstToken.name === 'to') {\n                const color = colorType.parse(context, firstToken.values[0]);\n                stops.push({stop: HUNDRED_PERCENT, color});\n            } else if (firstToken.name === 'color-stop') {\n                const values = firstToken.values.filter(nonFunctionArgSeparator);\n                if (values.length === 2) {\n                    const color = colorType.parse(context, values[1]);\n                    const stop = values[0];\n                    if (isNumberToken(stop)) {\n                        stops.push({\n                            stop: {type: TokenType.PERCENTAGE_TOKEN, number: stop.number * 100, flags: stop.flags},\n                            color\n                        });\n                    }\n                }\n            }\n        }\n    });\n\n    return type === CSSImageType.LINEAR_GRADIENT\n        ? {\n              angle: (angle + deg(180)) % deg(360),\n              stops,\n              type\n          }\n        : {size, shape, stops, position, type};\n};\n","import {CSSValue, isIdentToken, parseFunctionArgs} from '../../syntax/parser';\nimport {\n    CSSImageType,\n    CSSRadialExtent,\n    CSSRadialGradientImage,\n    CSSRadialShape,\n    CSSRadialSize,\n    UnprocessedGradientColorStop\n} from '../image';\nimport {parseColorStop} from './gradient';\nimport {FIFTY_PERCENT, HUNDRED_PERCENT, isLengthPercentage, LengthPercentage, ZERO_LENGTH} from '../length-percentage';\nimport {isLength} from '../length';\nimport {Context} from '../../../core/context';\nexport const CLOSEST_SIDE = 'closest-side';\nexport const FARTHEST_SIDE = 'farthest-side';\nexport const CLOSEST_CORNER = 'closest-corner';\nexport const FARTHEST_CORNER = 'farthest-corner';\nexport const CIRCLE = 'circle';\nexport const ELLIPSE = 'ellipse';\nexport const COVER = 'cover';\nexport const CONTAIN = 'contain';\n\nexport const radialGradient = (context: Context, tokens: CSSValue[]): CSSRadialGradientImage => {\n    let shape: CSSRadialShape = CSSRadialShape.CIRCLE;\n    let size: CSSRadialSize = CSSRadialExtent.FARTHEST_CORNER;\n    const stops: UnprocessedGradientColorStop[] = [];\n    const position: LengthPercentage[] = [];\n    parseFunctionArgs(tokens).forEach((arg, i) => {\n        let isColorStop = true;\n        if (i === 0) {\n            let isAtPosition = false;\n            isColorStop = arg.reduce((acc, token) => {\n                if (isAtPosition) {\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                    } else if (isLengthPercentage(token) || isLength(token)) {\n                        position.push(token);\n                    }\n                } else if (isIdentToken(token)) {\n                    switch (token.value) {\n                        case CIRCLE:\n                            shape = CSSRadialShape.CIRCLE;\n                            return false;\n                        case ELLIPSE:\n                            shape = CSSRadialShape.ELLIPSE;\n                            return false;\n                        case 'at':\n                            isAtPosition = true;\n                            return false;\n                        case CLOSEST_SIDE:\n                            size = CSSRadialExtent.CLOSEST_SIDE;\n                            return false;\n                        case COVER:\n                        case FARTHEST_SIDE:\n                            size = CSSRadialExtent.FARTHEST_SIDE;\n                            return false;\n                        case CONTAIN:\n                        case CLOSEST_CORNER:\n                            size = CSSRadialExtent.CLOSEST_CORNER;\n                            return false;\n                        case FARTHEST_CORNER:\n                            size = CSSRadialExtent.FARTHEST_CORNER;\n                            return false;\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\n        if (isColorStop) {\n            const colorStop = parseColorStop(context, arg);\n            stops.push(colorStop);\n        }\n    });\n\n    return {size, shape, stops, position, type: CSSImageType.RADIAL_GRADIENT};\n};\n","import {CSSValue, isIdentToken, parseFunctionArgs} from '../../syntax/parser';\nimport {\n    CSSImageType,\n    CSSRadialExtent,\n    CSSRadialGradientImage,\n    CSSRadialShape,\n    CSSRadialSize,\n    UnprocessedGradientColorStop\n} from '../image';\nimport {parseColorStop} from './gradient';\nimport {FIFTY_PERCENT, HUNDRED_PERCENT, isLengthPercentage, LengthPercentage, ZERO_LENGTH} from '../length-percentage';\nimport {isLength} from '../length';\nimport {\n    CIRCLE,\n    CLOSEST_CORNER,\n    CLOSEST_SIDE,\n    CONTAIN,\n    COVER,\n    ELLIPSE,\n    FARTHEST_CORNER,\n    FARTHEST_SIDE\n} from './radial-gradient';\nimport {Context} from '../../../core/context';\n\nexport const prefixRadialGradient = (context: Context, tokens: CSSValue[]): CSSRadialGradientImage => {\n    let shape: CSSRadialShape = CSSRadialShape.CIRCLE;\n    let size: CSSRadialSize = CSSRadialExtent.FARTHEST_CORNER;\n    const stops: UnprocessedGradientColorStop[] = [];\n    const position: LengthPercentage[] = [];\n\n    parseFunctionArgs(tokens).forEach((arg, i) => {\n        let isColorStop = true;\n        if (i === 0) {\n            isColorStop = arg.reduce((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                } else if (isLengthPercentage(token) || isLength(token)) {\n                    position.push(token);\n                    return false;\n                }\n\n                return acc;\n            }, isColorStop);\n        } else if (i === 1) {\n            isColorStop = arg.reduce((acc, token) => {\n                if (isIdentToken(token)) {\n                    switch (token.value) {\n                        case CIRCLE:\n                            shape = CSSRadialShape.CIRCLE;\n                            return false;\n                        case ELLIPSE:\n                            shape = CSSRadialShape.ELLIPSE;\n                            return false;\n                        case CONTAIN:\n                        case CLOSEST_SIDE:\n                            size = CSSRadialExtent.CLOSEST_SIDE;\n                            return false;\n                        case FARTHEST_SIDE:\n                            size = CSSRadialExtent.FARTHEST_SIDE;\n                            return false;\n                        case CLOSEST_CORNER:\n                            size = CSSRadialExtent.CLOSEST_CORNER;\n                            return false;\n                        case COVER:\n                        case FARTHEST_CORNER:\n                            size = CSSRadialExtent.FARTHEST_CORNER;\n                            return false;\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\n                return acc;\n            }, isColorStop);\n        }\n\n        if (isColorStop) {\n            const colorStop = parseColorStop(context, arg);\n            stops.push(colorStop);\n        }\n    });\n\n    return {size, shape, stops, position, type: CSSImageType.RADIAL_GRADIENT};\n};\n","import {CSSValue} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {Color} from './color';\nimport {linearGradient} from './functions/linear-gradient';\nimport {prefixLinearGradient} from './functions/-prefix-linear-gradient';\nimport {ITypeDescriptor} from '../ITypeDescriptor';\nimport {LengthPercentage} from './length-percentage';\nimport {webkitGradient} from './functions/-webkit-gradient';\nimport {radialGradient} from './functions/radial-gradient';\nimport {prefixRadialGradient} from './functions/-prefix-radial-gradient';\nimport {Context} from '../../core/context';\n\nexport const enum CSSImageType {\n    URL,\n    LINEAR_GRADIENT,\n    RADIAL_GRADIENT\n}\n\nexport const isLinearGradient = (background: ICSSImage): background is CSSLinearGradientImage => {\n    return background.type === CSSImageType.LINEAR_GRADIENT;\n};\n\nexport const isRadialGradient = (background: ICSSImage): background is CSSRadialGradientImage => {\n    return background.type === CSSImageType.RADIAL_GRADIENT;\n};\n\nexport interface UnprocessedGradientColorStop {\n    color: Color;\n    stop: LengthPercentage | null;\n}\n\nexport interface GradientColorStop {\n    color: Color;\n    stop: number;\n}\n\nexport interface ICSSImage {\n    type: CSSImageType;\n}\n\nexport interface CSSURLImage extends ICSSImage {\n    url: string;\n    type: CSSImageType.URL;\n}\n\n// interface ICSSGeneratedImage extends ICSSImage {}\n\nexport type GradientCorner = [LengthPercentage, LengthPercentage];\n\ninterface ICSSGradientImage extends ICSSImage {\n    stops: UnprocessedGradientColorStop[];\n}\n\nexport interface CSSLinearGradientImage extends ICSSGradientImage {\n    angle: number | GradientCorner;\n    type: CSSImageType.LINEAR_GRADIENT;\n}\n\nexport const enum CSSRadialShape {\n    CIRCLE,\n    ELLIPSE\n}\n\nexport const enum CSSRadialExtent {\n    CLOSEST_SIDE,\n    FARTHEST_SIDE,\n    CLOSEST_CORNER,\n    FARTHEST_CORNER\n}\n\nexport type CSSRadialSize = CSSRadialExtent | LengthPercentage[];\n\nexport interface CSSRadialGradientImage extends ICSSGradientImage {\n    type: CSSImageType.RADIAL_GRADIENT;\n    shape: CSSRadialShape;\n    size: CSSRadialSize;\n    position: LengthPercentage[];\n}\n\nexport const image: ITypeDescriptor<ICSSImage> = {\n    name: 'image',\n    parse: (context: Context, value: CSSValue): ICSSImage => {\n        if (value.type === TokenType.URL_TOKEN) {\n            const image: CSSURLImage = {url: value.value, type: CSSImageType.URL};\n            context.cache.addImage(value.value);\n            return image;\n        }\n\n        if (value.type === TokenType.FUNCTION) {\n            const 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\n        throw new Error(`Unsupported image type ${value.type}`);\n    }\n};\n\nexport function isSupportedImage(value: CSSValue): boolean {\n    return (\n        !(value.type === TokenType.IDENT_TOKEN && value.value === 'none') &&\n        (value.type !== TokenType.FUNCTION || !!SUPPORTED_IMAGE_FUNCTIONS[value.name])\n    );\n}\n\nconst SUPPORTED_IMAGE_FUNCTIONS: Record<string, (context: Context, args: CSSValue[]) => ICSSImage> = {\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","import {TokenType} from '../syntax/tokenizer';\nimport {ICSSImage, image, isSupportedImage} from '../types/image';\nimport {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, nonFunctionArgSeparator} from '../syntax/parser';\nimport {Context} from '../../core/context';\n\nexport const backgroundImage: IPropertyListDescriptor<ICSSImage[]> = {\n    name: 'background-image',\n    initialValue: 'none',\n    type: PropertyDescriptorParsingType.LIST,\n    prefix: false,\n    parse: (context: Context, tokens: CSSValue[]) => {\n        if (tokens.length === 0) {\n            return [];\n        }\n\n        const first = tokens[0];\n\n        if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') {\n            return [];\n        }\n\n        return tokens\n            .filter((value) => nonFunctionArgSeparator(value) && isSupportedImage(value))\n            .map((value) => image.parse(context, value));\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\n\nexport const enum BACKGROUND_ORIGIN {\n    BORDER_BOX = 0,\n    PADDING_BOX = 1,\n    CONTENT_BOX = 2\n}\n\nexport type BackgroundOrigin = BACKGROUND_ORIGIN[];\n\nexport const backgroundOrigin: IPropertyListDescriptor<BackgroundOrigin> = {\n    name: 'background-origin',\n    initialValue: 'border-box',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): BackgroundOrigin => {\n        return tokens.map((token) => {\n            if (isIdentToken(token)) {\n                switch (token.value) {\n                    case 'padding-box':\n                        return BACKGROUND_ORIGIN.PADDING_BOX;\n                    case 'content-box':\n                        return BACKGROUND_ORIGIN.CONTENT_BOX;\n                }\n            }\n            return BACKGROUND_ORIGIN.BORDER_BOX;\n        });\n    }\n};\n","import {PropertyDescriptorParsingType, IPropertyListDescriptor} from '../IPropertyDescriptor';\nimport {CSSValue, parseFunctionArgs} from '../syntax/parser';\nimport {isLengthPercentage, LengthPercentageTuple, parseLengthPercentageTuple} from '../types/length-percentage';\nimport {Context} from '../../core/context';\nexport type BackgroundPosition = BackgroundImagePosition[];\n\nexport type BackgroundImagePosition = LengthPercentageTuple;\n\nexport const backgroundPosition: IPropertyListDescriptor<BackgroundPosition> = {\n    name: 'background-position',\n    initialValue: '0% 0%',\n    type: PropertyDescriptorParsingType.LIST,\n    prefix: false,\n    parse: (_context: Context, tokens: CSSValue[]): BackgroundPosition => {\n        return parseFunctionArgs(tokens)\n            .map((values: CSSValue[]) => values.filter(isLengthPercentage))\n            .map(parseLengthPercentageTuple);\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken, parseFunctionArgs} from '../syntax/parser';\nimport {Context} from '../../core/context';\nexport type BackgroundRepeat = BACKGROUND_REPEAT[];\n\nexport const enum BACKGROUND_REPEAT {\n    REPEAT = 0,\n    NO_REPEAT = 1,\n    REPEAT_X = 2,\n    REPEAT_Y = 3\n}\n\nexport const backgroundRepeat: IPropertyListDescriptor<BackgroundRepeat> = {\n    name: 'background-repeat',\n    initialValue: 'repeat',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): BackgroundRepeat => {\n        return parseFunctionArgs(tokens)\n            .map((values) =>\n                values\n                    .filter(isIdentToken)\n                    .map((token) => token.value)\n                    .join(' ')\n            )\n            .map(parseBackgroundRepeat);\n    }\n};\n\nconst parseBackgroundRepeat = (value: string): BACKGROUND_REPEAT => {\n    switch (value) {\n        case 'no-repeat':\n            return BACKGROUND_REPEAT.NO_REPEAT;\n        case 'repeat-x':\n        case 'repeat no-repeat':\n            return BACKGROUND_REPEAT.REPEAT_X;\n        case 'repeat-y':\n        case 'no-repeat repeat':\n            return BACKGROUND_REPEAT.REPEAT_Y;\n        case 'repeat':\n        default:\n            return BACKGROUND_REPEAT.REPEAT;\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken, parseFunctionArgs} from '../syntax/parser';\nimport {isLengthPercentage, LengthPercentage} from '../types/length-percentage';\nimport {StringValueToken} from '../syntax/tokenizer';\nimport {Context} from '../../core/context';\n\nexport enum BACKGROUND_SIZE {\n    AUTO = 'auto',\n    CONTAIN = 'contain',\n    COVER = 'cover'\n}\n\nexport type BackgroundSizeInfo = LengthPercentage | StringValueToken;\nexport type BackgroundSize = BackgroundSizeInfo[][];\n\nexport const backgroundSize: IPropertyListDescriptor<BackgroundSize> = {\n    name: 'background-size',\n    initialValue: '0',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): BackgroundSize => {\n        return parseFunctionArgs(tokens).map((values) => values.filter(isBackgroundSizeInfoToken));\n    }\n};\n\nconst isBackgroundSizeInfoToken = (value: CSSValue): value is BackgroundSizeInfo =>\n    isIdentToken(value) || isLengthPercentage(value);\n","import {IPropertyTypeValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nconst borderColorForSide = (side: string): IPropertyTypeValueDescriptor => ({\n    name: `border-${side}-color`,\n    initialValue: 'transparent',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TYPE_VALUE,\n    format: 'color'\n});\n\nexport const borderTopColor: IPropertyTypeValueDescriptor = borderColorForSide('top');\nexport const borderRightColor: IPropertyTypeValueDescriptor = borderColorForSide('right');\nexport const borderBottomColor: IPropertyTypeValueDescriptor = borderColorForSide('bottom');\nexport const borderLeftColor: IPropertyTypeValueDescriptor = borderColorForSide('left');\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue} from '../syntax/parser';\nimport {isLengthPercentage, LengthPercentageTuple, parseLengthPercentageTuple} from '../types/length-percentage';\nimport {Context} from '../../core/context';\nexport type BorderRadius = LengthPercentageTuple;\n\nconst borderRadiusForSide = (side: string): IPropertyListDescriptor<BorderRadius> => ({\n    name: `border-radius-${side}`,\n    initialValue: '0 0',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): BorderRadius =>\n        parseLengthPercentageTuple(tokens.filter(isLengthPercentage))\n});\n\nexport const borderTopLeftRadius: IPropertyListDescriptor<BorderRadius> = borderRadiusForSide('top-left');\nexport const borderTopRightRadius: IPropertyListDescriptor<BorderRadius> = borderRadiusForSide('top-right');\nexport const borderBottomRightRadius: IPropertyListDescriptor<BorderRadius> = borderRadiusForSide('bottom-right');\nexport const borderBottomLeftRadius: IPropertyListDescriptor<BorderRadius> = borderRadiusForSide('bottom-left');\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum BORDER_STYLE {\n    NONE = 0,\n    SOLID = 1,\n    DASHED = 2,\n    DOTTED = 3,\n    DOUBLE = 4\n}\n\nconst borderStyleForSide = (side: string): IPropertyIdentValueDescriptor<BORDER_STYLE> => ({\n    name: `border-${side}-style`,\n    initialValue: 'solid',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, style: string): BORDER_STYLE => {\n        switch (style) {\n            case 'none':\n                return BORDER_STYLE.NONE;\n            case 'dashed':\n                return BORDER_STYLE.DASHED;\n            case 'dotted':\n                return BORDER_STYLE.DOTTED;\n            case 'double':\n                return BORDER_STYLE.DOUBLE;\n        }\n        return BORDER_STYLE.SOLID;\n    }\n});\n\nexport const borderTopStyle: IPropertyIdentValueDescriptor<BORDER_STYLE> = borderStyleForSide('top');\nexport const borderRightStyle: IPropertyIdentValueDescriptor<BORDER_STYLE> = borderStyleForSide('right');\nexport const borderBottomStyle: IPropertyIdentValueDescriptor<BORDER_STYLE> = borderStyleForSide('bottom');\nexport const borderLeftStyle: IPropertyIdentValueDescriptor<BORDER_STYLE> = borderStyleForSide('left');\n","import {IPropertyValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isDimensionToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\nconst borderWidthForSide = (side: string): IPropertyValueDescriptor<number> => ({\n    name: `border-${side}-width`,\n    initialValue: '0',\n    type: PropertyDescriptorParsingType.VALUE,\n    prefix: false,\n    parse: (_context: Context, token: CSSValue): number => {\n        if (isDimensionToken(token)) {\n            return token.number;\n        }\n        return 0;\n    }\n});\n\nexport const borderTopWidth: IPropertyValueDescriptor<number> = borderWidthForSide('top');\nexport const borderRightWidth: IPropertyValueDescriptor<number> = borderWidthForSide('right');\nexport const borderBottomWidth: IPropertyValueDescriptor<number> = borderWidthForSide('bottom');\nexport const borderLeftWidth: IPropertyValueDescriptor<number> = borderWidthForSide('left');\n","import {IPropertyTypeValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\n\nexport const color: IPropertyTypeValueDescriptor = {\n    name: `color`,\n    initialValue: 'transparent',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TYPE_VALUE,\n    format: 'color'\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\n\nexport const enum DIRECTION {\n    LTR = 0,\n    RTL = 1\n}\n\nexport const direction: IPropertyIdentValueDescriptor<DIRECTION> = {\n    name: 'direction',\n    initialValue: 'ltr',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, direction: string) => {\n        switch (direction) {\n            case 'rtl':\n                return DIRECTION.RTL;\n            case 'ltr':\n            default:\n                return DIRECTION.LTR;\n        }\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\nexport const enum DISPLAY {\n    NONE = 0,\n    BLOCK = 1 << 1,\n    INLINE = 1 << 2,\n    RUN_IN = 1 << 3,\n    FLOW = 1 << 4,\n    FLOW_ROOT = 1 << 5,\n    TABLE = 1 << 6,\n    FLEX = 1 << 7,\n    GRID = 1 << 8,\n    RUBY = 1 << 9,\n    SUBGRID = 1 << 10,\n    LIST_ITEM = 1 << 11,\n    TABLE_ROW_GROUP = 1 << 12,\n    TABLE_HEADER_GROUP = 1 << 13,\n    TABLE_FOOTER_GROUP = 1 << 14,\n    TABLE_ROW = 1 << 15,\n    TABLE_CELL = 1 << 16,\n    TABLE_COLUMN_GROUP = 1 << 17,\n    TABLE_COLUMN = 1 << 18,\n    TABLE_CAPTION = 1 << 19,\n    RUBY_BASE = 1 << 20,\n    RUBY_TEXT = 1 << 21,\n    RUBY_BASE_CONTAINER = 1 << 22,\n    RUBY_TEXT_CONTAINER = 1 << 23,\n    CONTENTS = 1 << 24,\n    INLINE_BLOCK = 1 << 25,\n    INLINE_LIST_ITEM = 1 << 26,\n    INLINE_TABLE = 1 << 27,\n    INLINE_FLEX = 1 << 28,\n    INLINE_GRID = 1 << 29\n}\n\nexport type Display = number;\n\nexport const display: IPropertyListDescriptor<Display> = {\n    name: 'display',\n    initialValue: 'inline-block',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): Display => {\n        return tokens.filter(isIdentToken).reduce((bit, token) => {\n            return bit | parseDisplayValue(token.value);\n        }, DISPLAY.NONE);\n    }\n};\n\nconst parseDisplayValue = (display: string): Display => {\n    switch (display) {\n        case 'block':\n        case '-webkit-box':\n            return DISPLAY.BLOCK;\n        case 'inline':\n            return DISPLAY.INLINE;\n        case 'run-in':\n            return DISPLAY.RUN_IN;\n        case 'flow':\n            return DISPLAY.FLOW;\n        case 'flow-root':\n            return DISPLAY.FLOW_ROOT;\n        case 'table':\n            return DISPLAY.TABLE;\n        case 'flex':\n        case '-webkit-flex':\n            return DISPLAY.FLEX;\n        case 'grid':\n        case '-ms-grid':\n            return DISPLAY.GRID;\n        case 'ruby':\n            return DISPLAY.RUBY;\n        case 'subgrid':\n            return DISPLAY.SUBGRID;\n        case 'list-item':\n            return DISPLAY.LIST_ITEM;\n        case 'table-row-group':\n            return DISPLAY.TABLE_ROW_GROUP;\n        case 'table-header-group':\n            return DISPLAY.TABLE_HEADER_GROUP;\n        case 'table-footer-group':\n            return DISPLAY.TABLE_FOOTER_GROUP;\n        case 'table-row':\n            return DISPLAY.TABLE_ROW;\n        case 'table-cell':\n            return DISPLAY.TABLE_CELL;\n        case 'table-column-group':\n            return DISPLAY.TABLE_COLUMN_GROUP;\n        case 'table-column':\n            return DISPLAY.TABLE_COLUMN;\n        case 'table-caption':\n            return DISPLAY.TABLE_CAPTION;\n        case 'ruby-base':\n            return DISPLAY.RUBY_BASE;\n        case 'ruby-text':\n            return DISPLAY.RUBY_TEXT;\n        case 'ruby-base-container':\n            return DISPLAY.RUBY_BASE_CONTAINER;\n        case 'ruby-text-container':\n            return DISPLAY.RUBY_TEXT_CONTAINER;\n        case 'contents':\n            return DISPLAY.CONTENTS;\n        case 'inline-block':\n            return DISPLAY.INLINE_BLOCK;\n        case 'inline-list-item':\n            return DISPLAY.INLINE_LIST_ITEM;\n        case 'inline-table':\n            return DISPLAY.INLINE_TABLE;\n        case 'inline-flex':\n            return DISPLAY.INLINE_FLEX;\n        case 'inline-grid':\n            return DISPLAY.INLINE_GRID;\n    }\n\n    return DISPLAY.NONE;\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum FLOAT {\n    NONE = 0,\n    LEFT = 1,\n    RIGHT = 2,\n    INLINE_START = 3,\n    INLINE_END = 4\n}\n\nexport const float: IPropertyIdentValueDescriptor<FLOAT> = {\n    name: 'float',\n    initialValue: 'none',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, float: string) => {\n        switch (float) {\n            case 'left':\n                return FLOAT.LEFT;\n            case 'right':\n                return FLOAT.RIGHT;\n            case 'inline-start':\n                return FLOAT.INLINE_START;\n            case 'inline-end':\n                return FLOAT.INLINE_END;\n        }\n        return FLOAT.NONE;\n    }\n};\n","import {IPropertyValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {Context} from '../../core/context';\nexport const letterSpacing: IPropertyValueDescriptor<number> = {\n    name: 'letter-spacing',\n    initialValue: '0',\n    prefix: false,\n    type: PropertyDescriptorParsingType.VALUE,\n    parse: (_context: Context, token: CSSValue) => {\n        if (token.type === TokenType.IDENT_TOKEN && token.value === 'normal') {\n            return 0;\n        }\n\n        if (token.type === TokenType.NUMBER_TOKEN) {\n            return token.number;\n        }\n\n        if (token.type === TokenType.DIMENSION_TOKEN) {\n            return token.number;\n        }\n\n        return 0;\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport enum LINE_BREAK {\n    NORMAL = 'normal',\n    STRICT = 'strict'\n}\n\nexport const lineBreak: IPropertyIdentValueDescriptor<LINE_BREAK> = {\n    name: 'line-break',\n    initialValue: 'normal',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, lineBreak: string): LINE_BREAK => {\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","import {IPropertyTokenValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {getAbsoluteValue, isLengthPercentage} from '../types/length-percentage';\nexport const lineHeight: IPropertyTokenValueDescriptor = {\n    name: 'line-height',\n    initialValue: 'normal',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TOKEN_VALUE\n};\n\nexport const computeLineHeight = (token: CSSValue, fontSize: number): number => {\n    if (isIdentToken(token) && token.value === 'normal') {\n        return 1.2 * fontSize;\n    } else if (token.type === TokenType.NUMBER_TOKEN) {\n        return fontSize * token.number;\n    } else if (isLengthPercentage(token)) {\n        return getAbsoluteValue(token, fontSize);\n    }\n\n    return fontSize;\n};\n","import {TokenType} from '../syntax/tokenizer';\nimport {ICSSImage, image} from '../types/image';\nimport {IPropertyValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue} from '../syntax/parser';\nimport {Context} from '../../core/context';\n\nexport const listStyleImage: IPropertyValueDescriptor<ICSSImage | null> = {\n    name: 'list-style-image',\n    initialValue: 'none',\n    type: PropertyDescriptorParsingType.VALUE,\n    prefix: false,\n    parse: (context: Context, token: CSSValue) => {\n        if (token.type === TokenType.IDENT_TOKEN && token.value === 'none') {\n            return null;\n        }\n\n        return image.parse(context, token);\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum LIST_STYLE_POSITION {\n    INSIDE = 0,\n    OUTSIDE = 1\n}\n\nexport const listStylePosition: IPropertyIdentValueDescriptor<LIST_STYLE_POSITION> = {\n    name: 'list-style-position',\n    initialValue: 'outside',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, position: string) => {\n        switch (position) {\n            case 'inside':\n                return LIST_STYLE_POSITION.INSIDE;\n            case 'outside':\n            default:\n                return LIST_STYLE_POSITION.OUTSIDE;\n        }\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum LIST_STYLE_TYPE {\n    NONE = -1,\n    DISC = 0,\n    CIRCLE = 1,\n    SQUARE = 2,\n    DECIMAL = 3,\n    CJK_DECIMAL = 4,\n    DECIMAL_LEADING_ZERO = 5,\n    LOWER_ROMAN = 6,\n    UPPER_ROMAN = 7,\n    LOWER_GREEK = 8,\n    LOWER_ALPHA = 9,\n    UPPER_ALPHA = 10,\n    ARABIC_INDIC = 11,\n    ARMENIAN = 12,\n    BENGALI = 13,\n    CAMBODIAN = 14,\n    CJK_EARTHLY_BRANCH = 15,\n    CJK_HEAVENLY_STEM = 16,\n    CJK_IDEOGRAPHIC = 17,\n    DEVANAGARI = 18,\n    ETHIOPIC_NUMERIC = 19,\n    GEORGIAN = 20,\n    GUJARATI = 21,\n    GURMUKHI = 22,\n    HEBREW = 22,\n    HIRAGANA = 23,\n    HIRAGANA_IROHA = 24,\n    JAPANESE_FORMAL = 25,\n    JAPANESE_INFORMAL = 26,\n    KANNADA = 27,\n    KATAKANA = 28,\n    KATAKANA_IROHA = 29,\n    KHMER = 30,\n    KOREAN_HANGUL_FORMAL = 31,\n    KOREAN_HANJA_FORMAL = 32,\n    KOREAN_HANJA_INFORMAL = 33,\n    LAO = 34,\n    LOWER_ARMENIAN = 35,\n    MALAYALAM = 36,\n    MONGOLIAN = 37,\n    MYANMAR = 38,\n    ORIYA = 39,\n    PERSIAN = 40,\n    SIMP_CHINESE_FORMAL = 41,\n    SIMP_CHINESE_INFORMAL = 42,\n    TAMIL = 43,\n    TELUGU = 44,\n    THAI = 45,\n    TIBETAN = 46,\n    TRAD_CHINESE_FORMAL = 47,\n    TRAD_CHINESE_INFORMAL = 48,\n    UPPER_ARMENIAN = 49,\n    DISCLOSURE_OPEN = 50,\n    DISCLOSURE_CLOSED = 51\n}\n\nexport const listStyleType: IPropertyIdentValueDescriptor<LIST_STYLE_TYPE> = {\n    name: 'list-style-type',\n    initialValue: 'none',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, type: string) => {\n        switch (type) {\n            case 'disc':\n                return LIST_STYLE_TYPE.DISC;\n            case 'circle':\n                return LIST_STYLE_TYPE.CIRCLE;\n            case 'square':\n                return LIST_STYLE_TYPE.SQUARE;\n            case 'decimal':\n                return LIST_STYLE_TYPE.DECIMAL;\n            case 'cjk-decimal':\n                return LIST_STYLE_TYPE.CJK_DECIMAL;\n            case 'decimal-leading-zero':\n                return LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO;\n            case 'lower-roman':\n                return LIST_STYLE_TYPE.LOWER_ROMAN;\n            case 'upper-roman':\n                return LIST_STYLE_TYPE.UPPER_ROMAN;\n            case 'lower-greek':\n                return LIST_STYLE_TYPE.LOWER_GREEK;\n            case 'lower-alpha':\n                return LIST_STYLE_TYPE.LOWER_ALPHA;\n            case 'upper-alpha':\n                return LIST_STYLE_TYPE.UPPER_ALPHA;\n            case 'arabic-indic':\n                return LIST_STYLE_TYPE.ARABIC_INDIC;\n            case 'armenian':\n                return LIST_STYLE_TYPE.ARMENIAN;\n            case 'bengali':\n                return LIST_STYLE_TYPE.BENGALI;\n            case 'cambodian':\n                return LIST_STYLE_TYPE.CAMBODIAN;\n            case 'cjk-earthly-branch':\n                return LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH;\n            case 'cjk-heavenly-stem':\n                return LIST_STYLE_TYPE.CJK_HEAVENLY_STEM;\n            case 'cjk-ideographic':\n                return LIST_STYLE_TYPE.CJK_IDEOGRAPHIC;\n            case 'devanagari':\n                return LIST_STYLE_TYPE.DEVANAGARI;\n            case 'ethiopic-numeric':\n                return LIST_STYLE_TYPE.ETHIOPIC_NUMERIC;\n            case 'georgian':\n                return LIST_STYLE_TYPE.GEORGIAN;\n            case 'gujarati':\n                return LIST_STYLE_TYPE.GUJARATI;\n            case 'gurmukhi':\n                return LIST_STYLE_TYPE.GURMUKHI;\n            case 'hebrew':\n                return LIST_STYLE_TYPE.HEBREW;\n            case 'hiragana':\n                return LIST_STYLE_TYPE.HIRAGANA;\n            case 'hiragana-iroha':\n                return LIST_STYLE_TYPE.HIRAGANA_IROHA;\n            case 'japanese-formal':\n                return LIST_STYLE_TYPE.JAPANESE_FORMAL;\n            case 'japanese-informal':\n                return LIST_STYLE_TYPE.JAPANESE_INFORMAL;\n            case 'kannada':\n                return LIST_STYLE_TYPE.KANNADA;\n            case 'katakana':\n                return LIST_STYLE_TYPE.KATAKANA;\n            case 'katakana-iroha':\n                return LIST_STYLE_TYPE.KATAKANA_IROHA;\n            case 'khmer':\n                return LIST_STYLE_TYPE.KHMER;\n            case 'korean-hangul-formal':\n                return LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL;\n            case 'korean-hanja-formal':\n                return LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL;\n            case 'korean-hanja-informal':\n                return LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL;\n            case 'lao':\n                return LIST_STYLE_TYPE.LAO;\n            case 'lower-armenian':\n                return LIST_STYLE_TYPE.LOWER_ARMENIAN;\n            case 'malayalam':\n                return LIST_STYLE_TYPE.MALAYALAM;\n            case 'mongolian':\n                return LIST_STYLE_TYPE.MONGOLIAN;\n            case 'myanmar':\n                return LIST_STYLE_TYPE.MYANMAR;\n            case 'oriya':\n                return LIST_STYLE_TYPE.ORIYA;\n            case 'persian':\n                return LIST_STYLE_TYPE.PERSIAN;\n            case 'simp-chinese-formal':\n                return LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL;\n            case 'simp-chinese-informal':\n                return LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL;\n            case 'tamil':\n                return LIST_STYLE_TYPE.TAMIL;\n            case 'telugu':\n                return LIST_STYLE_TYPE.TELUGU;\n            case 'thai':\n                return LIST_STYLE_TYPE.THAI;\n            case 'tibetan':\n                return LIST_STYLE_TYPE.TIBETAN;\n            case 'trad-chinese-formal':\n                return LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL;\n            case 'trad-chinese-informal':\n                return LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL;\n            case 'upper-armenian':\n                return LIST_STYLE_TYPE.UPPER_ARMENIAN;\n            case 'disclosure-open':\n                return LIST_STYLE_TYPE.DISCLOSURE_OPEN;\n            case 'disclosure-closed':\n                return LIST_STYLE_TYPE.DISCLOSURE_CLOSED;\n            case 'none':\n            default:\n                return LIST_STYLE_TYPE.NONE;\n        }\n    }\n};\n","import {IPropertyTokenValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\n\nconst marginForSide = (side: string): IPropertyTokenValueDescriptor => ({\n    name: `margin-${side}`,\n    initialValue: '0',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TOKEN_VALUE\n});\n\nexport const marginTop: IPropertyTokenValueDescriptor = marginForSide('top');\nexport const marginRight: IPropertyTokenValueDescriptor = marginForSide('right');\nexport const marginBottom: IPropertyTokenValueDescriptor = marginForSide('bottom');\nexport const marginLeft: IPropertyTokenValueDescriptor = marginForSide('left');\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\nexport const enum OVERFLOW {\n    VISIBLE = 0,\n    HIDDEN = 1,\n    SCROLL = 2,\n    CLIP = 3,\n    AUTO = 4\n}\n\nexport const overflow: IPropertyListDescriptor<OVERFLOW[]> = {\n    name: 'overflow',\n    initialValue: 'visible',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): OVERFLOW[] => {\n        return tokens.filter(isIdentToken).map((overflow) => {\n            switch (overflow.value) {\n                case 'hidden':\n                    return OVERFLOW.HIDDEN;\n                case 'scroll':\n                    return OVERFLOW.SCROLL;\n                case 'clip':\n                    return OVERFLOW.CLIP;\n                case 'auto':\n                    return OVERFLOW.AUTO;\n                case 'visible':\n                default:\n                    return OVERFLOW.VISIBLE;\n            }\n        });\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum OVERFLOW_WRAP {\n    NORMAL = 'normal',\n    BREAK_WORD = 'break-word'\n}\n\nexport const overflowWrap: IPropertyIdentValueDescriptor<OVERFLOW_WRAP> = {\n    name: 'overflow-wrap',\n    initialValue: 'normal',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, overflow: string) => {\n        switch (overflow) {\n            case 'break-word':\n                return OVERFLOW_WRAP.BREAK_WORD;\n            case 'normal':\n            default:\n                return OVERFLOW_WRAP.NORMAL;\n        }\n    }\n};\n","import {IPropertyTypeValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\n\nconst paddingForSide = (side: string): IPropertyTypeValueDescriptor => ({\n    name: `padding-${side}`,\n    initialValue: '0',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TYPE_VALUE,\n    format: 'length-percentage'\n});\n\nexport const paddingTop: IPropertyTypeValueDescriptor = paddingForSide('top');\nexport const paddingRight: IPropertyTypeValueDescriptor = paddingForSide('right');\nexport const paddingBottom: IPropertyTypeValueDescriptor = paddingForSide('bottom');\nexport const paddingLeft: IPropertyTypeValueDescriptor = paddingForSide('left');\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum TEXT_ALIGN {\n    LEFT = 0,\n    CENTER = 1,\n    RIGHT = 2\n}\n\nexport const textAlign: IPropertyIdentValueDescriptor<TEXT_ALIGN> = {\n    name: 'text-align',\n    initialValue: 'left',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, textAlign: string) => {\n        switch (textAlign) {\n            case 'right':\n                return TEXT_ALIGN.RIGHT;\n            case 'center':\n            case 'justify':\n                return TEXT_ALIGN.CENTER;\n            case 'left':\n            default:\n                return TEXT_ALIGN.LEFT;\n        }\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum POSITION {\n    STATIC = 0,\n    RELATIVE = 1,\n    ABSOLUTE = 2,\n    FIXED = 3,\n    STICKY = 4\n}\n\nexport const position: IPropertyIdentValueDescriptor<POSITION> = {\n    name: 'position',\n    initialValue: 'static',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, position: string) => {\n        switch (position) {\n            case 'relative':\n                return POSITION.RELATIVE;\n            case 'absolute':\n                return POSITION.ABSOLUTE;\n            case 'fixed':\n                return POSITION.FIXED;\n            case 'sticky':\n                return POSITION.STICKY;\n        }\n\n        return POSITION.STATIC;\n    }\n};\n","import {PropertyDescriptorParsingType, IPropertyListDescriptor} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentWithValue, parseFunctionArgs} from '../syntax/parser';\nimport {ZERO_LENGTH} from '../types/length-percentage';\nimport {color, Color, COLORS} from '../types/color';\nimport {isLength, Length} from '../types/length';\nimport {Context} from '../../core/context';\n\nexport type TextShadow = TextShadowItem[];\ninterface TextShadowItem {\n    color: Color;\n    offsetX: Length;\n    offsetY: Length;\n    blur: Length;\n}\n\nexport const textShadow: IPropertyListDescriptor<TextShadow> = {\n    name: 'text-shadow',\n    initialValue: 'none',\n    type: PropertyDescriptorParsingType.LIST,\n    prefix: false,\n    parse: (context: Context, tokens: CSSValue[]): TextShadow => {\n        if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\n            return [];\n        }\n\n        return parseFunctionArgs(tokens).map((values: CSSValue[]) => {\n            const shadow: TextShadowItem = {\n                color: COLORS.TRANSPARENT,\n                offsetX: ZERO_LENGTH,\n                offsetY: ZERO_LENGTH,\n                blur: ZERO_LENGTH\n            };\n            let c = 0;\n            for (let i = 0; i < values.length; i++) {\n                const token = values[i];\n                if (isLength(token)) {\n                    if (c === 0) {\n                        shadow.offsetX = token;\n                    } else if (c === 1) {\n                        shadow.offsetY = token;\n                    } else {\n                        shadow.blur = token;\n                    }\n                    c++;\n                } else {\n                    shadow.color = color.parse(context, token);\n                }\n            }\n            return shadow;\n        });\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum TEXT_TRANSFORM {\n    NONE = 0,\n    LOWERCASE = 1,\n    UPPERCASE = 2,\n    CAPITALIZE = 3\n}\n\nexport const textTransform: IPropertyIdentValueDescriptor<TEXT_TRANSFORM> = {\n    name: 'text-transform',\n    initialValue: 'none',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, textTransform: string) => {\n        switch (textTransform) {\n            case 'uppercase':\n                return TEXT_TRANSFORM.UPPERCASE;\n            case 'lowercase':\n                return TEXT_TRANSFORM.LOWERCASE;\n            case 'capitalize':\n                return TEXT_TRANSFORM.CAPITALIZE;\n        }\n\n        return TEXT_TRANSFORM.NONE;\n    }\n};\n","import {IPropertyValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue} from '../syntax/parser';\nimport {NumberValueToken, TokenType} from '../syntax/tokenizer';\nimport {Context} from '../../core/context';\nexport type Matrix = [number, number, number, number, number, number];\nexport type Transform = Matrix | null;\n\nexport const transform: IPropertyValueDescriptor<Transform> = {\n    name: 'transform',\n    initialValue: 'none',\n    prefix: true,\n    type: PropertyDescriptorParsingType.VALUE,\n    parse: (_context: Context, token: CSSValue) => {\n        if (token.type === TokenType.IDENT_TOKEN && token.value === 'none') {\n            return null;\n        }\n\n        if (token.type === TokenType.FUNCTION) {\n            const 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\n        return null;\n    }\n};\n\nconst matrix = (args: CSSValue[]): Transform => {\n    const values = args.filter((arg) => arg.type === TokenType.NUMBER_TOKEN).map((arg: NumberValueToken) => arg.number);\n\n    return values.length === 6 ? (values as Matrix) : null;\n};\n\n// doesn't support 3D transforms at the moment\nconst matrix3d = (args: CSSValue[]): Transform => {\n    const values = args.filter((arg) => arg.type === TokenType.NUMBER_TOKEN).map((arg: NumberValueToken) => arg.number);\n\n    const [a1, b1, {}, {}, a2, b2, {}, {}, {}, {}, {}, {}, a4, b4, {}, {}] = values;\n\n    return values.length === 16 ? [a1, b1, a2, b2, a4, b4] : null;\n};\n\nconst SUPPORTED_TRANSFORM_FUNCTIONS: {\n    [key: string]: (args: CSSValue[]) => Transform;\n} = {\n    matrix: matrix,\n    matrix3d: matrix3d\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue} from '../syntax/parser';\nimport {isLengthPercentage, LengthPercentage} from '../types/length-percentage';\nimport {FLAG_INTEGER, TokenType} from '../syntax/tokenizer';\nimport {Context} from '../../core/context';\nexport type TransformOrigin = [LengthPercentage, LengthPercentage];\n\nconst DEFAULT_VALUE: LengthPercentage = {\n    type: TokenType.PERCENTAGE_TOKEN,\n    number: 50,\n    flags: FLAG_INTEGER\n};\nconst DEFAULT: TransformOrigin = [DEFAULT_VALUE, DEFAULT_VALUE];\n\nexport const transformOrigin: IPropertyListDescriptor<TransformOrigin> = {\n    name: 'transform-origin',\n    initialValue: '50% 50%',\n    prefix: true,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]) => {\n        const origins: LengthPercentage[] = tokens.filter(isLengthPercentage);\n\n        if (origins.length !== 2) {\n            return DEFAULT;\n        }\n\n        return [origins[0], origins[1]];\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum VISIBILITY {\n    VISIBLE = 0,\n    HIDDEN = 1,\n    COLLAPSE = 2\n}\n\nexport const visibility: IPropertyIdentValueDescriptor<VISIBILITY> = {\n    name: 'visible',\n    initialValue: 'none',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, visibility: string) => {\n        switch (visibility) {\n            case 'hidden':\n                return VISIBILITY.HIDDEN;\n            case 'collapse':\n                return VISIBILITY.COLLAPSE;\n            case 'visible':\n            default:\n                return VISIBILITY.VISIBLE;\n        }\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport enum WORD_BREAK {\n    NORMAL = 'normal',\n    BREAK_ALL = 'break-all',\n    KEEP_ALL = 'keep-all'\n}\n\nexport const wordBreak: IPropertyIdentValueDescriptor<WORD_BREAK> = {\n    name: 'word-break',\n    initialValue: 'normal',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, wordBreak: string): WORD_BREAK => {\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","import {IPropertyValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isNumberToken} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {Context} from '../../core/context';\n\ninterface zIndex {\n    order: number;\n    auto: boolean;\n}\n\nexport const zIndex: IPropertyValueDescriptor<zIndex> = {\n    name: 'z-index',\n    initialValue: 'auto',\n    prefix: false,\n    type: PropertyDescriptorParsingType.VALUE,\n    parse: (_context: Context, token: CSSValue): zIndex => {\n        if (token.type === TokenType.IDENT_TOKEN) {\n            return {auto: true, order: 0};\n        }\n\n        if (isNumberToken(token)) {\n            return {auto: false, order: token.number};\n        }\n\n        throw new Error(`Invalid z-index number parsed`);\n    }\n};\n","import {CSSValue} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {ITypeDescriptor} from '../ITypeDescriptor';\nimport {Context} from '../../core/context';\n\nexport const time: ITypeDescriptor<number> = {\n    name: 'time',\n    parse: (_context: Context, value: CSSValue): number => {\n        if (value.type === TokenType.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\n        throw new Error(`Unsupported time type`);\n    }\n};\n","import {IPropertyValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isNumberToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\nexport const opacity: IPropertyValueDescriptor<number> = {\n    name: 'opacity',\n    initialValue: '1',\n    type: PropertyDescriptorParsingType.VALUE,\n    prefix: false,\n    parse: (_context: Context, token: CSSValue): number => {\n        if (isNumberToken(token)) {\n            return token.number;\n        }\n        return 1;\n    }\n};\n","import {IPropertyTypeValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\n\nexport const textDecorationColor: IPropertyTypeValueDescriptor = {\n    name: `text-decoration-color`,\n    initialValue: 'transparent',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TYPE_VALUE,\n    format: 'color'\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\n\nexport const enum TEXT_DECORATION_LINE {\n    NONE = 0,\n    UNDERLINE = 1,\n    OVERLINE = 2,\n    LINE_THROUGH = 3,\n    BLINK = 4\n}\n\nexport type TextDecorationLine = TEXT_DECORATION_LINE[];\n\nexport const textDecorationLine: IPropertyListDescriptor<TextDecorationLine> = {\n    name: 'text-decoration-line',\n    initialValue: 'none',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): TextDecorationLine => {\n        return tokens\n            .filter(isIdentToken)\n            .map((token) => {\n                switch (token.value) {\n                    case 'underline':\n                        return TEXT_DECORATION_LINE.UNDERLINE;\n                    case 'overline':\n                        return TEXT_DECORATION_LINE.OVERLINE;\n                    case 'line-through':\n                        return TEXT_DECORATION_LINE.LINE_THROUGH;\n                    case 'none':\n                        return TEXT_DECORATION_LINE.BLINK;\n                }\n                return TEXT_DECORATION_LINE.NONE;\n            })\n            .filter((line) => line !== TEXT_DECORATION_LINE.NONE);\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {Context} from '../../core/context';\n\nexport type FONT_FAMILY = string;\n\nexport type FontFamily = FONT_FAMILY[];\n\nexport const fontFamily: IPropertyListDescriptor<FontFamily> = {\n    name: `font-family`,\n    initialValue: '',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]) => {\n        const accumulator: string[] = [];\n        const results: string[] = [];\n        tokens.forEach((token) => {\n            switch (token.type) {\n                case TokenType.IDENT_TOKEN:\n                case TokenType.STRING_TOKEN:\n                    accumulator.push(token.value);\n                    break;\n                case TokenType.NUMBER_TOKEN:\n                    accumulator.push(token.number.toString());\n                    break;\n                case TokenType.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((result) => (result.indexOf(' ') === -1 ? result : `'${result}'`));\n    }\n};\n","import {IPropertyTypeValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\n\nexport const fontSize: IPropertyTypeValueDescriptor = {\n    name: `font-size`,\n    initialValue: '0',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TYPE_VALUE,\n    format: 'length'\n};\n","import {IPropertyValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken, isNumberToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\nexport const fontWeight: IPropertyValueDescriptor<number> = {\n    name: 'font-weight',\n    initialValue: 'normal',\n    type: PropertyDescriptorParsingType.VALUE,\n    prefix: false,\n    parse: (_context: Context, token: CSSValue): number => {\n        if (isNumberToken(token)) {\n            return token.number;\n        }\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\n        return 400;\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\nexport const fontVariant: IPropertyListDescriptor<string[]> = {\n    name: 'font-variant',\n    initialValue: 'none',\n    type: PropertyDescriptorParsingType.LIST,\n    prefix: false,\n    parse: (_context: Context, tokens: CSSValue[]): string[] => {\n        return tokens.filter(isIdentToken).map((token) => token.value);\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum FONT_STYLE {\n    NORMAL = 'normal',\n    ITALIC = 'italic',\n    OBLIQUE = 'oblique'\n}\n\nexport const fontStyle: IPropertyIdentValueDescriptor<FONT_STYLE> = {\n    name: 'font-style',\n    initialValue: 'normal',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, overflow: string) => {\n        switch (overflow) {\n            case 'oblique':\n                return FONT_STYLE.OBLIQUE;\n            case 'italic':\n                return FONT_STYLE.ITALIC;\n            case 'normal':\n            default:\n                return FONT_STYLE.NORMAL;\n        }\n    }\n};\n","export const contains = (bit: number, value: number): boolean => (bit & value) !== 0;\n","import {TokenType} from '../syntax/tokenizer';\nimport {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue} from '../syntax/parser';\nimport {Context} from '../../core/context';\n\nexport type Content = CSSValue[];\n\nexport const content: IPropertyListDescriptor<Content> = {\n    name: 'content',\n    initialValue: 'none',\n    type: PropertyDescriptorParsingType.LIST,\n    prefix: false,\n    parse: (_context: Context, tokens: CSSValue[]) => {\n        if (tokens.length === 0) {\n            return [];\n        }\n\n        const first = tokens[0];\n\n        if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') {\n            return [];\n        }\n\n        return tokens;\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isNumberToken, nonWhiteSpace} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {Context} from '../../core/context';\n\nexport interface COUNTER_INCREMENT {\n    counter: string;\n    increment: number;\n}\n\nexport type CounterIncrement = COUNTER_INCREMENT[] | null;\n\nexport const counterIncrement: IPropertyListDescriptor<CounterIncrement> = {\n    name: 'counter-increment',\n    initialValue: 'none',\n    prefix: true,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]) => {\n        if (tokens.length === 0) {\n            return null;\n        }\n\n        const first = tokens[0];\n\n        if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') {\n            return null;\n        }\n\n        const increments = [];\n        const filtered = tokens.filter(nonWhiteSpace);\n\n        for (let i = 0; i < filtered.length; i++) {\n            const counter = filtered[i];\n            const next = filtered[i + 1];\n            if (counter.type === TokenType.IDENT_TOKEN) {\n                const increment = next && isNumberToken(next) ? next.number : 1;\n                increments.push({counter: counter.value, increment});\n            }\n        }\n\n        return increments;\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken, isNumberToken, nonWhiteSpace} from '../syntax/parser';\nimport {Context} from '../../core/context';\n\nexport interface COUNTER_RESET {\n    counter: string;\n    reset: number;\n}\n\nexport type CounterReset = COUNTER_RESET[];\n\nexport const counterReset: IPropertyListDescriptor<CounterReset> = {\n    name: 'counter-reset',\n    initialValue: 'none',\n    prefix: true,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]) => {\n        if (tokens.length === 0) {\n            return [];\n        }\n\n        const resets = [];\n        const filtered = tokens.filter(nonWhiteSpace);\n\n        for (let i = 0; i < filtered.length; i++) {\n            const counter = filtered[i];\n            const next = filtered[i + 1];\n            if (isIdentToken(counter) && counter.value !== 'none') {\n                const reset = next && isNumberToken(next) ? next.number : 0;\n                resets.push({counter: counter.value, reset});\n            }\n        }\n\n        return resets;\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nimport {CSSValue, isDimensionToken} from '../syntax/parser';\nimport {time} from '../types/time';\n\nexport const duration: IPropertyListDescriptor<number[]> = {\n    name: 'duration',\n    initialValue: '0s',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (context: Context, tokens: CSSValue[]) => {\n        return tokens.filter(isDimensionToken).map((token) => time.parse(context, token));\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isStringToken} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {Context} from '../../core/context';\n\nexport interface QUOTE {\n    open: string;\n    close: string;\n}\n\nexport type Quotes = QUOTE[] | null;\n\nexport const quotes: IPropertyListDescriptor<Quotes> = {\n    name: 'quotes',\n    initialValue: 'none',\n    prefix: true,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]) => {\n        if (tokens.length === 0) {\n            return null;\n        }\n\n        const first = tokens[0];\n\n        if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') {\n            return null;\n        }\n\n        const quotes = [];\n        const filtered = tokens.filter(isStringToken);\n\n        if (filtered.length % 2 !== 0) {\n            return null;\n        }\n\n        for (let i = 0; i < filtered.length; i += 2) {\n            const open = filtered[i].value;\n            const close = filtered[i + 1].value;\n            quotes.push({open, close});\n        }\n\n        return quotes;\n    }\n};\n\nexport const getQuote = (quotes: Quotes, depth: number, open: boolean): string => {\n    if (!quotes) {\n        return '';\n    }\n\n    const quote = quotes[Math.min(depth, quotes.length - 1)];\n    if (!quote) {\n        return '';\n    }\n\n    return open ? quote.open : quote.close;\n};\n","import {PropertyDescriptorParsingType, IPropertyListDescriptor} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentWithValue, parseFunctionArgs} from '../syntax/parser';\nimport {ZERO_LENGTH} from '../types/length-percentage';\nimport {color, Color} from '../types/color';\nimport {isLength, Length} from '../types/length';\nimport {Context} from '../../core/context';\n\nexport type BoxShadow = BoxShadowItem[];\ninterface BoxShadowItem {\n    inset: boolean;\n    color: Color;\n    offsetX: Length;\n    offsetY: Length;\n    blur: Length;\n    spread: Length;\n}\n\nexport const boxShadow: IPropertyListDescriptor<BoxShadow> = {\n    name: 'box-shadow',\n    initialValue: 'none',\n    type: PropertyDescriptorParsingType.LIST,\n    prefix: false,\n    parse: (context: Context, tokens: CSSValue[]): BoxShadow => {\n        if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\n            return [];\n        }\n\n        return parseFunctionArgs(tokens).map((values: CSSValue[]) => {\n            const shadow: BoxShadowItem = {\n                color: 0x000000ff,\n                offsetX: ZERO_LENGTH,\n                offsetY: ZERO_LENGTH,\n                blur: ZERO_LENGTH,\n                spread: ZERO_LENGTH,\n                inset: false\n            };\n            let c = 0;\n            for (let i = 0; i < values.length; i++) {\n                const token = values[i];\n                if (isIdentWithValue(token, 'inset')) {\n                    shadow.inset = true;\n                } else if (isLength(token)) {\n                    if (c === 0) {\n                        shadow.offsetX = token;\n                    } else if (c === 1) {\n                        shadow.offsetY = token;\n                    } else if (c === 2) {\n                        shadow.blur = token;\n                    } else {\n                        shadow.spread = token;\n                    }\n                    c++;\n                } else {\n                    shadow.color = color.parse(context, token);\n                }\n            }\n            return shadow;\n        });\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\nexport const enum PAINT_ORDER_LAYER {\n    FILL,\n    STROKE,\n    MARKERS\n}\n\nexport type PaintOrder = PAINT_ORDER_LAYER[];\n\nexport const paintOrder: IPropertyListDescriptor<PaintOrder> = {\n    name: 'paint-order',\n    initialValue: 'normal',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): PaintOrder => {\n        const DEFAULT_VALUE = [PAINT_ORDER_LAYER.FILL, PAINT_ORDER_LAYER.STROKE, PAINT_ORDER_LAYER.MARKERS];\n        const layers: PaintOrder = [];\n\n        tokens.filter(isIdentToken).forEach((token) => {\n            switch (token.value) {\n                case 'stroke':\n                    layers.push(PAINT_ORDER_LAYER.STROKE);\n                    break;\n                case 'fill':\n                    layers.push(PAINT_ORDER_LAYER.FILL);\n                    break;\n                case 'markers':\n                    layers.push(PAINT_ORDER_LAYER.MARKERS);\n                    break;\n            }\n        });\n        DEFAULT_VALUE.forEach((value) => {\n            if (layers.indexOf(value) === -1) {\n                layers.push(value);\n            }\n        });\n\n        return layers;\n    }\n};\n","import {IPropertyTypeValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nexport const webkitTextStrokeColor: IPropertyTypeValueDescriptor = {\n    name: `-webkit-text-stroke-color`,\n    initialValue: 'currentcolor',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TYPE_VALUE,\n    format: 'color'\n};\n","import {CSSValue, isDimensionToken} from '../syntax/parser';\nimport {IPropertyValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const webkitTextStrokeWidth: IPropertyValueDescriptor<number> = {\n    name: `-webkit-text-stroke-width`,\n    initialValue: '0',\n    type: PropertyDescriptorParsingType.VALUE,\n    prefix: false,\n    parse: (_context: Context, token: CSSValue): number => {\n        if (isDimensionToken(token)) {\n            return token.number;\n        }\n        return 0;\n    }\n};\n","import {CSSPropertyDescriptor, PropertyDescriptorParsingType} from './IPropertyDescriptor';\nimport {backgroundClip} from './property-descriptors/background-clip';\nimport {backgroundColor} from './property-descriptors/background-color';\nimport {backgroundImage} from './property-descriptors/background-image';\nimport {backgroundOrigin} from './property-descriptors/background-origin';\nimport {backgroundPosition} from './property-descriptors/background-position';\nimport {backgroundRepeat} from './property-descriptors/background-repeat';\nimport {backgroundSize} from './property-descriptors/background-size';\nimport {\n    borderBottomColor,\n    borderLeftColor,\n    borderRightColor,\n    borderTopColor\n} from './property-descriptors/border-color';\nimport {\n    borderBottomLeftRadius,\n    borderBottomRightRadius,\n    borderTopLeftRadius,\n    borderTopRightRadius\n} from './property-descriptors/border-radius';\nimport {\n    borderBottomStyle,\n    borderLeftStyle,\n    borderRightStyle,\n    borderTopStyle\n} from './property-descriptors/border-style';\nimport {\n    borderBottomWidth,\n    borderLeftWidth,\n    borderRightWidth,\n    borderTopWidth\n} from './property-descriptors/border-width';\nimport {color} from './property-descriptors/color';\nimport {direction} from './property-descriptors/direction';\nimport {display, DISPLAY} from './property-descriptors/display';\nimport {float, FLOAT} from './property-descriptors/float';\nimport {letterSpacing} from './property-descriptors/letter-spacing';\nimport {lineBreak} from './property-descriptors/line-break';\nimport {lineHeight} from './property-descriptors/line-height';\nimport {listStyleImage} from './property-descriptors/list-style-image';\nimport {listStylePosition} from './property-descriptors/list-style-position';\nimport {listStyleType} from './property-descriptors/list-style-type';\nimport {marginBottom, marginLeft, marginRight, marginTop} from './property-descriptors/margin';\nimport {overflow, OVERFLOW} from './property-descriptors/overflow';\nimport {overflowWrap} from './property-descriptors/overflow-wrap';\nimport {paddingBottom, paddingLeft, paddingRight, paddingTop} from './property-descriptors/padding';\nimport {textAlign} from './property-descriptors/text-align';\nimport {position, POSITION} from './property-descriptors/position';\nimport {textShadow} from './property-descriptors/text-shadow';\nimport {textTransform} from './property-descriptors/text-transform';\nimport {transform} from './property-descriptors/transform';\nimport {transformOrigin} from './property-descriptors/transform-origin';\nimport {visibility, VISIBILITY} from './property-descriptors/visibility';\nimport {wordBreak} from './property-descriptors/word-break';\nimport {zIndex} from './property-descriptors/z-index';\nimport {CSSValue, isIdentToken, Parser} from './syntax/parser';\nimport {Tokenizer} from './syntax/tokenizer';\nimport {Color, color as colorType, isTransparent} from './types/color';\nimport {angle} from './types/angle';\nimport {image} from './types/image';\nimport {time} from './types/time';\nimport {opacity} from './property-descriptors/opacity';\nimport {textDecorationColor} from './property-descriptors/text-decoration-color';\nimport {textDecorationLine} from './property-descriptors/text-decoration-line';\nimport {isLengthPercentage, LengthPercentage, ZERO_LENGTH} from './types/length-percentage';\nimport {fontFamily} from './property-descriptors/font-family';\nimport {fontSize} from './property-descriptors/font-size';\nimport {isLength} from './types/length';\nimport {fontWeight} from './property-descriptors/font-weight';\nimport {fontVariant} from './property-descriptors/font-variant';\nimport {fontStyle} from './property-descriptors/font-style';\nimport {contains} from '../core/bitwise';\nimport {content} from './property-descriptors/content';\nimport {counterIncrement} from './property-descriptors/counter-increment';\nimport {counterReset} from './property-descriptors/counter-reset';\nimport {duration} from './property-descriptors/duration';\nimport {quotes} from './property-descriptors/quotes';\nimport {boxShadow} from './property-descriptors/box-shadow';\nimport {paintOrder} from './property-descriptors/paint-order';\nimport {webkitTextStrokeColor} from './property-descriptors/webkit-text-stroke-color';\nimport {webkitTextStrokeWidth} from './property-descriptors/webkit-text-stroke-width';\nimport {Context} from '../core/context';\n\nexport class CSSParsedDeclaration {\n    animationDuration: ReturnType<typeof duration.parse>;\n    backgroundClip: ReturnType<typeof backgroundClip.parse>;\n    backgroundColor: Color;\n    backgroundImage: ReturnType<typeof backgroundImage.parse>;\n    backgroundOrigin: ReturnType<typeof backgroundOrigin.parse>;\n    backgroundPosition: ReturnType<typeof backgroundPosition.parse>;\n    backgroundRepeat: ReturnType<typeof backgroundRepeat.parse>;\n    backgroundSize: ReturnType<typeof backgroundSize.parse>;\n    borderTopColor: Color;\n    borderRightColor: Color;\n    borderBottomColor: Color;\n    borderLeftColor: Color;\n    borderTopLeftRadius: ReturnType<typeof borderTopLeftRadius.parse>;\n    borderTopRightRadius: ReturnType<typeof borderTopRightRadius.parse>;\n    borderBottomRightRadius: ReturnType<typeof borderBottomRightRadius.parse>;\n    borderBottomLeftRadius: ReturnType<typeof borderBottomLeftRadius.parse>;\n    borderTopStyle: ReturnType<typeof borderTopStyle.parse>;\n    borderRightStyle: ReturnType<typeof borderRightStyle.parse>;\n    borderBottomStyle: ReturnType<typeof borderBottomStyle.parse>;\n    borderLeftStyle: ReturnType<typeof borderLeftStyle.parse>;\n    borderTopWidth: ReturnType<typeof borderTopWidth.parse>;\n    borderRightWidth: ReturnType<typeof borderRightWidth.parse>;\n    borderBottomWidth: ReturnType<typeof borderBottomWidth.parse>;\n    borderLeftWidth: ReturnType<typeof borderLeftWidth.parse>;\n    boxShadow: ReturnType<typeof boxShadow.parse>;\n    color: Color;\n    direction: ReturnType<typeof direction.parse>;\n    display: ReturnType<typeof display.parse>;\n    float: ReturnType<typeof float.parse>;\n    fontFamily: ReturnType<typeof fontFamily.parse>;\n    fontSize: LengthPercentage;\n    fontStyle: ReturnType<typeof fontStyle.parse>;\n    fontVariant: ReturnType<typeof fontVariant.parse>;\n    fontWeight: ReturnType<typeof fontWeight.parse>;\n    letterSpacing: ReturnType<typeof letterSpacing.parse>;\n    lineBreak: ReturnType<typeof lineBreak.parse>;\n    lineHeight: CSSValue;\n    listStyleImage: ReturnType<typeof listStyleImage.parse>;\n    listStylePosition: ReturnType<typeof listStylePosition.parse>;\n    listStyleType: ReturnType<typeof listStyleType.parse>;\n    marginTop: CSSValue;\n    marginRight: CSSValue;\n    marginBottom: CSSValue;\n    marginLeft: CSSValue;\n    opacity: ReturnType<typeof opacity.parse>;\n    overflowX: OVERFLOW;\n    overflowY: OVERFLOW;\n    overflowWrap: ReturnType<typeof overflowWrap.parse>;\n    paddingTop: LengthPercentage;\n    paddingRight: LengthPercentage;\n    paddingBottom: LengthPercentage;\n    paddingLeft: LengthPercentage;\n    paintOrder: ReturnType<typeof paintOrder.parse>;\n    position: ReturnType<typeof position.parse>;\n    textAlign: ReturnType<typeof textAlign.parse>;\n    textDecorationColor: Color;\n    textDecorationLine: ReturnType<typeof textDecorationLine.parse>;\n    textShadow: ReturnType<typeof textShadow.parse>;\n    textTransform: ReturnType<typeof textTransform.parse>;\n    transform: ReturnType<typeof transform.parse>;\n    transformOrigin: ReturnType<typeof transformOrigin.parse>;\n    visibility: ReturnType<typeof visibility.parse>;\n    webkitTextStrokeColor: Color;\n    webkitTextStrokeWidth: ReturnType<typeof webkitTextStrokeWidth.parse>;\n    wordBreak: ReturnType<typeof wordBreak.parse>;\n    zIndex: ReturnType<typeof zIndex.parse>;\n\n    constructor(context: Context, declaration: CSSStyleDeclaration) {\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        const 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(\n            context,\n            textDecorationColor,\n            declaration.textDecorationColor ?? declaration.color\n        );\n        this.textDecorationLine = parse(\n            context,\n            textDecorationLine,\n            declaration.textDecorationLine ?? declaration.textDecoration\n        );\n        this.textShadow = parse(context, textShadow, declaration.textShadow);\n        this.textTransform = parse(context, textTransform, declaration.textTransform);\n        this.transform = parse(context, transform, 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\n    isVisible(): boolean {\n        return this.display > 0 && this.opacity > 0 && this.visibility === VISIBILITY.VISIBLE;\n    }\n\n    isTransparent(): boolean {\n        return isTransparent(this.backgroundColor);\n    }\n\n    isTransformed(): boolean {\n        return this.transform !== null;\n    }\n\n    isPositioned(): boolean {\n        return this.position !== POSITION.STATIC;\n    }\n\n    isPositionedWithZIndex(): boolean {\n        return this.isPositioned() && !this.zIndex.auto;\n    }\n\n    isFloating(): boolean {\n        return this.float !== FLOAT.NONE;\n    }\n\n    isInlineLevel(): boolean {\n        return (\n            contains(this.display, DISPLAY.INLINE) ||\n            contains(this.display, DISPLAY.INLINE_BLOCK) ||\n            contains(this.display, DISPLAY.INLINE_FLEX) ||\n            contains(this.display, DISPLAY.INLINE_GRID) ||\n            contains(this.display, DISPLAY.INLINE_LIST_ITEM) ||\n            contains(this.display, DISPLAY.INLINE_TABLE)\n        );\n    }\n}\n\nexport class CSSParsedPseudoDeclaration {\n    content: ReturnType<typeof content.parse>;\n    quotes: ReturnType<typeof quotes.parse>;\n\n    constructor(context: Context, declaration: CSSStyleDeclaration) {\n        this.content = parse(context, content, declaration.content);\n        this.quotes = parse(context, quotes, declaration.quotes);\n    }\n}\n\nexport class CSSParsedCounterDeclaration {\n    counterIncrement: ReturnType<typeof counterIncrement.parse>;\n    counterReset: ReturnType<typeof counterReset.parse>;\n\n    constructor(context: Context, declaration: CSSStyleDeclaration) {\n        this.counterIncrement = parse(context, counterIncrement, declaration.counterIncrement);\n        this.counterReset = parse(context, counterReset, declaration.counterReset);\n    }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst parse = (context: Context, descriptor: CSSPropertyDescriptor<any>, style?: string | null) => {\n    const tokenizer = new Tokenizer();\n    const value = style !== null && typeof style !== 'undefined' ? style.toString() : descriptor.initialValue;\n    tokenizer.write(value);\n    const parser = new Parser(tokenizer.read());\n    switch (descriptor.type) {\n        case PropertyDescriptorParsingType.IDENT_VALUE:\n            const token = parser.parseComponentValue();\n            return descriptor.parse(context, isIdentToken(token) ? token.value : descriptor.initialValue);\n        case PropertyDescriptorParsingType.VALUE:\n            return descriptor.parse(context, parser.parseComponentValue());\n        case PropertyDescriptorParsingType.LIST:\n            return descriptor.parse(context, parser.parseComponentValues());\n        case PropertyDescriptorParsingType.TOKEN_VALUE:\n            return parser.parseComponentValue();\n        case PropertyDescriptorParsingType.TYPE_VALUE:\n            switch (descriptor.format) {\n                case 'angle':\n                    return angle.parse(context, parser.parseComponentValue());\n                case 'color':\n                    return colorType.parse(context, parser.parseComponentValue());\n                case 'image':\n                    return image.parse(context, parser.parseComponentValue());\n                case 'length':\n                    const length = parser.parseComponentValue();\n                    return isLength(length) ? length : ZERO_LENGTH;\n                case 'length-percentage':\n                    const value = parser.parseComponentValue();\n                    return isLengthPercentage(value) ? value : ZERO_LENGTH;\n                case 'time':\n                    return time.parse(context, parser.parseComponentValue());\n            }\n            break;\n    }\n};\n","const elementDebuggerAttribute = 'data-html2canvas-debug';\nexport const enum DebuggerType {\n    NONE,\n    ALL,\n    CLONE,\n    PARSE,\n    RENDER\n}\n\nconst getElementDebugType = (element: Element): DebuggerType => {\n    const attribute = element.getAttribute(elementDebuggerAttribute);\n    switch (attribute) {\n        case 'all':\n            return DebuggerType.ALL;\n        case 'clone':\n            return DebuggerType.CLONE;\n        case 'parse':\n            return DebuggerType.PARSE;\n        case 'render':\n            return DebuggerType.RENDER;\n        default:\n            return DebuggerType.NONE;\n    }\n};\n\nexport const isDebugging = (element: Element, type: Omit<DebuggerType, DebuggerType.NONE>): boolean => {\n    const elementType = getElementDebugType(element);\n    return elementType === DebuggerType.ALL || type === elementType;\n};\n","import {CSSParsedDeclaration} from '../css/index';\nimport {TextContainer} from './text-container';\nimport {Bounds, parseBounds} from '../css/layout/bounds';\nimport {isHTMLElementNode} from './node-parser';\nimport {Context} from '../core/context';\nimport {DebuggerType, isDebugging} from '../core/debugger';\n\nexport const enum FLAGS {\n    CREATES_STACKING_CONTEXT = 1 << 1,\n    CREATES_REAL_STACKING_CONTEXT = 1 << 2,\n    IS_LIST_OWNER = 1 << 3,\n    DEBUG_RENDER = 1 << 4\n}\n\nexport class ElementContainer {\n    readonly styles: CSSParsedDeclaration;\n    readonly textNodes: TextContainer[] = [];\n    readonly elements: ElementContainer[] = [];\n    bounds: Bounds;\n    flags = 0;\n\n    constructor(protected readonly context: Context, element: Element) {\n        if (isDebugging(element, DebuggerType.PARSE)) {\n            debugger;\n        }\n\n        this.styles = new CSSParsedDeclaration(context, window.getComputedStyle(element, null));\n\n        if (isHTMLElementNode(element)) {\n            if (this.styles.animationDuration.some((duration) => duration > 0)) {\n                element.style.animationDuration = '0s';\n            }\n\n            if (this.styles.transform !== null) {\n                // getBoundingClientRect takes transforms into account\n                element.style.transform = 'none';\n            }\n        }\n\n        this.bounds = parseBounds(this.context, element);\n\n        if (isDebugging(element, DebuggerType.RENDER)) {\n            this.flags |= FLAGS.DEBUG_RENDER;\n        }\n    }\n}\n","export const base64 =\n    'AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA=';\nexport const byteLength = 19616;\n","const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const decode = (base64: string): ArrayBuffer | number[] => {\n    let bufferLength = base64.length * 0.75,\n        len = base64.length,\n        i,\n        p = 0,\n        encoded1,\n        encoded2,\n        encoded3,\n        encoded4;\n\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    const buffer =\n        typeof ArrayBuffer !== 'undefined' &&\n        typeof Uint8Array !== 'undefined' &&\n        typeof Uint8Array.prototype.slice !== 'undefined'\n            ? new ArrayBuffer(bufferLength)\n            : new Array(bufferLength);\n    const bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n\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\n    return buffer;\n};\n\nexport const polyUint16Array = (buffer: number[]): number[] => {\n    const length = buffer.length;\n    const bytes = [];\n    for (let i = 0; i < length; i += 2) {\n        bytes.push((buffer[i + 1] << 8) | buffer[i]);\n    }\n    return bytes;\n};\n\nexport const polyUint32Array = (buffer: number[]): number[] => {\n    const length = buffer.length;\n    const bytes = [];\n    for (let 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","import {decode, polyUint16Array, polyUint32Array} from './Util';\n\nexport type int = number;\n\n/** Shift size for getting the index-2 table offset. */\nexport const UTRIE2_SHIFT_2 = 5;\n\n/** Shift size for getting the index-1 table offset. */\nexport const UTRIE2_SHIFT_1 = 6 + 5;\n\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 */\nexport const UTRIE2_INDEX_SHIFT = 2;\n\n/**\n * Difference between the two shift sizes,\n * for getting an index-1 offset from an index-2 offset. 6=11-5\n */\nexport const UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2;\n\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 */\nexport const UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2;\n\n/** Number of entries in a data block. 32=0x20 */\nexport const UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2;\n/** Mask for getting the lower bits for the in-data-block offset. */\nexport const UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1;\n\nexport const UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2;\n/** Count the lengths of both BMP pieces. 2080=0x820 */\nexport const 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 */\nexport const UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH;\nexport const 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 */\nexport const UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH;\n\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 */\nexport const UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1;\n\n/** Number of entries in an index-2 block. 64=0x40 */\nexport const UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2;\n/** Mask for getting the lower bits for the in-index-2-block offset. */\nexport const UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1;\n\nconst slice16 = (view: number[] | Uint16Array, start: number, end?: number) => {\n    if (view.slice) {\n        return view.slice(start, end);\n    }\n\n    return new Uint16Array(Array.prototype.slice.call(view, start, end));\n};\n\nconst slice32 = (view: number[] | Uint32Array, start: number, end?: number) => {\n    if (view.slice) {\n        return view.slice(start, end);\n    }\n\n    return new Uint32Array(Array.prototype.slice.call(view, start, end));\n};\n\nexport const createTrieFromBase64 = (base64: string, _byteLength: number): Trie => {\n    const buffer = decode(base64);\n    const view32 = Array.isArray(buffer) ? polyUint32Array(buffer) : new Uint32Array(buffer);\n    const view16 = Array.isArray(buffer) ? polyUint16Array(buffer) : new Uint16Array(buffer);\n    const headerLength = 24;\n\n    const index = slice16(view16, headerLength / 2, view32[4] / 2);\n    const data =\n        view32[5] === 2\n            ? slice16(view16, (headerLength + view32[4]) / 2)\n            : slice32(view32, Math.ceil((headerLength + view32[4]) / 4));\n\n    return new Trie(view32[0], view32[1], view32[2], view32[3], index, data);\n};\n\nexport class Trie {\n    initialValue: int;\n    errorValue: int;\n    highStart: int;\n    highValueIndex: int;\n    index: Uint16Array | number[];\n    data: Uint32Array | Uint16Array | number[];\n\n    constructor(\n        initialValue: int,\n        errorValue: int,\n        highStart: int,\n        highValueIndex: int,\n        index: Uint16Array | number[],\n        data: Uint32Array | Uint16Array | number[]\n    ) {\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    /**\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    get(codePoint: number): number {\n        let 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\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\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\n        // Fall through.  The code point is outside of the legal range of 0..0x10ffff.\n        return this.errorValue;\n    }\n}\n","const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const encode = (arraybuffer: ArrayBuffer): string => {\n    let bytes = new Uint8Array(arraybuffer),\n        i,\n        len = bytes.length,\n        base64 = '';\n\n    for (i = 0; i < len; i += 3) {\n        base64 += chars[bytes[i] >> 2];\n        base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n        base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n        base64 += chars[bytes[i + 2] & 63];\n    }\n\n    if (len % 3 === 2) {\n        base64 = base64.substring(0, base64.length - 1) + '=';\n    } else if (len % 3 === 1) {\n        base64 = base64.substring(0, base64.length - 2) + '==';\n    }\n\n    return base64;\n};\n\nexport const decode = (base64: string): ArrayBuffer => {\n    let bufferLength = base64.length * 0.75,\n        len = base64.length,\n        i,\n        p = 0,\n        encoded1,\n        encoded2,\n        encoded3,\n        encoded4;\n\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    const arraybuffer = new ArrayBuffer(bufferLength),\n        bytes = new Uint8Array(arraybuffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n\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\n    return arraybuffer;\n};\n","import {base64, byteLength} from './grapheme-break-trie';\nimport {createTrieFromBase64} from 'utrie';\n\nconst Other = 0;\nconst Prepend = 1;\nconst CR = 2;\nconst LF = 3;\nconst Control = 4;\nconst Extend = 5;\nconst Regional_Indicator = 6;\nconst SpacingMark = 7;\nconst L = 8;\nconst V = 9;\nconst T = 10;\nconst LV = 11;\nconst LVT = 12;\nconst ZWJ = 13;\nconst Extended_Pictographic = 14;\nconst RI = 15;\n\nexport const classes: {[key: string]: number} = {\n    Other,\n    Prepend,\n    CR,\n    LF,\n    Control,\n    Extend,\n    Regional_Indicator,\n    SpacingMark,\n    L,\n    V,\n    T,\n    LV,\n    LVT,\n    ZWJ,\n    Extended_Pictographic,\n    RI,\n};\n\nexport const toCodePoints = (str: string): number[] => {\n    const codePoints = [];\n    let i = 0;\n    const length = str.length;\n    while (i < length) {\n        const value = str.charCodeAt(i++);\n        if (value >= 0xd800 && value <= 0xdbff && i < length) {\n            const extra = str.charCodeAt(i++);\n            if ((extra & 0xfc00) === 0xdc00) {\n                codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\n            } else {\n                codePoints.push(value);\n                i--;\n            }\n        } else {\n            codePoints.push(value);\n        }\n    }\n    return codePoints;\n};\n\nexport const fromCodePoint = (...codePoints: number[]): string => {\n    if (String.fromCodePoint) {\n        return String.fromCodePoint(...codePoints);\n    }\n\n    const length = codePoints.length;\n    if (!length) {\n        return '';\n    }\n\n    const codeUnits = [];\n\n    let index = -1;\n    let result = '';\n    while (++index < length) {\n        let codePoint = codePoints[index];\n        if (codePoint <= 0xffff) {\n            codeUnits.push(codePoint);\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(...codeUnits);\n            codeUnits.length = 0;\n        }\n    }\n    return result;\n};\n\nexport const UnicodeTrie = createTrieFromBase64(base64, byteLength);\n\nexport const BREAK_NOT_ALLOWED = '×';\nexport const BREAK_ALLOWED = '÷';\n\nexport type BREAK_OPPORTUNITIES = typeof BREAK_NOT_ALLOWED | typeof BREAK_ALLOWED;\n\nexport const codePointToClass = (codePoint: number): number => UnicodeTrie.get(codePoint);\n\nconst _graphemeBreakAtIndex = (_codePoints: number[], classTypes: number[], index: number): BREAK_OPPORTUNITIES => {\n    let prevIndex = index - 2;\n    let prev = classTypes[prevIndex];\n    const current = classTypes[index - 1];\n    const 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\n    // GB4 Otherwise, break before and after controls.\n    if (current === CR || current === LF || current === Control) {\n        return BREAK_ALLOWED;\n    }\n\n    // GB5\n    if (next === CR || next === LF || next === Control) {\n        return BREAK_ALLOWED;\n    }\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\n    // GB7\n    if ((current === LV || current === V) && (next === V || next === T)) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // GB8\n    if ((current === LVT || current === T) && next === T) {\n        return BREAK_NOT_ALLOWED;\n    }\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\n    // GB9a\n    if (current === Prepend) {\n        return BREAK_NOT_ALLOWED;\n    }\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\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        let 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\n    return BREAK_ALLOWED;\n};\n\nexport const graphemeBreakAtIndex = (codePoints: number[], index: number): BREAK_OPPORTUNITIES => {\n    // GB1 Break at the start and end of text, unless the text is empty.\n    if (index === 0) {\n        return BREAK_ALLOWED;\n    }\n\n    // GB2\n    if (index >= codePoints.length) {\n        return BREAK_ALLOWED;\n    }\n\n    const classTypes = codePoints.map(codePointToClass);\n    return _graphemeBreakAtIndex(codePoints, classTypes, index);\n};\n\nexport const GraphemeBreaker = (str: string) => {\n    const codePoints = toCodePoints(str);\n    const length = codePoints.length;\n    let index = 0;\n    let lastEnd = 0;\n    const classTypes = codePoints.map(codePointToClass);\n\n    return {\n        next: () => {\n            if (index >= length) {\n                return {done: true, value: null};\n            }\n\n            let graphemeBreak = BREAK_NOT_ALLOWED;\n            while (\n                index < length &&\n                (graphemeBreak = _graphemeBreakAtIndex(codePoints, classTypes, ++index)) === BREAK_NOT_ALLOWED\n            ) {}\n\n            if (graphemeBreak !== BREAK_NOT_ALLOWED || index === length) {\n                const value = fromCodePoint.apply(null, codePoints.slice(lastEnd, index));\n                lastEnd = index;\n                return {value, done: false};\n            }\n\n            return {done: true, value: null};\n            while (index < length) {}\n\n            return {done: true, value: null};\n        },\n    };\n};\n\nexport const splitGraphemes = (str: string): string[] => {\n    const breaker = GraphemeBreaker(str);\n\n    const graphemes = [];\n    let bk;\n\n    while (!(bk = breaker.next()).done) {\n        if (bk.value) {\n            graphemes.push(bk.value.slice());\n        }\n    }\n\n    return graphemes;\n};\n","import {fromCodePoint, toCodePoints} from 'css-line-break';\n\nconst testRangeBounds = (document: Document) => {\n    const TEST_HEIGHT = 123;\n\n    if (document.createRange) {\n        const range = document.createRange();\n        if (range.getBoundingClientRect) {\n            const testElement = document.createElement('boundtest');\n            testElement.style.height = `${TEST_HEIGHT}px`;\n            testElement.style.display = 'block';\n            document.body.appendChild(testElement);\n\n            range.selectNode(testElement);\n            const rangeBounds = range.getBoundingClientRect();\n            const rangeHeight = Math.round(rangeBounds.height);\n            document.body.removeChild(testElement);\n            if (rangeHeight === TEST_HEIGHT) {\n                return true;\n            }\n        }\n    }\n\n    return false;\n};\n\nconst testIOSLineBreak = (document: Document) => {\n    const 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    const range = document.createRange();\n\n    testElement.innerHTML = typeof ''.repeat === 'function' ? '&#128104;'.repeat(10) : '';\n\n    const node = testElement.firstChild as Text;\n\n    const textList = toCodePoints(node.data).map((i) => fromCodePoint(i));\n    let offset = 0;\n    let prev: DOMRect = {} as DOMRect;\n\n    // ios 13 does not handle range getBoundingClientRect line changes correctly #2177\n    const supports = textList.every((text, i) => {\n        range.setStart(node, offset);\n        range.setEnd(node, offset + text.length);\n        const rect = range.getBoundingClientRect();\n\n        offset += text.length;\n        const boundAhead = rect.x > prev.x || rect.y > prev.y;\n\n        prev = rect;\n        if (i === 0) {\n            return true;\n        }\n\n        return boundAhead;\n    });\n\n    document.body.removeChild(testElement);\n    return supports;\n};\n\nconst testCORS = (): boolean => typeof new Image().crossOrigin !== 'undefined';\n\nconst testResponseType = (): boolean => typeof new XMLHttpRequest().responseType === 'string';\n\nconst testSVG = (document: Document): boolean => {\n    const img = new Image();\n    const canvas = document.createElement('canvas');\n    const ctx = canvas.getContext('2d');\n    if (!ctx) {\n        return false;\n    }\n\n    img.src = `data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>`;\n\n    try {\n        ctx.drawImage(img, 0, 0);\n        canvas.toDataURL();\n    } catch (e) {\n        return false;\n    }\n    return true;\n};\n\nconst isGreenPixel = (data: Uint8ClampedArray): boolean =>\n    data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255;\n\nconst testForeignObject = (document: Document): Promise<boolean> => {\n    const canvas = document.createElement('canvas');\n    const size = 100;\n    canvas.width = size;\n    canvas.height = size;\n    const 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\n    const img = new Image();\n    const greenImageSrc = canvas.toDataURL();\n    img.src = greenImageSrc;\n    const svg = createForeignObjectSVG(size, size, 0, 0, img);\n    ctx.fillStyle = 'red';\n    ctx.fillRect(0, 0, size, size);\n\n    return loadSerializedSVG(svg)\n        .then((img: HTMLImageElement) => {\n            ctx.drawImage(img, 0, 0);\n            const data = ctx.getImageData(0, 0, size, size).data;\n            ctx.fillStyle = 'red';\n            ctx.fillRect(0, 0, size, size);\n\n            const 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(createForeignObjectSVG(size, size, 0, 0, node))\n                : Promise.reject(false);\n        })\n        .then((img: HTMLImageElement) => {\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(() => false);\n};\n\nexport const createForeignObjectSVG = (\n    width: number,\n    height: number,\n    x: number,\n    y: number,\n    node: Node\n): SVGForeignObjectElement => {\n    const xmlns = 'http://www.w3.org/2000/svg';\n    const svg = document.createElementNS(xmlns, 'svg');\n    const foreignObject = document.createElementNS(xmlns, 'foreignObject');\n    svg.setAttributeNS(null, 'width', width.toString());\n    svg.setAttributeNS(null, 'height', height.toString());\n\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\n    foreignObject.appendChild(node);\n\n    return svg;\n};\n\nexport const loadSerializedSVG = (svg: Node): Promise<HTMLImageElement> => {\n    return new Promise((resolve, reject) => {\n        const img = new Image();\n        img.onload = () => resolve(img);\n        img.onerror = reject;\n\n        img.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(new XMLSerializer().serializeToString(svg))}`;\n    });\n};\n\nexport const FEATURES = {\n    get SUPPORT_RANGE_BOUNDS(): boolean {\n        'use strict';\n        const value = testRangeBounds(document);\n        Object.defineProperty(FEATURES, 'SUPPORT_RANGE_BOUNDS', {value});\n        return value;\n    },\n    get SUPPORT_WORD_BREAKING(): boolean {\n        'use strict';\n        const value = FEATURES.SUPPORT_RANGE_BOUNDS && testIOSLineBreak(document);\n        Object.defineProperty(FEATURES, 'SUPPORT_WORD_BREAKING', {value});\n        return value;\n    },\n    get SUPPORT_SVG_DRAWING(): boolean {\n        'use strict';\n        const value = testSVG(document);\n        Object.defineProperty(FEATURES, 'SUPPORT_SVG_DRAWING', {value});\n        return value;\n    },\n    get SUPPORT_FOREIGNOBJECT_DRAWING(): Promise<boolean> {\n        'use strict';\n        const value =\n            typeof Array.from === 'function' && typeof window.fetch === 'function'\n                ? testForeignObject(document)\n                : Promise.resolve(false);\n        Object.defineProperty(FEATURES, 'SUPPORT_FOREIGNOBJECT_DRAWING', {value});\n        return value;\n    },\n    get SUPPORT_CORS_IMAGES(): boolean {\n        'use strict';\n        const value = testCORS();\n        Object.defineProperty(FEATURES, 'SUPPORT_CORS_IMAGES', {value});\n        return value;\n    },\n    get SUPPORT_RESPONSE_TYPE(): boolean {\n        'use strict';\n        const value = testResponseType();\n        Object.defineProperty(FEATURES, 'SUPPORT_RESPONSE_TYPE', {value});\n        return value;\n    },\n    get SUPPORT_CORS_XHR(): boolean {\n        'use strict';\n        const value = 'withCredentials' in new XMLHttpRequest();\n        Object.defineProperty(FEATURES, 'SUPPORT_CORS_XHR', {value});\n        return value;\n    },\n    get SUPPORT_NATIVE_TEXT_SEGMENTATION(): boolean {\n        'use strict';\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const value = !!(typeof Intl !== 'undefined' && (Intl as any).Segmenter);\n        Object.defineProperty(FEATURES, 'SUPPORT_NATIVE_TEXT_SEGMENTATION', {value});\n        return value;\n    }\n};\n","import {OVERFLOW_WRAP} from '../property-descriptors/overflow-wrap';\nimport {CSSParsedDeclaration} from '../index';\nimport {fromCodePoint, LineBreaker, toCodePoints} from 'css-line-break';\nimport {splitGraphemes} from 'text-segmentation';\nimport {Bounds, parseBounds} from './bounds';\nimport {FEATURES} from '../../core/features';\nimport {Context} from '../../core/context';\n\nexport class TextBounds {\n    readonly text: string;\n    readonly bounds: Bounds;\n\n    constructor(text: string, bounds: Bounds) {\n        this.text = text;\n        this.bounds = bounds;\n    }\n}\n\nexport const parseTextBounds = (\n    context: Context,\n    value: string,\n    styles: CSSParsedDeclaration,\n    node: Text\n): TextBounds[] => {\n    const textList = breakText(value, styles);\n    const textBounds: TextBounds[] = [];\n    let offset = 0;\n    textList.forEach((text) => {\n        if (styles.textDecorationLine.length || text.trim().length > 0) {\n            if (FEATURES.SUPPORT_RANGE_BOUNDS) {\n                const clientRects = createRange(node, offset, text.length).getClientRects();\n                if (clientRects.length > 1) {\n                    const subSegments = segmentGraphemes(text);\n                    let subOffset = 0;\n                    subSegments.forEach((subSegment) => {\n                        textBounds.push(\n                            new TextBounds(\n                                subSegment,\n                                Bounds.fromDOMRectList(\n                                    context,\n                                    createRange(node, subOffset + offset, subSegment.length).getClientRects()\n                                )\n                            )\n                        );\n                        subOffset += subSegment.length;\n                    });\n                } else {\n                    textBounds.push(new TextBounds(text, Bounds.fromDOMRectList(context, clientRects)));\n                }\n            } else {\n                const replacementNode = node.splitText(text.length);\n                textBounds.push(new TextBounds(text, getWrapperBounds(context, node)));\n                node = replacementNode;\n            }\n        } else if (!FEATURES.SUPPORT_RANGE_BOUNDS) {\n            node = node.splitText(text.length);\n        }\n        offset += text.length;\n    });\n\n    return textBounds;\n};\n\nconst getWrapperBounds = (context: Context, node: Text): Bounds => {\n    const ownerDocument = node.ownerDocument;\n    if (ownerDocument) {\n        const wrapper = ownerDocument.createElement('html2canvaswrapper');\n        wrapper.appendChild(node.cloneNode(true));\n        const parentNode = node.parentNode;\n        if (parentNode) {\n            parentNode.replaceChild(wrapper, node);\n            const bounds = parseBounds(context, wrapper);\n            if (wrapper.firstChild) {\n                parentNode.replaceChild(wrapper.firstChild, wrapper);\n            }\n            return bounds;\n        }\n    }\n\n    return Bounds.EMPTY;\n};\n\nconst createRange = (node: Text, offset: number, length: number): Range => {\n    const ownerDocument = node.ownerDocument;\n    if (!ownerDocument) {\n        throw new Error('Node has no owner document');\n    }\n    const range = ownerDocument.createRange();\n    range.setStart(node, offset);\n    range.setEnd(node, offset + length);\n    return range;\n};\n\nexport const segmentGraphemes = (value: string): string[] => {\n    if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const segmenter = new (Intl as any).Segmenter(void 0, {granularity: 'grapheme'});\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return Array.from(segmenter.segment(value)).map((segment: any) => segment.segment);\n    }\n\n    return splitGraphemes(value);\n};\n\nconst segmentWords = (value: string, styles: CSSParsedDeclaration): string[] => {\n    if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const segmenter = new (Intl as any).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((segment: any) => segment.segment);\n    }\n\n    return breakWords(value, styles);\n};\n\nconst breakText = (value: string, styles: CSSParsedDeclaration): string[] => {\n    return styles.letterSpacing !== 0 ? segmentGraphemes(value) : segmentWords(value, styles);\n};\n\n// https://drafts.csswg.org/css-text/#word-separator\nconst wordSeparators = [0x0020, 0x00a0, 0x1361, 0x10100, 0x10101, 0x1039, 0x1091];\n\nconst breakWords = (str: string, styles: CSSParsedDeclaration): string[] => {\n    const breaker = LineBreaker(str, {\n        lineBreak: styles.lineBreak,\n        wordBreak: styles.overflowWrap === OVERFLOW_WRAP.BREAK_WORD ? 'break-word' : styles.wordBreak\n    });\n\n    const words = [];\n    let bk;\n\n    while (!(bk = breaker.next()).done) {\n        if (bk.value) {\n            const value = bk.value.slice();\n            const codePoints = toCodePoints(value);\n            let word = '';\n            codePoints.forEach((codePoint) => {\n                if (wordSeparators.indexOf(codePoint) === -1) {\n                    word += fromCodePoint(codePoint);\n                } else {\n                    if (word.length) {\n                        words.push(word);\n                    }\n                    words.push(fromCodePoint(codePoint));\n                    word = '';\n                }\n            });\n\n            if (word.length) {\n                words.push(word);\n            }\n        }\n    }\n\n    return words;\n};\n","import {CSSParsedDeclaration} from '../css/index';\nimport {TEXT_TRANSFORM} from '../css/property-descriptors/text-transform';\nimport {parseTextBounds, TextBounds} from '../css/layout/text';\nimport {Context} from '../core/context';\n\nexport class TextContainer {\n    text: string;\n    textBounds: TextBounds[];\n\n    constructor(context: Context, node: Text, styles: CSSParsedDeclaration) {\n        this.text = transform(node.data, styles.textTransform);\n        this.textBounds = parseTextBounds(context, this.text, styles, node);\n    }\n}\n\nconst transform = (text: string, transform: TEXT_TRANSFORM) => {\n    switch (transform) {\n        case TEXT_TRANSFORM.LOWERCASE:\n            return text.toLowerCase();\n        case TEXT_TRANSFORM.CAPITALIZE:\n            return text.replace(CAPITALIZE, capitalize);\n        case TEXT_TRANSFORM.UPPERCASE:\n            return text.toUpperCase();\n        default:\n            return text;\n    }\n};\n\nconst CAPITALIZE = /(^|\\s|:|-|\\(|\\))([a-z])/g;\n\nconst capitalize = (m: string, p1: string, p2: string) => {\n    if (m.length > 0) {\n        return p1 + p2.toUpperCase();\n    }\n\n    return m;\n};\n","import {ElementContainer} from '../element-container';\nimport {Context} from '../../core/context';\n\nexport class ImageElementContainer extends ElementContainer {\n    src: string;\n    intrinsicWidth: number;\n    intrinsicHeight: number;\n\n    constructor(context: Context, img: HTMLImageElement) {\n        super(context, img);\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    }\n}\n","import {ElementContainer} from '../element-container';\nimport {Context} from '../../core/context';\n\nexport class CanvasElementContainer extends ElementContainer {\n    canvas: HTMLCanvasElement;\n    intrinsicWidth: number;\n    intrinsicHeight: number;\n\n    constructor(context: Context, canvas: HTMLCanvasElement) {\n        super(context, canvas);\n        this.canvas = canvas;\n        this.intrinsicWidth = canvas.width;\n        this.intrinsicHeight = canvas.height;\n    }\n}\n","import {ElementContainer} from '../element-container';\nimport {parseBounds} from '../../css/layout/bounds';\nimport {Context} from '../../core/context';\n\nexport class SVGElementContainer extends ElementContainer {\n    svg: string;\n    intrinsicWidth: number;\n    intrinsicHeight: number;\n\n    constructor(context: Context, img: SVGSVGElement) {\n        super(context, img);\n        const s = new XMLSerializer();\n        const bounds = parseBounds(context, img);\n        img.setAttribute('width', `${bounds.width}px`);\n        img.setAttribute('height', `${bounds.height}px`);\n\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\n        this.context.cache.addImage(this.svg);\n    }\n}\n","import {ElementContainer} from '../element-container';\nimport {Context} from '../../core/context';\nexport class LIElementContainer extends ElementContainer {\n    readonly value: number;\n\n    constructor(context: Context, element: HTMLLIElement) {\n        super(context, element);\n        this.value = element.value;\n    }\n}\n","import {ElementContainer} from '../element-container';\nimport {Context} from '../../core/context';\nexport class OLElementContainer extends ElementContainer {\n    readonly start: number;\n    readonly reversed: boolean;\n\n    constructor(context: Context, element: HTMLOListElement) {\n        super(context, element);\n        this.start = element.start;\n        this.reversed = typeof element.reversed === 'boolean' && element.reversed === true;\n    }\n}\n","import {ElementContainer} from '../element-container';\nimport {BORDER_STYLE} from '../../css/property-descriptors/border-style';\nimport {BACKGROUND_CLIP} from '../../css/property-descriptors/background-clip';\nimport {BACKGROUND_ORIGIN} from '../../css/property-descriptors/background-origin';\nimport {TokenType} from '../../css/syntax/tokenizer';\nimport {LengthPercentageTuple} from '../../css/types/length-percentage';\nimport {Bounds} from '../../css/layout/bounds';\nimport {Context} from '../../core/context';\n\nconst CHECKBOX_BORDER_RADIUS: LengthPercentageTuple = [\n    {\n        type: TokenType.DIMENSION_TOKEN,\n        flags: 0,\n        unit: 'px',\n        number: 3\n    }\n];\n\nconst RADIO_BORDER_RADIUS: LengthPercentageTuple = [\n    {\n        type: TokenType.PERCENTAGE_TOKEN,\n        flags: 0,\n        number: 50\n    }\n];\n\nconst reformatInputBounds = (bounds: Bounds): 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    } 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\nconst getInputValue = (node: HTMLInputElement): string => {\n    const value = node.type === PASSWORD ? new Array(node.value.length + 1).join('\\u2022') : node.value;\n\n    return value.length === 0 ? node.placeholder || '' : value;\n};\n\nexport const CHECKBOX = 'checkbox';\nexport const RADIO = 'radio';\nexport const PASSWORD = 'password';\nexport const INPUT_COLOR = 0x2a2a2aff;\n\nexport class InputElementContainer extends ElementContainer {\n    readonly type: string;\n    readonly checked: boolean;\n    readonly value: string;\n\n    constructor(context: Context, input: HTMLInputElement) {\n        super(context, input);\n        this.type = input.type.toLowerCase();\n        this.checked = input.checked;\n        this.value = getInputValue(input);\n\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                    BORDER_STYLE.SOLID;\n            this.styles.backgroundClip = [BACKGROUND_CLIP.BORDER_BOX];\n            this.styles.backgroundOrigin = [BACKGROUND_ORIGIN.BORDER_BOX];\n            this.bounds = reformatInputBounds(this.bounds);\n        }\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    }\n}\n","import {ElementContainer} from '../element-container';\nimport {Context} from '../../core/context';\nexport class SelectElementContainer extends ElementContainer {\n    readonly value: string;\n    constructor(context: Context, element: HTMLSelectElement) {\n        super(context, element);\n        const option = element.options[element.selectedIndex || 0];\n        this.value = option ? option.text || '' : '';\n    }\n}\n","import {ElementContainer} from '../element-container';\nimport {Context} from '../../core/context';\nexport class TextareaElementContainer extends ElementContainer {\n    readonly value: string;\n    constructor(context: Context, element: HTMLTextAreaElement) {\n        super(context, element);\n        this.value = element.value;\n    }\n}\n","import {ElementContainer} from '../element-container';\nimport {parseTree} from '../node-parser';\nimport {Color, parseColor, COLORS, isTransparent} from '../../css/types/color';\nimport {Context} from '../../core/context';\n\nexport class IFrameElementContainer extends ElementContainer {\n    src: string;\n    width: number;\n    height: number;\n    tree?: ElementContainer;\n    backgroundColor: Color;\n\n    constructor(context: Context, iframe: HTMLIFrameElement) {\n        super(context, iframe);\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 (\n                iframe.contentWindow &&\n                iframe.contentWindow.document &&\n                iframe.contentWindow.document.documentElement\n            ) {\n                this.tree = parseTree(context, iframe.contentWindow.document.documentElement);\n\n                // http://www.w3.org/TR/css3-background/#special-backgrounds\n                const documentBackgroundColor = iframe.contentWindow.document.documentElement\n                    ? parseColor(\n                          context,\n                          getComputedStyle(iframe.contentWindow.document.documentElement).backgroundColor as string\n                      )\n                    : COLORS.TRANSPARENT;\n                const bodyBackgroundColor = iframe.contentWindow.document.body\n                    ? parseColor(\n                          context,\n                          getComputedStyle(iframe.contentWindow.document.body).backgroundColor as string\n                      )\n                    : COLORS.TRANSPARENT;\n\n                this.backgroundColor = isTransparent(documentBackgroundColor)\n                    ? isTransparent(bodyBackgroundColor)\n                        ? this.styles.backgroundColor\n                        : bodyBackgroundColor\n                    : documentBackgroundColor;\n            }\n        } catch (e) {}\n    }\n}\n","import {CSSParsedDeclaration} from '../css';\nimport {ElementContainer, FLAGS} from './element-container';\nimport {TextContainer} from './text-container';\nimport {ImageElementContainer} from './replaced-elements/image-element-container';\nimport {CanvasElementContainer} from './replaced-elements/canvas-element-container';\nimport {SVGElementContainer} from './replaced-elements/svg-element-container';\nimport {LIElementContainer} from './elements/li-element-container';\nimport {OLElementContainer} from './elements/ol-element-container';\nimport {InputElementContainer} from './replaced-elements/input-element-container';\nimport {SelectElementContainer} from './elements/select-element-container';\nimport {TextareaElementContainer} from './elements/textarea-element-container';\nimport {IFrameElementContainer} from './replaced-elements/iframe-element-container';\nimport {Context} from '../core/context';\n\nconst LIST_OWNERS = ['OL', 'UL', 'MENU'];\n\nconst parseNodeTree = (context: Context, node: Node, parent: ElementContainer, root: ElementContainer) => {\n    for (let childNode = node.firstChild, nextNode; childNode; childNode = nextNode) {\n        nextNode = childNode.nextSibling;\n\n        if (isTextNode(childNode) && childNode.data.trim().length > 0) {\n            parent.textNodes.push(new TextContainer(context, childNode, parent.styles));\n        } else if (isElementNode(childNode)) {\n            if (isSlotElement(childNode) && childNode.assignedNodes) {\n                childNode.assignedNodes().forEach((childNode) => parseNodeTree(context, childNode, parent, root));\n            } else {\n                const container = createContainer(context, childNode);\n                if (container.styles.isVisible()) {\n                    if (createsRealStackingContext(childNode, container, root)) {\n                        container.flags |= FLAGS.CREATES_REAL_STACKING_CONTEXT;\n                    } else if (createsStackingContext(container.styles)) {\n                        container.flags |= FLAGS.CREATES_STACKING_CONTEXT;\n                    }\n\n                    if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) {\n                        container.flags |= FLAGS.IS_LIST_OWNER;\n                    }\n\n                    parent.elements.push(container);\n                    childNode.slot;\n                    if (childNode.shadowRoot) {\n                        parseNodeTree(context, childNode.shadowRoot, container, root);\n                    } else if (\n                        !isTextareaElement(childNode) &&\n                        !isSVGElement(childNode) &&\n                        !isSelectElement(childNode)\n                    ) {\n                        parseNodeTree(context, childNode, container, root);\n                    }\n                }\n            }\n        }\n    }\n};\n\nconst createContainer = (context: Context, element: Element): ElementContainer => {\n    if (isImageElement(element)) {\n        return new ImageElementContainer(context, element);\n    }\n\n    if (isCanvasElement(element)) {\n        return new CanvasElementContainer(context, element);\n    }\n\n    if (isSVGElement(element)) {\n        return new SVGElementContainer(context, element);\n    }\n\n    if (isLIElement(element)) {\n        return new LIElementContainer(context, element);\n    }\n\n    if (isOLElement(element)) {\n        return new OLElementContainer(context, element);\n    }\n\n    if (isInputElement(element)) {\n        return new InputElementContainer(context, element);\n    }\n\n    if (isSelectElement(element)) {\n        return new SelectElementContainer(context, element);\n    }\n\n    if (isTextareaElement(element)) {\n        return new TextareaElementContainer(context, element);\n    }\n\n    if (isIFrameElement(element)) {\n        return new IFrameElementContainer(context, element);\n    }\n\n    return new ElementContainer(context, element);\n};\n\nexport const parseTree = (context: Context, element: HTMLElement): ElementContainer => {\n    const container = createContainer(context, element);\n    container.flags |= FLAGS.CREATES_REAL_STACKING_CONTEXT;\n    parseNodeTree(context, element, container, container);\n    return container;\n};\n\nconst createsRealStackingContext = (node: Element, container: ElementContainer, root: ElementContainer): boolean => {\n    return (\n        container.styles.isPositionedWithZIndex() ||\n        container.styles.opacity < 1 ||\n        container.styles.isTransformed() ||\n        (isBodyElement(node) && root.styles.isTransparent())\n    );\n};\n\nconst createsStackingContext = (styles: CSSParsedDeclaration): boolean => styles.isPositioned() || styles.isFloating();\n\nexport const isTextNode = (node: Node): node is Text => node.nodeType === Node.TEXT_NODE;\nexport const isElementNode = (node: Node): node is Element => node.nodeType === Node.ELEMENT_NODE;\nexport const isHTMLElementNode = (node: Node): node is HTMLElement =>\n    isElementNode(node) && typeof (node as HTMLElement).style !== 'undefined' && !isSVGElementNode(node);\nexport const isSVGElementNode = (element: Element): element is SVGElement =>\n    typeof (element as SVGElement).className === 'object';\nexport const isLIElement = (node: Element): node is HTMLLIElement => node.tagName === 'LI';\nexport const isOLElement = (node: Element): node is HTMLOListElement => node.tagName === 'OL';\nexport const isInputElement = (node: Element): node is HTMLInputElement => node.tagName === 'INPUT';\nexport const isHTMLElement = (node: Element): node is HTMLHtmlElement => node.tagName === 'HTML';\nexport const isSVGElement = (node: Element): node is SVGSVGElement => node.tagName === 'svg';\nexport const isBodyElement = (node: Element): node is HTMLBodyElement => node.tagName === 'BODY';\nexport const isCanvasElement = (node: Element): node is HTMLCanvasElement => node.tagName === 'CANVAS';\nexport const isVideoElement = (node: Element): node is HTMLVideoElement => node.tagName === 'VIDEO';\nexport const isImageElement = (node: Element): node is HTMLImageElement => node.tagName === 'IMG';\nexport const isIFrameElement = (node: Element): node is HTMLIFrameElement => node.tagName === 'IFRAME';\nexport const isStyleElement = (node: Element): node is HTMLStyleElement => node.tagName === 'STYLE';\nexport const isScriptElement = (node: Element): node is HTMLScriptElement => node.tagName === 'SCRIPT';\nexport const isTextareaElement = (node: Element): node is HTMLTextAreaElement => node.tagName === 'TEXTAREA';\nexport const isSelectElement = (node: Element): node is HTMLSelectElement => node.tagName === 'SELECT';\nexport const isSlotElement = (node: Element): node is HTMLSlotElement => node.tagName === 'SLOT';\n// https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\nexport const isCustomElement = (node: Element): node is HTMLElement => node.tagName.indexOf('-') > 0;\n","import {LIST_STYLE_TYPE} from '../../property-descriptors/list-style-type';\nimport {fromCodePoint} from 'css-line-break';\nimport {contains} from '../../../core/bitwise';\nimport {CSSParsedCounterDeclaration} from '../../index';\n\nexport class CounterState {\n    private readonly counters: {[key: string]: number[]} = {};\n\n    getCounterValue(name: string): number {\n        const counter = this.counters[name];\n\n        if (counter && counter.length) {\n            return counter[counter.length - 1];\n        }\n        return 1;\n    }\n\n    getCounterValues(name: string): readonly number[] {\n        const counter = this.counters[name];\n        return counter ? counter : [];\n    }\n\n    pop(counters: string[]): void {\n        counters.forEach((counter) => this.counters[counter].pop());\n    }\n\n    parse(style: CSSParsedCounterDeclaration): string[] {\n        const counterIncrement = style.counterIncrement;\n        const counterReset = style.counterReset;\n        let canReset = true;\n\n        if (counterIncrement !== null) {\n            counterIncrement.forEach((entry) => {\n                const 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\n        const counterNames: string[] = [];\n        if (canReset) {\n            counterReset.forEach((entry) => {\n                let 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\n        return counterNames;\n    }\n}\n\ninterface CounterSymbols {\n    integers: number[];\n    values: string[];\n}\n\nconst ROMAN_UPPER: CounterSymbols = {\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\nconst ARMENIAN: CounterSymbols = {\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\nconst HEBREW: CounterSymbols = {\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\nconst GEORGIAN: CounterSymbols = {\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\nconst createAdditiveCounter = (\n    value: number,\n    min: number,\n    max: number,\n    symbols: CounterSymbols,\n    fallback: LIST_STYLE_TYPE,\n    suffix: string\n) => {\n    if (value < min || value > max) {\n        return createCounterText(value, fallback, suffix.length > 0);\n    }\n\n    return (\n        symbols.integers.reduce((string, integer, index) => {\n            while (value >= integer) {\n                value -= integer;\n                string += symbols.values[index];\n            }\n            return string;\n        }, '') + suffix\n    );\n};\n\nconst createCounterStyleWithSymbolResolver = (\n    value: number,\n    codePointRangeLength: number,\n    isNumeric: boolean,\n    resolver: (codePoint: number) => string\n): string => {\n    let string = '';\n\n    do {\n        if (!isNumeric) {\n            value--;\n        }\n        string = resolver(value) + string;\n        value /= codePointRangeLength;\n    } while (value * codePointRangeLength >= codePointRangeLength);\n\n    return string;\n};\n\nconst createCounterStyleFromRange = (\n    value: number,\n    codePointRangeStart: number,\n    codePointRangeEnd: number,\n    isNumeric: boolean,\n    suffix: string\n): string => {\n    const codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1;\n\n    return (\n        (value < 0 ? '-' : '') +\n        (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, isNumeric, (codePoint) =>\n            fromCodePoint(Math.floor(codePoint % codePointRangeLength) + codePointRangeStart)\n        ) +\n            suffix)\n    );\n};\n\nconst createCounterStyleFromSymbols = (value: number, symbols: string, suffix = '. '): string => {\n    const codePointRangeLength = symbols.length;\n    return (\n        createCounterStyleWithSymbolResolver(\n            Math.abs(value),\n            codePointRangeLength,\n            false,\n            (codePoint) => symbols[Math.floor(codePoint % codePointRangeLength)]\n        ) + suffix\n    );\n};\n\nconst CJK_ZEROS = 1 << 0;\nconst CJK_TEN_COEFFICIENTS = 1 << 1;\nconst CJK_TEN_HIGH_COEFFICIENTS = 1 << 2;\nconst CJK_HUNDRED_COEFFICIENTS = 1 << 3;\n\nconst createCJKCounter = (\n    value: number,\n    numbers: string,\n    multipliers: string,\n    negativeSign: string,\n    suffix: string,\n    flags: number\n): string => {\n    if (value < -9999 || value > 9999) {\n        return createCounterText(value, LIST_STYLE_TYPE.CJK_DECIMAL, suffix.length > 0);\n    }\n    let tmp = Math.abs(value);\n    let string = suffix;\n\n    if (tmp === 0) {\n        return numbers[0] + string;\n    }\n\n    for (let digit = 0; tmp > 0 && digit <= 4; digit++) {\n        const coefficient = tmp % 10;\n\n        if (coefficient === 0 && contains(flags, CJK_ZEROS) && string !== '') {\n            string = numbers[coefficient] + string;\n        } else if (\n            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        ) {\n            string = numbers[coefficient] + (digit > 0 ? multipliers[digit - 1] : '') + string;\n        } else if (coefficient === 1 && digit > 0) {\n            string = multipliers[digit - 1] + string;\n        }\n        tmp = Math.floor(tmp / 10);\n    }\n\n    return (value < 0 ? negativeSign : '') + string;\n};\n\nconst CHINESE_INFORMAL_MULTIPLIERS = '十百千萬';\nconst CHINESE_FORMAL_MULTIPLIERS = '拾佰仟萬';\nconst JAPANESE_NEGATIVE = 'マイナス';\nconst KOREAN_NEGATIVE = '마이너스';\n\nexport const createCounterText = (value: number, type: LIST_STYLE_TYPE, appendSuffix: boolean): string => {\n    const defaultSuffix = appendSuffix ? '. ' : '';\n    const cjkSuffix = appendSuffix ? '、' : '';\n    const koreanSuffix = appendSuffix ? ', ' : '';\n    const spaceSuffix = appendSuffix ? ' ' : '';\n    switch (type) {\n        case LIST_STYLE_TYPE.DISC:\n            return '•' + spaceSuffix;\n        case LIST_STYLE_TYPE.CIRCLE:\n            return '◦' + spaceSuffix;\n        case LIST_STYLE_TYPE.SQUARE:\n            return '◾' + spaceSuffix;\n        case LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO:\n            const string = createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\n            return string.length < 4 ? `0${string}` : string;\n        case LIST_STYLE_TYPE.CJK_DECIMAL:\n            return createCounterStyleFromSymbols(value, '〇一二三四五六七八九', cjkSuffix);\n        case LIST_STYLE_TYPE.LOWER_ROMAN:\n            return createAdditiveCounter(\n                value,\n                1,\n                3999,\n                ROMAN_UPPER,\n                LIST_STYLE_TYPE.DECIMAL,\n                defaultSuffix\n            ).toLowerCase();\n        case LIST_STYLE_TYPE.UPPER_ROMAN:\n            return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\n        case LIST_STYLE_TYPE.LOWER_GREEK:\n            return createCounterStyleFromRange(value, 945, 969, false, defaultSuffix);\n        case LIST_STYLE_TYPE.LOWER_ALPHA:\n            return createCounterStyleFromRange(value, 97, 122, false, defaultSuffix);\n        case LIST_STYLE_TYPE.UPPER_ALPHA:\n            return createCounterStyleFromRange(value, 65, 90, false, defaultSuffix);\n        case LIST_STYLE_TYPE.ARABIC_INDIC:\n            return createCounterStyleFromRange(value, 1632, 1641, true, defaultSuffix);\n        case LIST_STYLE_TYPE.ARMENIAN:\n        case LIST_STYLE_TYPE.UPPER_ARMENIAN:\n            return createAdditiveCounter(value, 1, 9999, ARMENIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\n        case LIST_STYLE_TYPE.LOWER_ARMENIAN:\n            return createAdditiveCounter(\n                value,\n                1,\n                9999,\n                ARMENIAN,\n                LIST_STYLE_TYPE.DECIMAL,\n                defaultSuffix\n            ).toLowerCase();\n        case LIST_STYLE_TYPE.BENGALI:\n            return createCounterStyleFromRange(value, 2534, 2543, true, defaultSuffix);\n        case LIST_STYLE_TYPE.CAMBODIAN:\n        case LIST_STYLE_TYPE.KHMER:\n            return createCounterStyleFromRange(value, 6112, 6121, true, defaultSuffix);\n        case LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH:\n            return createCounterStyleFromSymbols(value, '子丑寅卯辰巳午未申酉戌亥', cjkSuffix);\n        case LIST_STYLE_TYPE.CJK_HEAVENLY_STEM:\n            return createCounterStyleFromSymbols(value, '甲乙丙丁戊己庚辛壬癸', cjkSuffix);\n        case LIST_STYLE_TYPE.CJK_IDEOGRAPHIC:\n        case LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL:\n            return createCJKCounter(\n                value,\n                '零一二三四五六七八九',\n                CHINESE_INFORMAL_MULTIPLIERS,\n                '負',\n                cjkSuffix,\n                CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS\n            );\n        case LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL:\n            return createCJKCounter(\n                value,\n                '零壹貳參肆伍陸柒捌玖',\n                CHINESE_FORMAL_MULTIPLIERS,\n                '負',\n                cjkSuffix,\n                CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS\n            );\n        case LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL:\n            return createCJKCounter(\n                value,\n                '零一二三四五六七八九',\n                CHINESE_INFORMAL_MULTIPLIERS,\n                '负',\n                cjkSuffix,\n                CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS\n            );\n        case LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL:\n            return createCJKCounter(\n                value,\n                '零壹贰叁肆伍陆柒捌玖',\n                CHINESE_FORMAL_MULTIPLIERS,\n                '负',\n                cjkSuffix,\n                CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS\n            );\n        case LIST_STYLE_TYPE.JAPANESE_INFORMAL:\n            return createCJKCounter(value, '〇一二三四五六七八九', '十百千万', JAPANESE_NEGATIVE, cjkSuffix, 0);\n        case LIST_STYLE_TYPE.JAPANESE_FORMAL:\n            return createCJKCounter(\n                value,\n                '零壱弐参四伍六七八九',\n                '拾百千万',\n                JAPANESE_NEGATIVE,\n                cjkSuffix,\n                CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS\n            );\n        case LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL:\n            return createCJKCounter(\n                value,\n                '영일이삼사오육칠팔구',\n                '십백천만',\n                KOREAN_NEGATIVE,\n                koreanSuffix,\n                CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS\n            );\n        case LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL:\n            return createCJKCounter(value, '零一二三四五六七八九', '十百千萬', KOREAN_NEGATIVE, koreanSuffix, 0);\n        case LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL:\n            return createCJKCounter(\n                value,\n                '零壹貳參四五六七八九',\n                '拾百千',\n                KOREAN_NEGATIVE,\n                koreanSuffix,\n                CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS\n            );\n        case LIST_STYLE_TYPE.DEVANAGARI:\n            return createCounterStyleFromRange(value, 0x966, 0x96f, true, defaultSuffix);\n        case LIST_STYLE_TYPE.GEORGIAN:\n            return createAdditiveCounter(value, 1, 19999, GEORGIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\n        case LIST_STYLE_TYPE.GUJARATI:\n            return createCounterStyleFromRange(value, 0xae6, 0xaef, true, defaultSuffix);\n        case LIST_STYLE_TYPE.GURMUKHI:\n            return createCounterStyleFromRange(value, 0xa66, 0xa6f, true, defaultSuffix);\n        case LIST_STYLE_TYPE.HEBREW:\n            return createAdditiveCounter(value, 1, 10999, HEBREW, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\n        case LIST_STYLE_TYPE.HIRAGANA:\n            return createCounterStyleFromSymbols(\n                value,\n                'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん'\n            );\n        case LIST_STYLE_TYPE.HIRAGANA_IROHA:\n            return createCounterStyleFromSymbols(\n                value,\n                'いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす'\n            );\n        case LIST_STYLE_TYPE.KANNADA:\n            return createCounterStyleFromRange(value, 0xce6, 0xcef, true, defaultSuffix);\n        case LIST_STYLE_TYPE.KATAKANA:\n            return createCounterStyleFromSymbols(\n                value,\n                'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン',\n                cjkSuffix\n            );\n        case LIST_STYLE_TYPE.KATAKANA_IROHA:\n            return createCounterStyleFromSymbols(\n                value,\n                'イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス',\n                cjkSuffix\n            );\n        case LIST_STYLE_TYPE.LAO:\n            return createCounterStyleFromRange(value, 0xed0, 0xed9, true, defaultSuffix);\n        case LIST_STYLE_TYPE.MONGOLIAN:\n            return createCounterStyleFromRange(value, 0x1810, 0x1819, true, defaultSuffix);\n        case LIST_STYLE_TYPE.MYANMAR:\n            return createCounterStyleFromRange(value, 0x1040, 0x1049, true, defaultSuffix);\n        case LIST_STYLE_TYPE.ORIYA:\n            return createCounterStyleFromRange(value, 0xb66, 0xb6f, true, defaultSuffix);\n        case LIST_STYLE_TYPE.PERSIAN:\n            return createCounterStyleFromRange(value, 0x6f0, 0x6f9, true, defaultSuffix);\n        case LIST_STYLE_TYPE.TAMIL:\n            return createCounterStyleFromRange(value, 0xbe6, 0xbef, true, defaultSuffix);\n        case LIST_STYLE_TYPE.TELUGU:\n            return createCounterStyleFromRange(value, 0xc66, 0xc6f, true, defaultSuffix);\n        case LIST_STYLE_TYPE.THAI:\n            return createCounterStyleFromRange(value, 0xe50, 0xe59, true, defaultSuffix);\n        case LIST_STYLE_TYPE.TIBETAN:\n            return createCounterStyleFromRange(value, 0xf20, 0xf29, true, defaultSuffix);\n        case LIST_STYLE_TYPE.DECIMAL:\n        default:\n            return createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\n    }\n};\n","import {Bounds} from '../css/layout/bounds';\nimport {\n    isBodyElement,\n    isCanvasElement,\n    isCustomElement,\n    isElementNode,\n    isHTMLElementNode,\n    isIFrameElement,\n    isImageElement,\n    isScriptElement,\n    isSelectElement,\n    isSlotElement,\n    isStyleElement,\n    isSVGElementNode,\n    isTextareaElement,\n    isTextNode,\n    isVideoElement\n} from './node-parser';\nimport {isIdentToken, nonFunctionArgSeparator} from '../css/syntax/parser';\nimport {TokenType} from '../css/syntax/tokenizer';\nimport {CounterState, createCounterText} from '../css/types/functions/counter';\nimport {LIST_STYLE_TYPE, listStyleType} from '../css/property-descriptors/list-style-type';\nimport {CSSParsedCounterDeclaration, CSSParsedPseudoDeclaration} from '../css/index';\nimport {getQuote} from '../css/property-descriptors/quotes';\nimport {Context} from '../core/context';\nimport {DebuggerType, isDebugging} from '../core/debugger';\n\nexport interface CloneOptions {\n    ignoreElements?: (element: Element) => boolean;\n    onclone?: (document: Document, element: HTMLElement) => void;\n    allowTaint?: boolean;\n}\n\nexport interface WindowOptions {\n    scrollX: number;\n    scrollY: number;\n    windowWidth: number;\n    windowHeight: number;\n}\n\nexport type CloneConfigurations = CloneOptions & {\n    inlineImages: boolean;\n    copyStyles: boolean;\n};\n\nconst IGNORE_ATTRIBUTE = 'data-html2canvas-ignore';\n\nexport class DocumentCloner {\n    private readonly scrolledElements: [Element, number, number][];\n    private readonly referenceElement: HTMLElement;\n    clonedReferenceElement?: HTMLElement;\n    private readonly documentElement: HTMLElement;\n    private readonly counters: CounterState;\n    private quoteDepth: number;\n\n    constructor(\n        private readonly context: Context,\n        element: HTMLElement,\n        private readonly options: CloneConfigurations\n    ) {\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\n        this.documentElement = this.cloneNode(element.ownerDocument.documentElement, false) as HTMLElement;\n    }\n\n    toIFrame(ownerDocument: Document, windowSize: Bounds): Promise<HTMLIFrameElement> {\n        const iframe: HTMLIFrameElement = createIFrameContainer(ownerDocument, windowSize);\n\n        if (!iframe.contentWindow) {\n            return Promise.reject(`Unable to find iframe window`);\n        }\n\n        const scrollX = (ownerDocument.defaultView as Window).pageXOffset;\n        const scrollY = (ownerDocument.defaultView as Window).pageYOffset;\n\n        const cloneWindow = iframe.contentWindow;\n        const documentClone: Document = cloneWindow.document;\n\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\n        const iframeLoad = iframeLoader(iframe).then(async () => {\n            this.scrolledElements.forEach(restoreNodeScroll);\n            if (cloneWindow) {\n                cloneWindow.scrollTo(windowSize.left, windowSize.top);\n                if (\n                    /(iPad|iPhone|iPod)/g.test(navigator.userAgent) &&\n                    (cloneWindow.scrollY !== windowSize.top || cloneWindow.scrollX !== windowSize.left)\n                ) {\n                    this.context.logger.warn('Unable to restore scroll position for cloned document');\n                    this.context.windowBounds = this.context.windowBounds.add(\n                        cloneWindow.scrollX - windowSize.left,\n                        cloneWindow.scrollY - windowSize.top,\n                        0,\n                        0\n                    );\n                }\n            }\n\n            const onclone = this.options.onclone;\n\n            const referenceElement = this.clonedReferenceElement;\n\n            if (typeof referenceElement === 'undefined') {\n                return Promise.reject(`Error finding the ${this.referenceElement.nodeName} in the cloned document`);\n            }\n\n            if (documentClone.fonts && documentClone.fonts.ready) {\n                await documentClone.fonts.ready;\n            }\n\n            if (/(AppleWebKit)/g.test(navigator.userAgent)) {\n                await imagesReady(documentClone);\n            }\n\n            if (typeof onclone === 'function') {\n                return Promise.resolve()\n                    .then(() => onclone(documentClone, referenceElement))\n                    .then(() => iframe);\n            }\n\n            return iframe;\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\n        return iframeLoad;\n    }\n\n    createElementClone<T extends HTMLElement | SVGElement>(node: T): HTMLElement | SVGElement {\n        if (isDebugging(node, DebuggerType.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\n        const clone = node.cloneNode(false) as T;\n        if (isImageElement(clone)) {\n            if (isImageElement(node) && node.currentSrc && node.currentSrc !== node.src) {\n                clone.src = node.currentSrc;\n                clone.srcset = '';\n            }\n\n            if (clone.loading === 'lazy') {\n                clone.loading = 'eager';\n            }\n        }\n\n        if (isCustomElement(clone)) {\n            return this.createCustomElementClone(clone);\n        }\n\n        return clone;\n    }\n\n    createCustomElementClone(node: HTMLElement): HTMLElement {\n        const clone = document.createElement('html2canvascustomelement');\n        copyCSSStyles(node.style, clone);\n\n        return clone;\n    }\n\n    createStyleClone(node: HTMLStyleElement): HTMLStyleElement {\n        try {\n            const sheet = node.sheet as CSSStyleSheet | undefined;\n            if (sheet && sheet.cssRules) {\n                const css: string = [].slice.call(sheet.cssRules, 0).reduce((css: string, rule: CSSRule) => {\n                    if (rule && typeof rule.cssText === 'string') {\n                        return css + rule.cssText;\n                    }\n                    return css;\n                }, '');\n                const style = node.cloneNode(false) as HTMLStyleElement;\n                style.textContent = css;\n                return style;\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) as HTMLStyleElement;\n    }\n\n    createCanvasClone(canvas: HTMLCanvasElement): HTMLImageElement | HTMLCanvasElement {\n        if (this.options.inlineImages && canvas.ownerDocument) {\n            const img = canvas.ownerDocument.createElement('img');\n            try {\n                img.src = canvas.toDataURL();\n                return img;\n            } catch (e) {\n                this.context.logger.info(`Unable to inline canvas contents, canvas is tainted`, canvas);\n            }\n        }\n\n        const clonedCanvas = canvas.cloneNode(false) as HTMLCanvasElement;\n\n        try {\n            clonedCanvas.width = canvas.width;\n            clonedCanvas.height = canvas.height;\n            const ctx = canvas.getContext('2d');\n            const 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                } else {\n                    const gl = canvas.getContext('webgl2') ?? canvas.getContext('webgl');\n                    if (gl) {\n                        const attribs = gl.getContextAttributes();\n                        if (attribs?.preserveDrawingBuffer === false) {\n                            this.context.logger.warn(\n                                'Unable to clone WebGL context as it has preserveDrawingBuffer=false',\n                                canvas\n                            );\n                        }\n                    }\n\n                    clonedCtx.drawImage(canvas, 0, 0);\n                }\n            }\n            return clonedCanvas;\n        } catch (e) {\n            this.context.logger.info(`Unable to clone canvas as it is tainted`, canvas);\n        }\n\n        return clonedCanvas;\n    }\n\n    createVideoClone(video: HTMLVideoElement): HTMLCanvasElement {\n        const canvas = video.ownerDocument.createElement('canvas');\n\n        canvas.width = video.offsetWidth;\n        canvas.height = video.offsetHeight;\n        const ctx = canvas.getContext('2d');\n\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        } catch (e) {\n            this.context.logger.info(`Unable to clone video as it is tainted`, video);\n        }\n\n        const blankCanvas = video.ownerDocument.createElement('canvas');\n\n        blankCanvas.width = video.offsetWidth;\n        blankCanvas.height = video.offsetHeight;\n        return blankCanvas;\n    }\n\n    appendChildNode(clone: HTMLElement | SVGElement, child: Node, copyStyles: boolean): void {\n        if (\n            !isElementNode(child) ||\n            (!isScriptElement(child) &&\n                !child.hasAttribute(IGNORE_ATTRIBUTE) &&\n                (typeof this.options.ignoreElements !== 'function' || !this.options.ignoreElements(child)))\n        ) {\n            if (!this.options.copyStyles || !isElementNode(child) || !isStyleElement(child)) {\n                clone.appendChild(this.cloneNode(child, copyStyles));\n            }\n        }\n    }\n\n    cloneChildNodes(node: Element, clone: HTMLElement | SVGElement, copyStyles: boolean): void {\n        for (\n            let child = node.shadowRoot ? node.shadowRoot.firstChild : node.firstChild;\n            child;\n            child = child.nextSibling\n        ) {\n            if (isElementNode(child) && isSlotElement(child) && typeof child.assignedNodes === 'function') {\n                const assignedNodes = child.assignedNodes() as ChildNode[];\n                if (assignedNodes.length) {\n                    assignedNodes.forEach((assignedNode) => this.appendChildNode(clone, assignedNode, copyStyles));\n                }\n            } else {\n                this.appendChildNode(clone, child, copyStyles);\n            }\n        }\n    }\n\n    cloneNode(node: Node, copyStyles: boolean): Node {\n        if (isTextNode(node)) {\n            return document.createTextNode(node.data);\n        }\n\n        if (!node.ownerDocument) {\n            return node.cloneNode(false);\n        }\n\n        const window = node.ownerDocument.defaultView;\n\n        if (window && isElementNode(node) && (isHTMLElementNode(node) || isSVGElementNode(node))) {\n            const clone = this.createElementClone(node);\n            clone.style.transitionProperty = 'none';\n\n            const style = window.getComputedStyle(node);\n            const styleBefore = window.getComputedStyle(node, ':before');\n            const styleAfter = window.getComputedStyle(node, ':after');\n\n            if (this.referenceElement === node && isHTMLElementNode(clone)) {\n                this.clonedReferenceElement = clone;\n            }\n            if (isBodyElement(clone)) {\n                createPseudoHideStyles(clone);\n            }\n\n            const counters = this.counters.parse(new CSSParsedCounterDeclaration(this.context, style));\n            const before = this.resolvePseudoContent(node, clone, styleBefore, PseudoElementType.BEFORE);\n\n            if (isCustomElement(node)) {\n                copyStyles = true;\n            }\n\n            if (!isVideoElement(node)) {\n                this.cloneChildNodes(node, clone, copyStyles);\n            }\n\n            if (before) {\n                clone.insertBefore(before, clone.firstChild);\n            }\n\n            const after = this.resolvePseudoContent(node, clone, styleAfter, PseudoElementType.AFTER);\n            if (after) {\n                clone.appendChild(after);\n            }\n\n            this.counters.pop(counters);\n\n            if (\n                (style && (this.options.copyStyles || isSVGElementNode(node)) && !isIFrameElement(node)) ||\n                copyStyles\n            ) {\n                copyCSSStyles(style, clone);\n            }\n\n            if (node.scrollTop !== 0 || node.scrollLeft !== 0) {\n                this.scrolledElements.push([clone, node.scrollLeft, node.scrollTop]);\n            }\n\n            if (\n                (isTextareaElement(node) || isSelectElement(node)) &&\n                (isTextareaElement(clone) || isSelectElement(clone))\n            ) {\n                clone.value = node.value;\n            }\n\n            return clone;\n        }\n\n        return node.cloneNode(false);\n    }\n\n    resolvePseudoContent(\n        node: Element,\n        clone: Element,\n        style: CSSStyleDeclaration,\n        pseudoElt: PseudoElementType\n    ): HTMLElement | void {\n        if (!style) {\n            return;\n        }\n\n        const value = style.content;\n        const document = clone.ownerDocument;\n        if (!document || !value || value === 'none' || value === '-moz-alt-content' || style.display === 'none') {\n            return;\n        }\n\n        this.counters.parse(new CSSParsedCounterDeclaration(this.context, style));\n        const declaration = new CSSParsedPseudoDeclaration(this.context, style);\n\n        const anonymousReplacedElement = document.createElement('html2canvaspseudoelement');\n        copyCSSStyles(style, anonymousReplacedElement);\n\n        declaration.content.forEach((token) => {\n            if (token.type === TokenType.STRING_TOKEN) {\n                anonymousReplacedElement.appendChild(document.createTextNode(token.value));\n            } else if (token.type === TokenType.URL_TOKEN) {\n                const img = document.createElement('img');\n                img.src = token.value;\n                img.style.opacity = '1';\n                anonymousReplacedElement.appendChild(img);\n            } else if (token.type === TokenType.FUNCTION) {\n                if (token.name === 'attr') {\n                    const attr = token.values.filter(isIdentToken);\n                    if (attr.length) {\n                        anonymousReplacedElement.appendChild(\n                            document.createTextNode(node.getAttribute(attr[0].value) || '')\n                        );\n                    }\n                } else if (token.name === 'counter') {\n                    const [counter, counterStyle] = token.values.filter(nonFunctionArgSeparator);\n                    if (counter && isIdentToken(counter)) {\n                        const counterState = this.counters.getCounterValue(counter.value);\n                        const counterType =\n                            counterStyle && isIdentToken(counterStyle)\n                                ? listStyleType.parse(this.context, counterStyle.value)\n                                : LIST_STYLE_TYPE.DECIMAL;\n\n                        anonymousReplacedElement.appendChild(\n                            document.createTextNode(createCounterText(counterState, counterType, false))\n                        );\n                    }\n                } else if (token.name === 'counters') {\n                    const [counter, delim, counterStyle] = token.values.filter(nonFunctionArgSeparator);\n                    if (counter && isIdentToken(counter)) {\n                        const counterStates = this.counters.getCounterValues(counter.value);\n                        const counterType =\n                            counterStyle && isIdentToken(counterStyle)\n                                ? listStyleType.parse(this.context, counterStyle.value)\n                                : LIST_STYLE_TYPE.DECIMAL;\n                        const separator = delim && delim.type === TokenType.STRING_TOKEN ? delim.value : '';\n                        const text = counterStates\n                            .map((value) => createCounterText(value, counterType, false))\n                            .join(separator);\n\n                        anonymousReplacedElement.appendChild(document.createTextNode(text));\n                    }\n                } else {\n                    //   console.log('FUNCTION_TOKEN', token);\n                }\n            } else if (token.type === TokenType.IDENT_TOKEN) {\n                switch (token.value) {\n                    case 'open-quote':\n                        anonymousReplacedElement.appendChild(\n                            document.createTextNode(getQuote(declaration.quotes, this.quoteDepth++, true))\n                        );\n                        break;\n                    case 'close-quote':\n                        anonymousReplacedElement.appendChild(\n                            document.createTextNode(getQuote(declaration.quotes, --this.quoteDepth, false))\n                        );\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\n        anonymousReplacedElement.className = `${PSEUDO_HIDE_ELEMENT_CLASS_BEFORE} ${PSEUDO_HIDE_ELEMENT_CLASS_AFTER}`;\n        const newClassName =\n            pseudoElt === PseudoElementType.BEFORE\n                ? ` ${PSEUDO_HIDE_ELEMENT_CLASS_BEFORE}`\n                : ` ${PSEUDO_HIDE_ELEMENT_CLASS_AFTER}`;\n\n        if (isSVGElementNode(clone)) {\n            clone.className.baseValue += newClassName;\n        } else {\n            clone.className += newClassName;\n        }\n\n        return anonymousReplacedElement;\n    }\n\n    static destroy(container: HTMLIFrameElement): boolean {\n        if (container.parentNode) {\n            container.parentNode.removeChild(container);\n            return true;\n        }\n        return false;\n    }\n}\n\nenum PseudoElementType {\n    BEFORE,\n    AFTER\n}\n\nconst createIFrameContainer = (ownerDocument: Document, bounds: Bounds): HTMLIFrameElement => {\n    const cloneIframeContainer = ownerDocument.createElement('iframe');\n\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\n    return cloneIframeContainer;\n};\n\nconst imageReady = (img: HTMLImageElement): Promise<Event | void | string> => {\n    return new Promise((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\nconst imagesReady = (document: HTMLDocument): Promise<unknown[]> => {\n    return Promise.all([].slice.call(document.images, 0).map(imageReady));\n};\n\nconst iframeLoader = (iframe: HTMLIFrameElement): Promise<HTMLIFrameElement> => {\n    return new Promise((resolve, reject) => {\n        const cloneWindow = iframe.contentWindow;\n\n        if (!cloneWindow) {\n            return reject(`No window assigned for iframe`);\n        }\n\n        const documentClone = cloneWindow.document;\n\n        cloneWindow.onload = iframe.onload = () => {\n            cloneWindow.onload = iframe.onload = null;\n            const interval = setInterval(() => {\n                if (documentClone.body.childNodes.length > 0 && documentClone.readyState === 'complete') {\n                    clearInterval(interval);\n                    resolve(iframe);\n                }\n            }, 50);\n        };\n    });\n};\n\nconst ignoredStyleProperties = [\n    'all', // #2476\n    'd', // #2483\n    'content' // Safari shows pseudoelements if content is set\n];\n\nexport const copyCSSStyles = <T extends HTMLElement | SVGElement>(style: CSSStyleDeclaration, target: T): T => {\n    // Edge does not provide value for cssText\n    for (let i = style.length - 1; i >= 0; i--) {\n        const 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\nconst serializeDoctype = (doctype?: DocumentType | null): string => {\n    let str = '';\n    if (doctype) {\n        str += '<!DOCTYPE ';\n        if (doctype.name) {\n            str += doctype.name;\n        }\n\n        if (doctype.internalSubset) {\n            str += doctype.internalSubset;\n        }\n\n        if (doctype.publicId) {\n            str += `\"${doctype.publicId}\"`;\n        }\n\n        if (doctype.systemId) {\n            str += `\"${doctype.systemId}\"`;\n        }\n\n        str += '>';\n    }\n\n    return str;\n};\n\nconst restoreOwnerScroll = (ownerDocument: Document | null, x: number, y: number) => {\n    if (\n        ownerDocument &&\n        ownerDocument.defaultView &&\n        (x !== ownerDocument.defaultView.pageXOffset || y !== ownerDocument.defaultView.pageYOffset)\n    ) {\n        ownerDocument.defaultView.scrollTo(x, y);\n    }\n};\n\nconst restoreNodeScroll = ([element, x, y]: [HTMLElement, number, number]) => {\n    element.scrollLeft = x;\n    element.scrollTop = y;\n};\n\nconst PSEUDO_BEFORE = ':before';\nconst PSEUDO_AFTER = ':after';\nconst PSEUDO_HIDE_ELEMENT_CLASS_BEFORE = '___html2canvas___pseudoelement_before';\nconst PSEUDO_HIDE_ELEMENT_CLASS_AFTER = '___html2canvas___pseudoelement_after';\n\nconst PSEUDO_HIDE_ELEMENT_STYLE = `{\n    content: \"\" !important;\n    display: none !important;\n}`;\n\nconst createPseudoHideStyles = (body: HTMLElement) => {\n    createStyles(\n        body,\n        `.${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};\n\nconst createStyles = (body: HTMLElement, styles: string) => {\n    const document = body.ownerDocument;\n    if (document) {\n        const style = document.createElement('style');\n        style.textContent = styles;\n        body.appendChild(style);\n    }\n};\n","import {FEATURES} from './features';\nimport {Context} from './context';\n\nexport class CacheStorage {\n    private static _link?: HTMLAnchorElement;\n    private static _origin = 'about:blank';\n\n    static getOrigin(url: string): string {\n        const link = CacheStorage._link;\n        if (!link) {\n            return 'about:blank';\n        }\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\n    static isSameOrigin(src: string): boolean {\n        return CacheStorage.getOrigin(src) === CacheStorage._origin;\n    }\n\n    static setContext(window: Window): void {\n        CacheStorage._link = window.document.createElement('a');\n        CacheStorage._origin = CacheStorage.getOrigin(window.location.href);\n    }\n}\n\nexport interface ResourceOptions {\n    imageTimeout: number;\n    useCORS: boolean;\n    allowTaint: boolean;\n    proxy?: string;\n}\n\nexport class Cache {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    private readonly _cache: {[key: string]: Promise<any>} = {};\n\n    constructor(private readonly context: Context, private readonly _options: ResourceOptions) {}\n\n    addImage(src: string): Promise<void> {\n        const result = Promise.resolve();\n        if (this.has(src)) {\n            return result;\n        }\n\n        if (isBlobImage(src) || isRenderable(src)) {\n            (this._cache[src] = this.loadImage(src)).catch(() => {\n                // prevent unhandled rejection\n            });\n            return result;\n        }\n\n        return result;\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    match(src: string): Promise<any> {\n        return this._cache[src];\n    }\n\n    private async loadImage(key: string) {\n        const isSameOrigin = CacheStorage.isSameOrigin(key);\n        const useCORS =\n            !isInlineImage(key) && this._options.useCORS === true && FEATURES.SUPPORT_CORS_IMAGES && !isSameOrigin;\n        const useProxy =\n            !isInlineImage(key) &&\n            !isSameOrigin &&\n            !isBlobImage(key) &&\n            typeof this._options.proxy === 'string' &&\n            FEATURES.SUPPORT_CORS_XHR &&\n            !useCORS;\n        if (\n            !isSameOrigin &&\n            this._options.allowTaint === false &&\n            !isInlineImage(key) &&\n            !isBlobImage(key) &&\n            !useProxy &&\n            !useCORS\n        ) {\n            return;\n        }\n\n        let src = key;\n        if (useProxy) {\n            src = await this.proxy(src);\n        }\n\n        this.context.logger.debug(`Added image ${key.substring(0, 256)}`);\n\n        return await new Promise((resolve, reject) => {\n            const img = new Image();\n            img.onload = () => 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(() => resolve(img), 500);\n            }\n            if (this._options.imageTimeout > 0) {\n                setTimeout(\n                    () => reject(`Timed out (${this._options.imageTimeout}ms) loading image`),\n                    this._options.imageTimeout\n                );\n            }\n        });\n    }\n\n    private has(key: string): boolean {\n        return typeof this._cache[key] !== 'undefined';\n    }\n\n    keys(): Promise<string[]> {\n        return Promise.resolve(Object.keys(this._cache));\n    }\n\n    private proxy(src: string): Promise<string> {\n        const proxy = this._options.proxy;\n\n        if (!proxy) {\n            throw new Error('No proxy defined');\n        }\n\n        const key = src.substring(0, 256);\n\n        return new Promise((resolve, reject) => {\n            const responseType = FEATURES.SUPPORT_RESPONSE_TYPE ? 'blob' : 'text';\n            const xhr = new XMLHttpRequest();\n            xhr.onload = () => {\n                if (xhr.status === 200) {\n                    if (responseType === 'text') {\n                        resolve(xhr.response);\n                    } else {\n                        const reader = new FileReader();\n                        reader.addEventListener('load', () => resolve(reader.result as string), false);\n                        reader.addEventListener('error', (e) => reject(e), false);\n                        reader.readAsDataURL(xhr.response);\n                    }\n                } else {\n                    reject(`Failed to proxy resource ${key} with status code ${xhr.status}`);\n                }\n            };\n\n            xhr.onerror = reject;\n            const queryString = proxy.indexOf('?') > -1 ? '&' : '?';\n            xhr.open('GET', `${proxy}${queryString}url=${encodeURIComponent(src)}&responseType=${responseType}`);\n\n            if (responseType !== 'text' && xhr instanceof XMLHttpRequest) {\n                xhr.responseType = responseType;\n            }\n\n            if (this._options.imageTimeout) {\n                const timeout = this._options.imageTimeout;\n                xhr.timeout = timeout;\n                xhr.ontimeout = () => reject(`Timed out (${timeout}ms) proxying ${key}`);\n            }\n\n            xhr.send();\n        });\n    }\n}\n\nconst INLINE_SVG = /^data:image\\/svg\\+xml/i;\nconst INLINE_BASE64 = /^data:image\\/.*;base64,/i;\nconst INLINE_IMG = /^data:image\\/.*/i;\n\nconst isRenderable = (src: string): boolean => FEATURES.SUPPORT_SVG_DRAWING || !isSVG(src);\nconst isInlineImage = (src: string): boolean => INLINE_IMG.test(src);\nconst isInlineBase64Image = (src: string): boolean => INLINE_BASE64.test(src);\nconst isBlobImage = (src: string): boolean => src.substr(0, 4) === 'blob';\n\nconst isSVG = (src: string): boolean => src.substr(-3).toLowerCase() === 'svg' || INLINE_SVG.test(src);\n","import {IPath, Path, PathType} from './path';\n\nexport class Vector implements IPath {\n    type: PathType;\n    x: number;\n    y: number;\n\n    constructor(x: number, y: number) {\n        this.type = PathType.VECTOR;\n        this.x = x;\n        this.y = y;\n    }\n\n    add(deltaX: number, deltaY: number): Vector {\n        return new Vector(this.x + deltaX, this.y + deltaY);\n    }\n}\n\nexport const isVector = (path: Path): path is Vector => path.type === PathType.VECTOR;\n","import {Vector} from './vector';\nimport {IPath, PathType, Path} from './path';\n\nconst lerp = (a: Vector, b: Vector, t: number): Vector => {\n    return new Vector(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t);\n};\n\nexport class BezierCurve implements IPath {\n    type: PathType;\n    start: Vector;\n    startControl: Vector;\n    endControl: Vector;\n    end: Vector;\n\n    constructor(start: Vector, startControl: Vector, endControl: Vector, end: Vector) {\n        this.type = PathType.BEZIER_CURVE;\n        this.start = start;\n        this.startControl = startControl;\n        this.endControl = endControl;\n        this.end = end;\n    }\n\n    subdivide(t: number, firstHalf: boolean): BezierCurve {\n        const ab = lerp(this.start, this.startControl, t);\n        const bc = lerp(this.startControl, this.endControl, t);\n        const cd = lerp(this.endControl, this.end, t);\n        const abbc = lerp(ab, bc, t);\n        const bccd = lerp(bc, cd, t);\n        const dest = lerp(abbc, bccd, t);\n        return firstHalf ? new BezierCurve(this.start, ab, abbc, dest) : new BezierCurve(dest, bccd, cd, this.end);\n    }\n\n    add(deltaX: number, deltaY: number): BezierCurve {\n        return new BezierCurve(\n            this.start.add(deltaX, deltaY),\n            this.startControl.add(deltaX, deltaY),\n            this.endControl.add(deltaX, deltaY),\n            this.end.add(deltaX, deltaY)\n        );\n    }\n\n    reverse(): BezierCurve {\n        return new BezierCurve(this.end, this.endControl, this.startControl, this.start);\n    }\n}\n\nexport const isBezierCurve = (path: Path): path is BezierCurve => path.type === PathType.BEZIER_CURVE;\n","import {ElementContainer} from '../dom/element-container';\nimport {getAbsoluteValue, getAbsoluteValueForTuple} from '../css/types/length-percentage';\nimport {Vector} from './vector';\nimport {BezierCurve} from './bezier-curve';\nimport {Path} from './path';\n\nexport class BoundCurves {\n    readonly topLeftBorderDoubleOuterBox: Path;\n    readonly topRightBorderDoubleOuterBox: Path;\n    readonly bottomRightBorderDoubleOuterBox: Path;\n    readonly bottomLeftBorderDoubleOuterBox: Path;\n    readonly topLeftBorderDoubleInnerBox: Path;\n    readonly topRightBorderDoubleInnerBox: Path;\n    readonly bottomRightBorderDoubleInnerBox: Path;\n    readonly bottomLeftBorderDoubleInnerBox: Path;\n    readonly topLeftBorderStroke: Path;\n    readonly topRightBorderStroke: Path;\n    readonly bottomRightBorderStroke: Path;\n    readonly bottomLeftBorderStroke: Path;\n    readonly topLeftBorderBox: Path;\n    readonly topRightBorderBox: Path;\n    readonly bottomRightBorderBox: Path;\n    readonly bottomLeftBorderBox: Path;\n    readonly topLeftPaddingBox: Path;\n    readonly topRightPaddingBox: Path;\n    readonly bottomRightPaddingBox: Path;\n    readonly bottomLeftPaddingBox: Path;\n    readonly topLeftContentBox: Path;\n    readonly topRightContentBox: Path;\n    readonly bottomRightContentBox: Path;\n    readonly bottomLeftContentBox: Path;\n\n    constructor(element: ElementContainer) {\n        const styles = element.styles;\n        const bounds = element.bounds;\n\n        let [tlh, tlv] = getAbsoluteValueForTuple(styles.borderTopLeftRadius, bounds.width, bounds.height);\n        let [trh, trv] = getAbsoluteValueForTuple(styles.borderTopRightRadius, bounds.width, bounds.height);\n        let [brh, brv] = getAbsoluteValueForTuple(styles.borderBottomRightRadius, bounds.width, bounds.height);\n        let [blh, blv] = getAbsoluteValueForTuple(styles.borderBottomLeftRadius, bounds.width, bounds.height);\n\n        const 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        const maxFactor = Math.max(...factors);\n\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\n        const topWidth = bounds.width - trh;\n        const rightHeight = bounds.height - brv;\n        const bottomWidth = bounds.width - brh;\n        const leftHeight = bounds.height - blv;\n\n        const borderTopWidth = styles.borderTopWidth;\n        const borderRightWidth = styles.borderRightWidth;\n        const borderBottomWidth = styles.borderBottomWidth;\n        const borderLeftWidth = styles.borderLeftWidth;\n\n        const paddingTop = getAbsoluteValue(styles.paddingTop, element.bounds.width);\n        const paddingRight = getAbsoluteValue(styles.paddingRight, element.bounds.width);\n        const paddingBottom = getAbsoluteValue(styles.paddingBottom, element.bounds.width);\n        const paddingLeft = getAbsoluteValue(styles.paddingLeft, element.bounds.width);\n\n        this.topLeftBorderDoubleOuterBox =\n            tlh > 0 || tlv > 0\n                ? getCurvePoints(\n                      bounds.left + borderLeftWidth / 3,\n                      bounds.top + borderTopWidth / 3,\n                      tlh - borderLeftWidth / 3,\n                      tlv - borderTopWidth / 3,\n                      CORNER.TOP_LEFT\n                  )\n                : new Vector(bounds.left + borderLeftWidth / 3, bounds.top + borderTopWidth / 3);\n        this.topRightBorderDoubleOuterBox =\n            tlh > 0 || tlv > 0\n                ? getCurvePoints(\n                      bounds.left + topWidth,\n                      bounds.top + borderTopWidth / 3,\n                      trh - borderRightWidth / 3,\n                      trv - borderTopWidth / 3,\n                      CORNER.TOP_RIGHT\n                  )\n                : new Vector(bounds.left + bounds.width - borderRightWidth / 3, bounds.top + borderTopWidth / 3);\n        this.bottomRightBorderDoubleOuterBox =\n            brh > 0 || brv > 0\n                ? getCurvePoints(\n                      bounds.left + bottomWidth,\n                      bounds.top + rightHeight,\n                      brh - borderRightWidth / 3,\n                      brv - borderBottomWidth / 3,\n                      CORNER.BOTTOM_RIGHT\n                  )\n                : new Vector(\n                      bounds.left + bounds.width - borderRightWidth / 3,\n                      bounds.top + bounds.height - borderBottomWidth / 3\n                  );\n        this.bottomLeftBorderDoubleOuterBox =\n            blh > 0 || blv > 0\n                ? getCurvePoints(\n                      bounds.left + borderLeftWidth / 3,\n                      bounds.top + leftHeight,\n                      blh - borderLeftWidth / 3,\n                      blv - borderBottomWidth / 3,\n                      CORNER.BOTTOM_LEFT\n                  )\n                : new Vector(bounds.left + borderLeftWidth / 3, bounds.top + bounds.height - borderBottomWidth / 3);\n        this.topLeftBorderDoubleInnerBox =\n            tlh > 0 || tlv > 0\n                ? getCurvePoints(\n                      bounds.left + (borderLeftWidth * 2) / 3,\n                      bounds.top + (borderTopWidth * 2) / 3,\n                      tlh - (borderLeftWidth * 2) / 3,\n                      tlv - (borderTopWidth * 2) / 3,\n                      CORNER.TOP_LEFT\n                  )\n                : new Vector(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + (borderTopWidth * 2) / 3);\n        this.topRightBorderDoubleInnerBox =\n            tlh > 0 || tlv > 0\n                ? getCurvePoints(\n                      bounds.left + topWidth,\n                      bounds.top + (borderTopWidth * 2) / 3,\n                      trh - (borderRightWidth * 2) / 3,\n                      trv - (borderTopWidth * 2) / 3,\n                      CORNER.TOP_RIGHT\n                  )\n                : new Vector(\n                      bounds.left + bounds.width - (borderRightWidth * 2) / 3,\n                      bounds.top + (borderTopWidth * 2) / 3\n                  );\n        this.bottomRightBorderDoubleInnerBox =\n            brh > 0 || brv > 0\n                ? getCurvePoints(\n                      bounds.left + bottomWidth,\n                      bounds.top + rightHeight,\n                      brh - (borderRightWidth * 2) / 3,\n                      brv - (borderBottomWidth * 2) / 3,\n                      CORNER.BOTTOM_RIGHT\n                  )\n                : new Vector(\n                      bounds.left + bounds.width - (borderRightWidth * 2) / 3,\n                      bounds.top + bounds.height - (borderBottomWidth * 2) / 3\n                  );\n        this.bottomLeftBorderDoubleInnerBox =\n            blh > 0 || blv > 0\n                ? getCurvePoints(\n                      bounds.left + (borderLeftWidth * 2) / 3,\n                      bounds.top + leftHeight,\n                      blh - (borderLeftWidth * 2) / 3,\n                      blv - (borderBottomWidth * 2) / 3,\n                      CORNER.BOTTOM_LEFT\n                  )\n                : new Vector(\n                      bounds.left + (borderLeftWidth * 2) / 3,\n                      bounds.top + bounds.height - (borderBottomWidth * 2) / 3\n                  );\n        this.topLeftBorderStroke =\n            tlh > 0 || tlv > 0\n                ? getCurvePoints(\n                      bounds.left + borderLeftWidth / 2,\n                      bounds.top + borderTopWidth / 2,\n                      tlh - borderLeftWidth / 2,\n                      tlv - borderTopWidth / 2,\n                      CORNER.TOP_LEFT\n                  )\n                : new Vector(bounds.left + borderLeftWidth / 2, bounds.top + borderTopWidth / 2);\n        this.topRightBorderStroke =\n            tlh > 0 || tlv > 0\n                ? getCurvePoints(\n                      bounds.left + topWidth,\n                      bounds.top + borderTopWidth / 2,\n                      trh - borderRightWidth / 2,\n                      trv - borderTopWidth / 2,\n                      CORNER.TOP_RIGHT\n                  )\n                : new Vector(bounds.left + bounds.width - borderRightWidth / 2, bounds.top + borderTopWidth / 2);\n        this.bottomRightBorderStroke =\n            brh > 0 || brv > 0\n                ? getCurvePoints(\n                      bounds.left + bottomWidth,\n                      bounds.top + rightHeight,\n                      brh - borderRightWidth / 2,\n                      brv - borderBottomWidth / 2,\n                      CORNER.BOTTOM_RIGHT\n                  )\n                : new Vector(\n                      bounds.left + bounds.width - borderRightWidth / 2,\n                      bounds.top + bounds.height - borderBottomWidth / 2\n                  );\n        this.bottomLeftBorderStroke =\n            blh > 0 || blv > 0\n                ? getCurvePoints(\n                      bounds.left + borderLeftWidth / 2,\n                      bounds.top + leftHeight,\n                      blh - borderLeftWidth / 2,\n                      blv - borderBottomWidth / 2,\n                      CORNER.BOTTOM_LEFT\n                  )\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(\n                      bounds.left + borderLeftWidth,\n                      bounds.top + borderTopWidth,\n                      Math.max(0, tlh - borderLeftWidth),\n                      Math.max(0, tlv - borderTopWidth),\n                      CORNER.TOP_LEFT\n                  )\n                : new Vector(bounds.left + borderLeftWidth, bounds.top + borderTopWidth);\n        this.topRightPaddingBox =\n            trh > 0 || trv > 0\n                ? getCurvePoints(\n                      bounds.left + Math.min(topWidth, bounds.width - borderRightWidth),\n                      bounds.top + borderTopWidth,\n                      topWidth > bounds.width + borderRightWidth ? 0 : Math.max(0, trh - borderRightWidth),\n                      Math.max(0, trv - borderTopWidth),\n                      CORNER.TOP_RIGHT\n                  )\n                : new Vector(bounds.left + bounds.width - borderRightWidth, bounds.top + borderTopWidth);\n        this.bottomRightPaddingBox =\n            brh > 0 || brv > 0\n                ? getCurvePoints(\n                      bounds.left + Math.min(bottomWidth, bounds.width - borderLeftWidth),\n                      bounds.top + Math.min(rightHeight, bounds.height - borderBottomWidth),\n                      Math.max(0, brh - borderRightWidth),\n                      Math.max(0, brv - borderBottomWidth),\n                      CORNER.BOTTOM_RIGHT\n                  )\n                : new Vector(\n                      bounds.left + bounds.width - borderRightWidth,\n                      bounds.top + bounds.height - borderBottomWidth\n                  );\n        this.bottomLeftPaddingBox =\n            blh > 0 || blv > 0\n                ? getCurvePoints(\n                      bounds.left + borderLeftWidth,\n                      bounds.top + Math.min(leftHeight, bounds.height - borderBottomWidth),\n                      Math.max(0, blh - borderLeftWidth),\n                      Math.max(0, blv - borderBottomWidth),\n                      CORNER.BOTTOM_LEFT\n                  )\n                : new Vector(bounds.left + borderLeftWidth, bounds.top + bounds.height - borderBottomWidth);\n        this.topLeftContentBox =\n            tlh > 0 || tlv > 0\n                ? getCurvePoints(\n                      bounds.left + borderLeftWidth + paddingLeft,\n                      bounds.top + borderTopWidth + paddingTop,\n                      Math.max(0, tlh - (borderLeftWidth + paddingLeft)),\n                      Math.max(0, tlv - (borderTopWidth + paddingTop)),\n                      CORNER.TOP_LEFT\n                  )\n                : new Vector(bounds.left + borderLeftWidth + paddingLeft, bounds.top + borderTopWidth + paddingTop);\n        this.topRightContentBox =\n            trh > 0 || trv > 0\n                ? getCurvePoints(\n                      bounds.left + Math.min(topWidth, bounds.width + borderLeftWidth + paddingLeft),\n                      bounds.top + borderTopWidth + paddingTop,\n                      topWidth > bounds.width + borderLeftWidth + paddingLeft ? 0 : trh - borderLeftWidth + paddingLeft,\n                      trv - (borderTopWidth + paddingTop),\n                      CORNER.TOP_RIGHT\n                  )\n                : new Vector(\n                      bounds.left + bounds.width - (borderRightWidth + paddingRight),\n                      bounds.top + borderTopWidth + paddingTop\n                  );\n        this.bottomRightContentBox =\n            brh > 0 || brv > 0\n                ? getCurvePoints(\n                      bounds.left + Math.min(bottomWidth, bounds.width - (borderLeftWidth + paddingLeft)),\n                      bounds.top + Math.min(rightHeight, bounds.height + borderTopWidth + paddingTop),\n                      Math.max(0, brh - (borderRightWidth + paddingRight)),\n                      brv - (borderBottomWidth + paddingBottom),\n                      CORNER.BOTTOM_RIGHT\n                  )\n                : new Vector(\n                      bounds.left + bounds.width - (borderRightWidth + paddingRight),\n                      bounds.top + bounds.height - (borderBottomWidth + paddingBottom)\n                  );\n        this.bottomLeftContentBox =\n            blh > 0 || blv > 0\n                ? getCurvePoints(\n                      bounds.left + borderLeftWidth + paddingLeft,\n                      bounds.top + leftHeight,\n                      Math.max(0, blh - (borderLeftWidth + paddingLeft)),\n                      blv - (borderBottomWidth + paddingBottom),\n                      CORNER.BOTTOM_LEFT\n                  )\n                : new Vector(\n                      bounds.left + borderLeftWidth + paddingLeft,\n                      bounds.top + bounds.height - (borderBottomWidth + paddingBottom)\n                  );\n    }\n}\n\nenum CORNER {\n    TOP_LEFT = 0,\n    TOP_RIGHT = 1,\n    BOTTOM_RIGHT = 2,\n    BOTTOM_LEFT = 3\n}\n\nconst getCurvePoints = (x: number, y: number, r1: number, r2: number, position: CORNER): BezierCurve => {\n    const kappa = 4 * ((Math.sqrt(2) - 1) / 3);\n    const ox = r1 * kappa; // control point offset horizontal\n    const oy = r2 * kappa; // control point offset vertical\n    const xm = x + r1; // x-middle\n    const ym = y + r2; // y-middle\n\n    switch (position) {\n        case CORNER.TOP_LEFT:\n            return new BezierCurve(\n                new Vector(x, ym),\n                new Vector(x, ym - oy),\n                new Vector(xm - ox, y),\n                new Vector(xm, y)\n            );\n        case CORNER.TOP_RIGHT:\n            return new BezierCurve(\n                new Vector(x, y),\n                new Vector(x + ox, y),\n                new Vector(xm, ym - oy),\n                new Vector(xm, ym)\n            );\n        case CORNER.BOTTOM_RIGHT:\n            return new BezierCurve(\n                new Vector(xm, y),\n                new Vector(xm, y + oy),\n                new Vector(x + ox, ym),\n                new Vector(x, ym)\n            );\n        case CORNER.BOTTOM_LEFT:\n        default:\n            return new BezierCurve(\n                new Vector(xm, ym),\n                new Vector(xm - ox, ym),\n                new Vector(x, y + oy),\n                new Vector(x, y)\n            );\n    }\n};\n\nexport const calculateBorderBoxPath = (curves: BoundCurves): Path[] => {\n    return [curves.topLeftBorderBox, curves.topRightBorderBox, curves.bottomRightBorderBox, curves.bottomLeftBorderBox];\n};\n\nexport const calculateContentBoxPath = (curves: BoundCurves): Path[] => {\n    return [\n        curves.topLeftContentBox,\n        curves.topRightContentBox,\n        curves.bottomRightContentBox,\n        curves.bottomLeftContentBox\n    ];\n};\n\nexport const calculatePaddingBoxPath = (curves: BoundCurves): Path[] => {\n    return [\n        curves.topLeftPaddingBox,\n        curves.topRightPaddingBox,\n        curves.bottomRightPaddingBox,\n        curves.bottomLeftPaddingBox\n    ];\n};\n","import {Matrix} from '../css/property-descriptors/transform';\nimport {Path} from './path';\n\nexport const enum EffectType {\n    TRANSFORM = 0,\n    CLIP = 1,\n    OPACITY = 2\n}\n\nexport const enum EffectTarget {\n    BACKGROUND_BORDERS = 1 << 1,\n    CONTENT = 1 << 2\n}\n\nexport interface IElementEffect {\n    readonly type: EffectType;\n    readonly target: number;\n}\n\nexport class TransformEffect implements IElementEffect {\n    readonly type: EffectType = EffectType.TRANSFORM;\n    readonly target: number = EffectTarget.BACKGROUND_BORDERS | EffectTarget.CONTENT;\n\n    constructor(readonly offsetX: number, readonly offsetY: number, readonly matrix: Matrix) {}\n}\n\nexport class ClipEffect implements IElementEffect {\n    readonly type: EffectType = EffectType.CLIP;\n\n    constructor(readonly path: Path[], readonly target: EffectTarget) {}\n}\n\nexport class OpacityEffect implements IElementEffect {\n    readonly type: EffectType = EffectType.OPACITY;\n    readonly target: number = EffectTarget.BACKGROUND_BORDERS | EffectTarget.CONTENT;\n\n    constructor(readonly opacity: number) {}\n}\n\nexport const isTransformEffect = (effect: IElementEffect): effect is TransformEffect =>\n    effect.type === EffectType.TRANSFORM;\nexport const isClipEffect = (effect: IElementEffect): effect is ClipEffect => effect.type === EffectType.CLIP;\nexport const isOpacityEffect = (effect: IElementEffect): effect is OpacityEffect => effect.type === EffectType.OPACITY;\n","import {BezierCurve} from './bezier-curve';\nimport {Vector} from './vector';\nexport const enum PathType {\n    VECTOR = 0,\n    BEZIER_CURVE = 1\n}\n\nexport interface IPath {\n    type: PathType;\n    add(deltaX: number, deltaY: number): IPath;\n}\n\nexport const equalPath = (a: Path[], b: Path[]): boolean => {\n    if (a.length === b.length) {\n        return a.some((v, i) => v === b[i]);\n    }\n\n    return false;\n};\n\nexport const transformPath = (path: Path[], deltaX: number, deltaY: number, deltaW: number, deltaH: number): Path[] => {\n    return path.map((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\nexport type Path = Vector | BezierCurve;\n","import {ElementContainer, FLAGS} from '../dom/element-container';\nimport {contains} from '../core/bitwise';\nimport {BoundCurves, calculateBorderBoxPath, calculatePaddingBoxPath} from './bound-curves';\nimport {ClipEffect, EffectTarget, IElementEffect, isClipEffect, OpacityEffect, TransformEffect} from './effects';\nimport {OVERFLOW} from '../css/property-descriptors/overflow';\nimport {equalPath} from './path';\nimport {DISPLAY} from '../css/property-descriptors/display';\nimport {OLElementContainer} from '../dom/elements/ol-element-container';\nimport {LIElementContainer} from '../dom/elements/li-element-container';\nimport {createCounterText} from '../css/types/functions/counter';\nimport {POSITION} from '../css/property-descriptors/position';\n\nexport class StackingContext {\n    element: ElementPaint;\n    negativeZIndex: StackingContext[];\n    zeroOrAutoZIndexOrTransformedOrOpacity: StackingContext[];\n    positiveZIndex: StackingContext[];\n    nonPositionedFloats: StackingContext[];\n    nonPositionedInlineLevel: StackingContext[];\n    inlineLevel: ElementPaint[];\n    nonInlineLevel: ElementPaint[];\n\n    constructor(container: ElementPaint) {\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}\n\nexport class ElementPaint {\n    readonly effects: IElementEffect[] = [];\n    readonly curves: BoundCurves;\n    listValue?: string;\n\n    constructor(readonly container: ElementContainer, readonly parent: ElementPaint | null) {\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\n        if (this.container.styles.transform !== null) {\n            const offsetX = this.container.bounds.left + this.container.styles.transformOrigin[0].number;\n            const offsetY = this.container.bounds.top + this.container.styles.transformOrigin[1].number;\n            const matrix = this.container.styles.transform;\n            this.effects.push(new TransformEffect(offsetX, offsetY, matrix));\n        }\n\n        if (this.container.styles.overflowX !== OVERFLOW.VISIBLE) {\n            const borderBox = calculateBorderBoxPath(this.curves);\n            const paddingBox = calculatePaddingBoxPath(this.curves);\n\n            if (equalPath(borderBox, paddingBox)) {\n                this.effects.push(new ClipEffect(borderBox, EffectTarget.BACKGROUND_BORDERS | EffectTarget.CONTENT));\n            } else {\n                this.effects.push(new ClipEffect(borderBox, EffectTarget.BACKGROUND_BORDERS));\n                this.effects.push(new ClipEffect(paddingBox, EffectTarget.CONTENT));\n            }\n        }\n    }\n\n    getEffects(target: EffectTarget): IElementEffect[] {\n        let inFlow = [POSITION.ABSOLUTE, POSITION.FIXED].indexOf(this.container.styles.position) === -1;\n        let parent = this.parent;\n        const effects = this.effects.slice(0);\n        while (parent) {\n            const croplessEffects = parent.effects.filter((effect) => !isClipEffect(effect));\n            if (inFlow || parent.container.styles.position !== POSITION.STATIC || !parent.parent) {\n                effects.unshift(...croplessEffects);\n                inFlow = [POSITION.ABSOLUTE, POSITION.FIXED].indexOf(parent.container.styles.position) === -1;\n                if (parent.container.styles.overflowX !== OVERFLOW.VISIBLE) {\n                    const borderBox = calculateBorderBoxPath(parent.curves);\n                    const paddingBox = calculatePaddingBoxPath(parent.curves);\n                    if (!equalPath(borderBox, paddingBox)) {\n                        effects.unshift(\n                            new ClipEffect(paddingBox, EffectTarget.BACKGROUND_BORDERS | EffectTarget.CONTENT)\n                        );\n                    }\n                }\n            } else {\n                effects.unshift(...croplessEffects);\n            }\n\n            parent = parent.parent;\n        }\n\n        return effects.filter((effect) => contains(effect.target, target));\n    }\n}\n\nconst parseStackTree = (\n    parent: ElementPaint,\n    stackingContext: StackingContext,\n    realStackingContext: StackingContext,\n    listItems: ElementPaint[]\n) => {\n    parent.container.elements.forEach((child) => {\n        const treatAsRealStackingContext = contains(child.flags, FLAGS.CREATES_REAL_STACKING_CONTEXT);\n        const createsStackingContext = contains(child.flags, FLAGS.CREATES_STACKING_CONTEXT);\n        const paintContainer = new ElementPaint(child, parent);\n        if (contains(child.styles.display, DISPLAY.LIST_ITEM)) {\n            listItems.push(paintContainer);\n        }\n\n        const listOwnerItems = contains(child.flags, FLAGS.IS_LIST_OWNER) ? [] : listItems;\n\n        if (treatAsRealStackingContext || createsStackingContext) {\n            const parentStack =\n                treatAsRealStackingContext || child.styles.isPositioned() ? realStackingContext : stackingContext;\n\n            const stack = new StackingContext(paintContainer);\n\n            if (child.styles.isPositioned() || child.styles.opacity < 1 || child.styles.isTransformed()) {\n                const order = child.styles.zIndex.order;\n                if (order < 0) {\n                    let index = 0;\n\n                    parentStack.negativeZIndex.some((current, i) => {\n                        if (order > current.element.container.styles.zIndex.order) {\n                            index = i;\n                            return false;\n                        } else if (index > 0) {\n                            return true;\n                        }\n\n                        return false;\n                    });\n                    parentStack.negativeZIndex.splice(index, 0, stack);\n                } else if (order > 0) {\n                    let index = 0;\n                    parentStack.positiveZIndex.some((current, i) => {\n                        if (order >= current.element.container.styles.zIndex.order) {\n                            index = i + 1;\n                            return false;\n                        } else if (index > 0) {\n                            return true;\n                        }\n\n                        return false;\n                    });\n                    parentStack.positiveZIndex.splice(index, 0, stack);\n                } else {\n                    parentStack.zeroOrAutoZIndexOrTransformedOrOpacity.push(stack);\n                }\n            } else {\n                if (child.styles.isFloating()) {\n                    parentStack.nonPositionedFloats.push(stack);\n                } else {\n                    parentStack.nonPositionedInlineLevel.push(stack);\n                }\n            }\n\n            parseStackTree(\n                paintContainer,\n                stack,\n                treatAsRealStackingContext ? stack : realStackingContext,\n                listOwnerItems\n            );\n        } else {\n            if (child.styles.isInlineLevel()) {\n                stackingContext.inlineLevel.push(paintContainer);\n            } else {\n                stackingContext.nonInlineLevel.push(paintContainer);\n            }\n\n            parseStackTree(paintContainer, stackingContext, realStackingContext, listOwnerItems);\n        }\n\n        if (contains(child.flags, FLAGS.IS_LIST_OWNER)) {\n            processListItems(child, listOwnerItems);\n        }\n    });\n};\n\nconst processListItems = (owner: ElementContainer, elements: ElementPaint[]) => {\n    let numbering = owner instanceof OLElementContainer ? owner.start : 1;\n    const reversed = owner instanceof OLElementContainer ? owner.reversed : false;\n    for (let i = 0; i < elements.length; i++) {\n        const item = elements[i];\n        if (\n            item.container instanceof LIElementContainer &&\n            typeof item.container.value === 'number' &&\n            item.container.value !== 0\n        ) {\n            numbering = item.container.value;\n        }\n\n        item.listValue = createCounterText(numbering, item.container.styles.listStyleType, true);\n\n        numbering += reversed ? -1 : 1;\n    }\n};\n\nexport const parseStackingContexts = (container: ElementContainer): StackingContext => {\n    const paintContainer = new ElementPaint(container, null);\n    const root = new StackingContext(paintContainer);\n    const listItems: ElementPaint[] = [];\n    parseStackTree(paintContainer, root, root, listItems);\n    processListItems(paintContainer.container, listItems);\n    return root;\n};\n","import {Path} from './path';\nimport {BoundCurves} from './bound-curves';\nimport {isBezierCurve} from './bezier-curve';\n\nexport const parsePathForBorder = (curves: BoundCurves, borderSide: number): Path[] => {\n    switch (borderSide) {\n        case 0:\n            return createPathFromCurves(\n                curves.topLeftBorderBox,\n                curves.topLeftPaddingBox,\n                curves.topRightBorderBox,\n                curves.topRightPaddingBox\n            );\n        case 1:\n            return createPathFromCurves(\n                curves.topRightBorderBox,\n                curves.topRightPaddingBox,\n                curves.bottomRightBorderBox,\n                curves.bottomRightPaddingBox\n            );\n        case 2:\n            return createPathFromCurves(\n                curves.bottomRightBorderBox,\n                curves.bottomRightPaddingBox,\n                curves.bottomLeftBorderBox,\n                curves.bottomLeftPaddingBox\n            );\n        case 3:\n        default:\n            return createPathFromCurves(\n                curves.bottomLeftBorderBox,\n                curves.bottomLeftPaddingBox,\n                curves.topLeftBorderBox,\n                curves.topLeftPaddingBox\n            );\n    }\n};\n\nexport const parsePathForBorderDoubleOuter = (curves: BoundCurves, borderSide: number): Path[] => {\n    switch (borderSide) {\n        case 0:\n            return createPathFromCurves(\n                curves.topLeftBorderBox,\n                curves.topLeftBorderDoubleOuterBox,\n                curves.topRightBorderBox,\n                curves.topRightBorderDoubleOuterBox\n            );\n        case 1:\n            return createPathFromCurves(\n                curves.topRightBorderBox,\n                curves.topRightBorderDoubleOuterBox,\n                curves.bottomRightBorderBox,\n                curves.bottomRightBorderDoubleOuterBox\n            );\n        case 2:\n            return createPathFromCurves(\n                curves.bottomRightBorderBox,\n                curves.bottomRightBorderDoubleOuterBox,\n                curves.bottomLeftBorderBox,\n                curves.bottomLeftBorderDoubleOuterBox\n            );\n        case 3:\n        default:\n            return createPathFromCurves(\n                curves.bottomLeftBorderBox,\n                curves.bottomLeftBorderDoubleOuterBox,\n                curves.topLeftBorderBox,\n                curves.topLeftBorderDoubleOuterBox\n            );\n    }\n};\n\nexport const parsePathForBorderDoubleInner = (curves: BoundCurves, borderSide: number): Path[] => {\n    switch (borderSide) {\n        case 0:\n            return createPathFromCurves(\n                curves.topLeftBorderDoubleInnerBox,\n                curves.topLeftPaddingBox,\n                curves.topRightBorderDoubleInnerBox,\n                curves.topRightPaddingBox\n            );\n        case 1:\n            return createPathFromCurves(\n                curves.topRightBorderDoubleInnerBox,\n                curves.topRightPaddingBox,\n                curves.bottomRightBorderDoubleInnerBox,\n                curves.bottomRightPaddingBox\n            );\n        case 2:\n            return createPathFromCurves(\n                curves.bottomRightBorderDoubleInnerBox,\n                curves.bottomRightPaddingBox,\n                curves.bottomLeftBorderDoubleInnerBox,\n                curves.bottomLeftPaddingBox\n            );\n        case 3:\n        default:\n            return createPathFromCurves(\n                curves.bottomLeftBorderDoubleInnerBox,\n                curves.bottomLeftPaddingBox,\n                curves.topLeftBorderDoubleInnerBox,\n                curves.topLeftPaddingBox\n            );\n    }\n};\n\nexport const parsePathForBorderStroke = (curves: BoundCurves, borderSide: number): Path[] => {\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\nconst createStrokePathFromCurves = (outer1: Path, outer2: Path): Path[] => {\n    const path = [];\n    if (isBezierCurve(outer1)) {\n        path.push(outer1.subdivide(0.5, false));\n    } else {\n        path.push(outer1);\n    }\n\n    if (isBezierCurve(outer2)) {\n        path.push(outer2.subdivide(0.5, true));\n    } else {\n        path.push(outer2);\n    }\n\n    return path;\n};\n\nconst createPathFromCurves = (outer1: Path, inner1: Path, outer2: Path, inner2: Path): Path[] => {\n    const path = [];\n    if (isBezierCurve(outer1)) {\n        path.push(outer1.subdivide(0.5, false));\n    } else {\n        path.push(outer1);\n    }\n\n    if (isBezierCurve(outer2)) {\n        path.push(outer2.subdivide(0.5, true));\n    } else {\n        path.push(outer2);\n    }\n\n    if (isBezierCurve(inner2)) {\n        path.push(inner2.subdivide(0.5, true).reverse());\n    } else {\n        path.push(inner2);\n    }\n\n    if (isBezierCurve(inner1)) {\n        path.push(inner1.subdivide(0.5, false).reverse());\n    } else {\n        path.push(inner1);\n    }\n\n    return path;\n};\n","import {getAbsoluteValue} from '../css/types/length-percentage';\nimport {Bounds} from '../css/layout/bounds';\nimport {ElementContainer} from '../dom/element-container';\n\nexport const paddingBox = (element: ElementContainer): Bounds => {\n    const bounds = element.bounds;\n    const styles = element.styles;\n    return bounds.add(\n        styles.borderLeftWidth,\n        styles.borderTopWidth,\n        -(styles.borderRightWidth + styles.borderLeftWidth),\n        -(styles.borderTopWidth + styles.borderBottomWidth)\n    );\n};\n\nexport const contentBox = (element: ElementContainer): Bounds => {\n    const styles = element.styles;\n    const bounds = element.bounds;\n\n    const paddingLeft = getAbsoluteValue(styles.paddingLeft, bounds.width);\n    const paddingRight = getAbsoluteValue(styles.paddingRight, bounds.width);\n    const paddingTop = getAbsoluteValue(styles.paddingTop, bounds.width);\n    const paddingBottom = getAbsoluteValue(styles.paddingBottom, bounds.width);\n\n    return bounds.add(\n        paddingLeft + styles.borderLeftWidth,\n        paddingTop + styles.borderTopWidth,\n        -(styles.borderRightWidth + styles.borderLeftWidth + paddingLeft + paddingRight),\n        -(styles.borderTopWidth + styles.borderBottomWidth + paddingTop + paddingBottom)\n    );\n};\n","import {Bounds} from '../css/layout/bounds';\nimport {BACKGROUND_ORIGIN} from '../css/property-descriptors/background-origin';\nimport {ElementContainer} from '../dom/element-container';\nimport {BACKGROUND_SIZE, BackgroundSizeInfo} from '../css/property-descriptors/background-size';\nimport {Vector} from './vector';\nimport {BACKGROUND_REPEAT} from '../css/property-descriptors/background-repeat';\nimport {getAbsoluteValue, getAbsoluteValueForTuple, isLengthPercentage} from '../css/types/length-percentage';\nimport {CSSValue, isIdentToken} from '../css/syntax/parser';\nimport {contentBox, paddingBox} from './box-sizing';\nimport {Path} from './path';\nimport {BACKGROUND_CLIP} from '../css/property-descriptors/background-clip';\n\nexport const calculateBackgroundPositioningArea = (\n    backgroundOrigin: BACKGROUND_ORIGIN,\n    element: ElementContainer\n): Bounds => {\n    if (backgroundOrigin === BACKGROUND_ORIGIN.BORDER_BOX) {\n        return element.bounds;\n    }\n\n    if (backgroundOrigin === BACKGROUND_ORIGIN.CONTENT_BOX) {\n        return contentBox(element);\n    }\n\n    return paddingBox(element);\n};\n\nexport const calculateBackgroundPaintingArea = (backgroundClip: BACKGROUND_CLIP, element: ElementContainer): Bounds => {\n    if (backgroundClip === BACKGROUND_CLIP.BORDER_BOX) {\n        return element.bounds;\n    }\n\n    if (backgroundClip === BACKGROUND_CLIP.CONTENT_BOX) {\n        return contentBox(element);\n    }\n\n    return paddingBox(element);\n};\n\nexport const calculateBackgroundRendering = (\n    container: ElementContainer,\n    index: number,\n    intrinsicSize: [number | null, number | null, number | null]\n): [Path[], number, number, number, number] => {\n    const backgroundPositioningArea = calculateBackgroundPositioningArea(\n        getBackgroundValueForIndex(container.styles.backgroundOrigin, index),\n        container\n    );\n\n    const backgroundPaintingArea = calculateBackgroundPaintingArea(\n        getBackgroundValueForIndex(container.styles.backgroundClip, index),\n        container\n    );\n\n    const backgroundImageSize = calculateBackgroundSize(\n        getBackgroundValueForIndex(container.styles.backgroundSize, index),\n        intrinsicSize,\n        backgroundPositioningArea\n    );\n\n    const [sizeWidth, sizeHeight] = backgroundImageSize;\n\n    const position = getAbsoluteValueForTuple(\n        getBackgroundValueForIndex(container.styles.backgroundPosition, index),\n        backgroundPositioningArea.width - sizeWidth,\n        backgroundPositioningArea.height - sizeHeight\n    );\n\n    const path = calculateBackgroundRepeatPath(\n        getBackgroundValueForIndex(container.styles.backgroundRepeat, index),\n        position,\n        backgroundImageSize,\n        backgroundPositioningArea,\n        backgroundPaintingArea\n    );\n\n    const offsetX = Math.round(backgroundPositioningArea.left + position[0]);\n    const offsetY = Math.round(backgroundPositioningArea.top + position[1]);\n\n    return [path, offsetX, offsetY, sizeWidth, sizeHeight];\n};\n\nexport const isAuto = (token: CSSValue): boolean => isIdentToken(token) && token.value === BACKGROUND_SIZE.AUTO;\n\nconst hasIntrinsicValue = (value: number | null): value is number => typeof value === 'number';\n\nexport const calculateBackgroundSize = (\n    size: BackgroundSizeInfo[],\n    [intrinsicWidth, intrinsicHeight, intrinsicProportion]: [number | null, number | null, number | null],\n    bounds: Bounds\n): [number, number] => {\n    const [first, second] = size;\n\n    if (!first) {\n        return [0, 0];\n    }\n\n    if (isLengthPercentage(first) && second && isLengthPercentage(second)) {\n        return [getAbsoluteValue(first, bounds.width), getAbsoluteValue(second, bounds.height)];\n    }\n\n    const hasIntrinsicProportion = hasIntrinsicValue(intrinsicProportion);\n\n    if (isIdentToken(first) && (first.value === BACKGROUND_SIZE.CONTAIN || first.value === BACKGROUND_SIZE.COVER)) {\n        if (hasIntrinsicValue(intrinsicProportion)) {\n            const targetRatio = bounds.width / bounds.height;\n\n            return targetRatio < intrinsicProportion !== (first.value === BACKGROUND_SIZE.COVER)\n                ? [bounds.width, bounds.width / intrinsicProportion]\n                : [bounds.height * intrinsicProportion, bounds.height];\n        }\n\n        return [bounds.width, bounds.height];\n    }\n\n    const hasIntrinsicWidth = hasIntrinsicValue(intrinsicWidth);\n    const hasIntrinsicHeight = hasIntrinsicValue(intrinsicHeight);\n    const hasIntrinsicDimensions = hasIntrinsicWidth || hasIntrinsicHeight;\n\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 as number, intrinsicHeight as number];\n        }\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\n        if (!hasIntrinsicProportion && !hasIntrinsicDimensions) {\n            return [bounds.width, bounds.height];\n        }\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\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            const width = hasIntrinsicWidth\n                ? (intrinsicWidth as number)\n                : (intrinsicHeight as number) * (intrinsicProportion as number);\n            const height = hasIntrinsicHeight\n                ? (intrinsicHeight as number)\n                : (intrinsicWidth as number) / (intrinsicProportion as number);\n            return [width, height];\n        }\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        const width = hasIntrinsicWidth ? (intrinsicWidth as number) : bounds.width;\n        const height = hasIntrinsicHeight ? (intrinsicHeight as number) : bounds.height;\n        return [width, height];\n    }\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        let width = 0;\n        let height = 0;\n        if (isLengthPercentage(first)) {\n            width = getAbsoluteValue(first, bounds.width);\n        } else if (isLengthPercentage(second)) {\n            height = getAbsoluteValue(second, bounds.height);\n        }\n\n        if (isAuto(first)) {\n            width = height * (intrinsicProportion as number);\n        } else if (!second || isAuto(second)) {\n            height = width / (intrinsicProportion as number);\n        }\n\n        return [width, height];\n    }\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\n    let width = null;\n    let height = null;\n\n    if (isLengthPercentage(first)) {\n        width = getAbsoluteValue(first, bounds.width);\n    } else if (second && isLengthPercentage(second)) {\n        height = getAbsoluteValue(second, bounds.height);\n    }\n\n    if (width !== null && (!second || isAuto(second))) {\n        height =\n            hasIntrinsicWidth && hasIntrinsicHeight\n                ? (width / (intrinsicWidth as number)) * (intrinsicHeight as number)\n                : bounds.height;\n    }\n\n    if (height !== null && isAuto(first)) {\n        width =\n            hasIntrinsicWidth && hasIntrinsicHeight\n                ? (height / (intrinsicHeight as number)) * (intrinsicWidth as number)\n                : bounds.width;\n    }\n\n    if (width !== null && height !== null) {\n        return [width, height];\n    }\n\n    throw new Error(`Unable to calculate background-size for element`);\n};\n\nexport const getBackgroundValueForIndex = <T>(values: T[], index: number): T => {\n    const value = values[index];\n    if (typeof value === 'undefined') {\n        return values[0];\n    }\n\n    return value;\n};\n\nexport const calculateBackgroundRepeatPath = (\n    repeat: BACKGROUND_REPEAT,\n    [x, y]: [number, number],\n    [width, height]: [number, number],\n    backgroundPositioningArea: Bounds,\n    backgroundPaintingArea: Bounds\n): [Vector, Vector, Vector, Vector] => {\n    switch (repeat) {\n        case BACKGROUND_REPEAT.REPEAT_X:\n            return [\n                new Vector(Math.round(backgroundPositioningArea.left), Math.round(backgroundPositioningArea.top + y)),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width),\n                    Math.round(backgroundPositioningArea.top + y)\n                ),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width),\n                    Math.round(height + backgroundPositioningArea.top + y)\n                ),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left),\n                    Math.round(height + backgroundPositioningArea.top + y)\n                )\n            ];\n        case BACKGROUND_REPEAT.REPEAT_Y:\n            return [\n                new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top)),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + x + width),\n                    Math.round(backgroundPositioningArea.top)\n                ),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + x + width),\n                    Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top)\n                ),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + x),\n                    Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top)\n                )\n            ];\n        case BACKGROUND_REPEAT.NO_REPEAT:\n            return [\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + x),\n                    Math.round(backgroundPositioningArea.top + y)\n                ),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + x + width),\n                    Math.round(backgroundPositioningArea.top + y)\n                ),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + x + width),\n                    Math.round(backgroundPositioningArea.top + y + height)\n                ),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + x),\n                    Math.round(backgroundPositioningArea.top + y + height)\n                )\n            ];\n        default:\n            return [\n                new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.top)),\n                new Vector(\n                    Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width),\n                    Math.round(backgroundPaintingArea.top)\n                ),\n                new Vector(\n                    Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width),\n                    Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top)\n                ),\n                new Vector(\n                    Math.round(backgroundPaintingArea.left),\n                    Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top)\n                )\n            ];\n    }\n};\n","export const SMALL_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n","import {SMALL_IMAGE} from '../core/util';\nexport interface FontMetric {\n    baseline: number;\n    middle: number;\n}\n\nconst SAMPLE_TEXT = 'Hidden Text';\n\nexport class FontMetrics {\n    private readonly _data: {[key: string]: FontMetric};\n    private readonly _document: Document;\n\n    constructor(document: Document) {\n        this._data = {};\n        this._document = document;\n    }\n\n    private parseMetrics(fontFamily: string, fontSize: string): FontMetric {\n        const container = this._document.createElement('div');\n        const img = this._document.createElement('img');\n        const span = this._document.createElement('span');\n\n        const body = this._document.body as HTMLBodyElement;\n\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\n        body.appendChild(container);\n\n        img.src = SMALL_IMAGE;\n        img.width = 1;\n        img.height = 1;\n\n        img.style.margin = '0';\n        img.style.padding = '0';\n        img.style.verticalAlign = 'baseline';\n\n        span.style.fontFamily = fontFamily;\n        span.style.fontSize = fontSize;\n        span.style.margin = '0';\n        span.style.padding = '0';\n\n        span.appendChild(this._document.createTextNode(SAMPLE_TEXT));\n        container.appendChild(span);\n        container.appendChild(img);\n        const baseline = img.offsetTop - span.offsetTop + 2;\n\n        container.removeChild(span);\n        container.appendChild(this._document.createTextNode(SAMPLE_TEXT));\n\n        container.style.lineHeight = 'normal';\n        img.style.verticalAlign = 'super';\n\n        const middle = img.offsetTop - container.offsetTop + 2;\n\n        body.removeChild(container);\n\n        return {baseline, middle};\n    }\n    getMetrics(fontFamily: string, fontSize: string): FontMetric {\n        const key = `${fontFamily} ${fontSize}`;\n        if (typeof this._data[key] === 'undefined') {\n            this._data[key] = this.parseMetrics(fontFamily, fontSize);\n        }\n\n        return this._data[key];\n    }\n}\n","import {Context} from '../core/context';\nimport {RenderConfigurations} from './canvas/canvas-renderer';\n\nexport class Renderer {\n    constructor(protected readonly context: Context, protected readonly options: RenderConfigurations) {}\n}\n","import {ElementPaint, parseStackingContexts, StackingContext} from '../stacking-context';\nimport {asString, Color, isTransparent} from '../../css/types/color';\nimport {ElementContainer, FLAGS} from '../../dom/element-container';\nimport {BORDER_STYLE} from '../../css/property-descriptors/border-style';\nimport {CSSParsedDeclaration} from '../../css';\nimport {TextContainer} from '../../dom/text-container';\nimport {Path, transformPath} from '../path';\nimport {BACKGROUND_CLIP} from '../../css/property-descriptors/background-clip';\nimport {BoundCurves, calculateBorderBoxPath, calculateContentBoxPath, calculatePaddingBoxPath} from '../bound-curves';\nimport {BezierCurve, isBezierCurve} from '../bezier-curve';\nimport {Vector} from '../vector';\nimport {CSSImageType, CSSURLImage, isLinearGradient, isRadialGradient} from '../../css/types/image';\nimport {\n    parsePathForBorder,\n    parsePathForBorderDoubleInner,\n    parsePathForBorderDoubleOuter,\n    parsePathForBorderStroke\n} from '../border';\nimport {calculateBackgroundRendering, getBackgroundValueForIndex} from '../background';\nimport {isDimensionToken} from '../../css/syntax/parser';\nimport {segmentGraphemes, TextBounds} from '../../css/layout/text';\nimport {ImageElementContainer} from '../../dom/replaced-elements/image-element-container';\nimport {contentBox} from '../box-sizing';\nimport {CanvasElementContainer} from '../../dom/replaced-elements/canvas-element-container';\nimport {SVGElementContainer} from '../../dom/replaced-elements/svg-element-container';\nimport {ReplacedElementContainer} from '../../dom/replaced-elements';\nimport {EffectTarget, IElementEffect, isClipEffect, isOpacityEffect, isTransformEffect} from '../effects';\nimport {contains} from '../../core/bitwise';\nimport {calculateGradientDirection, calculateRadius, processColorStops} from '../../css/types/functions/gradient';\nimport {FIFTY_PERCENT, getAbsoluteValue} from '../../css/types/length-percentage';\nimport {TEXT_DECORATION_LINE} from '../../css/property-descriptors/text-decoration-line';\nimport {FontMetrics} from '../font-metrics';\nimport {DISPLAY} from '../../css/property-descriptors/display';\nimport {Bounds} from '../../css/layout/bounds';\nimport {LIST_STYLE_TYPE} from '../../css/property-descriptors/list-style-type';\nimport {computeLineHeight} from '../../css/property-descriptors/line-height';\nimport {CHECKBOX, INPUT_COLOR, InputElementContainer, RADIO} from '../../dom/replaced-elements/input-element-container';\nimport {TEXT_ALIGN} from '../../css/property-descriptors/text-align';\nimport {TextareaElementContainer} from '../../dom/elements/textarea-element-container';\nimport {SelectElementContainer} from '../../dom/elements/select-element-container';\nimport {IFrameElementContainer} from '../../dom/replaced-elements/iframe-element-container';\nimport {TextShadow} from '../../css/property-descriptors/text-shadow';\nimport {PAINT_ORDER_LAYER} from '../../css/property-descriptors/paint-order';\nimport {Renderer} from '../renderer';\nimport {Context} from '../../core/context';\nimport {DIRECTION} from '../../css/property-descriptors/direction';\n\nexport type RenderConfigurations = RenderOptions & {\n    backgroundColor: Color | null;\n};\n\nexport interface RenderOptions {\n    scale: number;\n    canvas?: HTMLCanvasElement;\n    x: number;\n    y: number;\n    width: number;\n    height: number;\n}\n\nconst MASK_OFFSET = 10000;\n\nexport class CanvasRenderer extends Renderer {\n    canvas: HTMLCanvasElement;\n    ctx: CanvasRenderingContext2D;\n    private readonly _activeEffects: IElementEffect[] = [];\n    private readonly fontMetrics: FontMetrics;\n\n    constructor(context: Context, options: RenderConfigurations) {\n        super(context, options);\n        this.canvas = options.canvas ? options.canvas : document.createElement('canvas');\n        this.ctx = this.canvas.getContext('2d') as CanvasRenderingContext2D;\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(\n            `Canvas renderer initialized (${options.width}x${options.height}) with scale ${options.scale}`\n        );\n    }\n\n    applyEffects(effects: IElementEffect[]): void {\n        while (this._activeEffects.length) {\n            this.popEffect();\n        }\n\n        effects.forEach((effect) => this.applyEffect(effect));\n    }\n\n    applyEffect(effect: IElementEffect): void {\n        this.ctx.save();\n        if (isOpacityEffect(effect)) {\n            this.ctx.globalAlpha = effect.opacity;\n        }\n\n        if (isTransformEffect(effect)) {\n            this.ctx.translate(effect.offsetX, effect.offsetY);\n            this.ctx.transform(\n                effect.matrix[0],\n                effect.matrix[1],\n                effect.matrix[2],\n                effect.matrix[3],\n                effect.matrix[4],\n                effect.matrix[5]\n            );\n            this.ctx.translate(-effect.offsetX, -effect.offsetY);\n        }\n\n        if (isClipEffect(effect)) {\n            this.path(effect.path);\n            this.ctx.clip();\n        }\n\n        this._activeEffects.push(effect);\n    }\n\n    popEffect(): void {\n        this._activeEffects.pop();\n        this.ctx.restore();\n    }\n\n    async renderStack(stack: StackingContext): Promise<void> {\n        const styles = stack.element.container.styles;\n        if (styles.isVisible()) {\n            await this.renderStackContent(stack);\n        }\n    }\n\n    async renderNode(paint: ElementPaint): Promise<void> {\n        if (contains(paint.container.flags, FLAGS.DEBUG_RENDER)) {\n            debugger;\n        }\n\n        if (paint.container.styles.isVisible()) {\n            await this.renderNodeBackgroundAndBorders(paint);\n            await this.renderNodeContent(paint);\n        }\n    }\n\n    renderTextWithLetterSpacing(text: TextBounds, letterSpacing: number, baseline: number): void {\n        if (letterSpacing === 0) {\n            this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + baseline);\n        } else {\n            const letters = segmentGraphemes(text.text);\n            letters.reduce((left, letter) => {\n                this.ctx.fillText(letter, left, text.bounds.top + baseline);\n\n                return left + this.ctx.measureText(letter).width;\n            }, text.bounds.left);\n        }\n    }\n\n    private createFontStyle(styles: CSSParsedDeclaration): string[] {\n        const fontVariant = styles.fontVariant\n            .filter((variant) => variant === 'normal' || variant === 'small-caps')\n            .join('');\n        const fontFamily = fixIOSSystemFonts(styles.fontFamily).join(', ');\n        const fontSize = isDimensionToken(styles.fontSize)\n            ? `${styles.fontSize.number}${styles.fontSize.unit}`\n            : `${styles.fontSize.number}px`;\n\n        return [\n            [styles.fontStyle, fontVariant, styles.fontWeight, fontSize, fontFamily].join(' '),\n            fontFamily,\n            fontSize\n        ];\n    }\n\n    async renderTextNode(text: TextContainer, styles: CSSParsedDeclaration): Promise<void> {\n        const [font, fontFamily, fontSize] = this.createFontStyle(styles);\n\n        this.ctx.font = font;\n\n        this.ctx.direction = styles.direction === DIRECTION.RTL ? 'rtl' : 'ltr';\n        this.ctx.textAlign = 'left';\n        this.ctx.textBaseline = 'alphabetic';\n        const {baseline, middle} = this.fontMetrics.getMetrics(fontFamily, fontSize);\n        const paintOrder = styles.paintOrder;\n\n        text.textBounds.forEach((text) => {\n            paintOrder.forEach((paintOrderLayer) => {\n                switch (paintOrderLayer) {\n                    case PAINT_ORDER_LAYER.FILL:\n                        this.ctx.fillStyle = asString(styles.color);\n                        this.renderTextWithLetterSpacing(text, styles.letterSpacing, baseline);\n                        const textShadows: TextShadow = styles.textShadow;\n\n                        if (textShadows.length && text.text.trim().length) {\n                            textShadows\n                                .slice(0)\n                                .reverse()\n                                .forEach((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\n                                    this.renderTextWithLetterSpacing(text, styles.letterSpacing, baseline);\n                                });\n\n                            this.ctx.shadowColor = '';\n                            this.ctx.shadowOffsetX = 0;\n                            this.ctx.shadowOffsetY = 0;\n                            this.ctx.shadowBlur = 0;\n                        }\n\n                        if (styles.textDecorationLine.length) {\n                            this.ctx.fillStyle = asString(styles.textDecorationColor || styles.color);\n                            styles.textDecorationLine.forEach((textDecorationLine) => {\n                                switch (textDecorationLine) {\n                                    case TEXT_DECORATION_LINE.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(\n                                            text.bounds.left,\n                                            Math.round(text.bounds.top + baseline),\n                                            text.bounds.width,\n                                            1\n                                        );\n\n                                        break;\n                                    case TEXT_DECORATION_LINE.OVERLINE:\n                                        this.ctx.fillRect(\n                                            text.bounds.left,\n                                            Math.round(text.bounds.top),\n                                            text.bounds.width,\n                                            1\n                                        );\n                                        break;\n                                    case TEXT_DECORATION_LINE.LINE_THROUGH:\n                                        // TODO try and find exact position for line-through\n                                        this.ctx.fillRect(\n                                            text.bounds.left,\n                                            Math.ceil(text.bounds.top + middle),\n                                            text.bounds.width,\n                                            1\n                                        );\n                                        break;\n                                }\n                            });\n                        }\n                        break;\n                    case PAINT_ORDER_LAYER.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 as any).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    }\n\n    renderReplacedElement(\n        container: ReplacedElementContainer,\n        curves: BoundCurves,\n        image: HTMLImageElement | HTMLCanvasElement\n    ): void {\n        if (image && container.intrinsicWidth > 0 && container.intrinsicHeight > 0) {\n            const box = contentBox(container);\n            const path = calculatePaddingBoxPath(curves);\n            this.path(path);\n            this.ctx.save();\n            this.ctx.clip();\n            this.ctx.drawImage(\n                image,\n                0,\n                0,\n                container.intrinsicWidth,\n                container.intrinsicHeight,\n                box.left,\n                box.top,\n                box.width,\n                box.height\n            );\n            this.ctx.restore();\n        }\n    }\n\n    async renderNodeContent(paint: ElementPaint): Promise<void> {\n        this.applyEffects(paint.getEffects(EffectTarget.CONTENT));\n        const container = paint.container;\n        const curves = paint.curves;\n        const styles = container.styles;\n        for (const child of container.textNodes) {\n            await this.renderTextNode(child, styles);\n        }\n\n        if (container instanceof ImageElementContainer) {\n            try {\n                const image = await this.context.cache.match(container.src);\n                this.renderReplacedElement(container, curves, image);\n            } catch (e) {\n                this.context.logger.error(`Error loading image ${container.src}`);\n            }\n        }\n\n        if (container instanceof CanvasElementContainer) {\n            this.renderReplacedElement(container, curves, container.canvas);\n        }\n\n        if (container instanceof SVGElementContainer) {\n            try {\n                const image = await this.context.cache.match(container.svg);\n                this.renderReplacedElement(container, curves, image);\n            } catch (e) {\n                this.context.logger.error(`Error loading svg ${container.svg.substring(0, 255)}`);\n            }\n        }\n\n        if (container instanceof IFrameElementContainer && container.tree) {\n            const 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\n            const canvas = await iframeRenderer.render(container.tree);\n            if (container.width && container.height) {\n                this.ctx.drawImage(\n                    canvas,\n                    0,\n                    0,\n                    container.width,\n                    container.height,\n                    container.bounds.left,\n                    container.bounds.top,\n                    container.bounds.width,\n                    container.bounds.height\n                );\n            }\n        }\n\n        if (container instanceof InputElementContainer) {\n            const size = Math.min(container.bounds.width, container.bounds.height);\n\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\n                    this.ctx.fillStyle = asString(INPUT_COLOR);\n                    this.ctx.fill();\n                    this.ctx.restore();\n                }\n            } else if (container.type === RADIO) {\n                if (container.checked) {\n                    this.ctx.save();\n                    this.ctx.beginPath();\n                    this.ctx.arc(\n                        container.bounds.left + size / 2,\n                        container.bounds.top + size / 2,\n                        size / 4,\n                        0,\n                        Math.PI * 2,\n                        true\n                    );\n                    this.ctx.fillStyle = asString(INPUT_COLOR);\n                    this.ctx.fill();\n                    this.ctx.restore();\n                }\n            }\n        }\n\n        if (isTextInputElement(container) && container.value.length) {\n            const [fontFamily, fontSize] = this.createFontStyle(styles);\n            const {baseline} = this.fontMetrics.getMetrics(fontFamily, fontSize);\n\n            this.ctx.font = fontFamily;\n            this.ctx.fillStyle = asString(styles.color);\n\n            this.ctx.textBaseline = 'alphabetic';\n            this.ctx.textAlign = canvasTextAlign(container.styles.textAlign);\n\n            const bounds = contentBox(container);\n\n            let x = 0;\n\n            switch (container.styles.textAlign) {\n                case TEXT_ALIGN.CENTER:\n                    x += bounds.width / 2;\n                    break;\n                case TEXT_ALIGN.RIGHT:\n                    x += bounds.width;\n                    break;\n            }\n\n            const textBounds = bounds.add(x, 0, 0, -bounds.height / 2 + 1);\n\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\n            this.ctx.clip();\n            this.renderTextWithLetterSpacing(\n                new TextBounds(container.value, textBounds),\n                styles.letterSpacing,\n                baseline\n            );\n            this.ctx.restore();\n            this.ctx.textBaseline = 'alphabetic';\n            this.ctx.textAlign = 'left';\n        }\n\n        if (contains(container.styles.display, DISPLAY.LIST_ITEM)) {\n            if (container.styles.listStyleImage !== null) {\n                const img = container.styles.listStyleImage;\n                if (img.type === CSSImageType.URL) {\n                    let image;\n                    const url = (img as CSSURLImage).url;\n                    try {\n                        image = await this.context.cache.match(url);\n                        this.ctx.drawImage(image, container.bounds.left - (image.width + 10), container.bounds.top);\n                    } catch (e) {\n                        this.context.logger.error(`Error loading list-style-image ${url}`);\n                    }\n                }\n            } else if (paint.listValue && container.styles.listStyleType !== LIST_STYLE_TYPE.NONE) {\n                const [fontFamily] = this.createFontStyle(styles);\n\n                this.ctx.font = fontFamily;\n                this.ctx.fillStyle = asString(styles.color);\n\n                this.ctx.textBaseline = 'middle';\n                this.ctx.textAlign = 'right';\n                const bounds = new Bounds(\n                    container.bounds.left,\n                    container.bounds.top + getAbsoluteValue(container.styles.paddingTop, container.bounds.width),\n                    container.bounds.width,\n                    computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 1\n                );\n\n                this.renderTextWithLetterSpacing(\n                    new TextBounds(paint.listValue, bounds),\n                    styles.letterSpacing,\n                    computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 2\n                );\n                this.ctx.textBaseline = 'bottom';\n                this.ctx.textAlign = 'left';\n            }\n        }\n    }\n\n    async renderStackContent(stack: StackingContext): Promise<void> {\n        if (contains(stack.element.container.flags, FLAGS.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        await this.renderNodeBackgroundAndBorders(stack.element);\n        // 2. the child stacking contexts with negative stack levels (most negative first).\n        for (const child of stack.negativeZIndex) {\n            await this.renderStack(child);\n        }\n        // 3. For all its in-flow, non-positioned, block-level descendants in tree order:\n        await this.renderNodeContent(stack.element);\n\n        for (const child of stack.nonInlineLevel) {\n            await this.renderNode(child);\n        }\n        // 4. All non-positioned floating descendants, in tree order. For each one of these,\n        // treat the element as if it created a new stacking context, but any positioned descendants and descendants\n        // which actually create a new stacking context should be considered part of the parent stacking context,\n        // not this new one.\n        for (const child of stack.nonPositionedFloats) {\n            await this.renderStack(child);\n        }\n        // 5. the in-flow, inline-level, non-positioned descendants, including inline tables and inline blocks.\n        for (const child of stack.nonPositionedInlineLevel) {\n            await this.renderStack(child);\n        }\n        for (const child of stack.inlineLevel) {\n            await this.renderNode(child);\n        }\n        // 6. All positioned, opacity or transform descendants, in tree order that fall into the following categories:\n        //  All positioned descendants with 'z-index: auto' or 'z-index: 0', in tree order.\n        //  For those with 'z-index: auto', treat the element as if it created a new stacking context,\n        //  but any positioned descendants and descendants which actually create a new stacking context should be\n        //  considered part of the parent stacking context, not this new one. For those with 'z-index: 0',\n        //  treat the stacking context generated atomically.\n        //\n        //  All opacity descendants with opacity less than 1\n        //\n        //  All transform descendants with transform other than none\n        for (const child of stack.zeroOrAutoZIndexOrTransformedOrOpacity) {\n            await this.renderStack(child);\n        }\n        // 7. Stacking contexts formed by positioned descendants with z-indices greater than or equal to 1 in z-index\n        // order (smallest first) then tree order.\n        for (const child of stack.positiveZIndex) {\n            await this.renderStack(child);\n        }\n    }\n\n    mask(paths: Path[]): void {\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\n    path(paths: Path[]): void {\n        this.ctx.beginPath();\n        this.formatPath(paths);\n        this.ctx.closePath();\n    }\n\n    formatPath(paths: Path[]): void {\n        paths.forEach((point, index) => {\n            const start: Vector = isBezierCurve(point) ? point.start : point;\n            if (index === 0) {\n                this.ctx.moveTo(start.x, start.y);\n            } else {\n                this.ctx.lineTo(start.x, start.y);\n            }\n\n            if (isBezierCurve(point)) {\n                this.ctx.bezierCurveTo(\n                    point.startControl.x,\n                    point.startControl.y,\n                    point.endControl.x,\n                    point.endControl.y,\n                    point.end.x,\n                    point.end.y\n                );\n            }\n        });\n    }\n\n    renderRepeat(path: Path[], pattern: CanvasPattern | CanvasGradient, offsetX: number, offsetY: number): void {\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\n    resizeImage(image: HTMLImageElement, width: number, height: number): HTMLCanvasElement | HTMLImageElement {\n        if (image.width === width && image.height === height) {\n            return image;\n        }\n\n        const ownerDocument = this.canvas.ownerDocument ?? document;\n        const canvas = ownerDocument.createElement('canvas');\n        canvas.width = Math.max(1, width);\n        canvas.height = Math.max(1, height);\n        const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n        ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, width, height);\n        return canvas;\n    }\n\n    async renderBackgroundImage(container: ElementContainer): Promise<void> {\n        let index = container.styles.backgroundImage.length - 1;\n        for (const backgroundImage of container.styles.backgroundImage.slice(0).reverse()) {\n            if (backgroundImage.type === CSSImageType.URL) {\n                let image;\n                const url = (backgroundImage as CSSURLImage).url;\n                try {\n                    image = await this.context.cache.match(url);\n                } catch (e) {\n                    this.context.logger.error(`Error loading background-image ${url}`);\n                }\n\n                if (image) {\n                    const [path, x, y, width, height] = calculateBackgroundRendering(container, index, [\n                        image.width,\n                        image.height,\n                        image.width / image.height\n                    ]);\n                    const pattern = this.ctx.createPattern(\n                        this.resizeImage(image, width, height),\n                        'repeat'\n                    ) as CanvasPattern;\n                    this.renderRepeat(path, pattern, x, y);\n                }\n            } else if (isLinearGradient(backgroundImage)) {\n                const [path, x, y, width, height] = calculateBackgroundRendering(container, index, [null, null, null]);\n                const [lineLength, x0, x1, y0, y1] = calculateGradientDirection(backgroundImage.angle, width, height);\n\n                const canvas = document.createElement('canvas');\n                canvas.width = width;\n                canvas.height = height;\n                const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n                const gradient = ctx.createLinearGradient(x0, y0, x1, y1);\n\n                processColorStops(backgroundImage.stops, lineLength).forEach((colorStop) =>\n                    gradient.addColorStop(colorStop.stop, asString(colorStop.color))\n                );\n\n                ctx.fillStyle = gradient;\n                ctx.fillRect(0, 0, width, height);\n                if (width > 0 && height > 0) {\n                    const pattern = this.ctx.createPattern(canvas, 'repeat') as CanvasPattern;\n                    this.renderRepeat(path, pattern, x, y);\n                }\n            } else if (isRadialGradient(backgroundImage)) {\n                const [path, left, top, width, height] = calculateBackgroundRendering(container, index, [\n                    null,\n                    null,\n                    null\n                ]);\n                const position = backgroundImage.position.length === 0 ? [FIFTY_PERCENT] : backgroundImage.position;\n                const x = getAbsoluteValue(position[0], width);\n                const y = getAbsoluteValue(position[position.length - 1], height);\n\n                const [rx, ry] = calculateRadius(backgroundImage, x, y, width, height);\n                if (rx > 0 && ry > 0) {\n                    const radialGradient = this.ctx.createRadialGradient(left + x, top + y, 0, left + x, top + y, rx);\n\n                    processColorStops(backgroundImage.stops, rx * 2).forEach((colorStop) =>\n                        radialGradient.addColorStop(colorStop.stop, asString(colorStop.color))\n                    );\n\n                    this.path(path);\n                    this.ctx.fillStyle = radialGradient;\n                    if (rx !== ry) {\n                        // transforms for elliptical radial gradient\n                        const midX = container.bounds.left + 0.5 * container.bounds.width;\n                        const midY = container.bounds.top + 0.5 * container.bounds.height;\n                        const f = ry / rx;\n                        const invF = 1 / f;\n\n                        this.ctx.save();\n                        this.ctx.translate(midX, midY);\n                        this.ctx.transform(1, 0, 0, f, 0, 0);\n                        this.ctx.translate(-midX, -midY);\n\n                        this.ctx.fillRect(left, invF * (top - midY) + midY, width, height * invF);\n                        this.ctx.restore();\n                    } else {\n                        this.ctx.fill();\n                    }\n                }\n            }\n            index--;\n        }\n    }\n\n    async renderSolidBorder(color: Color, side: number, curvePoints: BoundCurves): Promise<void> {\n        this.path(parsePathForBorder(curvePoints, side));\n        this.ctx.fillStyle = asString(color);\n        this.ctx.fill();\n    }\n\n    async renderDoubleBorder(color: Color, width: number, side: number, curvePoints: BoundCurves): Promise<void> {\n        if (width < 3) {\n            await this.renderSolidBorder(color, side, curvePoints);\n            return;\n        }\n\n        const outerPaths = parsePathForBorderDoubleOuter(curvePoints, side);\n        this.path(outerPaths);\n        this.ctx.fillStyle = asString(color);\n        this.ctx.fill();\n        const innerPaths = parsePathForBorderDoubleInner(curvePoints, side);\n        this.path(innerPaths);\n        this.ctx.fill();\n    }\n\n    async renderNodeBackgroundAndBorders(paint: ElementPaint): Promise<void> {\n        this.applyEffects(paint.getEffects(EffectTarget.BACKGROUND_BORDERS));\n        const styles = paint.container.styles;\n        const hasBackground = !isTransparent(styles.backgroundColor) || styles.backgroundImage.length;\n\n        const 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\n        const backgroundPaintingArea = calculateBackgroundCurvedPaintingArea(\n            getBackgroundValueForIndex(styles.backgroundClip, 0),\n            paint.curves\n        );\n\n        if (hasBackground || styles.boxShadow.length) {\n            this.ctx.save();\n            this.path(backgroundPaintingArea);\n            this.ctx.clip();\n\n            if (!isTransparent(styles.backgroundColor)) {\n                this.ctx.fillStyle = asString(styles.backgroundColor);\n                this.ctx.fill();\n            }\n\n            await this.renderBackgroundImage(paint.container);\n\n            this.ctx.restore();\n\n            styles.boxShadow\n                .slice(0)\n                .reverse()\n                .forEach((shadow) => {\n                    this.ctx.save();\n                    const borderBoxArea = calculateBorderBoxPath(paint.curves);\n                    const maskOffset = shadow.inset ? 0 : MASK_OFFSET;\n                    const shadowPaintingArea = transformPath(\n                        borderBoxArea,\n                        -maskOffset + (shadow.inset ? 1 : -1) * shadow.spread.number,\n                        (shadow.inset ? 1 : -1) * shadow.spread.number,\n                        shadow.spread.number * (shadow.inset ? -2 : 2),\n                        shadow.spread.number * (shadow.inset ? -2 : 2)\n                    );\n\n                    if (shadow.inset) {\n                        this.path(borderBoxArea);\n                        this.ctx.clip();\n                        this.mask(shadowPaintingArea);\n                    } else {\n                        this.mask(borderBoxArea);\n                        this.ctx.clip();\n                        this.path(shadowPaintingArea);\n                    }\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\n                    this.ctx.fill();\n                    this.ctx.restore();\n                });\n        }\n\n        let side = 0;\n        for (const border of borders) {\n            if (border.style !== BORDER_STYLE.NONE && !isTransparent(border.color) && border.width > 0) {\n                if (border.style === BORDER_STYLE.DASHED) {\n                    await this.renderDashedDottedBorder(\n                        border.color,\n                        border.width,\n                        side,\n                        paint.curves,\n                        BORDER_STYLE.DASHED\n                    );\n                } else if (border.style === BORDER_STYLE.DOTTED) {\n                    await this.renderDashedDottedBorder(\n                        border.color,\n                        border.width,\n                        side,\n                        paint.curves,\n                        BORDER_STYLE.DOTTED\n                    );\n                } else if (border.style === BORDER_STYLE.DOUBLE) {\n                    await this.renderDoubleBorder(border.color, border.width, side, paint.curves);\n                } else {\n                    await this.renderSolidBorder(border.color, side, paint.curves);\n                }\n            }\n            side++;\n        }\n    }\n\n    async renderDashedDottedBorder(\n        color: Color,\n        width: number,\n        side: number,\n        curvePoints: BoundCurves,\n        style: BORDER_STYLE\n    ): Promise<void> {\n        this.ctx.save();\n\n        const strokePaths = parsePathForBorderStroke(curvePoints, side);\n        const boxPaths = parsePathForBorder(curvePoints, side);\n\n        if (style === BORDER_STYLE.DASHED) {\n            this.path(boxPaths);\n            this.ctx.clip();\n        }\n\n        let startX, startY, endX, endY;\n        if (isBezierCurve(boxPaths[0])) {\n            startX = (boxPaths[0] as BezierCurve).start.x;\n            startY = (boxPaths[0] as BezierCurve).start.y;\n        } else {\n            startX = (boxPaths[0] as Vector).x;\n            startY = (boxPaths[0] as Vector).y;\n        }\n        if (isBezierCurve(boxPaths[1])) {\n            endX = (boxPaths[1] as BezierCurve).end.x;\n            endY = (boxPaths[1] as BezierCurve).end.y;\n        } else {\n            endX = (boxPaths[1] as Vector).x;\n            endY = (boxPaths[1] as Vector).y;\n        }\n\n        let length;\n        if (side === 0 || side === 2) {\n            length = Math.abs(startX - endX);\n        } else {\n            length = Math.abs(startY - endY);\n        }\n\n        this.ctx.beginPath();\n        if (style === BORDER_STYLE.DOTTED) {\n            this.formatPath(strokePaths);\n        } else {\n            this.formatPath(boxPaths.slice(0, 2));\n        }\n\n        let dashLength = width < 3 ? width * 3 : width * 2;\n        let spaceLength = width < 3 ? width * 2 : width;\n        if (style === BORDER_STYLE.DOTTED) {\n            dashLength = width;\n            spaceLength = width;\n        }\n\n        let useLineDash = true;\n        if (length <= dashLength * 2) {\n            useLineDash = false;\n        } else if (length <= dashLength * 2 + spaceLength) {\n            const multiplier = length / (2 * dashLength + spaceLength);\n            dashLength *= multiplier;\n            spaceLength *= multiplier;\n        } else {\n            const numberOfDashes = Math.floor((length + spaceLength) / (dashLength + spaceLength));\n            const minSpace = (length - numberOfDashes * dashLength) / (numberOfDashes - 1);\n            const 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\n        if (useLineDash) {\n            if (style === BORDER_STYLE.DOTTED) {\n                this.ctx.setLineDash([0, dashLength + spaceLength]);\n            } else {\n                this.ctx.setLineDash([dashLength, spaceLength]);\n            }\n        }\n\n        if (style === BORDER_STYLE.DOTTED) {\n            this.ctx.lineCap = 'round';\n            this.ctx.lineWidth = width;\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\n        // dashed round edge gap\n        if (style === BORDER_STYLE.DASHED) {\n            if (isBezierCurve(boxPaths[0])) {\n                const path1 = boxPaths[3] as BezierCurve;\n                const path2 = boxPaths[0] as BezierCurve;\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                const path1 = boxPaths[1] as BezierCurve;\n                const path2 = boxPaths[2] as BezierCurve;\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\n        this.ctx.restore();\n    }\n\n    async render(element: ElementContainer): Promise<HTMLCanvasElement> {\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\n        const stack = parseStackingContexts(element);\n\n        await this.renderStack(stack);\n        this.applyEffects([]);\n        return this.canvas;\n    }\n}\n\nconst isTextInputElement = (\n    container: ElementContainer\n): container is InputElementContainer | TextareaElementContainer | SelectElementContainer => {\n    if (container instanceof TextareaElementContainer) {\n        return true;\n    } else if (container instanceof SelectElementContainer) {\n        return true;\n    } else if (container instanceof InputElementContainer && container.type !== RADIO && container.type !== CHECKBOX) {\n        return true;\n    }\n    return false;\n};\n\nconst calculateBackgroundCurvedPaintingArea = (clip: BACKGROUND_CLIP, curves: BoundCurves): Path[] => {\n    switch (clip) {\n        case BACKGROUND_CLIP.BORDER_BOX:\n            return calculateBorderBoxPath(curves);\n        case BACKGROUND_CLIP.CONTENT_BOX:\n            return calculateContentBoxPath(curves);\n        case BACKGROUND_CLIP.PADDING_BOX:\n        default:\n            return calculatePaddingBoxPath(curves);\n    }\n};\n\nconst canvasTextAlign = (textAlign: TEXT_ALIGN): CanvasTextAlign => {\n    switch (textAlign) {\n        case TEXT_ALIGN.CENTER:\n            return 'center';\n        case TEXT_ALIGN.RIGHT:\n            return 'right';\n        case TEXT_ALIGN.LEFT:\n        default:\n            return 'left';\n    }\n};\n\n// see https://github.com/niklasvh/html2canvas/pull/2645\nconst iOSBrokenFonts = ['-apple-system', 'system-ui'];\n\nconst fixIOSSystemFonts = (fontFamilies: string[]): string[] => {\n    return /iPhone OS 15_(0|1)/.test(window.navigator.userAgent)\n        ? fontFamilies.filter((fontFamily) => iOSBrokenFonts.indexOf(fontFamily) === -1)\n        : fontFamilies;\n};\n","import {RenderConfigurations} from './canvas-renderer';\nimport {createForeignObjectSVG} from '../../core/features';\nimport {asString} from '../../css/types/color';\nimport {Renderer} from '../renderer';\nimport {Context} from '../../core/context';\n\nexport class ForeignObjectRenderer extends Renderer {\n    canvas: HTMLCanvasElement;\n    ctx: CanvasRenderingContext2D;\n    options: RenderConfigurations;\n\n    constructor(context: Context, options: RenderConfigurations) {\n        super(context, options);\n        this.canvas = options.canvas ? options.canvas : document.createElement('canvas');\n        this.ctx = this.canvas.getContext('2d') as CanvasRenderingContext2D;\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\n        this.ctx.scale(this.options.scale, this.options.scale);\n        this.ctx.translate(-options.x, -options.y);\n        this.context.logger.debug(\n            `EXPERIMENTAL ForeignObject renderer initialized (${options.width}x${options.height} at ${options.x},${options.y}) with scale ${options.scale}`\n        );\n    }\n\n    async render(element: HTMLElement): Promise<HTMLCanvasElement> {\n        const svg = createForeignObjectSVG(\n            this.options.width * this.options.scale,\n            this.options.height * this.options.scale,\n            this.options.scale,\n            this.options.scale,\n            element\n        );\n\n        const img = await loadSerializedSVG(svg);\n\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\n        this.ctx.drawImage(img, -this.options.x * this.options.scale, -this.options.y * this.options.scale);\n\n        return this.canvas;\n    }\n}\n\nexport const loadSerializedSVG = (svg: Node): Promise<HTMLImageElement> =>\n    new Promise((resolve, reject) => {\n        const img = new Image();\n        img.onload = () => {\n            resolve(img);\n        };\n        img.onerror = reject;\n\n        img.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(new XMLSerializer().serializeToString(svg))}`;\n    });\n","export interface LoggerOptions {\n    id: string;\n    enabled: boolean;\n}\n\nexport class Logger {\n    static instances: {[key: string]: Logger} = {};\n\n    private readonly id: string;\n    private readonly enabled: boolean;\n    private readonly start: number;\n\n    constructor({id, enabled}: LoggerOptions) {\n        this.id = id;\n        this.enabled = enabled;\n        this.start = Date.now();\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    debug(...args: unknown[]): void {\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(this.id, `${this.getTime()}ms`, ...args);\n            } else {\n                this.info(...args);\n            }\n        }\n    }\n\n    getTime(): number {\n        return Date.now() - this.start;\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    info(...args: unknown[]): void {\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(this.id, `${this.getTime()}ms`, ...args);\n            }\n        }\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    warn(...args: unknown[]): void {\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(this.id, `${this.getTime()}ms`, ...args);\n            } else {\n                this.info(...args);\n            }\n        }\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    error(...args: unknown[]): void {\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(this.id, `${this.getTime()}ms`, ...args);\n            } else {\n                this.info(...args);\n            }\n        }\n    }\n}\n","import {Logger} from './logger';\nimport {Cache, ResourceOptions} from './cache-storage';\nimport {Bounds} from '../css/layout/bounds';\n\nexport type ContextOptions = {\n    logging: boolean;\n    cache?: Cache;\n} & ResourceOptions;\n\nexport class Context {\n    private readonly instanceName = `#${Context.instanceCount++}`;\n    readonly logger: Logger;\n    readonly cache: Cache;\n\n    private static instanceCount = 1;\n\n    constructor(options: ContextOptions, public windowBounds: Bounds) {\n        this.logger = new Logger({id: this.instanceName, enabled: options.logging});\n        this.cache = options.cache ?? new Cache(this, options);\n    }\n}\n","import {Bounds, parseBounds, parseDocumentSize} from './css/layout/bounds';\nimport {COLORS, isTransparent, parseColor} from './css/types/color';\nimport {CloneConfigurations, CloneOptions, DocumentCloner, WindowOptions} from './dom/document-cloner';\nimport {isBodyElement, isHTMLElement, parseTree} from './dom/node-parser';\nimport {CacheStorage} from './core/cache-storage';\nimport {CanvasRenderer, RenderConfigurations, RenderOptions} from './render/canvas/canvas-renderer';\nimport {ForeignObjectRenderer} from './render/canvas/foreignobject-renderer';\nimport {Context, ContextOptions} from './core/context';\n\nexport type Options = CloneOptions &\n    WindowOptions &\n    RenderOptions &\n    ContextOptions & {\n        backgroundColor: string | null;\n        foreignObjectRendering: boolean;\n        removeContainer?: boolean;\n    };\n\nconst html2canvas = (element: HTMLElement, options: Partial<Options> = {}): Promise<HTMLCanvasElement> => {\n    return renderElement(element, options);\n};\n\nexport default html2canvas;\n\nif (typeof window !== 'undefined') {\n    CacheStorage.setContext(window);\n}\n\nconst renderElement = async (element: HTMLElement, opts: Partial<Options>): Promise<HTMLCanvasElement> => {\n    if (!element || typeof element !== 'object') {\n        return Promise.reject('Invalid element provided as first argument');\n    }\n    const ownerDocument = element.ownerDocument;\n\n    if (!ownerDocument) {\n        throw new Error(`Element is not attached to a Document`);\n    }\n\n    const defaultView = ownerDocument.defaultView;\n\n    if (!defaultView) {\n        throw new Error(`Document is not attached to a Window`);\n    }\n\n    const resourceOptions = {\n        allowTaint: opts.allowTaint ?? false,\n        imageTimeout: opts.imageTimeout ?? 15000,\n        proxy: opts.proxy,\n        useCORS: opts.useCORS ?? false\n    };\n\n    const contextOptions = {\n        logging: opts.logging ?? true,\n        cache: opts.cache,\n        ...resourceOptions\n    };\n\n    const windowOptions = {\n        windowWidth: opts.windowWidth ?? defaultView.innerWidth,\n        windowHeight: opts.windowHeight ?? defaultView.innerHeight,\n        scrollX: opts.scrollX ?? defaultView.pageXOffset,\n        scrollY: opts.scrollY ?? defaultView.pageYOffset\n    };\n\n    const windowBounds = new Bounds(\n        windowOptions.scrollX,\n        windowOptions.scrollY,\n        windowOptions.windowWidth,\n        windowOptions.windowHeight\n    );\n\n    const context = new Context(contextOptions, windowBounds);\n\n    const foreignObjectRendering = opts.foreignObjectRendering ?? false;\n\n    const cloneOptions: CloneConfigurations = {\n        allowTaint: opts.allowTaint ?? false,\n        onclone: opts.onclone,\n        ignoreElements: opts.ignoreElements,\n        inlineImages: foreignObjectRendering,\n        copyStyles: foreignObjectRendering\n    };\n\n    context.logger.debug(\n        `Starting document clone with size ${windowBounds.width}x${\n            windowBounds.height\n        } scrolled to ${-windowBounds.left},${-windowBounds.top}`\n    );\n\n    const documentCloner = new DocumentCloner(context, element, cloneOptions);\n    const clonedElement = documentCloner.clonedReferenceElement;\n    if (!clonedElement) {\n        return Promise.reject(`Unable to find element in cloned iframe`);\n    }\n\n    const container = await documentCloner.toIFrame(ownerDocument, windowBounds);\n\n    const {width, height, left, top} =\n        isBodyElement(clonedElement) || isHTMLElement(clonedElement)\n            ? parseDocumentSize(clonedElement.ownerDocument)\n            : parseBounds(context, clonedElement);\n\n    const backgroundColor = parseBackgroundColor(context, clonedElement, opts.backgroundColor);\n\n    const renderOptions: RenderConfigurations = {\n        canvas: opts.canvas,\n        backgroundColor,\n        scale: opts.scale ?? defaultView.devicePixelRatio ?? 1,\n        x: (opts.x ?? 0) + left,\n        y: (opts.y ?? 0) + top,\n        width: opts.width ?? Math.ceil(width),\n        height: opts.height ?? Math.ceil(height)\n    };\n\n    let canvas;\n\n    if (foreignObjectRendering) {\n        context.logger.debug(`Document cloned, using foreign object rendering`);\n        const renderer = new ForeignObjectRenderer(context, renderOptions);\n        canvas = await renderer.render(clonedElement);\n    } else {\n        context.logger.debug(\n            `Document cloned, element located at ${left},${top} with size ${width}x${height} using computed rendering`\n        );\n\n        context.logger.debug(`Starting DOM parsing`);\n        const root = parseTree(context, clonedElement);\n\n        if (backgroundColor === root.styles.backgroundColor) {\n            root.styles.backgroundColor = COLORS.TRANSPARENT;\n        }\n\n        context.logger.debug(\n            `Starting renderer for element at ${renderOptions.x},${renderOptions.y} with size ${renderOptions.width}x${renderOptions.height}`\n        );\n\n        const renderer = new CanvasRenderer(context, renderOptions);\n        canvas = await renderer.render(root);\n    }\n\n    if (opts.removeContainer ?? 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\n    context.logger.debug(`Finished rendering`);\n    return canvas;\n};\n\nconst parseBackgroundColor = (context: Context, element: HTMLElement, backgroundColorOverride?: string | null) => {\n    const ownerDocument = element.ownerDocument;\n    // http://www.w3.org/TR/css3-background/#special-backgrounds\n    const documentBackgroundColor = ownerDocument.documentElement\n        ? parseColor(context, getComputedStyle(ownerDocument.documentElement).backgroundColor as string)\n        : COLORS.TRANSPARENT;\n    const bodyBackgroundColor = ownerDocument.body\n        ? parseColor(context, getComputedStyle(ownerDocument.body).backgroundColor as string)\n        : COLORS.TRANSPARENT;\n\n    const defaultBackgroundColor =\n        typeof backgroundColorOverride === 'string'\n            ? parseColor(context, backgroundColorOverride)\n            : backgroundColorOverride === null\n            ? COLORS.TRANSPARENT\n            : 0xffffffff;\n\n    return element === ownerDocument.documentElement\n        ? isTransparent(documentBackgroundColor)\n            ? isTransparent(bodyBackgroundColor)\n                ? defaultBackgroundColor\n                : bodyBackgroundColor\n            : documentBackgroundColor\n        : defaultBackgroundColor;\n};\n"],"names":["toCodePoints","fromCodePoint","chars","lookup","i","decode","polyUint16Array","polyUint32Array","UTRIE2_SHIFT_2","UTRIE2_SHIFT_1","UTRIE2_INDEX_SHIFT","UTRIE2_SHIFT_1_2","UTRIE2_LSCP_INDEX_2_OFFSET","UTRIE2_DATA_BLOCK_LENGTH","UTRIE2_DATA_MASK","UTRIE2_LSCP_INDEX_2_LENGTH","UTRIE2_INDEX_2_BMP_LENGTH","UTRIE2_UTF8_2B_INDEX_2_OFFSET","UTRIE2_UTF8_2B_INDEX_2_LENGTH","UTRIE2_INDEX_1_OFFSET","UTRIE2_OMITTED_BMP_INDEX_1_LENGTH","UTRIE2_INDEX_2_BLOCK_LENGTH","UTRIE2_INDEX_2_MASK","slice16","slice32","createTrieFromBase64","Trie","base64","CR","LF","ZWJ","RI","BREAK_NOT_ALLOWED","BREAK_ALLOWED","UnicodeTrie","SPACE","color","colorType","angle","angleType","transform","loadSerializedSVG"],"mappings":";;;;;;;;;;;IAAA;IACA;AACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,IAAI,aAAa,GAAG,SAAS,CAAC,EAAE,CAAC,EAAE;IACnC,IAAI,aAAa,GAAG,MAAM,CAAC,cAAc;IACzC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,KAAK,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;IACpF,QAAQ,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1G,IAAI,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC;AACF;IACO,SAAS,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE;IAChC,IAAI,IAAI,OAAO,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,IAAI;IAC7C,QAAQ,MAAM,IAAI,SAAS,CAAC,sBAAsB,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,+BAA+B,CAAC,CAAC;IAClG,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxB,IAAI,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;IAC3C,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACzF,CAAC;AACD;IACO,IAAI,QAAQ,GAAG,WAAW;IACjC,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,QAAQ,CAAC,CAAC,EAAE;IACrD,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;IAC7D,YAAY,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7B,YAAY,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,SAAS;IACT,QAAQ,OAAO,CAAC,CAAC;IACjB,MAAK;IACL,IAAI,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3C,EAAC;AA4BD;IACO,SAAS,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE;IAC7D,IAAI,SAAS,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,OAAO,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IAChH,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,UAAU,OAAO,EAAE,MAAM,EAAE;IAC/D,QAAQ,SAAS,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;IACnG,QAAQ,SAAS,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;IACtG,QAAQ,SAAS,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE;IACtH,QAAQ,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9E,KAAK,CAAC,CAAC;IACP,CAAC;AACD;IACO,SAAS,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE;IAC3C,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrH,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,MAAM,KAAK,UAAU,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7J,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE,EAAE,OAAO,UAAU,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;IACtE,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE;IACtB,QAAQ,IAAI,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAC;IACtE,QAAQ,OAAO,CAAC,EAAE,IAAI;IACtB,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACzK,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACpD,YAAY,QAAQ,EAAE,CAAC,CAAC,CAAC;IACzB,gBAAgB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM;IAC9C,gBAAgB,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACxE,gBAAgB,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;IACjE,gBAAgB,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS;IACjE,gBAAgB;IAChB,oBAAoB,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE;IAChI,oBAAoB,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;IAC1G,oBAAoB,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACzF,oBAAoB,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;IACvF,oBAAoB,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAC1C,oBAAoB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS;IAC3C,aAAa;IACb,YAAY,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACvC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;IAClE,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACzF,KAAK;IACL,CAAC;AA0DD;IACO,SAAS,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IAC9C,IAAI,IAAI,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;IACzF,QAAQ,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE;IAChC,YAAY,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,YAAY,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,SAAS;IACT,KAAK;IACL,IAAI,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;IACjC;;IC1KA;QACI,gBAAqB,IAAY,EAAW,GAAW,EAAW,KAAa,EAAW,MAAc;YAAnF,SAAI,GAAJ,IAAI,CAAQ;YAAW,QAAG,GAAH,GAAG,CAAQ;YAAW,UAAK,GAAL,KAAK,CAAQ;YAAW,WAAM,GAAN,MAAM,CAAQ;SAAI;QAE5G,oBAAG,GAAH,UAAI,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;YAC1C,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SACnF;QAEM,qBAAc,GAArB,UAAsB,OAAgB,EAAE,UAAsB;YAC1D,OAAO,IAAI,MAAM,CACb,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,EAC3C,UAAU,CAAC,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,EACzC,UAAU,CAAC,KAAK,EAChB,UAAU,CAAC,MAAM,CACpB,CAAC;SACL;QAEM,sBAAe,GAAtB,UAAuB,OAAgB,EAAE,WAAwB;YAC7D,IAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,KAAK,KAAK,CAAC,GAAA,CAAC,CAAC;YACzE,OAAO,OAAO;kBACR,IAAI,MAAM,CACN,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,EACxC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,EACtC,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,MAAM,CACjB;kBACD,MAAM,CAAC,KAAK,CAAC;SACtB;QAEM,YAAK,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1C,aAAC;KA7BD,IA6BC;IAEM,IAAM,WAAW,GAAG,UAAC,OAAgB,EAAE,IAAa;QACvD,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC;IAEK,IAAM,iBAAiB,GAAG,UAAC,QAAkB;QAChD,IAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,IAAM,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC;QAEjD,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAClD;QACD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,WAAW,CAAC,EACvD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,WAAW,CAAC,EACvD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,WAAW,CAAC,CAC1D,CAAC;QAEF,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,YAAY,CAAC,EACzD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,YAAY,CAAC,EACzD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,YAAY,CAAC,CAC5D,CAAC;QAEF,OAAO,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;;;;;;;QCzDYA,cAAY,GAAG,UAAC,GAAW;QACpC,IAAM,UAAU,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,OAAO,CAAC,GAAG,MAAM,EAAE;YACf,IAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;YAClC,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,CAAC,GAAG,MAAM,EAAE;gBAClD,IAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClC,IAAI,CAAC,KAAK,GAAG,MAAM,MAAM,MAAM,EAAE;oBAC7B,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,KAAK,EAAE,KAAK,KAAK,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC;iBACxE;qBAAM;oBACH,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACvB,CAAC,EAAE,CAAC;iBACP;aACJ;iBAAM;gBACH,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC1B;SACJ;QACD,OAAO,UAAU,CAAC;IACtB,EAAE;QAEWC,eAAa,GAAG;QAAC,oBAAuB;aAAvB,UAAuB,EAAvB,qBAAuB,EAAvB,IAAuB;YAAvB,+BAAuB;;QACjD,IAAI,MAAM,CAAC,aAAa,EAAE;YACtB,OAAO,MAAM,CAAC,aAAa,OAApB,MAAM,EAAkB,UAAU,EAAE;SAC9C;QAED,IAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC,MAAM,EAAE;YACT,OAAO,EAAE,CAAC;SACb;QAED,IAAM,SAAS,GAAG,EAAE,CAAC;QAErB,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QACf,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;YACrB,IAAI,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,SAAS,IAAI,MAAM,EAAE;gBACrB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC7B;iBAAM;gBACH,SAAS,IAAI,OAAO,CAAC;gBACrB,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC,SAAS,GAAG,KAAK,IAAI,MAAM,CAAC,CAAC;aAC5E;YACD,IAAI,KAAK,GAAG,CAAC,KAAK,MAAM,IAAI,SAAS,CAAC,MAAM,GAAG,MAAM,EAAE;gBACnD,MAAM,IAAI,MAAM,CAAC,YAAY,OAAnB,MAAM,EAAiB,SAAS,CAAC,CAAC;gBAC5C,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;aACxB;SACJ;QACD,OAAO,MAAM,CAAC;IAClB,EAAE;IAEF,IAAMC,OAAK,GAAG,kEAAkE,CAAC;IAEjF;IACA,IAAMC,QAAM,GAAG,OAAO,UAAU,KAAK,WAAW,GAAG,EAAE,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5E,KAAK,IAAIC,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAGF,OAAK,CAAC,MAAM,EAAEE,GAAC,EAAE,EAAE;QACnCD,QAAM,CAACD,OAAK,CAAC,UAAU,CAACE,GAAC,CAAC,CAAC,GAAGA,GAAC,CAAC;;;;;;;;ICxDpC,IAAMF,SAAK,GAAG,kEAAkE,CAAC;IAEjF;IACA,IAAMC,UAAM,GAAG,OAAO,UAAU,KAAK,WAAW,GAAG,EAAE,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5E,KAAK,IAAIC,KAAC,GAAG,CAAC,EAAEA,KAAC,GAAGF,SAAK,CAAC,MAAM,EAAEE,KAAC,EAAE,EAAE;QACnCD,UAAM,CAACD,SAAK,CAAC,UAAU,CAACE,KAAC,CAAC,CAAC,GAAGA,KAAC,CAAC;KACnC;IAEM,IAAMC,QAAM,GAAG,UAAC,MAAc;QACjC,IAAI,YAAY,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,EACnC,GAAG,GAAG,MAAM,CAAC,MAAM,EACnB,CAAC,EACD,CAAC,GAAG,CAAC,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,CAAC;QAEb,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;YACnC,YAAY,EAAE,CAAC;YACf,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;gBACnC,YAAY,EAAE,CAAC;aAClB;SACJ;QAED,IAAM,MAAM,GACR,OAAO,WAAW,KAAK,WAAW;YAClC,OAAO,UAAU,KAAK,WAAW;YACjC,OAAO,UAAU,CAAC,SAAS,CAAC,KAAK,KAAK,WAAW;cAC3C,IAAI,WAAW,CAAC,YAAY,CAAC;cAC7B,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAClC,IAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QAEtE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;YACzB,QAAQ,GAAGF,UAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,QAAQ,GAAGA,UAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5C,QAAQ,GAAGA,UAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5C,QAAQ,GAAGA,UAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAE5C,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC;YAC/C,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,EAAE,KAAK,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC;YACtD,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,KAAK,QAAQ,GAAG,EAAE,CAAC,CAAC;SACxD;QAED,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;IAEK,IAAMG,iBAAe,GAAG,UAAC,MAAgB;QAC5C,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAChC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAChD;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;IAEK,IAAMC,iBAAe,GAAG,UAAC,MAAgB;QAC5C,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAChC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAChG;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;;IC3DD;IACO,IAAMC,gBAAc,GAAG,CAAC,CAAC;IAEhC;IACO,IAAMC,gBAAc,GAAG,CAAC,GAAG,CAAC,CAAC;IAEpC;;;;;;IAMO,IAAMC,oBAAkB,GAAG,CAAC,CAAC;IAEpC;;;;IAIO,IAAMC,kBAAgB,GAAGF,gBAAc,GAAGD,gBAAc,CAAC;IAEhE;;;;;;IAMO,IAAMI,4BAA0B,GAAG,OAAO,IAAIJ,gBAAc,CAAC;IAEpE;IACO,IAAMK,0BAAwB,GAAG,CAAC,IAAIL,gBAAc,CAAC;IAC5D;IACO,IAAMM,kBAAgB,GAAGD,0BAAwB,GAAG,CAAC,CAAC;IAEtD,IAAME,4BAA0B,GAAG,KAAK,IAAIP,gBAAc,CAAC;IAClE;IACO,IAAMQ,2BAAyB,GAAGJ,4BAA0B,GAAGG,4BAA0B,CAAC;IACjG;;;;IAIO,IAAME,+BAA6B,GAAGD,2BAAyB,CAAC;IAChE,IAAME,+BAA6B,GAAG,KAAK,IAAI,CAAC,CAAC;IACxD;;;;;;;;;;;;IAYO,IAAMC,uBAAqB,GAAGF,+BAA6B,GAAGC,+BAA6B,CAAC;IAEnG;;;;IAIO,IAAME,mCAAiC,GAAG,OAAO,IAAIX,gBAAc,CAAC;IAE3E;IACO,IAAMY,6BAA2B,GAAG,CAAC,IAAIV,kBAAgB,CAAC;IACjE;IACO,IAAMW,qBAAmB,GAAGD,6BAA2B,GAAG,CAAC,CAAC;IAEnE,IAAME,SAAO,GAAG,UAAC,IAA4B,EAAE,KAAa,EAAE,GAAY;QACtE,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SACjC;QAED,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC;IAEF,IAAMC,SAAO,GAAG,UAAC,IAA4B,EAAE,KAAa,EAAE,GAAY;QACtE,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SACjC;QAED,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC;QAEWC,sBAAoB,GAAG,UAAC,MAAc,EAAE,WAAmB;QACpE,IAAM,MAAM,GAAGpB,QAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAGE,iBAAe,CAAC,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QACzF,IAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAGD,iBAAe,CAAC,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QACzF,IAAM,YAAY,GAAG,EAAE,CAAC;QAExB,IAAM,KAAK,GAAGiB,SAAO,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,IAAM,IAAI,GACN,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;cACTA,SAAO,CAAC,MAAM,EAAE,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;cAC/CC,SAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAErE,OAAO,IAAIE,MAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7E,EAAE;;QAUE,cACI,YAAiB,EACjB,UAAe,EACf,SAAc,EACd,cAAmB,EACnB,KAA6B,EAC7B,IAA0C;YAE1C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;YACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;YACrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SACpB;;;;;;;QAQD,kBAAG,GAAH,UAAI,SAAiB;YACjB,IAAI,EAAE,CAAC;YACP,IAAI,SAAS,IAAI,CAAC,EAAE;gBAChB,IAAI,SAAS,GAAG,OAAO,KAAK,SAAS,GAAG,OAAO,IAAI,SAAS,IAAI,OAAO,CAAC,EAAE;;;;oBAItE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,IAAIlB,gBAAc,CAAC,CAAC;oBAC7C,EAAE,GAAG,CAAC,EAAE,IAAIE,oBAAkB,KAAK,SAAS,GAAGI,kBAAgB,CAAC,CAAC;oBACjE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBACxB;gBAED,IAAI,SAAS,IAAI,MAAM,EAAE;;;;;;;oBAOrB,EAAE,GAAG,IAAI,CAAC,KAAK,CAACF,4BAA0B,IAAI,CAAC,SAAS,GAAG,MAAM,KAAKJ,gBAAc,CAAC,CAAC,CAAC;oBACvF,EAAE,GAAG,CAAC,EAAE,IAAIE,oBAAkB,KAAK,SAAS,GAAGI,kBAAgB,CAAC,CAAC;oBACjE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBACxB;gBAED,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;;oBAE5B,EAAE,GAAGK,uBAAqB,GAAGC,mCAAiC,IAAI,SAAS,IAAIX,gBAAc,CAAC,CAAC;oBAC/F,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACpB,EAAE,IAAI,CAAC,SAAS,IAAID,gBAAc,IAAIc,qBAAmB,CAAC;oBAC1D,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACpB,EAAE,GAAG,CAAC,EAAE,IAAIZ,oBAAkB,KAAK,SAAS,GAAGI,kBAAgB,CAAC,CAAC;oBACjE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBACxB;gBACD,IAAI,SAAS,IAAI,QAAQ,EAAE;oBACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;iBACzC;aACJ;;YAGD,OAAO,IAAI,CAAC,UAAU,CAAC;SAC1B;QACL,WAAC;IAAD,CAAC;;;;;;;IC7KD,IAAMZ,OAAK,GAAG,kEAAkE,CAAC;IAEjF;IACA,IAAMC,QAAM,GAAG,OAAO,UAAU,KAAK,WAAW,GAAG,EAAE,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5E,KAAK,IAAIC,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAGF,OAAK,CAAC,MAAM,EAAEE,GAAC,EAAE,EAAE;QACnCD,QAAM,CAACD,OAAK,CAAC,UAAU,CAACE,GAAC,CAAC,CAAC,GAAGA,GAAC,CAAC;;;ICL7B,IAAMuB,QAAM,GACf,0pnDAA0pnD;;ICKvpnD,IAAM,sBAAsB,GAAG,EAAE,CAAC;IAEzC;IACA,IAAM,EAAE,GAAG,CAAC,CAAC;IACb,IAAMC,IAAE,GAAG,CAAC,CAAC;IACb,IAAMC,IAAE,GAAG,CAAC,CAAC;IACb,IAAM,EAAE,GAAG,CAAC,CAAC;IACb,IAAM,EAAE,GAAG,CAAC,CAAC;IAEb,IAAM,EAAE,GAAG,CAAC,CAAC;IACb,IAAM,EAAE,GAAG,CAAC,CAAC;IACb,IAAM,EAAE,GAAG,CAAC,CAAC;IACb,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAMC,KAAG,GAAG,EAAE,CAAC;IACf;IACA,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd;IACA,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd;IACA,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd;IACA,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAMC,IAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,EAAE,GAAG,EAAE,CAAC;IAEd,IAAM,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAgDxB,IAAM,eAAe,GAAG,GAAG,CAAC;IAC5B,IAAMC,mBAAiB,GAAG,GAAG,CAAC;IAC9B,IAAMC,eAAa,GAAG,GAAG,CAAC;IAC1B,IAAMC,aAAW,GAAGT,sBAAoB,CAACE,QAAkB,CAAC,CAAC;IAEpE,IAAM,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7B,IAAM,gBAAgB,GAAG,CAAC,EAAE,EAAEC,IAAE,EAAEC,IAAE,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAMM,OAAK,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACvB,IAAM,cAAc,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAChC,IAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAACA,OAAK,CAAC,CAAC;IACnD,IAAM,qBAAqB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACnD,IAAM,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAEjB,IAAM,4BAA4B,GAAG,UACxC,UAAoB,EACpB,SAA4B;QAA5B,0BAAA,EAAA,oBAA4B;QAE5B,IAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAM,UAAU,GAAc,EAAE,CAAC;QACjC,UAAU,CAAC,OAAO,CAAC,UAAC,SAAS,EAAE,KAAK;YAChC,IAAI,SAAS,GAAGD,aAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC3C,IAAI,SAAS,GAAG,sBAAsB,EAAE;gBACpC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,SAAS,IAAI,sBAAsB,CAAC;aACvC;iBAAM;gBACH,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC1B;YAED,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;;gBAEvD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC5D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACpB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBACzB;aACJ;YAED,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,KAAKJ,KAAG,EAAE;;gBAEvC,IAAI,KAAK,KAAK,CAAC,EAAE;oBACb,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACpB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBACzB;;;gBAID,IAAM,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAC9B,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;oBAClC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;oBACjC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC3B;gBACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACzB;YAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEpB,IAAI,SAAS,KAAK,EAAE,EAAE;gBAClB,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,QAAQ,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;aACvD;YAED,IAAI,SAAS,KAAK,EAAE,EAAE;gBAClB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACzB;YAED,IAAI,SAAS,KAAK,EAAE,EAAE;gBAClB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACzB;;;;YAKD,IAAI,SAAS,KAAK,EAAE,EAAE;gBAClB,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI,OAAO,MAAM,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI,OAAO,CAAC,EAAE;oBAClG,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBACzB;qBAAM;oBACH,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBACzB;aACJ;YAED,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACzB,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF,IAAM,0BAA0B,GAAG,UAC/B,CAAoB,EACpB,CAAS,EACT,YAAoB,EACpB,UAAoB;QAEpB,IAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE;YAC9D,IAAI,CAAC,GAAG,YAAY,CAAC;YACrB,OAAO,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE;gBAC3B,CAAC,EAAE,CAAC;gBACJ,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAEzB,IAAI,IAAI,KAAK,CAAC,EAAE;oBACZ,OAAO,IAAI,CAAC;iBACf;gBAED,IAAI,IAAI,KAAK,EAAE,EAAE;oBACb,MAAM;iBACT;aACJ;SACJ;QAED,IAAI,OAAO,KAAK,EAAE,EAAE;YAChB,IAAI,CAAC,GAAG,YAAY,CAAC;YAErB,OAAO,CAAC,GAAG,CAAC,EAAE;gBACV,CAAC,EAAE,CAAC;gBACJ,IAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAE3B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;oBACxD,IAAI,CAAC,GAAG,YAAY,CAAC;oBACrB,OAAO,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE;wBAC3B,CAAC,EAAE,CAAC;wBACJ,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;wBAEzB,IAAI,IAAI,KAAK,CAAC,EAAE;4BACZ,OAAO,IAAI,CAAC;yBACf;wBAED,IAAI,IAAI,KAAK,EAAE,EAAE;4BACb,MAAM;yBACT;qBACJ;iBACJ;gBAED,IAAI,IAAI,KAAK,EAAE,EAAE;oBACb,MAAM;iBACT;aACJ;SACJ;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;IAEF,IAAM,yBAAyB,GAAG,UAAC,YAAoB,EAAE,UAAoB;QACzE,IAAI,CAAC,GAAG,YAAY,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,EAAE;YACX,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,IAAI,KAAK,EAAE,EAAE;gBACb,CAAC,EAAE,CAAC;aACP;iBAAM;gBACH,OAAO,IAAI,CAAC;aACf;SACJ;QACD,OAAO,CAAC,CAAC;IACb,CAAC,CAAC;IAIF,IAAM,iBAAiB,GAAG,UACtB,UAAoB,EACpB,UAAoB,EACpB,QAAkB,EAClB,KAAa,EACb,eAA2B;QAE3B,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACvB,OAAOE,mBAAiB,CAAC;SAC5B;QAED,IAAI,YAAY,GAAG,KAAK,GAAG,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAC1E,OAAOA,mBAAiB,CAAC;SAC5B;QAED,IAAI,WAAW,GAAG,YAAY,GAAG,CAAC,CAAC;QACnC,IAAI,UAAU,GAAG,YAAY,GAAG,CAAC,CAAC;QAClC,IAAI,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;;;QAIvC,IAAI,MAAM,GAAG,WAAW,IAAI,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC5D,IAAI,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QAElC,IAAI,OAAO,KAAKJ,IAAE,IAAI,IAAI,KAAKC,IAAE,EAAE;YAC/B,OAAOG,mBAAiB,CAAC;SAC5B;QAED,IAAI,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;YAC1C,OAAO,eAAe,CAAC;SAC1B;;QAGD,IAAI,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACvC,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IAAIG,OAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YAC5B,OAAOH,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,yBAAyB,CAAC,YAAY,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE;YAC5D,OAAOC,eAAa,CAAC;SACxB;;QAGD,IAAIC,aAAW,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,KAAKJ,KAAG,EAAE;YACnD,OAAOE,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,CAAC,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,EAAE,KAAKE,aAAW,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,KAAKJ,KAAG,EAAE;YACvF,OAAOE,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,OAAO,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE;YAC/B,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,OAAO,KAAK,EAAE,EAAE;YAChB,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,EAAE,EAAE;YACrD,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YAC3C,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,yBAAyB,CAAC,YAAY,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE;YAC5D,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,0BAA0B,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE;YAC9D,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,0BAA0B,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE;YACpE,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,0BAA0B,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE;YAC9D,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,OAAO,KAAK,EAAE,EAAE;YAChB,OAAOC,eAAa,CAAC;SACxB;;QAGD,IAAI,OAAO,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE;YAC/B,OAAOD,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,IAAI,KAAK,EAAE,IAAI,OAAO,KAAK,EAAE,EAAE;YAC/B,OAAOC,eAAa,CAAC;SACxB;;QAGD,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,KAAK,EAAE,EAAE;YACrD,OAAOD,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;YACjD,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,OAAO,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE;YAC/B,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,IAAI,KAAK,EAAE,EAAE;YACb,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,KAAK,EAAE,MAAM,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,EAAE;YAC9G,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IACI,CAAC,OAAO,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACnD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,EACvD;YACE,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IACI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC1E,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAC9E;YACE,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD;;QAEI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aAC5B,IAAI,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;;aAExF,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC;;aAEhD,OAAO,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACvD;YACE,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YAC3C,IAAI,SAAS,GAAG,YAAY,CAAC;YAC7B,OAAO,SAAS,IAAI,CAAC,EAAE;gBACnB,IAAI,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;gBACjC,IAAI,IAAI,KAAK,EAAE,EAAE;oBACb,OAAOA,mBAAiB,CAAC;iBAC5B;qBAAM,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;oBACtC,SAAS,EAAE,CAAC;iBACf;qBAAM;oBACH,MAAM;iBACT;aACJ;SACJ;;QAGD,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YAC/B,IAAI,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,WAAW,GAAG,YAAY,CAAC;YAC9E,OAAO,SAAS,IAAI,CAAC,EAAE;gBACnB,IAAI,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;gBACjC,IAAI,IAAI,KAAK,EAAE,EAAE;oBACb,OAAOA,mBAAiB,CAAC;iBAC5B;qBAAM,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;oBACtC,SAAS,EAAE,CAAC;iBACf;qBAAM;oBACH,MAAM;iBACT;aACJ;SACJ;;QAGD,IACI,CAAC,EAAE,KAAK,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACvD,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aAClE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,EACnD;YACE,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IACI,CAAC,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC9E,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,KAAK,EAAE,CAAC,EAChE;YACE,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACzE,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IAAI,OAAO,KAAK,EAAE,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACpD,OAAOA,mBAAiB,CAAC;SAC5B;;QAGD,IACI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,KAAK,EAAE;YACX,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC;aAC/C,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,KAAK,EAAE,CAAC,EACjE;YACE,OAAOA,mBAAiB,CAAC;SAC5B;;;QAID,IAAI,OAAO,KAAKD,IAAE,IAAI,IAAI,KAAKA,IAAE,EAAE;YAC/B,IAAI,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,EAAE;gBACV,CAAC,EAAE,CAAC;gBACJ,IAAI,UAAU,CAAC,CAAC,CAAC,KAAKA,IAAE,EAAE;oBACtB,KAAK,EAAE,CAAC;iBACX;qBAAM;oBACH,MAAM;iBACT;aACJ;YACD,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE;gBACjB,OAAOC,mBAAiB,CAAC;aAC5B;SACJ;;QAGD,IAAI,OAAO,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE;YAC/B,OAAOA,mBAAiB,CAAC;SAC5B;QAED,OAAOC,eAAa,CAAC;IACzB,CAAC,CAAC;IA0BF,IAAM,mBAAmB,GAAG,UAAC,UAAoB,EAAE,OAAkB;QACjE,IAAI,CAAC,OAAO,EAAE;YACV,OAAO,GAAG,EAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAC,CAAC;SACxD;QACG,IAAA,KAAyC,4BAA4B,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,EAAnG,QAAQ,QAAA,EAAE,UAAU,QAAA,EAAE,cAAc,QAA+D,CAAC;QAEzG,IAAI,OAAO,CAAC,SAAS,KAAK,WAAW,IAAI,OAAO,CAAC,SAAS,KAAK,YAAY,EAAE;YACzE,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,UAAC,IAAI,IAAK,QAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,IAAC,CAAC,CAAC;SAC1F;QAED,IAAM,oBAAoB,GACtB,OAAO,CAAC,SAAS,KAAK,UAAU;cAC1B,cAAc,CAAC,GAAG,CAAC,UAAC,YAAY,EAAE,CAAC;gBAC/B,OAAO,YAAY,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;aAC7E,CAAC;cACF,SAAS,CAAC;QAEpB,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC;IACxD,CAAC,CAAC;IAkBF;QAMI,eAAY,UAAoB,EAAE,SAAiB,EAAE,KAAa,EAAE,GAAW;YAC3E,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,SAAS,KAAK,eAAe,CAAC;YAC9C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;SAClB;QAED,qBAAK,GAAL;YACI,OAAOhC,eAAa,eAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;SACxE;QACL,YAAC;IAAD,CAAC,IAAA;QAgBY,WAAW,GAAG,UAAC,GAAW,EAAE,OAAkB;QACvD,IAAM,UAAU,GAAGD,cAAY,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAA,KAA+C,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,EAAtF,QAAQ,QAAA,EAAE,UAAU,QAAA,EAAE,oBAAoB,QAA4C,CAAC;QAC9F,IAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QACjC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,OAAO;YACH,IAAI,EAAE;gBACF,IAAI,SAAS,IAAI,MAAM,EAAE;oBACrB,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC;iBACpC;gBACD,IAAI,SAAS,GAAGgC,mBAAiB,CAAC;gBAClC,OACI,SAAS,GAAG,MAAM;oBAClB,CAAC,SAAS,GAAG,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,oBAAoB,CAAC;wBAC/FA,mBAAiB,EACvB,GAAE;gBAEJ,IAAI,SAAS,KAAKA,mBAAiB,IAAI,SAAS,KAAK,MAAM,EAAE;oBACzD,IAAM,KAAK,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;oBACnE,OAAO,GAAG,SAAS,CAAC;oBACpB,OAAO,EAAC,KAAK,OAAA,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC;iBAC/B;gBAED,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC;aACpC;SACJ,CAAC;IACN;;IChoBA;IA2GO,IAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,IAAM,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;IACvB,IAAM,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAM,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC;IAElC,IAAM,SAAS,GAAG,MAAM,CAAC;IACzB,IAAM,OAAO,GAAG,MAAM,CAAC;IACvB,IAAM,eAAe,GAAG,MAAM,CAAC;IAC/B,IAAM,oBAAoB,GAAG,MAAM,CAAC;IACpC,IAAM,KAAK,GAAG,MAAM,CAAC;IACrB,IAAM,cAAc,GAAG,MAAM,CAAC;IAC9B,IAAM,WAAW,GAAG,MAAM,CAAC;IAC3B,IAAM,WAAW,GAAG,MAAM,CAAC;IAC3B,IAAM,WAAW,GAAG,MAAM,CAAC;IAC3B,IAAM,eAAe,GAAG,MAAM,CAAC;IAC/B,IAAM,UAAU,GAAG,MAAM,CAAC;IAC1B,IAAM,gBAAgB,GAAG,MAAM,CAAC;IAChC,IAAM,iBAAiB,GAAG,MAAM,CAAC;IACjC,IAAM,QAAQ,GAAG,MAAM,CAAC;IACxB,IAAM,YAAY,GAAG,MAAM,CAAC;IAC5B,IAAM,gBAAgB,GAAG,MAAM,CAAC;IAChC,IAAM,cAAc,GAAG,MAAM,CAAC;IAC9B,IAAM,iBAAiB,GAAG,MAAM,CAAC;IACjC,IAAM,aAAa,GAAG,MAAM,CAAC;IAC7B,IAAM,mBAAmB,GAAG,MAAM,CAAC;IACnC,IAAM,oBAAoB,GAAG,MAAM,CAAC;IACpC,IAAM,iBAAiB,GAAG,MAAM,CAAC;IACjC,IAAM,kBAAkB,GAAG,MAAM,CAAC;IAClC,IAAM,aAAa,GAAG,MAAM,CAAC;IAC7B,IAAM,mBAAmB,GAAG,MAAM,CAAC;IACnC,IAAM,aAAa,GAAG,MAAM,CAAC;IAC7B,IAAM,KAAK,GAAG,MAAM,CAAC;IACrB,IAAM,OAAO,GAAG,MAAM,CAAC;IACvB,IAAM,qBAAqB,GAAG,MAAM,CAAC;IACrC,IAAM,QAAQ,GAAG,MAAM,CAAC;IACxB,IAAM,SAAS,GAAG,MAAM,CAAC;IACzB,IAAM,KAAK,GAAG,MAAM,CAAC;IACrB,IAAM,KAAK,GAAG,MAAM,CAAC;IACrB,IAAM,SAAS,GAAG,MAAM,CAAC;IACzB,IAAM,SAAS,GAAG,MAAM,CAAC;IACzB,IAAM,IAAI,GAAG,MAAM,CAAC;IACpB,IAAM,SAAS,GAAG,MAAM,CAAC;IACzB,IAAM,eAAe,GAAG,MAAM,CAAC;IAC/B,IAAM,SAAS,GAAG,MAAM,CAAC;IACzB,IAAM,yBAAyB,GAAG,MAAM,CAAC;IACzC,IAAM,MAAM,GAAG,MAAM,CAAC;IACtB,IAAM,GAAG,GAAG,CAAC,CAAC,CAAC;IACf,IAAM,IAAI,GAAG,MAAM,CAAC;IACpB,IAAM,CAAC,GAAG,MAAM,CAAC;IACjB,IAAM,CAAC,GAAG,MAAM,CAAC;IACjB,IAAM,CAAC,GAAG,MAAM,CAAC;IACjB,IAAM,CAAC,GAAG,MAAM,CAAC;IACjB,IAAM,CAAC,GAAG,MAAM,CAAC;IACjB,IAAM,CAAC,GAAG,MAAM,CAAC;IACjB,IAAM,CAAC,GAAG,MAAM,CAAC;IACjB,IAAM,CAAC,GAAG,MAAM,CAAC;IACjB,IAAM,CAAC,GAAG,MAAM,CAAC;IACjB,IAAM,CAAC,GAAG,MAAM,CAAC;IAEjB,IAAM,OAAO,GAAG,UAAC,SAAiB,IAAK,OAAA,SAAS,IAAI,IAAI,IAAI,SAAS,IAAI,MAAM,GAAA,CAAC;IAChF,IAAM,oBAAoB,GAAG,UAAC,SAAiB,IAAK,OAAA,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,GAAA,CAAC;IAC/F,IAAM,KAAK,GAAG,UAAC,SAAiB;QAC5B,OAAA,OAAO,CAAC,SAAS,CAAC,KAAK,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC;IAA9F,CAA8F,CAAC;IACnG,IAAM,iBAAiB,GAAG,UAAC,SAAiB,IAAK,OAAA,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,GAAA,CAAC;IAClF,IAAM,iBAAiB,GAAG,UAAC,SAAiB,IAAK,OAAA,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,GAAA,CAAC;IAClF,IAAM,QAAQ,GAAG,UAAC,SAAiB,IAAK,OAAA,iBAAiB,CAAC,SAAS,CAAC,IAAI,iBAAiB,CAAC,SAAS,CAAC,GAAA,CAAC;IACrG,IAAM,mBAAmB,GAAG,UAAC,SAAiB,IAAK,OAAA,SAAS,IAAI,OAAO,GAAA,CAAC;IACxE,IAAM,YAAY,GAAG,UAAC,SAAiB;QACnC,OAAA,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,oBAAoB,IAAI,SAAS,KAAK,KAAK;IAApF,CAAoF,CAAC;IACzF,IAAM,oBAAoB,GAAG,UAAC,SAAiB;QAC3C,OAAA,QAAQ,CAAC,SAAS,CAAC,IAAI,mBAAmB,CAAC,SAAS,CAAC,IAAI,SAAS,KAAK,QAAQ;IAA/E,CAA+E,CAAC;IACpF,IAAM,eAAe,GAAG,UAAC,SAAiB;QACtC,OAAA,oBAAoB,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,KAAK,YAAY;IAAnF,CAAmF,CAAC;IACxF,IAAM,uBAAuB,GAAG,UAAC,SAAiB;QAC9C,QACI,CAAC,SAAS,IAAI,IAAI,IAAI,SAAS,IAAI,SAAS;YAC5C,SAAS,KAAK,eAAe;aAC5B,SAAS,IAAI,SAAS,IAAI,SAAS,IAAI,yBAAyB,CAAC;YAClE,SAAS,KAAK,MAAM,EACtB;IACN,CAAC,CAAC;IACF,IAAM,aAAa,GAAG,UAAC,EAAU,EAAE,EAAU;QACzC,IAAI,EAAE,KAAK,eAAe,EAAE;YACxB,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,EAAE,KAAK,SAAS,CAAC;IAC5B,CAAC,CAAC;IACF,IAAM,iBAAiB,GAAG,UAAC,EAAU,EAAE,EAAU,EAAE,EAAU;QACzD,IAAI,EAAE,KAAK,YAAY,EAAE;YACrB,OAAO,oBAAoB,CAAC,EAAE,CAAC,IAAI,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SAC5D;aAAM,IAAI,oBAAoB,CAAC,EAAE,CAAC,EAAE;YACjC,OAAO,IAAI,CAAC;SACf;aAAM,IAAI,EAAE,KAAK,eAAe,IAAI,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;YACxD,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;IAEF,IAAM,aAAa,GAAG,UAAC,EAAU,EAAE,EAAU,EAAE,EAAU;QACrD,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,YAAY,EAAE;YACzC,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE;gBACb,OAAO,IAAI,CAAC;aACf;YAED,OAAO,EAAE,KAAK,SAAS,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;SAC1C;QAED,IAAI,EAAE,KAAK,SAAS,EAAE;YAClB,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;SACtB;QAED,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,IAAM,cAAc,GAAG,UAAC,UAAoB;QACxC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE;YAC/D,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE;gBAChC,IAAI,GAAG,CAAC,CAAC,CAAC;aACb;YACD,CAAC,EAAE,CAAC;SACP;QAED,IAAM,QAAQ,GAAG,EAAE,CAAC;QAEpB,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;YAC3B,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAClC;QAED,IAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC/B,eAAa,eAAI,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QAE3E,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YAC7B,CAAC,EAAE,CAAC;SACP;QAED,IAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;YAC3B,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAClC;QAED,IAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC9B,IAAM,IAAI,GAAG,KAAK,GAAG,QAAQ,CAACA,eAAa,eAAI,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QAElE,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;YAC5C,CAAC,EAAE,CAAC;SACP;QAED,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE;YAC/D,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE;gBAChC,OAAO,GAAG,CAAC,CAAC,CAAC;aAChB;YACD,CAAC,EAAE,CAAC;SACP;QAED,IAAM,QAAQ,GAAG,EAAE,CAAC;QAEpB,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;YAC3B,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAClC;QAED,IAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAACA,eAAa,eAAI,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QAE3E,OAAO,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC;IACpF,CAAC,CAAC;IAEF,IAAM,sBAAsB,GAAU;QAClC,IAAI;KACP,CAAC;IACF,IAAM,uBAAuB,GAAU;QACnC,IAAI;KACP,CAAC;IACF,IAAM,WAAW,GAAU,EAAC,IAAI,uBAAwB,CAAC;IACzD,IAAM,kBAAkB,GAAU,EAAC,IAAI,+BAA+B,CAAC;IACvE,IAAM,kBAAkB,GAAU,EAAC,IAAI,8BAA+B,CAAC;IACvE,IAAM,YAAY,GAAU,EAAC,IAAI,yBAAyB,CAAC;IAC3D,IAAM,gBAAgB,GAAU,EAAC,IAAI,4BAA6B,CAAC;IACnE,IAAM,mBAAmB,GAAU,EAAC,IAAI,gCAAgC,CAAC;IACzE,IAAM,wBAAwB,GAAU;QACpC,IAAI;KACP,CAAC;IACF,IAAM,yBAAyB,GAAU;QACrC,IAAI;KACP,CAAC;IACF,IAAM,qBAAqB,GAAU,EAAC,IAAI,kCAAkC,CAAC;IAC7E,IAAM,aAAa,GAAU,EAAC,IAAI,0BAA0B,CAAC;IAC7D,IAAM,gBAAgB,GAAU,EAAC,IAAI,4BAA6B,CAAC;IACnE,IAAM,SAAS,GAAU,EAAC,IAAI,sBAAsB,CAAC;IACrD,IAAM,SAAS,GAAU,EAAC,IAAI,sBAAsB,CAAC;IACrD,IAAM,WAAW,GAAU,EAAC,IAAI,wBAAwB,CAAC;IACzD,IAAM,eAAe,GAAU,EAAC,IAAI,4BAA4B,CAAC;IACjE,IAAM,yBAAyB,GAAU;QACrC,IAAI;KACP,CAAC;IACF,IAAM,0BAA0B,GAAU;QACtC,IAAI;KACP,CAAC;IACF,IAAM,gBAAgB,GAAU,EAAC,IAAI,6BAA6B,CAAC;IAC5D,IAAM,SAAS,GAAU,EAAC,IAAI,sBAAsB,CAAC;IAE5D;QAGI;YACI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;SACpB;QAED,yBAAK,GAAL,UAAM,KAAa;YACf,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAACD,cAAY,CAAC,KAAK,CAAC,CAAC,CAAC;SACzD;QAED,wBAAI,GAAJ;YACI,IAAM,MAAM,GAAG,EAAE,CAAC;YAClB,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAChC,OAAO,KAAK,KAAK,SAAS,EAAE;gBACxB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;aAC/B;YACD,OAAO,MAAM,CAAC;SACjB;QAEO,gCAAY,GAApB;YACI,IAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAE1C,QAAQ,SAAS;gBACb,KAAK,cAAc;oBACf,OAAO,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;gBACnD,KAAK,WAAW;oBACZ,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAI,eAAe,CAAC,EAAE,CAAC,IAAI,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;wBAC9C,IAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,OAAO,GAAG,iBAAiB,CAAC;wBAC1E,IAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;wBAEjC,OAAO,EAAC,IAAI,sBAAwB,KAAK,OAAA,EAAE,KAAK,OAAA,EAAC,CAAC;qBACrD;oBACD,MAAM;gBACV,KAAK,WAAW;oBACZ,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;wBACvC,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxB,OAAO,kBAAkB,CAAC;qBAC7B;oBACD,MAAM;gBACV,KAAK,UAAU;oBACX,OAAO,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;gBAC/C,KAAK,gBAAgB;oBACjB,OAAO,sBAAsB,CAAC;gBAClC,KAAK,iBAAiB;oBAClB,OAAO,uBAAuB,CAAC;gBACnC,KAAK,QAAQ;oBACT,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;wBACvC,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxB,OAAO,qBAAqB,CAAC;qBAChC;oBACD,MAAM;gBACV,KAAK,SAAS;oBACV,IAAI,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;wBACxE,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;wBACnC,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;qBACrC;oBACD,MAAM;gBACV,KAAK,KAAK;oBACN,OAAO,WAAW,CAAC;gBACvB,KAAK,YAAY;oBACb,IAAM,EAAE,GAAG,SAAS,CAAC;oBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBAEjC,IAAI,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;wBAC3B,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;wBACnC,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;qBACrC;oBAED,IAAI,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;wBAC/B,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;wBACnC,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;qBACvC;oBAED,IAAI,EAAE,KAAK,YAAY,IAAI,EAAE,KAAK,iBAAiB,EAAE;wBACjD,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxB,OAAO,SAAS,CAAC;qBACpB;oBACD,MAAM;gBAEV,KAAK,SAAS;oBACV,IAAI,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;wBACxE,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;wBACnC,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;qBACrC;oBACD,MAAM;gBACV,KAAK,OAAO;oBACR,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;wBACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxB,OAAO,IAAI,EAAE;4BACT,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;4BAChC,IAAI,CAAC,KAAK,QAAQ,EAAE;gCAChB,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gCAC5B,IAAI,CAAC,KAAK,OAAO,EAAE;oCACf,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;iCAC9B;6BACJ;4BACD,IAAI,CAAC,KAAK,GAAG,EAAE;gCACX,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;6BAC9B;yBACJ;qBACJ;oBACD,MAAM;gBACV,KAAK,KAAK;oBACN,OAAO,WAAW,CAAC;gBACvB,KAAK,SAAS;oBACV,OAAO,eAAe,CAAC;gBAC3B,KAAK,cAAc;oBACf,IACI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,gBAAgB;wBAC1C,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,YAAY;wBACtC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,YAAY,EACxC;wBACE,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxB,OAAO,SAAS,CAAC;qBACpB;oBACD,MAAM;gBACV,KAAK,aAAa;oBACd,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAI,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;wBAC/B,IAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;wBACjC,OAAO,EAAC,IAAI,4BAA8B,KAAK,OAAA,EAAC,CAAC;qBACpD;oBACD,MAAM;gBACV,KAAK,mBAAmB;oBACpB,OAAO,yBAAyB,CAAC;gBACrC,KAAK,eAAe;oBAChB,IAAI,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;wBACjD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;wBACnC,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;qBACvC;oBACD,MAAM;gBACV,KAAK,oBAAoB;oBACrB,OAAO,0BAA0B,CAAC;gBACtC,KAAK,iBAAiB;oBAClB,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;wBACvC,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxB,OAAO,kBAAkB,CAAC;qBAC7B;oBACD,MAAM;gBACV,KAAK,kBAAkB;oBACnB,OAAO,wBAAwB,CAAC;gBACpC,KAAK,mBAAmB;oBACpB,OAAO,yBAAyB,CAAC;gBACrC,KAAK,CAAC,CAAC;gBACP,KAAK,CAAC;oBACF,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAI,EAAE,KAAK,SAAS,KAAK,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,aAAa,CAAC,EAAE;wBACzD,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxB,IAAI,CAAC,wBAAwB,EAAE,CAAC;qBACnC;oBACD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;oBACnC,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBACxC,KAAK,aAAa;oBACd,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;wBACvC,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxB,OAAO,gBAAgB,CAAC;qBAC3B;oBACD,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE;wBACzC,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxB,OAAO,YAAY,CAAC;qBACvB;oBACD,MAAM;gBACV,KAAK,KAAK;oBACN,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;wBACvC,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxB,OAAO,mBAAmB,CAAC;qBAC9B;oBACD,MAAM;gBACV,KAAK,GAAG;oBACJ,OAAO,SAAS,CAAC;aACxB;YAED,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE;gBACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,OAAO,gBAAgB,CAAC;aAC3B;YAED,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;gBACpB,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBACnC,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;aACrC;YAED,IAAI,oBAAoB,CAAC,SAAS,CAAC,EAAE;gBACjC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBACnC,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;aACvC;YAED,OAAO,EAAC,IAAI,uBAAyB,KAAK,EAAEC,eAAa,CAAC,SAAS,CAAC,EAAC,CAAC;SACzE;QAEO,oCAAgB,GAAxB;YACI,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAElC,OAAO,OAAO,KAAK,KAAK,WAAW,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;SACpD;QAEO,sCAAkB,GAA1B,UAA2B,SAAiB;YACxC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SAClC;QAEO,iCAAa,GAArB,UAAsB,KAAa;YAC/B,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBAC7B,OAAO,CAAC,CAAC,CAAC;aACb;YAED,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC7B;QAEO,4CAAwB,GAAhC;YACI,IAAM,MAAM,GAAG,EAAE,CAAC;YAClB,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACvB,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;aACvC;YACD,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,OAAO,SAAS,KAAK,aAAa,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACvB,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpC,aAAa,GAAG,IAAI,CAAC;aACxB;YAED,IAAI,aAAa,EAAE;gBACf,IAAM,OAAK,GAAG,QAAQ,CAClBA,eAAa,eAAI,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,QAAC,KAAK,KAAK,aAAa,GAAG,IAAI,GAAG,KAAK,IAAC,CAAC,GAChF,EAAE,CACL,CAAC;gBACF,IAAM,GAAG,GAAG,QAAQ,CAACA,eAAa,eAAI,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,QAAC,KAAK,KAAK,aAAa,GAAG,CAAC,GAAG,KAAK,IAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBACzG,OAAO,EAAC,IAAI,gCAAiC,KAAK,SAAA,EAAE,GAAG,KAAA,EAAC,CAAC;aAC5D;YAED,IAAM,KAAK,GAAG,QAAQ,CAACA,eAAa,eAAI,MAAM,GAAG,EAAE,CAAC,CAAC;YACrD,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;gBACxE,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpC,IAAM,SAAS,GAAG,EAAE,CAAC;gBACrB,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC7C,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC1B,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;iBACvC;gBACD,IAAM,GAAG,GAAG,QAAQ,CAACA,eAAa,eAAI,SAAS,GAAG,EAAE,CAAC,CAAC;gBAEtD,OAAO,EAAC,IAAI,gCAAiC,KAAK,OAAA,EAAE,GAAG,KAAA,EAAC,CAAC;aAC5D;iBAAM;gBACH,OAAO,EAAC,IAAI,gCAAiC,KAAK,OAAA,EAAE,GAAG,EAAE,KAAK,EAAC,CAAC;aACnE;SACJ;QAEO,yCAAqB,GAA7B;YACI,IAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,gBAAgB,EAAE;gBAC7E,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;aACjC;iBAAM,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,gBAAgB,EAAE;gBACnD,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,OAAO,EAAC,IAAI,2BAA4B,KAAK,OAAA,EAAC,CAAC;aAClD;YAED,OAAO,EAAC,IAAI,wBAAyB,KAAK,OAAA,EAAC,CAAC;SAC/C;QAEO,mCAAe,GAAvB;YACI,IAAM,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAEzB,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;gBAC/B,OAAO,EAAC,IAAI,sBAAuB,KAAK,EAAE,EAAE,EAAC,CAAC;aACjD;YAED,IAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,cAAc,EAAE;gBAChD,IAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBACrE,IAAI,WAAW,CAAC,IAAI,2BAA6B;oBAC7C,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAEzB,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,iBAAiB,EAAE;wBAC9E,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxB,OAAO,EAAC,IAAI,sBAAuB,KAAK,EAAE,WAAW,CAAC,KAAK,EAAC,CAAC;qBAChE;iBACJ;gBAED,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC7B,OAAO,aAAa,CAAC;aACxB;YAED,OAAO,IAAI,EAAE;gBACT,IAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1C,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,iBAAiB,EAAE;oBACtD,OAAO,EAAC,IAAI,sBAAuB,KAAK,EAAEA,eAAa,eAAI,KAAK,CAAC,EAAC,CAAC;iBACtE;qBAAM,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE;oBAChC,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACzB,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,iBAAiB,EAAE;wBAC9E,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxB,OAAO,EAAC,IAAI,sBAAuB,KAAK,EAAEA,eAAa,eAAI,KAAK,CAAC,EAAC,CAAC;qBACtE;oBACD,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBAC7B,OAAO,aAAa,CAAC;iBACxB;qBAAM,IACH,SAAS,KAAK,cAAc;oBAC5B,SAAS,KAAK,UAAU;oBACxB,SAAS,KAAK,gBAAgB;oBAC9B,uBAAuB,CAAC,SAAS,CAAC,EACpC;oBACE,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBAC7B,OAAO,aAAa,CAAC;iBACxB;qBAAM,IAAI,SAAS,KAAK,eAAe,EAAE;oBACtC,IAAI,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;wBACjD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC;qBAC9C;yBAAM;wBACH,IAAI,CAAC,qBAAqB,EAAE,CAAC;wBAC7B,OAAO,aAAa,CAAC;qBACxB;iBACJ;qBAAM;oBACH,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBACzB;aACJ;SACJ;QAEO,qCAAiB,GAAzB;YACI,OAAO,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;gBACxC,IAAI,CAAC,gBAAgB,EAAE,CAAC;aAC3B;SACJ;QAEO,yCAAqB,GAA7B;YACI,OAAO,IAAI,EAAE;gBACT,IAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1C,IAAI,SAAS,KAAK,iBAAiB,IAAI,SAAS,KAAK,GAAG,EAAE;oBACtD,OAAO;iBACV;gBAED,IAAI,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;oBACjD,IAAI,CAAC,uBAAuB,EAAE,CAAC;iBAClC;aACJ;SACJ;QAEO,sCAAkB,GAA1B,UAA2B,KAAa;YACpC,IAAM,gBAAgB,GAAG,KAAK,CAAC;YAC/B,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,OAAO,KAAK,GAAG,CAAC,EAAE;gBACd,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;gBACjD,KAAK,IAAIA,eAAa,eAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;gBACzD,KAAK,IAAI,MAAM,CAAC;aACnB;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAEpB,OAAO,KAAK,CAAC;SAChB;QAEO,sCAAkB,GAA1B,UAA2B,eAAuB;YAC9C,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,CAAC;YAEV,GAAG;gBACC,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,eAAe,EAAE;oBAC/E,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;oBACpC,OAAO,EAAC,IAAI,wBAA0B,KAAK,OAAA,EAAC,CAAC;iBAChD;gBAED,IAAI,SAAS,KAAK,SAAS,EAAE;oBACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzB,OAAO,gBAAgB,CAAC;iBAC3B;gBAED,IAAI,SAAS,KAAK,eAAe,EAAE;oBAC/B,IAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAChC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,SAAS,EAAE;wBACpC,IAAI,IAAI,KAAK,SAAS,EAAE;4BACpB,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;4BACpC,CAAC,GAAG,CAAC,CAAC,CAAC;4BACP,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;yBACvB;6BAAM,IAAI,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE;4BACvC,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;4BACpC,KAAK,IAAIA,eAAa,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC;4BACvD,CAAC,GAAG,CAAC,CAAC,CAAC;yBACV;qBACJ;iBACJ;gBAED,CAAC,EAAE,CAAC;aACP,QAAQ,IAAI,EAAE;SAClB;QAEO,iCAAa,GAArB;YACI,IAAM,IAAI,GAAG,EAAE,CAAC;YAChB,IAAI,IAAI,GAAG,YAAY,CAAC;YACxB,IAAI,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,YAAY,EAAE;gBACzC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;aACtC;YAED,OAAO,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;gBACnC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;aACtC;YACD,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,EAAE,KAAK,SAAS,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE;gBACjC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBAC5D,IAAI,GAAG,WAAW,CAAC;gBACnB,OAAO,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;oBACnC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;iBACtC;aACJ;YAED,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAC3B,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,YAAY,KAAK,OAAO,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE;gBACvG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBAC5D,IAAI,GAAG,WAAW,CAAC;gBACnB,OAAO,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;oBACnC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;iBACtC;aACJ;YAED,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;SACvC;QAEO,uCAAmB,GAA3B;YACU,IAAA,KAAkB,IAAI,CAAC,aAAa,EAAE,EAArC,MAAM,QAAA,EAAE,KAAK,QAAwB,CAAC;YAC7C,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACjC,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACjC,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAEjC,IAAI,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;gBAC/B,IAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBAChC,OAAO,EAAC,IAAI,4BAA6B,MAAM,QAAA,EAAE,KAAK,OAAA,EAAE,IAAI,MAAA,EAAC,CAAC;aACjE;YAED,IAAI,EAAE,KAAK,eAAe,EAAE;gBACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,OAAO,EAAC,IAAI,6BAA8B,MAAM,QAAA,EAAE,KAAK,OAAA,EAAC,CAAC;aAC5D;YAED,OAAO,EAAC,IAAI,yBAA0B,MAAM,QAAA,EAAE,KAAK,OAAA,EAAC,CAAC;SACxD;QAEO,2CAAuB,GAA/B;YACI,IAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAE1C,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE;gBAClB,IAAI,GAAG,GAAGA,eAAa,CAAC,SAAS,CAAC,CAAC;gBACnC,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;oBACnD,GAAG,IAAIA,eAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;iBACjD;gBAED,IAAI,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;oBACrC,IAAI,CAAC,gBAAgB,EAAE,CAAC;iBAC3B;gBAED,IAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAEvC,IAAI,YAAY,KAAK,CAAC,IAAI,oBAAoB,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,QAAQ,EAAE;oBACrF,OAAO,qBAAqB,CAAC;iBAChC;gBAED,OAAO,YAAY,CAAC;aACvB;YAED,IAAI,SAAS,KAAK,GAAG,EAAE;gBACnB,OAAO,qBAAqB,CAAC;aAChC;YAED,OAAO,SAAS,CAAC;SACpB;QAEO,+BAAW,GAAnB;YACI,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,OAAO,IAAI,EAAE;gBACT,IAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1C,IAAI,eAAe,CAAC,SAAS,CAAC,EAAE;oBAC5B,MAAM,IAAIA,eAAa,CAAC,SAAS,CAAC,CAAC;iBACtC;qBAAM,IAAI,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;oBACxD,MAAM,IAAIA,eAAa,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC;iBAC3D;qBAAM;oBACH,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;oBACnC,OAAO,MAAM,CAAC;iBACjB;aACJ;SACJ;QACL,gBAAC;IAAD,CAAC;;ICvwBD;QAGI,gBAAY,MAAkB;YAC1B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;SACzB;QAEM,aAAM,GAAb,UAAc,KAAa;YACvB,IAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;YAClC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvB,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;SACvC;QAEM,iBAAU,GAAjB,UAAkB,KAAa;YAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,EAAE,CAAC;SACrD;QAEM,kBAAW,GAAlB,UAAmB,KAAa;YAC5B,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,oBAAoB,EAAE,CAAC;SACtD;QAED,oCAAmB,GAAnB;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,IAAI,gCAAiC;gBAC9C,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;aAC/B;YAED,IAAI,KAAK,CAAC,IAAI,yBAA0B;gBACpC,MAAM,IAAI,WAAW,CAAC,mDAAmD,CAAC,CAAC;aAC9E;YAED,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAE3C,GAAG;gBACC,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;aAC/B,QAAQ,KAAK,CAAC,IAAI,gCAAiC;YAEpD,IAAI,KAAK,CAAC,IAAI,yBAA0B;gBACpC,OAAO,KAAK,CAAC;aAChB;YAED,MAAM,IAAI,WAAW,CAAC,kFAAkF,CAAC,CAAC;SAC7G;QAED,qCAAoB,GAApB;YACI,IAAM,MAAM,GAAG,EAAE,CAAC;YAClB,OAAO,IAAI,EAAE;gBACT,IAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC3C,IAAI,KAAK,CAAC,IAAI,yBAA0B;oBACpC,OAAO,MAAM,CAAC;iBACjB;gBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,MAAM,CAAC,IAAI,EAAE,CAAC;aACjB;SACJ;QAEO,sCAAqB,GAA7B;YACI,IAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAElC,QAAQ,KAAK,CAAC,IAAI;gBACd,uCAAwC;gBACxC,wCAAyC;gBACzC;oBACI,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/C;oBACI,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;aAC1C;YAED,OAAO,KAAK,CAAC;SAChB;QAEO,mCAAkB,GAA1B,UAA2B,IAAkB;YACzC,IAAM,KAAK,GAAa,EAAC,IAAI,MAAA,EAAE,MAAM,EAAE,EAAE,EAAC,CAAC;YAE3C,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAChC,OAAO,IAAI,EAAE;gBACT,IAAI,KAAK,CAAC,IAAI,2BAA4B,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;oBACrE,OAAO,KAAK,CAAC;iBAChB;gBAED,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC3B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;gBAChD,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;aAC/B;SACJ;QAEO,gCAAe,GAAvB,UAAwB,aAA+B;YACnD,IAAM,WAAW,GAAgB;gBAC7B,IAAI,EAAE,aAAa,CAAC,KAAK;gBACzB,MAAM,EAAE,EAAE;gBACV,IAAI;aACP,CAAC;YAEF,OAAO,IAAI,EAAE;gBACT,IAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClC,IAAI,KAAK,CAAC,IAAI,2BAA4B,KAAK,CAAC,IAAI,sCAAwC;oBACxF,OAAO,WAAW,CAAC;iBACtB;gBAED,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC3B,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;aACzD;SACJ;QAEO,6BAAY,GAApB;YACI,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,OAAO,KAAK,KAAK,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC;SAC3D;QAEO,+BAAc,GAAtB,UAAuB,KAAe;YAClC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC/B;QACL,aAAC;IAAD,CAAC,IAAA;IAEM,IAAM,gBAAgB,GAAG,UAAC,KAAe,IAA8B,OAAA,KAAK,CAAC,IAAI,gCAA8B,CAAC;IAChH,IAAM,aAAa,GAAG,UAAC,KAAe,IAAgC,OAAA,KAAK,CAAC,IAAI,6BAA2B,CAAC;IAC5G,IAAM,YAAY,GAAG,UAAC,KAAe,IAAgC,OAAA,KAAK,CAAC,IAAI,4BAA0B,CAAC;IAC1G,IAAM,aAAa,GAAG,UAAC,KAAe,IAAgC,OAAA,KAAK,CAAC,IAAI,4BAA2B,CAAC;IAC5G,IAAM,gBAAgB,GAAG,UAAC,KAAe,EAAE,KAAa;QAC3D,OAAA,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK;IAA5C,CAA4C,CAAC;IAE1C,IAAM,aAAa,GAAG,UAAC,KAAe,IAAc,OAAA,KAAK,CAAC,IAAI,iCAA+B,CAAC;IAC9F,IAAM,uBAAuB,GAAG,UAAC,KAAe;QACnD,OAAA,KAAK,CAAC,IAAI,kCAAmC,KAAK,CAAC,IAAI;IAAvD,CAAiF,CAAC;IAE/E,IAAM,iBAAiB,GAAG,UAAC,MAAkB;QAChD,IAAM,IAAI,GAAiB,EAAE,CAAC;QAC9B,IAAI,GAAG,GAAe,EAAE,CAAC;QACzB,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK;YACjB,IAAI,KAAK,CAAC,IAAI,0BAA4B;gBACtC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;oBAClB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;iBACvE;gBACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACf,GAAG,GAAG,EAAE,CAAC;gBACT,OAAO;aACV;YAED,IAAI,KAAK,CAAC,IAAI,gCAAiC;gBAC3C,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACnB;SACJ,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,EAAE;YACZ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAClB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEF,IAAM,gBAAgB,GAAG,UAAC,KAAe,EAAE,IAAkB;QACzD,IAAI,IAAI,0CAA2C,KAAK,CAAC,IAAI,yCAA0C;YACnG,OAAO,IAAI,CAAC;SACf;QACD,IAAI,IAAI,2CAA4C,KAAK,CAAC,IAAI,0CAA2C;YACrG,OAAO,IAAI,CAAC;SACf;QAED,OAAO,IAAI,uCAAyC,KAAK,CAAC,IAAI,qCAAuC;IACzG,CAAC;;ICtLM,IAAM,QAAQ,GAAG,UAAC,KAAe;QACpC,OAAA,KAAK,CAAC,IAAI,8BAA+B,KAAK,CAAC,IAAI;IAAnD,CAAiF;;ICA9E,IAAM,kBAAkB,GAAG,UAAC,KAAe;QAC9C,OAAA,KAAK,CAAC,IAAI,kCAAmC,QAAQ,CAAC,KAAK,CAAC;IAA5D,CAA4D,CAAC;IAC1D,IAAM,0BAA0B,GAAG,UAAC,MAA0B;QACjE,OAAA,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAAxD,CAAwD,CAAC;IACtD,IAAM,WAAW,GAAqB;QACzC,IAAI;QACJ,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,YAAY;KACtB,CAAC;IAEK,IAAM,aAAa,GAAqB;QAC3C,IAAI;QACJ,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,YAAY;KACtB,CAAC;IAEK,IAAM,eAAe,GAAqB;QAC7C,IAAI;QACJ,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,YAAY;KACtB,CAAC;IAEK,IAAM,wBAAwB,GAAG,UACpC,KAA4B,EAC5B,KAAa,EACb,MAAc;QAEP,IAAA,CAAC,GAAO,KAAK,GAAZ,EAAE,CAAC,GAAI,KAAK,GAAT,CAAU;QACrB,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,KAAK,WAAW,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACpG,CAAC,CAAC;IACK,IAAM,gBAAgB,GAAG,UAAC,KAAuB,EAAE,MAAc;QACpE,IAAI,KAAK,CAAC,IAAI,gCAAiC;YAC3C,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC;SACxC;QAED,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;YACzB,QAAQ,KAAK,CAAC,IAAI;gBACd,KAAK,KAAK,CAAC;gBACX,KAAK,IAAI;oBACL,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC7B,KAAK,IAAI,CAAC;gBACV;oBACI,OAAO,KAAK,CAAC,MAAM,CAAC;aAC3B;SACJ;QAED,OAAO,KAAK,CAAC,MAAM,CAAC;IACxB,CAAC;;IC9CD,IAAM,GAAG,GAAG,KAAK,CAAC;IAClB,IAAM,IAAI,GAAG,MAAM,CAAC;IACpB,IAAM,GAAG,GAAG,KAAK,CAAC;IAClB,IAAM,IAAI,GAAG,MAAM,CAAC;IAEb,IAAM,KAAK,GAA4B;QAC1C,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,UAAC,QAAiB,EAAE,KAAe;YACtC,IAAI,KAAK,CAAC,IAAI,+BAAgC;gBAC1C,QAAQ,KAAK,CAAC,IAAI;oBACd,KAAK,GAAG;wBACJ,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;oBAC1C,KAAK,IAAI;wBACL,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC;oBAC1C,KAAK,GAAG;wBACJ,OAAO,KAAK,CAAC,MAAM,CAAC;oBACxB,KAAK,IAAI;wBACL,OAAO,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;iBACzC;aACJ;YAED,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC7C;KACJ,CAAC;IAEK,IAAM,OAAO,GAAG,UAAC,KAAe;QACnC,IAAI,KAAK,CAAC,IAAI,+BAAgC;YAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;gBACxF,OAAO,IAAI,CAAC;aACf;SACJ;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;IAEK,IAAM,cAAc,GAAG,UAAC,MAAkB;QAC7C,IAAM,YAAY,GAAG,MAAM;aACtB,MAAM,CAAC,YAAY,CAAC;aACpB,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,KAAK,GAAA,CAAC;aAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;QAEf,QAAQ,YAAY;YAChB,KAAK,iBAAiB,CAAC;YACvB,KAAK,iBAAiB,CAAC;YACvB,KAAK,UAAU,CAAC;YAChB,KAAK,UAAU;gBACX,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACtC,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ;gBACT,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,KAAK,gBAAgB,CAAC;YACtB,KAAK,gBAAgB,CAAC;YACtB,KAAK,WAAW,CAAC;YACjB,KAAK,WAAW;gBACZ,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YAC1C,KAAK,UAAU,CAAC;YAChB,KAAK,MAAM;gBACP,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC;YACnB,KAAK,aAAa,CAAC;YACnB,KAAK,aAAa,CAAC;YACnB,KAAK,cAAc,CAAC;YACpB,KAAK,cAAc;gBACf,OAAO,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;YAC9C,KAAK,WAAW,CAAC;YACjB,KAAK,KAAK;gBACN,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,KAAK,cAAc,CAAC;YACpB,KAAK,cAAc,CAAC;YACpB,KAAK,aAAa,CAAC;YACnB,KAAK,aAAa;gBACd,OAAO,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;YAC1C,KAAK,SAAS,CAAC;YACf,KAAK,OAAO;gBACR,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;SACvB;QAED,OAAO,CAAC,CAAC;IACb,CAAC,CAAC;IAEK,IAAM,GAAG,GAAG,UAAC,GAAW,IAAa,OAAA,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,GAAA;;IC7E1D,IAAMmC,OAAK,GAA2B;QACzC,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,UAAC,OAAgB,EAAE,KAAe;YACrC,IAAI,KAAK,CAAC,IAAI,wBAAyB;gBACnC,IAAM,aAAa,GAAG,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5D,IAAI,OAAO,aAAa,KAAK,WAAW,EAAE;oBACtC,MAAM,IAAI,KAAK,CAAC,yDAAsD,KAAK,CAAC,IAAI,OAAG,CAAC,CAAC;iBACxF;gBACD,OAAO,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;aAC/C;YAED,IAAI,KAAK,CAAC,IAAI,yBAA2B;gBACrC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC1B,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtC,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtC,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;iBACjF;gBAED,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC1B,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtC,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtC,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtC,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;iBACzG;gBAED,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC1B,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtC,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtC,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;iBACrE;gBAED,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC1B,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtC,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtC,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtC,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;iBACzF;aACJ;YAED,IAAI,KAAK,CAAC,IAAI,2BAA4B;gBACtC,IAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;gBACrD,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;oBACnC,OAAO,UAAU,CAAC;iBACrB;aACJ;YAED,OAAO,MAAM,CAAC,WAAW,CAAC;SAC7B;KACJ,CAAC;IAEK,IAAM,aAAa,GAAG,UAAC,KAAY,IAAc,OAAA,CAAC,IAAI,GAAG,KAAK,MAAM,CAAC,GAAA,CAAC;IAEtE,IAAM,QAAQ,GAAG,UAAC,KAAY;QACjC,IAAM,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;QAC3B,IAAM,IAAI,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;QACjC,IAAM,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;QACnC,IAAM,GAAG,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;QACjC,OAAO,KAAK,GAAG,GAAG,GAAG,UAAQ,GAAG,SAAI,KAAK,SAAI,IAAI,SAAI,KAAK,GAAG,GAAG,MAAG,GAAG,SAAO,GAAG,SAAI,KAAK,SAAI,IAAI,MAAG,CAAC;IACzG,CAAC,CAAC;IAEK,IAAM,IAAI,GAAG,UAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QAC3D,OAAA,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAArE,CAAqE,CAAC;IAE1E,IAAM,kBAAkB,GAAG,UAAC,KAAe,EAAE,CAAS;QAClD,IAAI,KAAK,CAAC,IAAI,4BAA6B;YACvC,OAAO,KAAK,CAAC,MAAM,CAAC;SACvB;QAED,IAAI,KAAK,CAAC,IAAI,gCAAiC;YAC3C,IAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC;SACxF;QAED,OAAO,CAAC,CAAC;IACb,CAAC,CAAC;IAEF,IAAM,GAAG,GAAG,UAAC,QAAiB,EAAE,IAAgB;QAC5C,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAEpD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACf,IAAA,KAAY,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAzC,CAAC,QAAA,EAAE,CAAC,QAAA,EAAE,CAAC,QAAkC,CAAC;YACjD,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC3B;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACf,IAAA,KAAe,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAA5C,CAAC,QAAA,EAAE,CAAC,QAAA,EAAE,CAAC,QAAA,EAAE,CAAC,QAAkC,CAAC;YACpD,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC3B;QAED,OAAO,CAAC,CAAC;IACb,CAAC,CAAC;IAEF,SAAS,OAAO,CAAC,EAAU,EAAE,EAAU,EAAE,GAAW;QAChD,IAAI,GAAG,GAAG,CAAC,EAAE;YACT,GAAG,IAAI,CAAC,CAAC;SACZ;QACD,IAAI,GAAG,IAAI,CAAC,EAAE;YACV,GAAG,IAAI,CAAC,CAAC;SACZ;QAED,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE;YACb,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;SACnC;aAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE;YACpB,OAAO,EAAE,CAAC;SACb;aAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE;YACpB,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;SAC7C;aAAM;YACH,OAAO,EAAE,CAAC;SACb;IACL,CAAC;IAED,IAAM,GAAG,GAAG,UAAC,OAAgB,EAAE,IAAgB;QAC3C,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC7C,IAAA,GAAG,GAAkC,MAAM,GAAxC,EAAE,UAAU,GAAsB,MAAM,GAA5B,EAAE,SAAS,GAAW,MAAM,GAAjB,EAAE,KAAK,GAAI,MAAM,GAAV,CAAW;QAEnD,IAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,6BAA8B,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9G,IAAM,CAAC,GAAG,kBAAkB,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;QACvE,IAAM,CAAC,GAAG,kBAAkB,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;QACrE,IAAM,CAAC,GAAG,OAAO,KAAK,KAAK,WAAW,IAAI,kBAAkB,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAErG,IAAI,CAAC,KAAK,CAAC,EAAE;YACT,OAAO,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;SAC7C;QAED,IAAM,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAElD,IAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACtB,IAAM,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,IAAM,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7B,IAAM,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,IAAM,yBAAyB,GAE3B;QACA,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,GAAG;KACZ,CAAC;IAEK,IAAM,UAAU,GAAG,UAAC,OAAgB,EAAE,KAAa;QACtD,OAAAA,OAAK,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,EAAE,CAAC;IAAhE,CAAgE,CAAC;IAE9D,IAAM,MAAM,GAA2B;QAC1C,SAAS,EAAE,UAAU;QACrB,YAAY,EAAE,UAAU;QACxB,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,UAAU;QACtB,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,UAAU;QACjB,cAAc,EAAE,UAAU;QAC1B,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,UAAU;QACtB,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,UAAU;QACrB,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,UAAU;QACrB,KAAK,EAAE,UAAU;QACjB,cAAc,EAAE,UAAU;QAC1B,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,UAAU;QACpB,aAAa,EAAE,UAAU;QACzB,QAAQ,EAAE,UAAU;QACpB,SAAS,EAAE,UAAU;QACrB,QAAQ,EAAE,UAAU;QACpB,SAAS,EAAE,UAAU;QACrB,WAAW,EAAE,UAAU;QACvB,cAAc,EAAE,UAAU;QAC1B,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,UAAU;QACtB,YAAY,EAAE,UAAU;QACxB,aAAa,EAAE,UAAU;QACzB,aAAa,EAAE,UAAU;QACzB,aAAa,EAAE,UAAU;QACzB,aAAa,EAAE,UAAU;QACzB,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,UAAU;QACvB,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,UAAU;QACrB,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,UAAU;QACvB,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,UAAU;QACrB,UAAU,EAAE,UAAU;QACtB,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,UAAU;QACrB,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,UAAU;QACvB,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,UAAU;QACrB,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,UAAU;QACpB,aAAa,EAAE,UAAU;QACzB,SAAS,EAAE,UAAU;QACrB,YAAY,EAAE,UAAU;QACxB,SAAS,EAAE,UAAU;QACrB,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,UAAU;QACrB,oBAAoB,EAAE,UAAU;QAChC,SAAS,EAAE,UAAU;QACrB,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,UAAU;QACrB,WAAW,EAAE,UAAU;QACvB,aAAa,EAAE,UAAU;QACzB,YAAY,EAAE,UAAU;QACxB,cAAc,EAAE,UAAU;QAC1B,cAAc,EAAE,UAAU;QAC1B,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,UAAU;QACvB,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,UAAU;QACrB,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,UAAU;QACnB,MAAM,EAAE,UAAU;QAClB,gBAAgB,EAAE,UAAU;QAC5B,UAAU,EAAE,UAAU;QACtB,YAAY,EAAE,UAAU;QACxB,YAAY,EAAE,UAAU;QACxB,cAAc,EAAE,UAAU;QAC1B,eAAe,EAAE,UAAU;QAC3B,iBAAiB,EAAE,UAAU;QAC7B,eAAe,EAAE,UAAU;QAC3B,eAAe,EAAE,UAAU;QAC3B,YAAY,EAAE,UAAU;QACxB,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,UAAU;QACrB,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,UAAU;QACvB,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,UAAU;QACrB,MAAM,EAAE,UAAU;QAClB,SAAS,EAAE,UAAU;QACrB,MAAM,EAAE,UAAU;QAClB,aAAa,EAAE,UAAU;QACzB,SAAS,EAAE,UAAU;QACrB,aAAa,EAAE,UAAU;QACzB,aAAa,EAAE,UAAU;QACzB,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,UAAU;QACrB,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,UAAU;QACtB,MAAM,EAAE,UAAU;QAClB,aAAa,EAAE,UAAU;QACzB,GAAG,EAAE,UAAU;QACf,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,UAAU;QACrB,WAAW,EAAE,UAAU;QACvB,MAAM,EAAE,UAAU;QAClB,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,UAAU;QACrB,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,UAAU;QACvB,SAAS,EAAE,UAAU;QACrB,GAAG,EAAE,UAAU;QACf,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,UAAU;QACnB,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,UAAU;QACvB,SAAS,EAAE,UAAU;QACrB,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,UAAU;QACjB,UAAU,EAAE,UAAU;QACtB,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,UAAU;KAC1B;;ICxSM,IAAM,cAAc,GAA4C;QACnE,IAAI,EAAE,iBAAiB;QACvB,YAAY,EAAE,YAAY;QAC1B,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,MAAkB;YACzC,OAAO,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK;gBACpB,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;oBACrB,QAAQ,KAAK,CAAC,KAAK;wBACf,KAAK,aAAa;4BACd,2BAAmC;wBACvC,KAAK,aAAa;4BACd,2BAAmC;qBAC1C;iBACJ;gBACD,0BAAkC;aACrC,CAAC,CAAC;SACN;KACJ;;IC3BM,IAAM,eAAe,GAAiC;QACzD,IAAI,EAAE,kBAAkB;QACxB,YAAY,EAAE,aAAa;QAC3B,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,MAAM,EAAE,OAAO;KAClB;;ICKM,IAAM,cAAc,GAAG,UAAC,OAAgB,EAAE,IAAgB;QAC7D,IAAM,KAAK,GAAGC,OAAS,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,IAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAC,KAAK,OAAA,EAAE,IAAI,MAAA,EAAC,GAAG,EAAC,KAAK,OAAA,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;IAClF,CAAC,CAAC;IAEK,IAAM,iBAAiB,GAAG,UAAC,KAAqC,EAAE,UAAkB;QACvF,IAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,IAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;YACrB,KAAK,CAAC,IAAI,GAAG,WAAW,CAAC;SAC5B;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;YACpB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;SAC/B;QAED,IAAM,YAAY,GAAsB,EAAE,CAAC;QAC3C,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,IAAM,MAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3B,IAAI,MAAI,KAAK,IAAI,EAAE;gBACf,IAAM,aAAa,GAAG,gBAAgB,CAAC,MAAI,EAAE,UAAU,CAAC,CAAC;gBACzD,IAAI,aAAa,GAAG,QAAQ,EAAE;oBAC1B,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACpC;qBAAM;oBACH,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAC/B;gBACD,QAAQ,GAAG,aAAa,CAAC;aAC5B;iBAAM;gBACH,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC3B;SACJ;QAED,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAM,MAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,MAAI,KAAK,IAAI,EAAE;gBACf,IAAI,QAAQ,KAAK,IAAI,EAAE;oBACnB,QAAQ,GAAG,CAAC,CAAC;iBAChB;aACJ;iBAAM,IAAI,QAAQ,KAAK,IAAI,EAAE;gBAC1B,IAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC;gBAC/B,IAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,GAAG,CAAC,CAAW,CAAC;gBACvD,IAAM,QAAQ,GAAG,CAAC,MAAI,GAAG,SAAS,KAAK,SAAS,GAAG,CAAC,CAAC,CAAC;gBACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE;oBACjC,YAAY,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;iBACjD;gBACD,QAAQ,GAAG,IAAI,CAAC;aACnB;SACJ;QAED,OAAO,KAAK,CAAC,GAAG,CAAC,UAAC,EAAO,EAAE,CAAC;gBAAT,KAAK,WAAA;YACpB,OAAO,EAAC,KAAK,OAAA,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAG,YAAY,CAAC,CAAC,CAAY,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC;SAC5F,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,IAAM,kBAAkB,GAAG,UAAC,MAAsB,EAAE,KAAa,EAAE,MAAc;QAC7E,IAAM,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC;QAC1B,IAAM,OAAO,GAAG,MAAM,GAAG,CAAC,CAAC;QAC3B,IAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC;QACvD,IAAM,CAAC,GAAG,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAExD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC;IAEK,IAAM,0BAA0B,GAAG,UACtC,KAA8B,EAC9B,KAAa,EACb,MAAc;QAEd,IAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAE5F,IAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAE5F,IAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;QAC5B,IAAM,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC;QAC9B,IAAM,cAAc,GAAG,UAAU,GAAG,CAAC,CAAC;QAEtC,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC;QAC9D,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC;QAE9D,OAAO,CAAC,UAAU,EAAE,SAAS,GAAG,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE,UAAU,GAAG,KAAK,EAAE,UAAU,GAAG,KAAK,CAAC,CAAC;IACtG,CAAC,CAAC;IAEF,IAAM,QAAQ,GAAG,UAAC,CAAS,EAAE,CAAS,IAAa,OAAA,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAA,CAAC;IAE5E,IAAM,UAAU,GAAG,UAAC,KAAa,EAAE,MAAc,EAAE,CAAS,EAAE,CAAS,EAAE,OAAgB;QACrF,IAAM,OAAO,GAAG;YACZ,CAAC,CAAC,EAAE,CAAC,CAAC;YACN,CAAC,CAAC,EAAE,MAAM,CAAC;YACX,CAAC,KAAK,EAAE,CAAC,CAAC;YACV,CAAC,KAAK,EAAE,MAAM,CAAC;SAClB,CAAC;QAEF,OAAO,OAAO,CAAC,MAAM,CACjB,UAAC,IAAI,EAAE,MAAM;YACF,IAAA,EAAE,GAAQ,MAAM,GAAd,EAAE,EAAE,GAAI,MAAM,GAAV,CAAW;YACxB,IAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;YACnC,IAAI,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE;gBAC/D,OAAO;oBACH,aAAa,EAAE,MAAM;oBACrB,eAAe,EAAE,CAAC;iBACrB,CAAC;aACL;YAED,OAAO,IAAI,CAAC;SACf,EACD;YACI,eAAe,EAAE,OAAO,GAAG,QAAQ,GAAG,CAAC,QAAQ;YAC/C,aAAa,EAAE,IAAI;SACtB,CACJ,CAAC,aAAiC,CAAC;IACxC,CAAC,CAAC;IAEK,IAAM,eAAe,GAAG,UAC3B,QAAgC,EAChC,CAAS,EACT,CAAS,EACT,KAAa,EACb,MAAc;QAEd,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,CAAC,CAAC;QAEX,QAAQ,QAAQ,CAAC,IAAI;YACjB;;;gBAGI,IAAI,QAAQ,CAAC,KAAK,qBAA4B;oBAC1C,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;iBAC3F;qBAAM,IAAI,QAAQ,CAAC,KAAK,sBAA6B;oBAClD,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;oBAChD,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;iBACpD;gBACD,MAAM;YAEV;;;gBAGI,IAAI,QAAQ,CAAC,KAAK,qBAA4B;oBAC1C,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CACd,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EACd,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EACvB,QAAQ,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,EACtB,QAAQ,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAClC,CAAC;iBACL;qBAAM,IAAI,QAAQ,CAAC,KAAK,sBAA6B;;oBAElD,IAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;oBAC7F,IAAA,KAAW,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAA/C,EAAE,QAAA,EAAE,EAAE,QAAyC,CAAC;oBACvD,EAAE,GAAG,QAAQ,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;oBACpC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;iBACf;gBACD,MAAM;YAEV;;gBAEI,IAAI,QAAQ,CAAC,KAAK,qBAA4B;oBAC1C,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;iBAC3F;qBAAM,IAAI,QAAQ,CAAC,KAAK,sBAA6B;oBAClD,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;oBAChD,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;iBACpD;gBACD,MAAM;YAEV;;;gBAGI,IAAI,QAAQ,CAAC,KAAK,qBAA4B;oBAC1C,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CACd,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EACd,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EACvB,QAAQ,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,EACtB,QAAQ,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAClC,CAAC;iBACL;qBAAM,IAAI,QAAQ,CAAC,KAAK,sBAA6B;;oBAElD,IAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;oBAC7F,IAAA,KAAW,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAhD,EAAE,QAAA,EAAE,EAAE,QAA0C,CAAC;oBACxD,EAAE,GAAG,QAAQ,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;oBACpC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;iBACf;gBACD,MAAM;SACb;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAC9B,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC/C,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;SACrF;QAED,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACpB,CAAC;;ICtMM,IAAM,cAAc,GAAG,UAAC,OAAgB,EAAE,MAAkB;QAC/D,IAAIC,OAAK,GAA4B,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAM,KAAK,GAAmC,EAAE,CAAC;QAEjD,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACT,IAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,UAAU,CAAC,IAAI,6BAA8B,UAAU,CAAC,KAAK,KAAK,IAAI,EAAE;oBACxEA,OAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;oBAC5B,OAAO;iBACV;qBAAM,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;oBAC5BA,OAAK,GAAGC,KAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;oBAC7C,OAAO;iBACV;aACJ;YACD,IAAM,SAAS,GAAG,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACzB,CAAC,CAAC;QAEH,OAAO,EAAC,KAAK,SAAA,EAAE,KAAK,OAAA,EAAE,IAAI,2BAA+B,CAAC;IAC9D,CAAC;;ICpBM,IAAM,oBAAoB,GAAG,UAAC,OAAgB,EAAE,MAAkB;QACrE,IAAID,OAAK,GAA4B,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAM,KAAK,GAAmC,EAAE,CAAC;QAEjD,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACT,IAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC1B,IACI,UAAU,CAAC,IAAI;oBACf,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EACrE;oBACEA,OAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;oBAC5B,OAAO;iBACV;qBAAM,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;oBAC5BA,OAAK,GAAG,CAACC,KAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;oBACrE,OAAO;iBACV;aACJ;YACD,IAAM,SAAS,GAAG,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACzB,CAAC,CAAC;QAEH,OAAO;YACH,KAAK,SAAA;YACL,KAAK,OAAA;YACL,IAAI;SACP,CAAC;IACN,CAAC;;IClBM,IAAM,cAAc,GAAG,UAC1B,OAAgB,EAChB,MAAkB;QAElB,IAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAM,KAAK,GAAmC,EAAE,CAAC;QACjD,IAAI,IAAI,2BAAgC;QACxC,IAAM,KAAK,kBAAyC;QACpD,IAAM,IAAI,2BAAkD;QAC5D,IAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG,EAAE,CAAC;YACrC,IAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,EAAE;gBACT,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,KAAK,KAAK,QAAQ,EAAE;oBAC3D,IAAI,2BAAgC;oBACpC,OAAO;iBACV;qBAAM,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,KAAK,KAAK,QAAQ,EAAE;oBAClE,IAAI,2BAAgC;oBACpC,OAAO;iBACV;aACJ;YAED,IAAI,UAAU,CAAC,IAAI,wBAAyB;gBACxC,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE;oBAC5B,IAAM,KAAK,GAAGF,OAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7D,KAAK,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,WAAW,EAAE,KAAK,OAAA,EAAC,CAAC,CAAC;iBAC1C;qBAAM,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,EAAE;oBACjC,IAAM,KAAK,GAAGA,OAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7D,KAAK,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,eAAe,EAAE,KAAK,OAAA,EAAC,CAAC,CAAC;iBAC9C;qBAAM,IAAI,UAAU,CAAC,IAAI,KAAK,YAAY,EAAE;oBACzC,IAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;oBACjE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;wBACrB,IAAM,KAAK,GAAGA,OAAS,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClD,IAAM,MAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;wBACvB,IAAI,aAAa,CAAC,MAAI,CAAC,EAAE;4BACrB,KAAK,CAAC,IAAI,CAAC;gCACP,IAAI,EAAE,EAAC,IAAI,6BAA8B,MAAM,EAAE,MAAI,CAAC,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,MAAI,CAAC,KAAK,EAAC;gCACtF,KAAK,OAAA;6BACR,CAAC,CAAC;yBACN;qBACJ;iBACJ;aACJ;SACJ,CAAC,CAAC;QAEH,OAAO,IAAI;cACL;gBACI,KAAK,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;gBACpC,KAAK,OAAA;gBACL,IAAI,MAAA;aACP;cACD,EAAC,IAAI,MAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,QAAQ,UAAA,EAAE,IAAI,MAAA,EAAC,CAAC;IAC/C,CAAC;;ICvDM,IAAM,YAAY,GAAG,cAAc,CAAC;IACpC,IAAM,aAAa,GAAG,eAAe,CAAC;IACtC,IAAM,cAAc,GAAG,gBAAgB,CAAC;IACxC,IAAM,eAAe,GAAG,iBAAiB,CAAC;IAC1C,IAAM,MAAM,GAAG,QAAQ,CAAC;IACxB,IAAM,OAAO,GAAG,SAAS,CAAC;IAC1B,IAAM,KAAK,GAAG,OAAO,CAAC;IACtB,IAAM,OAAO,GAAG,SAAS,CAAC;IAE1B,IAAM,cAAc,GAAG,UAAC,OAAgB,EAAE,MAAkB;QAC/D,IAAI,KAAK,kBAAyC;QAClD,IAAI,IAAI,2BAAkD;QAC1D,IAAM,KAAK,GAAmC,EAAE,CAAC;QACjD,IAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG,EAAE,CAAC;YACrC,IAAI,WAAW,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,EAAE;gBACT,IAAI,cAAY,GAAG,KAAK,CAAC;gBACzB,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,KAAK;oBAChC,IAAI,cAAY,EAAE;wBACd,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;4BACrB,QAAQ,KAAK,CAAC,KAAK;gCACf,KAAK,QAAQ;oCACT,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oCAC7B,OAAO,GAAG,CAAC;gCACf,KAAK,KAAK,CAAC;gCACX,KAAK,MAAM;oCACP,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oCAC3B,OAAO,GAAG,CAAC;gCACf,KAAK,OAAO,CAAC;gCACb,KAAK,QAAQ;oCACT,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;oCAC/B,OAAO,GAAG,CAAC;6BAClB;yBACJ;6BAAM,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;4BACrD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;yBACxB;qBACJ;yBAAM,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;wBAC5B,QAAQ,KAAK,CAAC,KAAK;4BACf,KAAK,MAAM;gCACP,KAAK,kBAAyB;gCAC9B,OAAO,KAAK,CAAC;4BACjB,KAAK,OAAO;gCACR,KAAK,mBAA0B;gCAC/B,OAAO,KAAK,CAAC;4BACjB,KAAK,IAAI;gCACL,cAAY,GAAG,IAAI,CAAC;gCACpB,OAAO,KAAK,CAAC;4BACjB,KAAK,YAAY;gCACb,IAAI,wBAAgC;gCACpC,OAAO,KAAK,CAAC;4BACjB,KAAK,KAAK,CAAC;4BACX,KAAK,aAAa;gCACd,IAAI,yBAAiC;gCACrC,OAAO,KAAK,CAAC;4BACjB,KAAK,OAAO,CAAC;4BACb,KAAK,cAAc;gCACf,IAAI,0BAAkC;gCACtC,OAAO,KAAK,CAAC;4BACjB,KAAK,eAAe;gCAChB,IAAI,2BAAmC;gCACvC,OAAO,KAAK,CAAC;yBACpB;qBACJ;yBAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE;wBACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;4BACtB,IAAI,GAAG,EAAE,CAAC;yBACb;wBACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACjB,OAAO,KAAK,CAAC;qBAChB;oBACD,OAAO,GAAG,CAAC;iBACd,EAAE,WAAW,CAAC,CAAC;aACnB;YAED,IAAI,WAAW,EAAE;gBACb,IAAM,SAAS,GAAG,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAC/C,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACzB;SACJ,CAAC,CAAC;QAEH,OAAO,EAAC,IAAI,MAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,QAAQ,UAAA,EAAE,IAAI,2BAA+B,CAAC;IAC9E,CAAC;;ICtEM,IAAM,oBAAoB,GAAG,UAAC,OAAgB,EAAE,MAAkB;QACrE,IAAI,KAAK,kBAAyC;QAClD,IAAI,IAAI,2BAAkD;QAC1D,IAAM,KAAK,GAAmC,EAAE,CAAC;QACjD,IAAM,QAAQ,GAAuB,EAAE,CAAC;QAExC,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG,EAAE,CAAC;YACrC,IAAI,WAAW,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,EAAE;gBACT,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,KAAK;oBAChC,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;wBACrB,QAAQ,KAAK,CAAC,KAAK;4BACf,KAAK,QAAQ;gCACT,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gCAC7B,OAAO,KAAK,CAAC;4BACjB,KAAK,KAAK,CAAC;4BACX,KAAK,MAAM;gCACP,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gCAC3B,OAAO,KAAK,CAAC;4BACjB,KAAK,OAAO,CAAC;4BACb,KAAK,QAAQ;gCACT,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gCAC/B,OAAO,KAAK,CAAC;yBACpB;qBACJ;yBAAM,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;wBACrD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACrB,OAAO,KAAK,CAAC;qBAChB;oBAED,OAAO,GAAG,CAAC;iBACd,EAAE,WAAW,CAAC,CAAC;aACnB;iBAAM,IAAI,CAAC,KAAK,CAAC,EAAE;gBAChB,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,KAAK;oBAChC,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;wBACrB,QAAQ,KAAK,CAAC,KAAK;4BACf,KAAK,MAAM;gCACP,KAAK,kBAAyB;gCAC9B,OAAO,KAAK,CAAC;4BACjB,KAAK,OAAO;gCACR,KAAK,mBAA0B;gCAC/B,OAAO,KAAK,CAAC;4BACjB,KAAK,OAAO,CAAC;4BACb,KAAK,YAAY;gCACb,IAAI,wBAAgC;gCACpC,OAAO,KAAK,CAAC;4BACjB,KAAK,aAAa;gCACd,IAAI,yBAAiC;gCACrC,OAAO,KAAK,CAAC;4BACjB,KAAK,cAAc;gCACf,IAAI,0BAAkC;gCACtC,OAAO,KAAK,CAAC;4BACjB,KAAK,KAAK,CAAC;4BACX,KAAK,eAAe;gCAChB,IAAI,2BAAmC;gCACvC,OAAO,KAAK,CAAC;yBACpB;qBACJ;yBAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE;wBACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;4BACtB,IAAI,GAAG,EAAE,CAAC;yBACb;wBACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACjB,OAAO,KAAK,CAAC;qBAChB;oBAED,OAAO,GAAG,CAAC;iBACd,EAAE,WAAW,CAAC,CAAC;aACnB;YAED,IAAI,WAAW,EAAE;gBACb,IAAM,SAAS,GAAG,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAC/C,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACzB;SACJ,CAAC,CAAC;QAEH,OAAO,EAAC,IAAI,MAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,QAAQ,UAAA,EAAE,IAAI,2BAA+B,CAAC;IAC9E,CAAC;;ICjFM,IAAM,gBAAgB,GAAG,UAAC,UAAqB;QAClD,OAAO,UAAU,CAAC,IAAI,6BAAkC;IAC5D,CAAC,CAAC;IAEK,IAAM,gBAAgB,GAAG,UAAC,UAAqB;QAClD,OAAO,UAAU,CAAC,IAAI,6BAAkC;IAC5D,CAAC,CAAC;IAuDK,IAAM,KAAK,GAA+B;QAC7C,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,UAAC,OAAgB,EAAE,KAAe;YACrC,IAAI,KAAK,CAAC,IAAI,yBAA0B;gBACpC,IAAM,OAAK,GAAgB,EAAC,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,eAAmB,CAAC;gBACtE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpC,OAAO,OAAK,CAAC;aAChB;YAED,IAAI,KAAK,CAAC,IAAI,wBAAyB;gBACnC,IAAM,aAAa,GAAG,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5D,IAAI,OAAO,aAAa,KAAK,WAAW,EAAE;oBACtC,MAAM,IAAI,KAAK,CAAC,yDAAsD,KAAK,CAAC,IAAI,OAAG,CAAC,CAAC;iBACxF;gBACD,OAAO,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;aAC/C;YAED,MAAM,IAAI,KAAK,CAAC,4BAA0B,KAAK,CAAC,IAAM,CAAC,CAAC;SAC3D;KACJ,CAAC;aAEc,gBAAgB,CAAC,KAAe;QAC5C,QACI,EAAE,KAAK,CAAC,IAAI,6BAA8B,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC;aAChE,KAAK,CAAC,IAAI,0BAA2B,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAChF;IACN,CAAC;IAED,IAAM,yBAAyB,GAAsE;QACjG,iBAAiB,EAAE,cAAc;QACjC,sBAAsB,EAAE,oBAAoB;QAC5C,qBAAqB,EAAE,oBAAoB;QAC3C,oBAAoB,EAAE,oBAAoB;QAC1C,yBAAyB,EAAE,oBAAoB;QAC/C,iBAAiB,EAAE,cAAc;QACjC,sBAAsB,EAAE,oBAAoB;QAC5C,qBAAqB,EAAE,oBAAoB;QAC3C,oBAAoB,EAAE,oBAAoB;QAC1C,yBAAyB,EAAE,oBAAoB;QAC/C,kBAAkB,EAAE,cAAc;KACrC;;ICjHM,IAAM,eAAe,GAAyC;QACjE,IAAI,EAAE,kBAAkB;QACxB,YAAY,EAAE,MAAM;QACpB,IAAI;QACJ,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,UAAC,OAAgB,EAAE,MAAkB;YACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,OAAO,EAAE,CAAC;aACb;YAED,IAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAExB,IAAI,KAAK,CAAC,IAAI,6BAA8B,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE;gBAChE,OAAO,EAAE,CAAC;aACb;YAED,OAAO,MAAM;iBACR,MAAM,CAAC,UAAC,KAAK,IAAK,OAAA,uBAAuB,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAA,CAAC;iBAC5E,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAA,CAAC,CAAC;SACpD;KACJ;;ICdM,IAAM,gBAAgB,GAA8C;QACvE,IAAI,EAAE,mBAAmB;QACzB,YAAY,EAAE,YAAY;QAC1B,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,MAAkB;YACzC,OAAO,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK;gBACpB,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;oBACrB,QAAQ,KAAK,CAAC,KAAK;wBACf,KAAK,aAAa;4BACd,2BAAqC;wBACzC,KAAK,aAAa;4BACd,2BAAqC;qBAC5C;iBACJ;gBACD,0BAAoC;aACvC,CAAC,CAAC;SACN;KACJ;;ICtBM,IAAM,kBAAkB,GAAgD;QAC3E,IAAI,EAAE,qBAAqB;QAC3B,YAAY,EAAE,OAAO;QACrB,IAAI;QACJ,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,UAAC,QAAiB,EAAE,MAAkB;YACzC,OAAO,iBAAiB,CAAC,MAAM,CAAC;iBAC3B,GAAG,CAAC,UAAC,MAAkB,IAAK,OAAA,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAA,CAAC;iBAC9D,GAAG,CAAC,0BAA0B,CAAC,CAAC;SACxC;KACJ;;ICNM,IAAM,gBAAgB,GAA8C;QACvE,IAAI,EAAE,mBAAmB;QACzB,YAAY,EAAE,QAAQ;QACtB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,MAAkB;YACzC,OAAO,iBAAiB,CAAC,MAAM,CAAC;iBAC3B,GAAG,CAAC,UAAC,MAAM;gBACR,OAAA,MAAM;qBACD,MAAM,CAAC,YAAY,CAAC;qBACpB,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,KAAK,GAAA,CAAC;qBAC3B,IAAI,CAAC,GAAG,CAAC;aAAA,CACjB;iBACA,GAAG,CAAC,qBAAqB,CAAC,CAAC;SACnC;KACJ,CAAC;IAEF,IAAM,qBAAqB,GAAG,UAAC,KAAa;QACxC,QAAQ,KAAK;YACT,KAAK,WAAW;gBACZ,yBAAmC;YACvC,KAAK,UAAU,CAAC;YAChB,KAAK,kBAAkB;gBACnB,wBAAkC;YACtC,KAAK,UAAU,CAAC;YAChB,KAAK,kBAAkB;gBACnB,wBAAkC;YACtC,KAAK,QAAQ,CAAC;YACd;gBACI,sBAAgC;SACvC;IACL,CAAC;;ICrCD,IAAY,eAIX;IAJD,WAAY,eAAe;QACvB,gCAAa,CAAA;QACb,sCAAmB,CAAA;QACnB,kCAAe,CAAA;IACnB,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B;IAKM,IAAM,cAAc,GAA4C;QACnE,IAAI,EAAE,iBAAiB;QACvB,YAAY,EAAE,GAAG;QACjB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,MAAkB;YACzC,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAC,MAAM,IAAK,OAAA,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,GAAA,CAAC,CAAC;SAC9F;KACJ,CAAC;IAEF,IAAM,yBAAyB,GAAG,UAAC,KAAe;QAC9C,OAAA,YAAY,CAAC,KAAK,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC;IAAhD,CAAgD;;ICzBpD,IAAM,kBAAkB,GAAG,UAAC,IAAY,IAAmC,QAAC;QACxE,IAAI,EAAE,YAAU,IAAI,WAAQ;QAC5B,YAAY,EAAE,aAAa;QAC3B,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,MAAM,EAAE,OAAO;KAClB,IAAC,CAAC;IAEI,IAAM,cAAc,GAAiC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC/E,IAAM,gBAAgB,GAAiC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACnF,IAAM,iBAAiB,GAAiC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACrF,IAAM,eAAe,GAAiC,kBAAkB,CAAC,MAAM,CAAC;;ICNvF,IAAM,mBAAmB,GAAG,UAAC,IAAY,IAA4C,QAAC;QAClF,IAAI,EAAE,mBAAiB,IAAM;QAC7B,YAAY,EAAE,KAAK;QACnB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,MAAkB;YACzC,OAAA,0BAA0B,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;SAAA;KACpE,IAAC,CAAC;IAEI,IAAM,mBAAmB,GAA0C,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACnG,IAAM,oBAAoB,GAA0C,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACrG,IAAM,uBAAuB,GAA0C,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAC3G,IAAM,sBAAsB,GAA0C,mBAAmB,CAAC,aAAa,CAAC;;ICR/G,IAAM,kBAAkB,GAAG,UAAC,IAAY,IAAkD,QAAC;QACvF,IAAI,EAAE,YAAU,IAAI,WAAQ;QAC5B,YAAY,EAAE,OAAO;QACrB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,KAAa;YACpC,QAAQ,KAAK;gBACT,KAAK,MAAM;oBACP,oBAAyB;gBAC7B,KAAK,QAAQ;oBACT,sBAA2B;gBAC/B,KAAK,QAAQ;oBACT,sBAA2B;gBAC/B,KAAK,QAAQ;oBACT,sBAA2B;aAClC;YACD,qBAA0B;SAC7B;KACJ,IAAC,CAAC;IAEI,IAAM,cAAc,GAAgD,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC9F,IAAM,gBAAgB,GAAgD,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAClG,IAAM,iBAAiB,GAAgD,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACpG,IAAM,eAAe,GAAgD,kBAAkB,CAAC,MAAM,CAAC;;IC9BtG,IAAM,kBAAkB,GAAG,UAAC,IAAY,IAAuC,QAAC;QAC5E,IAAI,EAAE,YAAU,IAAI,WAAQ;QAC5B,YAAY,EAAE,GAAG;QACjB,IAAI;QACJ,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,UAAC,QAAiB,EAAE,KAAe;YACtC,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;gBACzB,OAAO,KAAK,CAAC,MAAM,CAAC;aACvB;YACD,OAAO,CAAC,CAAC;SACZ;KACJ,IAAC,CAAC;IAEI,IAAM,cAAc,GAAqC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnF,IAAM,gBAAgB,GAAqC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACvF,IAAM,iBAAiB,GAAqC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACzF,IAAM,eAAe,GAAqC,kBAAkB,CAAC,MAAM,CAAC;;ICjBpF,IAAM,KAAK,GAAiC;QAC/C,IAAI,EAAE,OAAO;QACb,YAAY,EAAE,aAAa;QAC3B,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,MAAM,EAAE,OAAO;KAClB;;ICAM,IAAM,SAAS,GAA6C;QAC/D,IAAI,EAAE,WAAW;QACjB,YAAY,EAAE,KAAK;QACnB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,SAAiB;YACxC,QAAQ,SAAS;gBACb,KAAK,KAAK;oBACN,mBAAqB;gBACzB,KAAK,KAAK,CAAC;gBACX;oBACI,mBAAqB;aAC5B;SACJ;KACJ;;ICgBM,IAAM,OAAO,GAAqC;QACrD,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,cAAc;QAC5B,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,MAAkB;YACzC,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,KAAK;gBACjD,OAAO,GAAG,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aAC/C,eAAe,CAAC;SACpB;KACJ,CAAC;IAEF,IAAM,iBAAiB,GAAG,UAAC,OAAe;QACtC,QAAQ,OAAO;YACX,KAAK,OAAO,CAAC;YACb,KAAK,aAAa;gBACd,qBAAqB;YACzB,KAAK,QAAQ;gBACT,sBAAsB;YAC1B,KAAK,QAAQ;gBACT,sBAAsB;YAC1B,KAAK,MAAM;gBACP,qBAAoB;YACxB,KAAK,WAAW;gBACZ,0BAAyB;YAC7B,KAAK,OAAO;gBACR,sBAAqB;YACzB,KAAK,MAAM,CAAC;YACZ,KAAK,cAAc;gBACf,sBAAoB;YACxB,KAAK,MAAM,CAAC;YACZ,KAAK,UAAU;gBACX,sBAAoB;YACxB,KAAK,MAAM;gBACP,sBAAoB;YACxB,KAAK,SAAS;gBACV,0BAAuB;YAC3B,KAAK,WAAW;gBACZ,4BAAyB;YAC7B,KAAK,iBAAiB;gBAClB,kCAA+B;YACnC,KAAK,oBAAoB;gBACrB,qCAAkC;YACtC,KAAK,oBAAoB;gBACrB,sCAAkC;YACtC,KAAK,WAAW;gBACZ,6BAAyB;YAC7B,KAAK,YAAY;gBACb,8BAA0B;YAC9B,KAAK,oBAAoB;gBACrB,uCAAkC;YACtC,KAAK,cAAc;gBACf,iCAA4B;YAChC,KAAK,eAAe;gBAChB,kCAA6B;YACjC,KAAK,WAAW;gBACZ,+BAAyB;YAC7B,KAAK,WAAW;gBACZ,+BAAyB;YAC7B,KAAK,qBAAqB;gBACtB,yCAAmC;YACvC,KAAK,qBAAqB;gBACtB,yCAAmC;YACvC,KAAK,UAAU;gBACX,+BAAwB;YAC5B,KAAK,cAAc;gBACf,mCAA4B;YAChC,KAAK,kBAAkB;gBACnB,uCAAgC;YACpC,KAAK,cAAc;gBACf,oCAA4B;YAChC,KAAK,aAAa;gBACd,mCAA2B;YAC/B,KAAK,aAAa;gBACd,mCAA2B;SAClC;QAED,oBAAoB;IACxB,CAAC;;IC1GM,IAAM,KAAK,GAAyC;QACvD,IAAI,EAAE,OAAO;QACb,YAAY,EAAE,MAAM;QACpB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,KAAa;YACpC,QAAQ,KAAK;gBACT,KAAK,MAAM;oBACP,oBAAkB;gBACtB,KAAK,OAAO;oBACR,qBAAmB;gBACvB,KAAK,cAAc;oBACf,4BAA0B;gBAC9B,KAAK,YAAY;oBACb,0BAAwB;aAC/B;YACD,oBAAkB;SACrB;KACJ;;ICxBM,IAAM,aAAa,GAAqC;QAC3D,IAAI,EAAE,gBAAgB;QACtB,YAAY,EAAE,GAAG;QACjB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,KAAe;YACtC,IAAI,KAAK,CAAC,IAAI,6BAA8B,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE;gBAClE,OAAO,CAAC,CAAC;aACZ;YAED,IAAI,KAAK,CAAC,IAAI,4BAA6B;gBACvC,OAAO,KAAK,CAAC,MAAM,CAAC;aACvB;YAED,IAAI,KAAK,CAAC,IAAI,+BAAgC;gBAC1C,OAAO,KAAK,CAAC,MAAM,CAAC;aACvB;YAED,OAAO,CAAC,CAAC;SACZ;KACJ;;ICtBD,IAAY,UAGX;IAHD,WAAY,UAAU;QAClB,+BAAiB,CAAA;QACjB,+BAAiB,CAAA;IACrB,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;IAEM,IAAM,SAAS,GAA8C;QAChE,IAAI,EAAE,YAAY;QAClB,YAAY,EAAE,QAAQ;QACtB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,SAAiB;YACxC,QAAQ,SAAS;gBACb,KAAK,QAAQ;oBACT,OAAO,UAAU,CAAC,MAAM,CAAC;gBAC7B,KAAK,QAAQ,CAAC;gBACd;oBACI,OAAO,UAAU,CAAC,MAAM,CAAC;aAChC;SACJ;KACJ;;ICjBM,IAAM,UAAU,GAAkC;QACrD,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE,QAAQ;QACtB,MAAM,EAAE,KAAK;QACb,IAAI;KACP,CAAC;IAEK,IAAM,iBAAiB,GAAG,UAAC,KAAe,EAAE,QAAgB;QAC/D,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE;YACjD,OAAO,GAAG,GAAG,QAAQ,CAAC;SACzB;aAAM,IAAI,KAAK,CAAC,IAAI,4BAA6B;YAC9C,OAAO,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;SAClC;aAAM,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE;YAClC,OAAO,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SAC5C;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;;ICfM,IAAM,cAAc,GAA+C;QACtE,IAAI,EAAE,kBAAkB;QACxB,YAAY,EAAE,MAAM;QACpB,IAAI;QACJ,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,UAAC,OAAgB,EAAE,KAAe;YACrC,IAAI,KAAK,CAAC,IAAI,6BAA8B,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE;gBAChE,OAAO,IAAI,CAAC;aACf;YAED,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SACtC;KACJ;;ICXM,IAAM,iBAAiB,GAAuD;QACjF,IAAI,EAAE,qBAAqB;QAC3B,YAAY,EAAE,SAAS;QACvB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,QAAgB;YACvC,QAAQ,QAAQ;gBACZ,KAAK,QAAQ;oBACT,sBAAkC;gBACtC,KAAK,SAAS,CAAC;gBACf;oBACI,uBAAmC;aAC1C;SACJ;KACJ;;ICsCM,IAAM,aAAa,GAAmD;QACzE,IAAI,EAAE,iBAAiB;QACvB,YAAY,EAAE,MAAM;QACpB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,IAAY;YACnC,QAAQ,IAAI;gBACR,KAAK,MAAM;oBACP,oBAA4B;gBAChC,KAAK,QAAQ;oBACT,sBAA8B;gBAClC,KAAK,QAAQ;oBACT,sBAA8B;gBAClC,KAAK,SAAS;oBACV,uBAA+B;gBACnC,KAAK,aAAa;oBACd,2BAAmC;gBACvC,KAAK,sBAAsB;oBACvB,oCAA4C;gBAChD,KAAK,aAAa;oBACd,2BAAmC;gBACvC,KAAK,aAAa;oBACd,2BAAmC;gBACvC,KAAK,aAAa;oBACd,2BAAmC;gBACvC,KAAK,aAAa;oBACd,2BAAmC;gBACvC,KAAK,aAAa;oBACd,4BAAmC;gBACvC,KAAK,cAAc;oBACf,6BAAoC;gBACxC,KAAK,UAAU;oBACX,yBAAgC;gBACpC,KAAK,SAAS;oBACV,wBAA+B;gBACnC,KAAK,WAAW;oBACZ,0BAAiC;gBACrC,KAAK,oBAAoB;oBACrB,mCAA0C;gBAC9C,KAAK,mBAAmB;oBACpB,kCAAyC;gBAC7C,KAAK,iBAAiB;oBAClB,gCAAuC;gBAC3C,KAAK,YAAY;oBACb,2BAAkC;gBACtC,KAAK,kBAAkB;oBACnB,iCAAwC;gBAC5C,KAAK,UAAU;oBACX,yBAAgC;gBACpC,KAAK,UAAU;oBACX,yBAAgC;gBACpC,KAAK,UAAU;oBACX,yBAAgC;gBACpC,KAAK,QAAQ;oBACT,uBAA8B;gBAClC,KAAK,UAAU;oBACX,yBAAgC;gBACpC,KAAK,gBAAgB;oBACjB,+BAAsC;gBAC1C,KAAK,iBAAiB;oBAClB,gCAAuC;gBAC3C,KAAK,mBAAmB;oBACpB,kCAAyC;gBAC7C,KAAK,SAAS;oBACV,wBAA+B;gBACnC,KAAK,UAAU;oBACX,yBAAgC;gBACpC,KAAK,gBAAgB;oBACjB,+BAAsC;gBAC1C,KAAK,OAAO;oBACR,sBAA6B;gBACjC,KAAK,sBAAsB;oBACvB,qCAA4C;gBAChD,KAAK,qBAAqB;oBACtB,oCAA2C;gBAC/C,KAAK,uBAAuB;oBACxB,sCAA6C;gBACjD,KAAK,KAAK;oBACN,oBAA2B;gBAC/B,KAAK,gBAAgB;oBACjB,+BAAsC;gBAC1C,KAAK,WAAW;oBACZ,0BAAiC;gBACrC,KAAK,WAAW;oBACZ,0BAAiC;gBACrC,KAAK,SAAS;oBACV,wBAA+B;gBACnC,KAAK,OAAO;oBACR,sBAA6B;gBACjC,KAAK,SAAS;oBACV,wBAA+B;gBACnC,KAAK,qBAAqB;oBACtB,oCAA2C;gBAC/C,KAAK,uBAAuB;oBACxB,sCAA6C;gBACjD,KAAK,OAAO;oBACR,sBAA6B;gBACjC,KAAK,QAAQ;oBACT,uBAA8B;gBAClC,KAAK,MAAM;oBACP,qBAA4B;gBAChC,KAAK,SAAS;oBACV,wBAA+B;gBACnC,KAAK,qBAAqB;oBACtB,oCAA2C;gBAC/C,KAAK,uBAAuB;oBACxB,sCAA6C;gBACjD,KAAK,gBAAgB;oBACjB,+BAAsC;gBAC1C,KAAK,iBAAiB;oBAClB,gCAAuC;gBAC3C,KAAK,mBAAmB;oBACpB,kCAAyC;gBAC7C,KAAK,MAAM,CAAC;gBACZ;oBACI,qBAA4B;aACnC;SACJ;KACJ;;IC/KD,IAAM,aAAa,GAAG,UAAC,IAAY,IAAoC,QAAC;QACpE,IAAI,EAAE,YAAU,IAAM;QACtB,YAAY,EAAE,GAAG;QACjB,MAAM,EAAE,KAAK;QACb,IAAI;KACP,IAAC,CAAC;IAEI,IAAM,SAAS,GAAkC,aAAa,CAAC,KAAK,CAAC,CAAC;IACtE,IAAM,WAAW,GAAkC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC1E,IAAM,YAAY,GAAkC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC5E,IAAM,UAAU,GAAkC,aAAa,CAAC,MAAM,CAAC;;ICDvE,IAAM,QAAQ,GAAwC;QACzD,IAAI,EAAE,UAAU;QAChB,YAAY,EAAE,SAAS;QACvB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,MAAkB;YACzC,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,UAAC,QAAQ;gBAC5C,QAAQ,QAAQ,CAAC,KAAK;oBAClB,KAAK,QAAQ;wBACT,sBAAuB;oBAC3B,KAAK,QAAQ;wBACT,sBAAuB;oBAC3B,KAAK,MAAM;wBACP,oBAAqB;oBACzB,KAAK,MAAM;wBACP,oBAAqB;oBACzB,KAAK,SAAS,CAAC;oBACf;wBACI,uBAAwB;iBAC/B;aACJ,CAAC,CAAC;SACN;KACJ;;IC1BM,IAAM,YAAY,GAAiD;QACtE,IAAI,EAAE,eAAe;QACrB,YAAY,EAAE,QAAQ;QACtB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,QAAgB;YACvC,QAAQ,QAAQ;gBACZ,KAAK,YAAY;oBACb,qCAAgC;gBACpC,KAAK,QAAQ,CAAC;gBACd;oBACI,6BAA4B;aACnC;SACJ;KACJ;;ICnBD,IAAM,cAAc,GAAG,UAAC,IAAY,IAAmC,QAAC;QACpE,IAAI,EAAE,aAAW,IAAM;QACvB,YAAY,EAAE,GAAG;QACjB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,MAAM,EAAE,mBAAmB;KAC9B,IAAC,CAAC;IAEI,IAAM,UAAU,GAAiC,cAAc,CAAC,KAAK,CAAC,CAAC;IACvE,IAAM,YAAY,GAAiC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC3E,IAAM,aAAa,GAAiC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC7E,IAAM,WAAW,GAAiC,cAAc,CAAC,MAAM,CAAC;;ICLxE,IAAM,SAAS,GAA8C;QAChE,IAAI,EAAE,YAAY;QAClB,YAAY,EAAE,MAAM;QACpB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,SAAiB;YACxC,QAAQ,SAAS;gBACb,KAAK,OAAO;oBACR,qBAAwB;gBAC5B,KAAK,QAAQ,CAAC;gBACd,KAAK,SAAS;oBACV,sBAAyB;gBAC7B,KAAK,MAAM,CAAC;gBACZ;oBACI,oBAAuB;aAC9B;SACJ;KACJ;;ICfM,IAAM,QAAQ,GAA4C;QAC7D,IAAI,EAAE,UAAU;QAChB,YAAY,EAAE,QAAQ;QACtB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,QAAgB;YACvC,QAAQ,QAAQ;gBACZ,KAAK,UAAU;oBACX,wBAAyB;gBAC7B,KAAK,UAAU;oBACX,wBAAyB;gBAC7B,KAAK,OAAO;oBACR,qBAAsB;gBAC1B,KAAK,QAAQ;oBACT,sBAAuB;aAC9B;YAED,sBAAuB;SAC1B;KACJ;;ICdM,IAAM,UAAU,GAAwC;QAC3D,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE,MAAM;QACpB,IAAI;QACJ,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,UAAC,OAAgB,EAAE,MAAkB;YACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE;gBAC5D,OAAO,EAAE,CAAC;aACb;YAED,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAC,MAAkB;gBACpD,IAAM,MAAM,GAAmB;oBAC3B,KAAK,EAAE,MAAM,CAAC,WAAW;oBACzB,OAAO,EAAE,WAAW;oBACpB,OAAO,EAAE,WAAW;oBACpB,IAAI,EAAE,WAAW;iBACpB,CAAC;gBACF,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACxB,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;wBACjB,IAAI,CAAC,KAAK,CAAC,EAAE;4BACT,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;yBAC1B;6BAAM,IAAI,CAAC,KAAK,CAAC,EAAE;4BAChB,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;yBAC1B;6BAAM;4BACH,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC;yBACvB;wBACD,CAAC,EAAE,CAAC;qBACP;yBAAM;wBACH,MAAM,CAAC,KAAK,GAAGD,OAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;qBAC9C;iBACJ;gBACD,OAAO,MAAM,CAAC;aACjB,CAAC,CAAC;SACN;KACJ;;IC1CM,IAAM,aAAa,GAAkD;QACxE,IAAI,EAAE,gBAAgB;QACtB,YAAY,EAAE,MAAM;QACpB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,aAAqB;YAC5C,QAAQ,aAAa;gBACjB,KAAK,WAAW;oBACZ,yBAAgC;gBACpC,KAAK,WAAW;oBACZ,yBAAgC;gBACpC,KAAK,YAAY;oBACb,0BAAiC;aACxC;YAED,oBAA2B;SAC9B;KACJ;;ICnBM,IAAMI,WAAS,GAAwC;QAC1D,IAAI,EAAE,WAAW;QACjB,YAAY,EAAE,MAAM;QACpB,MAAM,EAAE,IAAI;QACZ,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,KAAe;YACtC,IAAI,KAAK,CAAC,IAAI,6BAA8B,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE;gBAChE,OAAO,IAAI,CAAC;aACf;YAED,IAAI,KAAK,CAAC,IAAI,wBAAyB;gBACnC,IAAM,iBAAiB,GAAG,6BAA6B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACpE,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE;oBAC1C,MAAM,IAAI,KAAK,CAAC,6DAA0D,KAAK,CAAC,IAAI,OAAG,CAAC,CAAC;iBAC5F;gBACD,OAAO,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;aAC1C;YAED,OAAO,IAAI,CAAC;SACf;KACJ,CAAC;IAEF,IAAM,MAAM,GAAG,UAAC,IAAgB;QAC5B,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,IAAI,6BAA2B,CAAC,CAAC,GAAG,CAAC,UAAC,GAAqB,IAAK,OAAA,GAAG,CAAC,MAAM,GAAA,CAAC,CAAC;QAEpH,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,GAAI,MAAiB,GAAG,IAAI,CAAC;IAC3D,CAAC,CAAC;IAEF;IACA,IAAM,QAAQ,GAAG,UAAC,IAAgB;QAC9B,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,IAAI,6BAA2B,CAAC,CAAC,GAAG,CAAC,UAAC,GAAqB,IAAK,OAAA,GAAG,CAAC,MAAM,GAAA,CAAC,CAAC;YAE7G,EAAE,GAAgE,MAAM,GAAtE,EAAE,EAAE,GAA4D,MAAM,GAAlE,EAA4D,MAAM,GAA9D,EAAwD,MAAM,GAA1D,MAAE,EAAE,GAAgD,MAAM,GAAtD,EAAE,EAAE,GAA4C,MAAM,GAAlD,EAA4C,MAAM,GAA9C,EAAwC,MAAM,GAA1C,EAAoC,MAAM,GAAtC,EAAgC,MAAM,GAAlC,EAA4B,MAAM,IAA9B,EAAwB,MAAM,IAA1B,MAAE,EAAE,GAAgB,MAAM,IAAtB,EAAE,EAAE,GAAY,MAAM,IAAlB,EAAY,MAAM,IAAd,EAAQ,MAAM,KAAC;QAEhF,OAAO,MAAM,CAAC,MAAM,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;IAClE,CAAC,CAAC;IAEF,IAAM,6BAA6B,GAE/B;QACA,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,QAAQ;KACrB;;IC1CD,IAAM,aAAa,GAAqB;QACpC,IAAI;QACJ,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,YAAY;KACtB,CAAC;IACF,IAAM,OAAO,GAAoB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAEzD,IAAM,eAAe,GAA6C;QACrE,IAAI,EAAE,kBAAkB;QACxB,YAAY,EAAE,SAAS;QACvB,MAAM,EAAE,IAAI;QACZ,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,MAAkB;YACzC,IAAM,OAAO,GAAuB,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAEtE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtB,OAAO,OAAO,CAAC;aAClB;YAED,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SACnC;KACJ;;ICpBM,IAAM,UAAU,GAA8C;QACjE,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,MAAM;QACpB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,UAAkB;YACzC,QAAQ,UAAU;gBACd,KAAK,QAAQ;oBACT,sBAAyB;gBAC7B,KAAK,UAAU;oBACX,wBAA2B;gBAC/B,KAAK,SAAS,CAAC;gBACf;oBACI,uBAA0B;aACjC;SACJ;KACJ;;ICtBD,IAAY,UAIX;IAJD,WAAY,UAAU;QAClB,+BAAiB,CAAA;QACjB,qCAAuB,CAAA;QACvB,mCAAqB,CAAA;IACzB,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;IAEM,IAAM,SAAS,GAA8C;QAChE,IAAI,EAAE,YAAY;QAClB,YAAY,EAAE,QAAQ;QACtB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,SAAiB;YACxC,QAAQ,SAAS;gBACb,KAAK,WAAW;oBACZ,OAAO,UAAU,CAAC,SAAS,CAAC;gBAChC,KAAK,UAAU;oBACX,OAAO,UAAU,CAAC,QAAQ,CAAC;gBAC/B,KAAK,QAAQ,CAAC;gBACd;oBACI,OAAO,UAAU,CAAC,MAAM,CAAC;aAChC;SACJ;KACJ;;ICdM,IAAM,MAAM,GAAqC;QACpD,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,MAAM;QACpB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,KAAe;YACtC,IAAI,KAAK,CAAC,IAAI,2BAA4B;gBACtC,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC;aACjC;YAED,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;gBACtB,OAAO,EAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAC,CAAC;aAC7C;YAED,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SACpD;KACJ;;ICrBM,IAAM,IAAI,GAA4B;QACzC,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,UAAC,QAAiB,EAAE,KAAe;YACtC,IAAI,KAAK,CAAC,IAAI,+BAAgC;gBAC1C,QAAQ,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE;oBAC5B,KAAK,GAAG;wBACJ,OAAO,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;oBAC/B,KAAK,IAAI;wBACL,OAAO,KAAK,CAAC,MAAM,CAAC;iBAC3B;aACJ;YAED,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;SAC5C;KACJ;;IChBM,IAAM,OAAO,GAAqC;QACrD,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,GAAG;QACjB,IAAI;QACJ,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,UAAC,QAAiB,EAAE,KAAe;YACtC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;gBACtB,OAAO,KAAK,CAAC,MAAM,CAAC;aACvB;YACD,OAAO,CAAC,CAAC;SACZ;KACJ;;ICZM,IAAM,mBAAmB,GAAiC;QAC7D,IAAI,EAAE,uBAAuB;QAC7B,YAAY,EAAE,aAAa;QAC3B,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,MAAM,EAAE,OAAO;KAClB;;ICMM,IAAM,kBAAkB,GAAgD;QAC3E,IAAI,EAAE,sBAAsB;QAC5B,YAAY,EAAE,MAAM;QACpB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,MAAkB;YACzC,OAAO,MAAM;iBACR,MAAM,CAAC,YAAY,CAAC;iBACpB,GAAG,CAAC,UAAC,KAAK;gBACP,QAAQ,KAAK,CAAC,KAAK;oBACf,KAAK,WAAW;wBACZ,yBAAsC;oBAC1C,KAAK,UAAU;wBACX,wBAAqC;oBACzC,KAAK,cAAc;wBACf,4BAAyC;oBAC7C,KAAK,MAAM;wBACP,qBAAkC;iBACzC;gBACD,oBAAiC;aACpC,CAAC;iBACD,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,oBAA8B,CAAC,CAAC;SAC7D;KACJ;;IC5BM,IAAM,UAAU,GAAwC;QAC3D,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE,EAAE;QAChB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,MAAkB;YACzC,IAAM,WAAW,GAAa,EAAE,CAAC;YACjC,IAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK;gBACjB,QAAQ,KAAK,CAAC,IAAI;oBACd,0BAA2B;oBAC3B;wBACI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBAC9B,MAAM;oBACV;wBACI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;wBAC1C,MAAM;oBACV;wBACI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;wBACpC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;wBACvB,MAAM;iBACb;aACJ,CAAC,CAAC;YACH,IAAI,WAAW,CAAC,MAAM,EAAE;gBACpB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;aACvC;YACD,OAAO,OAAO,CAAC,GAAG,CAAC,UAAC,MAAM,IAAK,QAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,GAAG,MAAI,MAAM,MAAG,IAAC,CAAC,CAAC;SACzF;KACJ;;ICnCM,IAAM,QAAQ,GAAiC;QAClD,IAAI,EAAE,WAAW;QACjB,YAAY,EAAE,GAAG;QACjB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,MAAM,EAAE,QAAQ;KACnB;;ICLM,IAAM,UAAU,GAAqC;QACxD,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE,QAAQ;QACtB,IAAI;QACJ,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,UAAC,QAAiB,EAAE,KAAe;YACtC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;gBACtB,OAAO,KAAK,CAAC,MAAM,CAAC;aACvB;YAED,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;gBACrB,QAAQ,KAAK,CAAC,KAAK;oBACf,KAAK,MAAM;wBACP,OAAO,GAAG,CAAC;oBACf,KAAK,QAAQ,CAAC;oBACd;wBACI,OAAO,GAAG,CAAC;iBAClB;aACJ;YAED,OAAO,GAAG,CAAC;SACd;KACJ;;ICtBM,IAAM,WAAW,GAAsC;QAC1D,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE,MAAM;QACpB,IAAI;QACJ,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,UAAC,QAAiB,EAAE,MAAkB;YACzC,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,KAAK,GAAA,CAAC,CAAC;SAClE;KACJ;;ICHM,IAAM,SAAS,GAA8C;QAChE,IAAI,EAAE,YAAY;QAClB,YAAY,EAAE,QAAQ;QACtB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,QAAgB;YACvC,QAAQ,QAAQ;gBACZ,KAAK,SAAS;oBACV,+BAA0B;gBAC9B,KAAK,QAAQ;oBACT,6BAAyB;gBAC7B,KAAK,QAAQ,CAAC;gBACd;oBACI,6BAAyB;aAChC;SACJ;KACJ;;ICxBM,IAAM,QAAQ,GAAG,UAAC,GAAW,EAAE,KAAa,IAAc,OAAA,CAAC,GAAG,GAAG,KAAK,MAAM,CAAC,GAAA;;ICO7E,IAAM,OAAO,GAAqC;QACrD,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,MAAM;QACpB,IAAI;QACJ,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,UAAC,QAAiB,EAAE,MAAkB;YACzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,OAAO,EAAE,CAAC;aACb;YAED,IAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAExB,IAAI,KAAK,CAAC,IAAI,6BAA8B,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE;gBAChE,OAAO,EAAE,CAAC;aACb;YAED,OAAO,MAAM,CAAC;SACjB;KACJ;;ICbM,IAAM,gBAAgB,GAA8C;QACvE,IAAI,EAAE,mBAAmB;QACzB,YAAY,EAAE,MAAM;QACpB,MAAM,EAAE,IAAI;QACZ,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,MAAkB;YACzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,OAAO,IAAI,CAAC;aACf;YAED,IAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAExB,IAAI,KAAK,CAAC,IAAI,6BAA8B,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE;gBAChE,OAAO,IAAI,CAAC;aACf;YAED,IAAM,UAAU,GAAG,EAAE,CAAC;YACtB,IAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAE9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7B,IAAI,OAAO,CAAC,IAAI,2BAA4B;oBACxC,IAAM,SAAS,GAAG,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;oBAChE,UAAU,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,WAAA,EAAC,CAAC,CAAC;iBACxD;aACJ;YAED,OAAO,UAAU,CAAC;SACrB;KACJ;;IC/BM,IAAM,YAAY,GAA0C;QAC/D,IAAI,EAAE,eAAe;QACrB,YAAY,EAAE,MAAM;QACpB,MAAM,EAAE,IAAI;QACZ,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,MAAkB;YACzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,OAAO,EAAE,CAAC;aACb;YAED,IAAM,MAAM,GAAG,EAAE,CAAC;YAClB,IAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAE9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7B,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,EAAE;oBACnD,IAAM,KAAK,GAAG,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC5D,MAAM,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,OAAA,EAAC,CAAC,CAAC;iBAChD;aACJ;YAED,OAAO,MAAM,CAAC;SACjB;KACJ;;IC9BM,IAAM,QAAQ,GAAsC;QACvD,IAAI,EAAE,UAAU;QAChB,YAAY,EAAE,IAAI;QAClB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,OAAgB,EAAE,MAAkB;YACxC,OAAO,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAA,CAAC,CAAC;SACrF;KACJ;;ICDM,IAAM,MAAM,GAAoC;QACnD,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,MAAM;QACpB,MAAM,EAAE,IAAI;QACZ,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,MAAkB;YACzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,OAAO,IAAI,CAAC;aACf;YAED,IAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAExB,IAAI,KAAK,CAAC,IAAI,6BAA8B,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE;gBAChE,OAAO,IAAI,CAAC;aACf;YAED,IAAM,MAAM,GAAG,EAAE,CAAC;YAClB,IAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAE9C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;gBAC3B,OAAO,IAAI,CAAC;aACf;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBACzC,IAAM,MAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC/B,IAAM,OAAK,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,QAAA,EAAE,KAAK,SAAA,EAAC,CAAC,CAAC;aAC9B;YAED,OAAO,MAAM,CAAC;SACjB;KACJ,CAAC;IAEK,IAAM,QAAQ,GAAG,UAAC,MAAc,EAAE,KAAa,EAAE,IAAa;QACjE,IAAI,CAAC,MAAM,EAAE;YACT,OAAO,EAAE,CAAC;SACb;QAED,IAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,EAAE;YACR,OAAO,EAAE,CAAC;SACb;QAED,OAAO,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3C,CAAC;;ICvCM,IAAM,SAAS,GAAuC;QACzD,IAAI,EAAE,YAAY;QAClB,YAAY,EAAE,MAAM;QACpB,IAAI;QACJ,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,UAAC,OAAgB,EAAE,MAAkB;YACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE;gBAC5D,OAAO,EAAE,CAAC;aACb;YAED,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAC,MAAkB;gBACpD,IAAM,MAAM,GAAkB;oBAC1B,KAAK,EAAE,UAAU;oBACjB,OAAO,EAAE,WAAW;oBACpB,OAAO,EAAE,WAAW;oBACpB,IAAI,EAAE,WAAW;oBACjB,MAAM,EAAE,WAAW;oBACnB,KAAK,EAAE,KAAK;iBACf,CAAC;gBACF,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACxB,IAAI,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;wBAClC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;qBACvB;yBAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;wBACxB,IAAI,CAAC,KAAK,CAAC,EAAE;4BACT,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;yBAC1B;6BAAM,IAAI,CAAC,KAAK,CAAC,EAAE;4BAChB,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;yBAC1B;6BAAM,IAAI,CAAC,KAAK,CAAC,EAAE;4BAChB,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC;yBACvB;6BAAM;4BACH,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;yBACzB;wBACD,CAAC,EAAE,CAAC;qBACP;yBAAM;wBACH,MAAM,CAAC,KAAK,GAAGJ,OAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;qBAC9C;iBACJ;gBACD,OAAO,MAAM,CAAC;aACjB,CAAC,CAAC;SACN;KACJ;;IChDM,IAAM,UAAU,GAAwC;QAC3D,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE,QAAQ;QACtB,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,KAAK,EAAE,UAAC,QAAiB,EAAE,MAAkB;YACzC,IAAM,aAAa,GAAG,+CAA6E,CAAC;YACpG,IAAM,MAAM,GAAe,EAAE,CAAC;YAE9B,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,UAAC,KAAK;gBACtC,QAAQ,KAAK,CAAC,KAAK;oBACf,KAAK,QAAQ;wBACT,MAAM,CAAC,IAAI,gBAA0B,CAAC;wBACtC,MAAM;oBACV,KAAK,MAAM;wBACP,MAAM,CAAC,IAAI,cAAwB,CAAC;wBACpC,MAAM;oBACV,KAAK,SAAS;wBACV,MAAM,CAAC,IAAI,iBAA2B,CAAC;wBACvC,MAAM;iBACb;aACJ,CAAC,CAAC;YACH,aAAa,CAAC,OAAO,CAAC,UAAC,KAAK;gBACxB,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACtB;aACJ,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;SACjB;KACJ;;ICxCM,IAAM,qBAAqB,GAAiC;QAC/D,IAAI,EAAE,2BAA2B;QACjC,YAAY,EAAE,cAAc;QAC5B,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,MAAM,EAAE,OAAO;KAClB;;ICJM,IAAM,qBAAqB,GAAqC;QACnE,IAAI,EAAE,2BAA2B;QACjC,YAAY,EAAE,GAAG;QACjB,IAAI;QACJ,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,UAAC,QAAiB,EAAE,KAAe;YACtC,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;gBACzB,OAAO,KAAK,CAAC,MAAM,CAAC;aACvB;YACD,OAAO,CAAC,CAAC;SACZ;KACJ;;ICqED;QAoEI,8BAAY,OAAgB,EAAE,WAAgC;;YAC1D,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAC;YACjF,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;YACjF,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;YACpF,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;YACpF,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;YACvF,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,WAAW,CAAC,kBAAkB,CAAC,CAAC;YAC7F,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;YACvF,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;YACjF,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;YACjF,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;YACvF,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAC;YAC1F,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;YACpF,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC;YAChG,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,WAAW,CAAC,oBAAoB,CAAC,CAAC;YACnG,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC,OAAO,EAAE,uBAAuB,EAAE,WAAW,CAAC,uBAAuB,CAAC,CAAC;YAC5G,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,OAAO,EAAE,sBAAsB,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;YACzG,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;YACjF,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;YACvF,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAC;YAC1F,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;YACpF,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;YACjF,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;YACvF,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAC;YAC1F,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;YACpF,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;YAC5D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;YACrE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/D,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;YACxE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;YACrE,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;YAC9E,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;YACrE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;YACjF,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAC;YAC1F,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;YAC9E,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;YACxE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;YAC3E,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;YACrE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;YAC5D,IAAM,aAAa,GAAG,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;YACrE,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACjE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;YAC3E,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;YACrE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;YAC3E,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;YAC9E,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;YACxE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;YACrE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/D,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAC5B,OAAO,EACP,mBAAmB,EACnB,MAAA,WAAW,CAAC,mBAAmB,mCAAI,WAAW,CAAC,KAAK,CACvD,CAAC;YACF,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAC3B,OAAO,EACP,kBAAkB,EAClB,MAAA,WAAW,CAAC,kBAAkB,mCAAI,WAAW,CAAC,cAAc,CAC/D,CAAC;YACF,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;YACrE,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;YAC9E,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,EAAEI,WAAS,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;YACpF,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;YACrE,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,OAAO,EAAE,qBAAqB,EAAE,WAAW,CAAC,qBAAqB,CAAC,CAAC;YACtG,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,OAAO,EAAE,qBAAqB,EAAE,WAAW,CAAC,qBAAqB,CAAC,CAAC;YACtG,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;SAC5D;QAED,wCAAS,GAAT;YACI,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,qBAAwB;SACzF;QAED,4CAAa,GAAb;YACI,OAAO,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAC9C;QAED,4CAAa,GAAb;YACI,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;SAClC;QAED,2CAAY,GAAZ;YACI,OAAO,IAAI,CAAC,QAAQ,oBAAqB;SAC5C;QAED,qDAAsB,GAAtB;YACI,OAAO,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;SACnD;QAED,yCAAU,GAAV;YACI,OAAO,IAAI,CAAC,KAAK,kBAAgB;SACpC;QAED,4CAAa,GAAb;YACI,QACI,QAAQ,CAAC,IAAI,CAAC,OAAO,iBAAiB;gBACtC,QAAQ,CAAC,IAAI,CAAC,OAAO,8BAAuB;gBAC5C,QAAQ,CAAC,IAAI,CAAC,OAAO,8BAAsB;gBAC3C,QAAQ,CAAC,IAAI,CAAC,OAAO,8BAAsB;gBAC3C,QAAQ,CAAC,IAAI,CAAC,OAAO,kCAA2B;gBAChD,QAAQ,CAAC,IAAI,CAAC,OAAO,+BAAuB,EAC9C;SACL;QACL,2BAAC;IAAD,CAAC,IAAA;IAED;QAII,oCAAY,OAAgB,EAAE,WAAgC;YAC1D,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;YAC5D,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;SAC5D;QACL,iCAAC;IAAD,CAAC,IAAA;IAED;QAII,qCAAY,OAAgB,EAAE,WAAgC;YAC1D,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;YACvF,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;SAC9E;QACL,kCAAC;IAAD,CAAC,IAAA;IAED;IACA,IAAM,KAAK,GAAG,UAAC,OAAgB,EAAE,UAAsC,EAAE,KAAqB;QAC1F,IAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QAClC,IAAM,KAAK,GAAG,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,UAAU,CAAC,YAAY,CAAC;QAC1G,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,IAAM,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5C,QAAQ,UAAU,CAAC,IAAI;YACnB;gBACI,IAAM,KAAK,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAC3C,OAAO,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;YAClG;gBACI,OAAO,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC;YACnE;gBACI,OAAO,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC;YACpE;gBACI,OAAO,MAAM,CAAC,mBAAmB,EAAE,CAAC;YACxC;gBACI,QAAQ,UAAU,CAAC,MAAM;oBACrB,KAAK,OAAO;wBACR,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC;oBAC9D,KAAK,OAAO;wBACR,OAAOH,OAAS,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC;oBAClE,KAAK,OAAO;wBACR,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC;oBAC9D,KAAK,QAAQ;wBACT,IAAM,QAAM,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAC;wBAC5C,OAAO,QAAQ,CAAC,QAAM,CAAC,GAAG,QAAM,GAAG,WAAW,CAAC;oBACnD,KAAK,mBAAmB;wBACpB,IAAM,OAAK,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAC;wBAC3C,OAAO,kBAAkB,CAAC,OAAK,CAAC,GAAG,OAAK,GAAG,WAAW,CAAC;oBAC3D,KAAK,MAAM;wBACP,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC;iBAChE;gBACD,MAAM;SACb;IACL,CAAC;;IChUD,IAAM,wBAAwB,GAAG,wBAAwB,CAAC;IAS1D,IAAM,mBAAmB,GAAG,UAAC,OAAgB;QACzC,IAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC;QACjE,QAAQ,SAAS;YACb,KAAK,KAAK;gBACN,mBAAwB;YAC5B,KAAK,OAAO;gBACR,qBAA0B;YAC9B,KAAK,OAAO;gBACR,qBAA0B;YAC9B,KAAK,QAAQ;gBACT,sBAA2B;YAC/B;gBACI,oBAAyB;SAChC;IACL,CAAC,CAAC;IAEK,IAAM,WAAW,GAAG,UAAC,OAAgB,EAAE,IAA2C;QACrF,IAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,WAAW,oBAAyB,IAAI,KAAK,WAAW,CAAC;IACpE,CAAC;;ICdD;QAOI,0BAA+B,OAAgB,EAAE,OAAgB;YAAlC,YAAO,GAAP,OAAO,CAAS;YALtC,cAAS,GAAoB,EAAE,CAAC;YAChC,aAAQ,GAAuB,EAAE,CAAC;YAE3C,UAAK,GAAG,CAAC,CAAC;YAGN,IAAI,WAAW,CAAC,OAAO,gBAAqB,EAAE;gBAC1C,SAAS;aACZ;YAED,IAAI,CAAC,MAAM,GAAG,IAAI,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YAExF,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE;gBAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAC,QAAQ,IAAK,OAAA,QAAQ,GAAG,CAAC,GAAA,CAAC,EAAE;oBAChE,OAAO,CAAC,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC;iBAC1C;gBAED,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE;;oBAEhC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;iBACpC;aACJ;YAED,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEjD,IAAI,WAAW,CAAC,OAAO,iBAAsB,EAAE;gBAC3C,IAAI,CAAC,KAAK,0BAAuB;aACpC;SACJ;QACL,uBAAC;IAAD,CAAC;;;;;;;IC7CM,IAAM,MAAM,GACf,8izBAA8izB;;;;;;;ICDljzB,IAAMnC,OAAK,GAAG,kEAAkE,CAAC;IAEjF;IACA,IAAMC,QAAM,GAAG,OAAO,UAAU,KAAK,WAAW,GAAG,EAAE,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5E,KAAK,IAAIC,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAGF,OAAK,CAAC,MAAM,EAAEE,GAAC,EAAE,EAAE;QACnCD,QAAM,CAACD,OAAK,CAAC,UAAU,CAACE,GAAC,CAAC,CAAC,GAAGA,GAAC,CAAC;KACnC;IAEM,IAAM,MAAM,GAAG,UAAC,MAAc;QACjC,IAAI,YAAY,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,EACnC,GAAG,GAAG,MAAM,CAAC,MAAM,EACnB,CAAC,EACD,CAAC,GAAG,CAAC,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,CAAC;QAEb,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;YACnC,YAAY,EAAE,CAAC;YACf,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;gBACnC,YAAY,EAAE,CAAC;aAClB;SACJ;QAED,IAAM,MAAM,GACR,OAAO,WAAW,KAAK,WAAW;YAClC,OAAO,UAAU,KAAK,WAAW;YACjC,OAAO,UAAU,CAAC,SAAS,CAAC,KAAK,KAAK,WAAW;cAC3C,IAAI,WAAW,CAAC,YAAY,CAAC;cAC7B,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAClC,IAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QAEtE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;YACzB,QAAQ,GAAGD,QAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,QAAQ,GAAGA,QAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5C,QAAQ,GAAGA,QAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5C,QAAQ,GAAGA,QAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAE5C,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC;YAC/C,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,EAAE,KAAK,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC;YACtD,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,KAAK,QAAQ,GAAG,EAAE,CAAC,CAAC;SACxD;QAED,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;IAEK,IAAM,eAAe,GAAG,UAAC,MAAgB;QAC5C,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAChC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAChD;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;IAEK,IAAM,eAAe,GAAG,UAAC,MAAgB;QAC5C,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAChC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAChG;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;;IC3DD;IACO,IAAM,cAAc,GAAG,CAAC,CAAC;IAEhC;IACO,IAAM,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;IAEpC;;;;;;IAMO,IAAM,kBAAkB,GAAG,CAAC,CAAC;IAEpC;;;;IAIO,IAAM,gBAAgB,GAAG,cAAc,GAAG,cAAc,CAAC;IAEhE;;;;;;IAMO,IAAM,0BAA0B,GAAG,OAAO,IAAI,cAAc,CAAC;IAEpE;IACO,IAAM,wBAAwB,GAAG,CAAC,IAAI,cAAc,CAAC;IAC5D;IACO,IAAM,gBAAgB,GAAG,wBAAwB,GAAG,CAAC,CAAC;IAEtD,IAAM,0BAA0B,GAAG,KAAK,IAAI,cAAc,CAAC;IAClE;IACO,IAAM,yBAAyB,GAAG,0BAA0B,GAAG,0BAA0B,CAAC;IACjG;;;;IAIO,IAAM,6BAA6B,GAAG,yBAAyB,CAAC;IAChE,IAAM,6BAA6B,GAAG,KAAK,IAAI,CAAC,CAAC;IACxD;;;;;;;;;;;;IAYO,IAAM,qBAAqB,GAAG,6BAA6B,GAAG,6BAA6B,CAAC;IAEnG;;;;IAIO,IAAM,iCAAiC,GAAG,OAAO,IAAI,cAAc,CAAC;IAE3E;IACO,IAAM,2BAA2B,GAAG,CAAC,IAAI,gBAAgB,CAAC;IACjE;IACO,IAAM,mBAAmB,GAAG,2BAA2B,GAAG,CAAC,CAAC;IAEnE,IAAM,OAAO,GAAG,UAAC,IAA4B,EAAE,KAAa,EAAE,GAAY;QACtE,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SACjC;QAED,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC;IAEF,IAAM,OAAO,GAAG,UAAC,IAA4B,EAAE,KAAa,EAAE,GAAY;QACtE,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SACjC;QAED,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC;QAEW,oBAAoB,GAAG,UAAC,MAAc,EAAE,WAAmB;QACpE,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QACzF,IAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QACzF,IAAM,YAAY,GAAG,EAAE,CAAC;QAExB,IAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,IAAM,IAAI,GACN,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;cACT,OAAO,CAAC,MAAM,EAAE,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;cAC/C,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAErE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7E,EAAE;;QAUE,cACI,YAAiB,EACjB,UAAe,EACf,SAAc,EACd,cAAmB,EACnB,KAA6B,EAC7B,IAA0C;YAE1C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;YACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;YACrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SACpB;;;;;;;QAQD,kBAAG,GAAH,UAAI,SAAiB;YACjB,IAAI,EAAE,CAAC;YACP,IAAI,SAAS,IAAI,CAAC,EAAE;gBAChB,IAAI,SAAS,GAAG,OAAO,KAAK,SAAS,GAAG,OAAO,IAAI,SAAS,IAAI,OAAO,CAAC,EAAE;;;;oBAItE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,cAAc,CAAC,CAAC;oBAC7C,EAAE,GAAG,CAAC,EAAE,IAAI,kBAAkB,KAAK,SAAS,GAAG,gBAAgB,CAAC,CAAC;oBACjE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBACxB;gBAED,IAAI,SAAS,IAAI,MAAM,EAAE;;;;;;;oBAOrB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,SAAS,GAAG,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC;oBACvF,EAAE,GAAG,CAAC,EAAE,IAAI,kBAAkB,KAAK,SAAS,GAAG,gBAAgB,CAAC,CAAC;oBACjE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBACxB;gBAED,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;;oBAE5B,EAAE,GAAG,qBAAqB,GAAG,iCAAiC,IAAI,SAAS,IAAI,cAAc,CAAC,CAAC;oBAC/F,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACpB,EAAE,IAAI,CAAC,SAAS,IAAI,cAAc,IAAI,mBAAmB,CAAC;oBAC1D,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACpB,EAAE,GAAG,CAAC,EAAE,IAAI,kBAAkB,KAAK,SAAS,GAAG,gBAAgB,CAAC,CAAC;oBACjE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBACxB;gBACD,IAAI,SAAS,IAAI,QAAQ,EAAE;oBACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;iBACzC;aACJ;;YAGD,OAAO,IAAI,CAAC,UAAU,CAAC;SAC1B;QACL,WAAC;IAAD,CAAC;;;;;;;IC7KD,IAAM,KAAK,GAAG,kEAAkE,CAAC;IAEjF;IACA,IAAM,MAAM,GAAG,OAAO,UAAU,KAAK,WAAW,GAAG,EAAE,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACnC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;;;ICDpC,IAAM,OAAO,GAAG,CAAC,CAAC;IAClB,IAAM,EAAE,GAAG,CAAC,CAAC;IACb,IAAM,EAAE,GAAG,CAAC,CAAC;IACb,IAAM,OAAO,GAAG,CAAC,CAAC;IAClB,IAAM,MAAM,GAAG,CAAC,CAAC;IAEjB,IAAM,WAAW,GAAG,CAAC,CAAC;IACtB,IAAM,CAAC,GAAG,CAAC,CAAC;IACZ,IAAM,CAAC,GAAG,CAAC,CAAC;IACZ,IAAM,CAAC,GAAG,EAAE,CAAC;IACb,IAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAM,GAAG,GAAG,EAAE,CAAC;IACf,IAAM,GAAG,GAAG,EAAE,CAAC;IACf,IAAM,qBAAqB,GAAG,EAAE,CAAC;IACjC,IAAM,EAAE,GAAG,EAAE,CAAC;QAqBD,YAAY,GAAG,UAAC,GAAW;QACpC,IAAM,UAAU,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,OAAO,CAAC,GAAG,MAAM,EAAE;YACf,IAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;YAClC,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,CAAC,GAAG,MAAM,EAAE;gBAClD,IAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClC,IAAI,CAAC,KAAK,GAAG,MAAM,MAAM,MAAM,EAAE;oBAC7B,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,KAAK,EAAE,KAAK,KAAK,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC;iBACxE;qBAAM;oBACH,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACvB,CAAC,EAAE,CAAC;iBACP;aACJ;iBAAM;gBACH,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC1B;SACJ;QACD,OAAO,UAAU,CAAC;IACtB,EAAE;QAEW,aAAa,GAAG;QAAC,oBAAuB;aAAvB,UAAuB,EAAvB,qBAAuB,EAAvB,IAAuB;YAAvB,+BAAuB;;QACjD,IAAI,MAAM,CAAC,aAAa,EAAE;YACtB,OAAO,MAAM,CAAC,aAAa,OAApB,MAAM,EAAkB,UAAU,EAAE;SAC9C;QAED,IAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC,MAAM,EAAE;YACT,OAAO,EAAE,CAAC;SACb;QAED,IAAM,SAAS,GAAG,EAAE,CAAC;QAErB,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QACf,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;YACrB,IAAI,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,SAAS,IAAI,MAAM,EAAE;gBACrB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC7B;iBAAM;gBACH,SAAS,IAAI,OAAO,CAAC;gBACrB,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC,SAAS,GAAG,KAAK,IAAI,MAAM,CAAC,CAAC;aAC5E;YACD,IAAI,KAAK,GAAG,CAAC,KAAK,MAAM,IAAI,SAAS,CAAC,MAAM,GAAG,MAAM,EAAE;gBACnD,MAAM,IAAI,MAAM,CAAC,YAAY,OAAnB,MAAM,EAAiB,SAAS,CAAC,CAAC;gBAC5C,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;aACxB;SACJ;QACD,OAAO,MAAM,CAAC;IAClB,EAAE;IAEK,IAAM,WAAW,GAAG,oBAAoB,CAAC,MAAkB,CAAC,CAAC;IAE7D,IAAM,iBAAiB,GAAG,GAAG,CAAC;IAC9B,IAAM,aAAa,GAAG,GAAG,CAAC;IAI1B,IAAM,gBAAgB,GAAG,UAAC,SAAiB,IAAa,OAAA,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,GAAA,CAAC;IAE1F,IAAM,qBAAqB,GAAG,UAAC,WAAqB,EAAE,UAAoB,EAAE,KAAa;QACrF,IAAI,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;QAC1B,IAAI,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACjC,IAAM,OAAO,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACtC,IAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;;QAE/B,IAAI,OAAO,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE;YAC/B,OAAO,iBAAiB,CAAC;SAC5B;;QAGD,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,OAAO,EAAE;YACzD,OAAO,aAAa,CAAC;SACxB;;QAGD,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,OAAO,EAAE;YAChD,OAAO,aAAa,CAAC;SACxB;;;QAID,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACvD,OAAO,iBAAiB,CAAC;SAC5B;;QAGD,IAAI,CAAC,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;YACjE,OAAO,iBAAiB,CAAC;SAC5B;;QAGD,IAAI,CAAC,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE;YAClD,OAAO,iBAAiB,CAAC;SAC5B;;QAGD,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,MAAM,EAAE;YACjC,OAAO,iBAAiB,CAAC;SAC5B;;;QAGD,IAAI,IAAI,KAAK,WAAW,EAAE;YACtB,OAAO,iBAAiB,CAAC;SAC5B;;QAGD,IAAI,OAAO,KAAK,OAAO,EAAE;YACrB,OAAO,iBAAiB,CAAC;SAC5B;;QAGD,IAAI,OAAO,KAAK,GAAG,IAAI,IAAI,KAAK,qBAAqB,EAAE;YACnD,OAAO,IAAI,KAAK,MAAM,EAAE;gBACpB,IAAI,GAAG,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;aAClC;YACD,IAAI,IAAI,KAAK,qBAAqB,EAAE;gBAChC,OAAO,iBAAiB,CAAC;aAC5B;SACJ;;;;QAKD,IAAI,OAAO,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE;YAC/B,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,OAAO,IAAI,KAAK,EAAE,EAAE;gBAChB,OAAO,EAAE,CAAC;gBACV,IAAI,GAAG,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;aAClC;YACD,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE;gBACnB,OAAO,iBAAiB,CAAC;aAC5B;SACJ;QAED,OAAO,aAAa,CAAC;IACzB,CAAC,CAAC;QAiBW,eAAe,GAAG,UAAC,GAAW;QACvC,IAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACrC,IAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QACjC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAEpD,OAAO;YACH,IAAI,EAAE;gBACF,IAAI,KAAK,IAAI,MAAM,EAAE;oBACjB,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC;iBACpC;gBAED,IAAI,aAAa,GAAG,iBAAiB,CAAC;gBACtC,OACI,KAAK,GAAG,MAAM;oBACd,CAAC,aAAa,GAAG,qBAAqB,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,KAAK,CAAC,MAAM,iBAAiB,EAChG,GAAE;gBAEJ,IAAI,aAAa,KAAK,iBAAiB,IAAI,KAAK,KAAK,MAAM,EAAE;oBACzD,IAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;oBAC1E,OAAO,GAAG,KAAK,CAAC;oBAChB,OAAO,EAAC,KAAK,OAAA,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC;iBAC/B;gBAED,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC;aAIpC;SACJ,CAAC;IACN,EAAE;QAEW,cAAc,GAAG,UAAC,GAAW;QACtC,IAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAErC,IAAM,SAAS,GAAG,EAAE,CAAC;QACrB,IAAI,EAAE,CAAC;QAEP,OAAO,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE;YAChC,IAAI,EAAE,CAAC,KAAK,EAAE;gBACV,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;aACpC;SACJ;QAED,OAAO,SAAS,CAAC;IACrB;;IC5OA,IAAM,eAAe,GAAG,UAAC,QAAkB;QACvC,IAAM,WAAW,GAAG,GAAG,CAAC;QAExB,IAAI,QAAQ,CAAC,WAAW,EAAE;YACtB,IAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,KAAK,CAAC,qBAAqB,EAAE;gBAC7B,IAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;gBACxD,WAAW,CAAC,KAAK,CAAC,MAAM,GAAM,WAAW,OAAI,CAAC;gBAC9C,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;gBACpC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;gBAEvC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;gBAC9B,IAAM,WAAW,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC;gBAClD,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBACnD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;gBACvC,IAAI,WAAW,KAAK,WAAW,EAAE;oBAC7B,OAAO,IAAI,CAAC;iBACf;aACJ;SACJ;QAED,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;IAEF,IAAM,gBAAgB,GAAG,UAAC,QAAkB;QACxC,IAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACxD,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QACjC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QACpC,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;QACpC,WAAW,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;QACxC,WAAW,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACvC,IAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QAErC,WAAW,CAAC,SAAS,GAAG,OAAO,EAAE,CAAC,MAAM,KAAK,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;QAEtF,IAAM,IAAI,GAAG,WAAW,CAAC,UAAkB,CAAC;QAE5C,IAAM,QAAQ,GAAGH,cAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAAC,eAAa,CAAC,CAAC,CAAC,GAAA,CAAC,CAAC;QACtE,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,IAAI,GAAY,EAAa,CAAC;;QAGlC,IAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAC,IAAI,EAAE,CAAC;YACpC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC7B,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,IAAM,IAAI,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC;YAE3C,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;YACtB,IAAM,UAAU,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YAEtD,IAAI,GAAG,IAAI,CAAC;YACZ,IAAI,CAAC,KAAK,CAAC,EAAE;gBACT,OAAO,IAAI,CAAC;aACf;YAED,OAAO,UAAU,CAAC;SACrB,CAAC,CAAC;QAEH,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACvC,OAAO,QAAQ,CAAC;IACpB,CAAC,CAAC;IAEF,IAAM,QAAQ,GAAG,cAAe,OAAA,OAAO,IAAI,KAAK,EAAE,CAAC,WAAW,KAAK,WAAW,GAAA,CAAC;IAE/E,IAAM,gBAAgB,GAAG,cAAe,OAAA,OAAO,IAAI,cAAc,EAAE,CAAC,YAAY,KAAK,QAAQ,GAAA,CAAC;IAE9F,IAAM,OAAO,GAAG,UAAC,QAAkB;QAC/B,IAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE;YACN,OAAO,KAAK,CAAC;SAChB;QAED,GAAG,CAAC,GAAG,GAAG,mEAAmE,CAAC;QAE9E,IAAI;YACA,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACzB,MAAM,CAAC,SAAS,EAAE,CAAC;SACtB;QAAC,OAAO,CAAC,EAAE;YACR,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEF,IAAM,YAAY,GAAG,UAAC,IAAuB;QACzC,OAAA,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;IAApE,CAAoE,CAAC;IAEzE,IAAM,iBAAiB,GAAG,UAAC,QAAkB;QACzC,IAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAM,IAAI,GAAG,GAAG,CAAC;QACjB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,IAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE;YACN,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAChC;QACD,GAAG,CAAC,SAAS,GAAG,gBAAgB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE/B,IAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAM,aAAa,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QACzC,GAAG,CAAC,GAAG,GAAG,aAAa,CAAC;QACxB,IAAM,GAAG,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1D,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;QACtB,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE/B,OAAOwC,mBAAiB,CAAC,GAAG,CAAC;aACxB,IAAI,CAAC,UAAC,GAAqB;YACxB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACzB,IAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC;YACrD,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;YACtB,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAE/B,IAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,SAAO,aAAa,MAAG,CAAC;YACrD,IAAI,CAAC,KAAK,CAAC,MAAM,GAAM,IAAI,OAAI,CAAC;;YAEhC,OAAO,YAAY,CAAC,IAAI,CAAC;kBACnBA,mBAAiB,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;kBACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC/B,CAAC;aACD,IAAI,CAAC,UAAC,GAAqB;YACxB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;;YAEzB,OAAO,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;SAChE,CAAC;aACD,KAAK,CAAC,cAAM,OAAA,KAAK,GAAA,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEK,IAAM,sBAAsB,GAAG,UAClC,KAAa,EACb,MAAc,EACd,CAAS,EACT,CAAS,EACT,IAAU;QAEV,IAAM,KAAK,GAAG,4BAA4B,CAAC;QAC3C,IAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACnD,IAAM,aAAa,GAAG,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QACvE,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpD,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEtD,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACpD,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrD,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE,2BAA2B,EAAE,MAAM,CAAC,CAAC;QACxE,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAE/B,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEhC,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;IAEK,IAAMA,mBAAiB,GAAG,UAAC,GAAS;QACvC,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAC/B,IAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,GAAG,CAAC,MAAM,GAAG,cAAM,OAAA,OAAO,CAAC,GAAG,CAAC,GAAA,CAAC;YAChC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;YAErB,GAAG,CAAC,GAAG,GAAG,sCAAoC,kBAAkB,CAAC,IAAI,aAAa,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAG,CAAC;SAClH,CAAC,CAAC;IACP,CAAC,CAAC;IAEK,IAAM,QAAQ,GAAG;QACpB,IAAI,oBAAoB;YAEpB,IAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,sBAAsB,EAAE,EAAC,KAAK,OAAA,EAAC,CAAC,CAAC;YACjE,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,qBAAqB;YAErB,IAAM,KAAK,GAAG,QAAQ,CAAC,oBAAoB,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC1E,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,uBAAuB,EAAE,EAAC,KAAK,OAAA,EAAC,CAAC,CAAC;YAClE,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,mBAAmB;YAEnB,IAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YAChC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,qBAAqB,EAAE,EAAC,KAAK,OAAA,EAAC,CAAC,CAAC;YAChE,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,6BAA6B;YAE7B,IAAM,KAAK,GACP,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU;kBAChE,iBAAiB,CAAC,QAAQ,CAAC;kBAC3B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,+BAA+B,EAAE,EAAC,KAAK,OAAA,EAAC,CAAC,CAAC;YAC1E,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,mBAAmB;YAEnB,IAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;YACzB,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,qBAAqB,EAAE,EAAC,KAAK,OAAA,EAAC,CAAC,CAAC;YAChE,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,qBAAqB;YAErB,IAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;YACjC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,uBAAuB,EAAE,EAAC,KAAK,OAAA,EAAC,CAAC,CAAC;YAClE,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,gBAAgB;YAEhB,IAAM,KAAK,GAAG,iBAAiB,IAAI,IAAI,cAAc,EAAE,CAAC;YACxD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,kBAAkB,EAAE,EAAC,KAAK,OAAA,EAAC,CAAC,CAAC;YAC7D,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,gCAAgC;;YAGhC,IAAM,KAAK,GAAG,CAAC,EAAE,OAAO,IAAI,KAAK,WAAW,IAAK,IAAY,CAAC,SAAS,CAAC,CAAC;YACzE,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,kCAAkC,EAAE,EAAC,KAAK,OAAA,EAAC,CAAC,CAAC;YAC7E,OAAO,KAAK,CAAC;SAChB;KACJ;;ICrND;QAII,oBAAY,IAAY,EAAE,MAAc;YACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;SACxB;QACL,iBAAC;IAAD,CAAC,IAAA;IAEM,IAAM,eAAe,GAAG,UAC3B,OAAgB,EAChB,KAAa,EACb,MAA4B,EAC5B,IAAU;QAEV,IAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAM,UAAU,GAAiB,EAAE,CAAC;QACpC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,QAAQ,CAAC,OAAO,CAAC,UAAC,IAAI;YAClB,IAAI,MAAM,CAAC,kBAAkB,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5D,IAAI,QAAQ,CAAC,oBAAoB,EAAE;oBAC/B,IAAM,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,CAAC;oBAC5E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;wBACxB,IAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;wBAC3C,IAAI,WAAS,GAAG,CAAC,CAAC;wBAClB,WAAW,CAAC,OAAO,CAAC,UAAC,UAAU;4BAC3B,UAAU,CAAC,IAAI,CACX,IAAI,UAAU,CACV,UAAU,EACV,MAAM,CAAC,eAAe,CAClB,OAAO,EACP,WAAW,CAAC,IAAI,EAAE,WAAS,GAAG,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,CAC5E,CACJ,CACJ,CAAC;4BACF,WAAS,IAAI,UAAU,CAAC,MAAM,CAAC;yBAClC,CAAC,CAAC;qBACN;yBAAM;wBACH,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;qBACvF;iBACJ;qBAAM;oBACH,IAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACpD,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;oBACvE,IAAI,GAAG,eAAe,CAAC;iBAC1B;aACJ;iBAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE;gBACvC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACtC;YACD,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;SACzB,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACtB,CAAC,CAAC;IAEF,IAAM,gBAAgB,GAAG,UAAC,OAAgB,EAAE,IAAU;QAClD,IAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,IAAI,aAAa,EAAE;YACf,IAAM,OAAO,GAAG,aAAa,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;YAClE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1C,IAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACnC,IAAI,UAAU,EAAE;gBACZ,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACvC,IAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7C,IAAI,OAAO,CAAC,UAAU,EAAE;oBACpB,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;iBACxD;gBACD,OAAO,MAAM,CAAC;aACjB;SACJ;QAED,OAAO,MAAM,CAAC,KAAK,CAAC;IACxB,CAAC,CAAC;IAEF,IAAM,WAAW,GAAG,UAAC,IAAU,EAAE,MAAc,EAAE,MAAc;QAC3D,IAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,aAAa,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;SACjD;QACD,IAAM,KAAK,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;QAC1C,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7B,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;IAEK,IAAM,gBAAgB,GAAG,UAAC,KAAa;QAC1C,IAAI,QAAQ,CAAC,gCAAgC,EAAE;;YAE3C,IAAM,SAAS,GAAG,IAAK,IAAY,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAC,WAAW,EAAE,UAAU,EAAC,CAAC,CAAC;;YAEjF,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,UAAC,OAAY,IAAK,OAAA,OAAO,CAAC,OAAO,GAAA,CAAC,CAAC;SACtF;QAED,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,IAAM,YAAY,GAAG,UAAC,KAAa,EAAE,MAA4B;QAC7D,IAAI,QAAQ,CAAC,gCAAgC,EAAE;;YAE3C,IAAM,SAAS,GAAG,IAAK,IAAY,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;gBAClD,WAAW,EAAE,MAAM;aACtB,CAAC,CAAC;;YAEH,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,UAAC,OAAY,IAAK,OAAA,OAAO,CAAC,OAAO,GAAA,CAAC,CAAC;SACtF;QAED,OAAO,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,IAAM,SAAS,GAAG,UAAC,KAAa,EAAE,MAA4B;QAC1D,OAAO,MAAM,CAAC,aAAa,KAAK,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9F,CAAC,CAAC;IAEF;IACA,IAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAElF,IAAM,UAAU,GAAG,UAAC,GAAW,EAAE,MAA4B;QACzD,IAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,SAAS,EAAE,MAAM,CAAC,YAAY,qCAAgC,YAAY,GAAG,MAAM,CAAC,SAAS;SAChG,CAAC,CAAC;QAEH,IAAM,KAAK,GAAG,EAAE,CAAC;QACjB,IAAI,EAAE,CAAC;;YAGH,IAAI,EAAE,CAAC,KAAK,EAAE;gBACV,IAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC/B,IAAM,UAAU,GAAGzC,cAAY,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,MAAI,GAAG,EAAE,CAAC;gBACd,UAAU,CAAC,OAAO,CAAC,UAAC,SAAS;oBACzB,IAAI,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;wBAC1C,MAAI,IAAIC,eAAa,CAAC,SAAS,CAAC,CAAC;qBACpC;yBAAM;wBACH,IAAI,MAAI,CAAC,MAAM,EAAE;4BACb,KAAK,CAAC,IAAI,CAAC,MAAI,CAAC,CAAC;yBACpB;wBACD,KAAK,CAAC,IAAI,CAACA,eAAa,CAAC,SAAS,CAAC,CAAC,CAAC;wBACrC,MAAI,GAAG,EAAE,CAAC;qBACb;iBACJ,CAAC,CAAC;gBAEH,IAAI,MAAI,CAAC,MAAM,EAAE;oBACb,KAAK,CAAC,IAAI,CAAC,MAAI,CAAC,CAAC;iBACpB;aACJ;;QApBL,OAAO,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI;;SAqBjC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;;ICxJD;QAII,uBAAY,OAAgB,EAAE,IAAU,EAAE,MAA4B;YAClE,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;YACvD,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;SACvE;QACL,oBAAC;IAAD,CAAC,IAAA;IAED,IAAM,SAAS,GAAG,UAAC,IAAY,EAAE,SAAyB;QACtD,QAAQ,SAAS;YACb;gBACI,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9B;gBACI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAChD;gBACI,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9B;gBACI,OAAO,IAAI,CAAC;SACnB;IACL,CAAC,CAAC;IAEF,IAAM,UAAU,GAAG,0BAA0B,CAAC;IAE9C,IAAM,UAAU,GAAG,UAAC,CAAS,EAAE,EAAU,EAAE,EAAU;QACjD,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACd,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;SAChC;QAED,OAAO,CAAC,CAAC;IACb,CAAC;;ICjCD;QAA2C,yCAAgB;QAKvD,+BAAY,OAAgB,EAAE,GAAqB;YAAnD,YACI,kBAAM,OAAO,EAAE,GAAG,CAAC,SAKtB;YAJG,KAAI,CAAC,GAAG,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,GAAG,CAAC;YACrC,KAAI,CAAC,cAAc,GAAG,GAAG,CAAC,YAAY,CAAC;YACvC,KAAI,CAAC,eAAe,GAAG,GAAG,CAAC,aAAa,CAAC;YACzC,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAI,CAAC,GAAG,CAAC,CAAC;;SACzC;QACL,4BAAC;IAAD,CAZA,CAA2C,gBAAgB;;ICA3D;QAA4C,0CAAgB;QAKxD,gCAAY,OAAgB,EAAE,MAAyB;YAAvD,YACI,kBAAM,OAAO,EAAE,MAAM,CAAC,SAIzB;YAHG,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,KAAI,CAAC,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC;YACnC,KAAI,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;;SACxC;QACL,6BAAC;IAAD,CAXA,CAA4C,gBAAgB;;ICC5D;QAAyC,uCAAgB;QAKrD,6BAAY,OAAgB,EAAE,GAAkB;YAAhD,YACI,kBAAM,OAAO,EAAE,GAAG,CAAC,SAWtB;YAVG,IAAM,CAAC,GAAG,IAAI,aAAa,EAAE,CAAC;YAC9B,IAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACzC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAK,MAAM,CAAC,KAAK,OAAI,CAAC,CAAC;YAC/C,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAK,MAAM,CAAC,MAAM,OAAI,CAAC,CAAC;YAEjD,KAAI,CAAC,GAAG,GAAG,wBAAsB,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAG,CAAC;YAChF,KAAI,CAAC,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAC9C,KAAI,CAAC,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YAEhD,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAI,CAAC,GAAG,CAAC,CAAC;;SACzC;QACL,0BAAC;IAAD,CAlBA,CAAyC,gBAAgB;;ICFzD;QAAwC,sCAAgB;QAGpD,4BAAY,OAAgB,EAAE,OAAsB;YAApD,YACI,kBAAM,OAAO,EAAE,OAAO,CAAC,SAE1B;YADG,KAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;;SAC9B;QACL,yBAAC;IAAD,CAPA,CAAwC,gBAAgB;;ICAxD;QAAwC,sCAAgB;QAIpD,4BAAY,OAAgB,EAAE,OAAyB;YAAvD,YACI,kBAAM,OAAO,EAAE,OAAO,CAAC,SAG1B;YAFG,KAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAC3B,KAAI,CAAC,QAAQ,GAAG,OAAO,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC;;SACtF;QACL,yBAAC;IAAD,CATA,CAAwC,gBAAgB;;ICOxD,IAAM,sBAAsB,GAA0B;QAClD;YACI,IAAI;YACJ,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,CAAC;SACZ;KACJ,CAAC;IAEF,IAAM,mBAAmB,GAA0B;QAC/C;YACI,IAAI;YACJ,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,EAAE;SACb;KACJ,CAAC;IAEF,IAAM,mBAAmB,GAAG,UAAC,MAAc;QACvC,IAAI,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE;YAC9B,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;SACjH;aAAM,IAAI,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE;YACrC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;SAC/G;QACD,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;IAEF,IAAM,aAAa,GAAG,UAAC,IAAsB;QACzC,IAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAEpG,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,GAAG,KAAK,CAAC;IAC/D,CAAC,CAAC;IAEK,IAAM,QAAQ,GAAG,UAAU,CAAC;IAC5B,IAAM,KAAK,GAAG,OAAO,CAAC;IACtB,IAAM,QAAQ,GAAG,UAAU,CAAC;IAC5B,IAAM,WAAW,GAAG,UAAU,CAAC;IAEtC;QAA2C,yCAAgB;QAKvD,+BAAY,OAAgB,EAAE,KAAuB;YAArD,YACI,kBAAM,OAAO,EAAE,KAAK,CAAC,SA2CxB;YA1CG,KAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,KAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC7B,KAAI,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YAElC,IAAI,KAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAI,CAAC,IAAI,KAAK,KAAK,EAAE;gBAC/C,KAAI,CAAC,MAAM,CAAC,eAAe,GAAG,UAAU,CAAC;gBACzC,KAAI,CAAC,MAAM,CAAC,cAAc;oBACtB,KAAI,CAAC,MAAM,CAAC,gBAAgB;wBAC5B,KAAI,CAAC,MAAM,CAAC,iBAAiB;4BAC7B,KAAI,CAAC,MAAM,CAAC,eAAe;gCACvB,UAAU,CAAC;gBACnB,KAAI,CAAC,MAAM,CAAC,cAAc;oBACtB,KAAI,CAAC,MAAM,CAAC,gBAAgB;wBAC5B,KAAI,CAAC,MAAM,CAAC,iBAAiB;4BAC7B,KAAI,CAAC,MAAM,CAAC,eAAe;gCACvB,CAAC,CAAC;gBACV,KAAI,CAAC,MAAM,CAAC,cAAc;oBACtB,KAAI,CAAC,MAAM,CAAC,gBAAgB;wBAC5B,KAAI,CAAC,MAAM,CAAC,iBAAiB;4BAC7B,KAAI,CAAC,MAAM,CAAC,eAAe;8CACJ;gBAC3B,KAAI,CAAC,MAAM,CAAC,cAAc,GAAG,oBAA4B,CAAC;gBAC1D,KAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,oBAA8B,CAAC;gBAC9D,KAAI,CAAC,MAAM,GAAG,mBAAmB,CAAC,KAAI,CAAC,MAAM,CAAC,CAAC;aAClD;YAED,QAAQ,KAAI,CAAC,IAAI;gBACb,KAAK,QAAQ;oBACT,KAAI,CAAC,MAAM,CAAC,oBAAoB;wBAC5B,KAAI,CAAC,MAAM,CAAC,mBAAmB;4BAC/B,KAAI,CAAC,MAAM,CAAC,uBAAuB;gCACnC,KAAI,CAAC,MAAM,CAAC,sBAAsB;oCAC9B,sBAAsB,CAAC;oBAC/B,MAAM;gBACV,KAAK,KAAK;oBACN,KAAI,CAAC,MAAM,CAAC,oBAAoB;wBAC5B,KAAI,CAAC,MAAM,CAAC,mBAAmB;4BAC/B,KAAI,CAAC,MAAM,CAAC,uBAAuB;gCACnC,KAAI,CAAC,MAAM,CAAC,sBAAsB;oCAC9B,mBAAmB,CAAC;oBAC5B,MAAM;aACb;;SACJ;QACL,4BAAC;IAAD,CAlDA,CAA2C,gBAAgB;;IC5C3D;QAA4C,0CAAgB;QAExD,gCAAY,OAAgB,EAAE,OAA0B;YAAxD,YACI,kBAAM,OAAO,EAAE,OAAO,CAAC,SAG1B;YAFG,IAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC;YAC3D,KAAI,CAAC,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;;SAChD;QACL,6BAAC;IAAD,CAPA,CAA4C,gBAAgB;;ICA5D;QAA8C,4CAAgB;QAE1D,kCAAY,OAAgB,EAAE,OAA4B;YAA1D,YACI,kBAAM,OAAO,EAAE,OAAO,CAAC,SAE1B;YADG,KAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;;SAC9B;QACL,+BAAC;IAAD,CANA,CAA8C,gBAAgB;;ICG9D;QAA4C,0CAAgB;QAOxD,gCAAY,OAAgB,EAAE,MAAyB;YAAvD,YACI,kBAAM,OAAO,EAAE,MAAM,CAAC,SAkCzB;YAjCG,KAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;YACtB,KAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAC7C,KAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAC/C,KAAI,CAAC,eAAe,GAAG,KAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YACnD,IAAI;gBACA,IACI,MAAM,CAAC,aAAa;oBACpB,MAAM,CAAC,aAAa,CAAC,QAAQ;oBAC7B,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,EAC/C;oBACE,KAAI,CAAC,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;;oBAG9E,IAAM,uBAAuB,GAAG,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe;0BACvE,UAAU,CACN,OAAO,EACP,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,eAAyB,CAC5F;0BACD,MAAM,CAAC,WAAW,CAAC;oBACzB,IAAM,mBAAmB,GAAG,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI;0BACxD,UAAU,CACN,OAAO,EACP,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,eAAyB,CACjF;0BACD,MAAM,CAAC,WAAW,CAAC;oBAEzB,KAAI,CAAC,eAAe,GAAG,aAAa,CAAC,uBAAuB,CAAC;0BACvD,aAAa,CAAC,mBAAmB,CAAC;8BAC9B,KAAI,CAAC,MAAM,CAAC,eAAe;8BAC3B,mBAAmB;0BACvB,uBAAuB,CAAC;iBACjC;aACJ;YAAC,OAAO,CAAC,EAAE,GAAE;;SACjB;QACL,6BAAC;IAAD,CA3CA,CAA4C,gBAAgB;;ICS5D,IAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAEzC,IAAM,aAAa,GAAG,UAAC,OAAgB,EAAE,IAAU,EAAE,MAAwB,EAAE,IAAsB;QACjG,KAAK,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,SAAA,EAAE,SAAS,EAAE,SAAS,GAAG,QAAQ,EAAE;YAC7E,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC;YAEjC,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC3D,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;aAC/E;iBAAM,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE;gBACjC,IAAI,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,aAAa,EAAE;oBACrD,SAAS,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,UAAC,SAAS,IAAK,OAAA,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,GAAA,CAAC,CAAC;iBACrG;qBAAM;oBACH,IAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;oBACtD,IAAI,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE;wBAC9B,IAAI,0BAA0B,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE;4BACxD,SAAS,CAAC,KAAK,0CAAwC;yBAC1D;6BAAM,IAAI,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;4BACjD,SAAS,CAAC,KAAK,qCAAmC;yBACrD;wBAED,IAAI,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;4BAC/C,SAAS,CAAC,KAAK,0BAAwB;yBAC1C;wBAED,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAChC,SAAS,CAAC,IAAI,CAAC;wBACf,IAAI,SAAS,CAAC,UAAU,EAAE;4BACtB,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;yBACjE;6BAAM,IACH,CAAC,iBAAiB,CAAC,SAAS,CAAC;4BAC7B,CAAC,YAAY,CAAC,SAAS,CAAC;4BACxB,CAAC,eAAe,CAAC,SAAS,CAAC,EAC7B;4BACE,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;yBACtD;qBACJ;iBACJ;aACJ;SACJ;IACL,CAAC,CAAC;IAEF,IAAM,eAAe,GAAG,UAAC,OAAgB,EAAE,OAAgB;QACvD,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,IAAI,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACtD;QAED,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE;YAC1B,OAAO,IAAI,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACvD;QAED,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE;YACvB,OAAO,IAAI,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACpD;QAED,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE;YACtB,OAAO,IAAI,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACnD;QAED,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE;YACtB,OAAO,IAAI,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACnD;QAED,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,IAAI,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACtD;QAED,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE;YAC1B,OAAO,IAAI,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACvD;QAED,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE;YAC5B,OAAO,IAAI,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACzD;QAED,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE;YAC1B,OAAO,IAAI,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACvD;QAED,OAAO,IAAI,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC,CAAC;IAEK,IAAM,SAAS,GAAG,UAAC,OAAgB,EAAE,OAAoB;QAC5D,IAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpD,SAAS,CAAC,KAAK,0CAAwC;QACvD,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACtD,OAAO,SAAS,CAAC;IACrB,CAAC,CAAC;IAEF,IAAM,0BAA0B,GAAG,UAAC,IAAa,EAAE,SAA2B,EAAE,IAAsB;QAClG,QACI,SAAS,CAAC,MAAM,CAAC,sBAAsB,EAAE;YACzC,SAAS,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC;YAC5B,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE;aAC/B,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,EACtD;IACN,CAAC,CAAC;IAEF,IAAM,sBAAsB,GAAG,UAAC,MAA4B,IAAc,OAAA,MAAM,CAAC,YAAY,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,GAAA,CAAC;IAEhH,IAAM,UAAU,GAAG,UAAC,IAAU,IAAmB,OAAA,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,GAAA,CAAC;IAClF,IAAM,aAAa,GAAG,UAAC,IAAU,IAAsB,OAAA,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,GAAA,CAAC;IAC3F,IAAM,iBAAiB,GAAG,UAAC,IAAU;QACxC,OAAA,aAAa,CAAC,IAAI,CAAC,IAAI,OAAQ,IAAoB,CAAC,KAAK,KAAK,WAAW,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;IAApG,CAAoG,CAAC;IAClG,IAAM,gBAAgB,GAAG,UAAC,OAAgB;QAC7C,OAAA,OAAQ,OAAsB,CAAC,SAAS,KAAK,QAAQ;IAArD,CAAqD,CAAC;IACnD,IAAM,WAAW,GAAG,UAAC,IAAa,IAA4B,OAAA,IAAI,CAAC,OAAO,KAAK,IAAI,GAAA,CAAC;IACpF,IAAM,WAAW,GAAG,UAAC,IAAa,IAA+B,OAAA,IAAI,CAAC,OAAO,KAAK,IAAI,GAAA,CAAC;IACvF,IAAM,cAAc,GAAG,UAAC,IAAa,IAA+B,OAAA,IAAI,CAAC,OAAO,KAAK,OAAO,GAAA,CAAC;IAC7F,IAAM,aAAa,GAAG,UAAC,IAAa,IAA8B,OAAA,IAAI,CAAC,OAAO,KAAK,MAAM,GAAA,CAAC;IAC1F,IAAM,YAAY,GAAG,UAAC,IAAa,IAA4B,OAAA,IAAI,CAAC,OAAO,KAAK,KAAK,GAAA,CAAC;IACtF,IAAM,aAAa,GAAG,UAAC,IAAa,IAA8B,OAAA,IAAI,CAAC,OAAO,KAAK,MAAM,GAAA,CAAC;IAC1F,IAAM,eAAe,GAAG,UAAC,IAAa,IAAgC,OAAA,IAAI,CAAC,OAAO,KAAK,QAAQ,GAAA,CAAC;IAChG,IAAM,cAAc,GAAG,UAAC,IAAa,IAA+B,OAAA,IAAI,CAAC,OAAO,KAAK,OAAO,GAAA,CAAC;IAC7F,IAAM,cAAc,GAAG,UAAC,IAAa,IAA+B,OAAA,IAAI,CAAC,OAAO,KAAK,KAAK,GAAA,CAAC;IAC3F,IAAM,eAAe,GAAG,UAAC,IAAa,IAAgC,OAAA,IAAI,CAAC,OAAO,KAAK,QAAQ,GAAA,CAAC;IAChG,IAAM,cAAc,GAAG,UAAC,IAAa,IAA+B,OAAA,IAAI,CAAC,OAAO,KAAK,OAAO,GAAA,CAAC;IAC7F,IAAM,eAAe,GAAG,UAAC,IAAa,IAAgC,OAAA,IAAI,CAAC,OAAO,KAAK,QAAQ,GAAA,CAAC;IAChG,IAAM,iBAAiB,GAAG,UAAC,IAAa,IAAkC,OAAA,IAAI,CAAC,OAAO,KAAK,UAAU,GAAA,CAAC;IACtG,IAAM,eAAe,GAAG,UAAC,IAAa,IAAgC,OAAA,IAAI,CAAC,OAAO,KAAK,QAAQ,GAAA,CAAC;IAChG,IAAM,aAAa,GAAG,UAAC,IAAa,IAA8B,OAAA,IAAI,CAAC,OAAO,KAAK,MAAM,GAAA,CAAC;IACjG;IACO,IAAM,eAAe,GAAG,UAAC,IAAa,IAA0B,OAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAA;;IClIpG;QAAA;YACqB,aAAQ,GAA8B,EAAE,CAAC;SAoD7D;QAlDG,sCAAe,GAAf,UAAgB,IAAY;YACxB,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEpC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;gBAC3B,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aACtC;YACD,OAAO,CAAC,CAAC;SACZ;QAED,uCAAgB,GAAhB,UAAiB,IAAY;YACzB,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,OAAO,GAAG,OAAO,GAAG,EAAE,CAAC;SACjC;QAED,0BAAG,GAAH,UAAI,QAAkB;YAAtB,iBAEC;YADG,QAAQ,CAAC,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,KAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAA,CAAC,CAAC;SAC/D;QAED,4BAAK,GAAL,UAAM,KAAkC;YAAxC,iBA+BC;YA9BG,IAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;YAChD,IAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;YACxC,IAAI,QAAQ,GAAG,IAAI,CAAC;YAEpB,IAAI,gBAAgB,KAAK,IAAI,EAAE;gBAC3B,gBAAgB,CAAC,OAAO,CAAC,UAAC,KAAK;oBAC3B,IAAM,OAAO,GAAG,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC7C,IAAI,OAAO,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,EAAE;wBAClC,QAAQ,GAAG,KAAK,CAAC;wBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;4BACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;yBACnB;wBACD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC;qBAC/D;iBACJ,CAAC,CAAC;aACN;YAED,IAAM,YAAY,GAAa,EAAE,CAAC;YAClC,IAAI,QAAQ,EAAE;gBACV,YAAY,CAAC,OAAO,CAAC,UAAC,KAAK;oBACvB,IAAI,OAAO,GAAG,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC3C,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACjC,IAAI,CAAC,OAAO,EAAE;wBACV,OAAO,GAAG,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;qBAC/C;oBACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBAC7B,CAAC,CAAC;aACN;YAED,OAAO,YAAY,CAAC;SACvB;QACL,mBAAC;IAAD,CAAC,IAAA;IAOD,IAAM,WAAW,GAAmB;QAChC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAChE,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC;KAClF,CAAC;IAEF,IAAM,QAAQ,GAAmB;QAC7B,QAAQ,EAAE;YACN,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YAC7G,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;SACpD;QACD,MAAM,EAAE;YACJ,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;SACN;KACJ,CAAC;IAEF,IAAM,MAAM,GAAmB;QAC3B,QAAQ,EAAE;YACN,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YAC/G,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;SACpD;QACD,MAAM,EAAE;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;SACN;KACJ,CAAC;IAEF,IAAM,QAAQ,GAAmB;QAC7B,QAAQ,EAAE;YACN,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAC5G,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;SAC5D;QACD,MAAM,EAAE;YACJ,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;SACN;KACJ,CAAC;IAEF,IAAM,qBAAqB,GAAG,UAC1B,KAAa,EACb,GAAW,EACX,GAAW,EACX,OAAuB,EACvB,QAAyB,EACzB,MAAc;QAEd,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE;YAC5B,OAAO,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SAChE;QAED,QACI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAC,MAAM,EAAE,OAAO,EAAE,KAAK;YAC3C,OAAO,KAAK,IAAI,OAAO,EAAE;gBACrB,KAAK,IAAI,OAAO,CAAC;gBACjB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACnC;YACD,OAAO,MAAM,CAAC;SACjB,EAAE,EAAE,CAAC,GAAG,MAAM,EACjB;IACN,CAAC,CAAC;IAEF,IAAM,oCAAoC,GAAG,UACzC,KAAa,EACb,oBAA4B,EAC5B,SAAkB,EAClB,QAAuC;QAEvC,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,GAAG;YACC,IAAI,CAAC,SAAS,EAAE;gBACZ,KAAK,EAAE,CAAC;aACX;YACD,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;YAClC,KAAK,IAAI,oBAAoB,CAAC;SACjC,QAAQ,KAAK,GAAG,oBAAoB,IAAI,oBAAoB,EAAE;QAE/D,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;IAEF,IAAM,2BAA2B,GAAG,UAChC,KAAa,EACb,mBAA2B,EAC3B,iBAAyB,EACzB,SAAkB,EAClB,MAAc;QAEd,IAAM,oBAAoB,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,CAAC,CAAC;QAEzE,QACI,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE;aACpB,oCAAoC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,oBAAoB,EAAE,SAAS,EAAE,UAAC,SAAS;gBAC9F,OAAAA,eAAa,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,oBAAoB,CAAC,GAAG,mBAAmB,CAAC;aAAA,CACpF;gBACG,MAAM,CAAC,EACb;IACN,CAAC,CAAC;IAEF,IAAM,6BAA6B,GAAG,UAAC,KAAa,EAAE,OAAe,EAAE,MAAa;QAAb,uBAAA,EAAA,aAAa;QAChF,IAAM,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;QAC5C,QACI,oCAAoC,CAChC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EACf,oBAAoB,EACpB,KAAK,EACL,UAAC,SAAS,IAAK,OAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,oBAAoB,CAAC,CAAC,GAAA,CACvE,GAAG,MAAM,EACZ;IACN,CAAC,CAAC;IAEF,IAAM,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC;IACzB,IAAM,oBAAoB,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,IAAM,yBAAyB,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,IAAM,wBAAwB,GAAG,CAAC,IAAI,CAAC,CAAC;IAExC,IAAM,gBAAgB,GAAG,UACrB,KAAa,EACb,OAAe,EACf,WAAmB,EACnB,YAAoB,EACpB,MAAc,EACd,KAAa;QAEb,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE;YAC/B,OAAO,iBAAiB,CAAC,KAAK,uBAA+B,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SACnF;QACD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,MAAM,GAAG,MAAM,CAAC;QAEpB,IAAI,GAAG,KAAK,CAAC,EAAE;YACX,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;SAC9B;QAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;YAChD,IAAM,WAAW,GAAG,GAAG,GAAG,EAAE,CAAC;YAE7B,IAAI,WAAW,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,MAAM,KAAK,EAAE,EAAE;gBAClE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;aAC1C;iBAAM,IACH,WAAW,GAAG,CAAC;iBACd,WAAW,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;iBACjC,WAAW,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;iBAC1E,WAAW,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC;iBAC9F,WAAW,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC,EAC/E;gBACE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC;aACtF;iBAAM,IAAI,WAAW,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;gBACvC,MAAM,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;aAC5C;YACD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;SAC9B;QAED,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,YAAY,GAAG,EAAE,IAAI,MAAM,CAAC;IACpD,CAAC,CAAC;IAEF,IAAM,4BAA4B,GAAG,MAAM,CAAC;IAC5C,IAAM,0BAA0B,GAAG,MAAM,CAAC;IAC1C,IAAM,iBAAiB,GAAG,MAAM,CAAC;IACjC,IAAM,eAAe,GAAG,MAAM,CAAC;IAExB,IAAM,iBAAiB,GAAG,UAAC,KAAa,EAAE,IAAqB,EAAE,YAAqB;QACzF,IAAM,aAAa,GAAG,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;QAC/C,IAAM,SAAS,GAAG,YAAY,GAAG,GAAG,GAAG,EAAE,CAAC;QAC1C,IAAM,YAAY,GAAG,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;QAC9C,IAAM,WAAW,GAAG,YAAY,GAAG,GAAG,GAAG,EAAE,CAAC;QAC5C,QAAQ,IAAI;YACR;gBACI,OAAO,GAAG,GAAG,WAAW,CAAC;YAC7B;gBACI,OAAO,GAAG,GAAG,WAAW,CAAC;YAC7B;gBACI,OAAO,GAAG,GAAG,WAAW,CAAC;YAC7B;gBACI,IAAM,MAAM,GAAG,2BAA2B,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;gBAC/E,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAI,MAAQ,GAAG,MAAM,CAAC;YACrD;gBACI,OAAO,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YACzE;gBACI,OAAO,qBAAqB,CACxB,KAAK,EACL,CAAC,EACD,IAAI,EACJ,WAAW,mBAEX,aAAa,CAChB,CAAC,WAAW,EAAE,CAAC;YACpB;gBACI,OAAO,qBAAqB,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,mBAA2B,aAAa,CAAC,CAAC;YACtG;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;YAC9E;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;YAC7E;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;YAC5E;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YAC/E,uBAA8B;YAC9B;gBACI,OAAO,qBAAqB,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,mBAA2B,aAAa,CAAC,CAAC;YACnG;gBACI,OAAO,qBAAqB,CACxB,KAAK,EACL,CAAC,EACD,IAAI,EACJ,QAAQ,mBAER,aAAa,CAChB,CAAC,WAAW,EAAE,CAAC;YACpB;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YAC/E,wBAA+B;YAC/B;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YAC/E;gBACI,OAAO,6BAA6B,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;YAC3E;gBACI,OAAO,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YACzE,8BAAqC;YACrC;gBACI,OAAO,gBAAgB,CACnB,KAAK,EACL,YAAY,EACZ,4BAA4B,EAC5B,GAAG,EACH,SAAS,EACT,oBAAoB,GAAG,yBAAyB,GAAG,wBAAwB,CAC9E,CAAC;YACN;gBACI,OAAO,gBAAgB,CACnB,KAAK,EACL,YAAY,EACZ,0BAA0B,EAC1B,GAAG,EACH,SAAS,EACT,SAAS,GAAG,oBAAoB,GAAG,yBAAyB,GAAG,wBAAwB,CAC1F,CAAC;YACN;gBACI,OAAO,gBAAgB,CACnB,KAAK,EACL,YAAY,EACZ,4BAA4B,EAC5B,GAAG,EACH,SAAS,EACT,oBAAoB,GAAG,yBAAyB,GAAG,wBAAwB,CAC9E,CAAC;YACN;gBACI,OAAO,gBAAgB,CACnB,KAAK,EACL,YAAY,EACZ,0BAA0B,EAC1B,GAAG,EACH,SAAS,EACT,SAAS,GAAG,oBAAoB,GAAG,yBAAyB,GAAG,wBAAwB,CAC1F,CAAC;YACN;gBACI,OAAO,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YAC1F;gBACI,OAAO,gBAAgB,CACnB,KAAK,EACL,YAAY,EACZ,MAAM,EACN,iBAAiB,EACjB,SAAS,EACT,SAAS,GAAG,oBAAoB,GAAG,yBAAyB,CAC/D,CAAC;YACN;gBACI,OAAO,gBAAgB,CACnB,KAAK,EACL,YAAY,EACZ,MAAM,EACN,eAAe,EACf,YAAY,EACZ,SAAS,GAAG,oBAAoB,GAAG,yBAAyB,CAC/D,CAAC;YACN;gBACI,OAAO,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;YAC3F;gBACI,OAAO,gBAAgB,CACnB,KAAK,EACL,YAAY,EACZ,KAAK,EACL,eAAe,EACf,YAAY,EACZ,SAAS,GAAG,oBAAoB,GAAG,yBAAyB,CAC/D,CAAC;YACN;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YACjF;gBACI,OAAO,qBAAqB,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,mBAA2B,aAAa,CAAC,CAAC;YACpG;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YACjF;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YACjF;gBACI,OAAO,qBAAqB,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,mBAA2B,aAAa,CAAC,CAAC;YAClG;gBACI,OAAO,6BAA6B,CAChC,KAAK,EACL,kDAAkD,CACrD,CAAC;YACN;gBACI,OAAO,6BAA6B,CAChC,KAAK,EACL,iDAAiD,CACpD,CAAC;YACN;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YACjF;gBACI,OAAO,6BAA6B,CAChC,KAAK,EACL,kDAAkD,EAClD,SAAS,CACZ,CAAC;YACN;gBACI,OAAO,6BAA6B,CAChC,KAAK,EACL,iDAAiD,EACjD,SAAS,CACZ,CAAC;YACN;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YACjF;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YACnF;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YACnF;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YACjF;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YACjF;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YACjF;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YACjF;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YACjF;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YACjF,qBAA6B;YAC7B;gBACI,OAAO,2BAA2B,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;SAC9E;IACL,CAAC;;ICjdD,IAAM,gBAAgB,GAAG,yBAAyB,CAAC;IAEnD;QAQI,wBACqB,OAAgB,EACjC,OAAoB,EACH,OAA4B;YAF5B,YAAO,GAAP,OAAO,CAAS;YAEhB,YAAO,GAAP,OAAO,CAAqB;YAE7C,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAC3B,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;YAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;gBACxB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;aACrE;YAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,eAAe,EAAE,KAAK,CAAgB,CAAC;SACtG;QAED,iCAAQ,GAAR,UAAS,aAAuB,EAAE,UAAkB;YAApD,iBAoEC;YAnEG,IAAM,MAAM,GAAsB,qBAAqB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YAEnF,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;gBACvB,OAAO,OAAO,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;aACzD;YAED,IAAM,OAAO,GAAI,aAAa,CAAC,WAAsB,CAAC,WAAW,CAAC;YAClE,IAAM,OAAO,GAAI,aAAa,CAAC,WAAsB,CAAC,WAAW,CAAC;YAElE,IAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC;YACzC,IAAM,aAAa,GAAa,WAAW,CAAC,QAAQ,CAAC;;;;YAMrD,IAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;;;;;4BACzC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;4BACjD,IAAI,WAAW,EAAE;gCACb,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;gCACtD,IACI,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;qCAC9C,WAAW,CAAC,OAAO,KAAK,UAAU,CAAC,GAAG,IAAI,WAAW,CAAC,OAAO,KAAK,UAAU,CAAC,IAAI,CAAC,EACrF;oCACE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;oCAClF,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CACrD,WAAW,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,EACrC,WAAW,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EACpC,CAAC,EACD,CAAC,CACJ,CAAC;iCACL;6BACJ;4BAEK,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;4BAE/B,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC;4BAErD,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE;gCACzC,sBAAO,OAAO,CAAC,MAAM,CAAC,uBAAqB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,4BAAyB,CAAC,EAAC;6BACvG;kCAEG,aAAa,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,CAAA,EAAhD,wBAAgD;4BAChD,qBAAM,aAAa,CAAC,KAAK,CAAC,KAAK,EAAA;;4BAA/B,SAA+B,CAAC;;;iCAGhC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAA1C,wBAA0C;4BAC1C,qBAAM,WAAW,CAAC,aAAa,CAAC,EAAA;;4BAAhC,SAAgC,CAAC;;;4BAGrC,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;gCAC/B,sBAAO,OAAO,CAAC,OAAO,EAAE;yCACnB,IAAI,CAAC,cAAM,OAAA,OAAO,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAA,CAAC;yCACpD,IAAI,CAAC,cAAM,OAAA,MAAM,GAAA,CAAC,EAAC;6BAC3B;4BAED,sBAAO,MAAM,EAAC;;;iBACjB,CAAC,CAAC;YAEH,aAAa,CAAC,IAAI,EAAE,CAAC;YACrB,aAAa,CAAC,KAAK,CAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAe,CAAC,CAAC;;YAE1E,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1E,aAAa,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;YACzG,aAAa,CAAC,KAAK,EAAE,CAAC;YAEtB,OAAO,UAAU,CAAC;SACrB;QAED,2CAAkB,GAAlB,UAAuD,IAAO;YAC1D,IAAI,WAAW,CAAC,IAAI,gBAAqB,EAAE;gBACvC,SAAS;aACZ;YACD,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;gBACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;aACvC;YACD,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE;gBACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;aACtC;YACD,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE;gBACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;aACtC;YAED,IAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAM,CAAC;YACzC,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE;gBACvB,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,GAAG,EAAE;oBACzE,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;oBAC5B,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;iBACrB;gBAED,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE;oBAC1B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;iBAC3B;aACJ;YAED,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE;gBACxB,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;aAC/C;YAED,OAAO,KAAK,CAAC;SAChB;QAED,iDAAwB,GAAxB,UAAyB,IAAiB;YACtC,IAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC;YACjE,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAEjC,OAAO,KAAK,CAAC;SAChB;QAED,yCAAgB,GAAhB,UAAiB,IAAsB;YACnC,IAAI;gBACA,IAAM,KAAK,GAAG,IAAI,CAAC,KAAkC,CAAC;gBACtD,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE;oBACzB,IAAM,GAAG,GAAW,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAC,GAAW,EAAE,IAAa;wBACnF,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;4BAC1C,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;yBAC7B;wBACD,OAAO,GAAG,CAAC;qBACd,EAAE,EAAE,CAAC,CAAC;oBACP,IAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAqB,CAAC;oBACxD,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC;oBACxB,OAAO,KAAK,CAAC;iBAChB;aACJ;YAAC,OAAO,CAAC,EAAE;;gBAER,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,CAAC,CAAC,CAAC;gBACnE,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,EAAE;oBAC5B,MAAM,CAAC,CAAC;iBACX;aACJ;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAqB,CAAC;SACpD;QAED,0CAAiB,GAAjB,UAAkB,MAAyB;;YACvC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,MAAM,CAAC,aAAa,EAAE;gBACnD,IAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBACtD,IAAI;oBACA,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;oBAC7B,OAAO,GAAG,CAAC;iBACd;gBAAC,OAAO,CAAC,EAAE;oBACR,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,qDAAqD,EAAE,MAAM,CAAC,CAAC;iBAC3F;aACJ;YAED,IAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAsB,CAAC;YAElE,IAAI;gBACA,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;gBAClC,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;gBACpC,IAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAChD,IAAI,SAAS,EAAE;oBACX,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,GAAG,EAAE;wBACjC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;qBACrF;yBAAM;wBACH,IAAM,EAAE,GAAG,MAAA,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,mCAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;wBACrE,IAAI,EAAE,EAAE;4BACJ,IAAM,OAAO,GAAG,EAAE,CAAC,oBAAoB,EAAE,CAAC;4BAC1C,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,qBAAqB,MAAK,KAAK,EAAE;gCAC1C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACpB,qEAAqE,EACrE,MAAM,CACT,CAAC;6BACL;yBACJ;wBAED,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;qBACrC;iBACJ;gBACD,OAAO,YAAY,CAAC;aACvB;YAAC,OAAO,CAAC,EAAE;gBACR,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,EAAE,MAAM,CAAC,CAAC;aAC/E;YAED,OAAO,YAAY,CAAC;SACvB;QAED,yCAAgB,GAAhB,UAAiB,KAAuB;YACpC,IAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAE3D,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC;YACjC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC;YACnC,IAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEpC,IAAI;gBACA,IAAI,GAAG,EAAE;oBACL,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;oBACxD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;wBAC1B,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;qBACvD;iBACJ;gBACD,OAAO,MAAM,CAAC;aACjB;YAAC,OAAO,CAAC,EAAE;gBACR,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;aAC7E;YAED,IAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAEhE,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC;YACtC,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC;YACxC,OAAO,WAAW,CAAC;SACtB;QAED,wCAAe,GAAf,UAAgB,KAA+B,EAAE,KAAW,EAAE,UAAmB;YAC7E,IACI,CAAC,aAAa,CAAC,KAAK,CAAC;iBACpB,CAAC,eAAe,CAAC,KAAK,CAAC;oBACpB,CAAC,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAC;qBACpC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EACjG;gBACE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;oBAC7E,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;iBACxD;aACJ;SACJ;QAED,wCAAe,GAAf,UAAgB,IAAa,EAAE,KAA+B,EAAE,UAAmB;YAAnF,iBAeC;YAdG,KACI,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAC1E,KAAK,EACL,KAAK,GAAG,KAAK,CAAC,WAAW,EAC3B;gBACE,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,UAAU,EAAE;oBAC3F,IAAM,aAAa,GAAG,KAAK,CAAC,aAAa,EAAiB,CAAC;oBAC3D,IAAI,aAAa,CAAC,MAAM,EAAE;wBACtB,aAAa,CAAC,OAAO,CAAC,UAAC,YAAY,IAAK,OAAA,KAAI,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,CAAC,GAAA,CAAC,CAAC;qBAClG;iBACJ;qBAAM;oBACH,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;iBAClD;aACJ;SACJ;QAED,kCAAS,GAAT,UAAU,IAAU,EAAE,UAAmB;YACrC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;gBAClB,OAAO,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC7C;YAED,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACrB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;aAChC;YAED,IAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;YAE9C,IAAI,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE;gBACtF,IAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAC5C,KAAK,CAAC,KAAK,CAAC,kBAAkB,GAAG,MAAM,CAAC;gBAExC,IAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC7D,IAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAE3D,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE;oBAC5D,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;iBACvC;gBACD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;oBACtB,sBAAsB,CAAC,KAAK,CAAC,CAAC;iBACjC;gBAED,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,2BAA2B,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC3F,IAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAE7F,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;oBACvB,UAAU,GAAG,IAAI,CAAC;iBACrB;gBAED,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;oBACvB,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;iBACjD;gBAED,IAAI,MAAM,EAAE;oBACR,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;iBAChD;gBAED,IAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC1F,IAAI,KAAK,EAAE;oBACP,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;iBAC5B;gBAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAE5B,IACI,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;oBACvF,UAAU,EACZ;oBACE,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;iBAC/B;gBAED,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;oBAC/C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;iBACxE;gBAED,IACI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC;qBAChD,iBAAiB,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,EACtD;oBACE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;iBAC5B;gBAED,OAAO,KAAK,CAAC;aAChB;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAChC;QAED,6CAAoB,GAApB,UACI,IAAa,EACb,KAAc,EACd,KAA0B,EAC1B,SAA4B;YAJhC,iBAqGC;YA/FG,IAAI,CAAC,KAAK,EAAE;gBACR,OAAO;aACV;YAED,IAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;YAC5B,IAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC;YACrC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,kBAAkB,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE;gBACrG,OAAO;aACV;YAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,2BAA2B,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAC1E,IAAM,WAAW,GAAG,IAAI,0BAA0B,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAExE,IAAM,wBAAwB,GAAG,QAAQ,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC;YACpF,aAAa,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;YAE/C,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,UAAC,KAAK;gBAC9B,IAAI,KAAK,CAAC,IAAI,2BAA6B;oBACvC,wBAAwB,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAC9E;qBAAM,IAAI,KAAK,CAAC,IAAI,yBAA0B;oBAC3C,IAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBAC1C,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;oBACtB,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;oBACxB,wBAAwB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;iBAC7C;qBAAM,IAAI,KAAK,CAAC,IAAI,wBAAyB;oBAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;wBACvB,IAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;wBAC/C,IAAI,IAAI,CAAC,MAAM,EAAE;4BACb,wBAAwB,CAAC,WAAW,CAChC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAClE,CAAC;yBACL;qBACJ;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;wBAC3B,IAAA,KAA0B,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,EAArE,OAAO,QAAA,EAAE,YAAY,QAAgD,CAAC;wBAC7E,IAAI,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE;4BAClC,IAAM,YAAY,GAAG,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;4BAClE,IAAM,WAAW,GACb,YAAY,IAAI,YAAY,CAAC,YAAY,CAAC;kCACpC,aAAa,CAAC,KAAK,CAAC,KAAI,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC;kDAC7B;4BAElC,wBAAwB,CAAC,WAAW,CAChC,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAC/E,CAAC;yBACL;qBACJ;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE;wBAC5B,IAAA,KAAiC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,EAA5E,OAAO,QAAA,EAAE,KAAK,QAAA,EAAE,YAAY,QAAgD,CAAC;wBACpF,IAAI,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE;4BAClC,IAAM,aAAa,GAAG,KAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;4BACpE,IAAM,aAAW,GACb,YAAY,IAAI,YAAY,CAAC,YAAY,CAAC;kCACpC,aAAa,CAAC,KAAK,CAAC,KAAI,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC;kDAC7B;4BAClC,IAAM,SAAS,GAAG,KAAK,IAAI,KAAK,CAAC,IAAI,4BAA8B,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;4BACpF,IAAM,IAAI,GAAG,aAAa;iCACrB,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,iBAAiB,CAAC,KAAK,EAAE,aAAW,EAAE,KAAK,CAAC,GAAA,CAAC;iCAC5D,IAAI,CAAC,SAAS,CAAC,CAAC;4BAErB,wBAAwB,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;yBACvE;qBACJ;yBAAM,CAEN;iBACJ;qBAAM,IAAI,KAAK,CAAC,IAAI,2BAA4B;oBAC7C,QAAQ,KAAK,CAAC,KAAK;wBACf,KAAK,YAAY;4BACb,wBAAwB,CAAC,WAAW,CAChC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,KAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,CAAC,CACjF,CAAC;4BACF,MAAM;wBACV,KAAK,aAAa;4BACd,wBAAwB,CAAC,WAAW,CAChC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,KAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAClF,CAAC;4BACF,MAAM;wBACV;;4BAEI,wBAAwB,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;qBAClF;iBACJ;aACJ,CAAC,CAAC;YAEH,wBAAwB,CAAC,SAAS,GAAM,gCAAgC,SAAI,+BAAiC,CAAC;YAC9G,IAAM,YAAY,GACd,SAAS,KAAK,iBAAiB,CAAC,MAAM;kBAChC,MAAI,gCAAkC;kBACtC,MAAI,+BAAiC,CAAC;YAEhD,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;gBACzB,KAAK,CAAC,SAAS,CAAC,SAAS,IAAI,YAAY,CAAC;aAC7C;iBAAM;gBACH,KAAK,CAAC,SAAS,IAAI,YAAY,CAAC;aACnC;YAED,OAAO,wBAAwB,CAAC;SACnC;QAEM,sBAAO,GAAd,UAAe,SAA4B;YACvC,IAAI,SAAS,CAAC,UAAU,EAAE;gBACtB,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAC5C,OAAO,IAAI,CAAC;aACf;YACD,OAAO,KAAK,CAAC;SAChB;QACL,qBAAC;IAAD,CAAC,IAAA;IAED,IAAK,iBAGJ;IAHD,WAAK,iBAAiB;QAClB,6DAAM,CAAA;QACN,2DAAK,CAAA;IACT,CAAC,EAHI,iBAAiB,KAAjB,iBAAiB,QAGrB;IAED,IAAM,qBAAqB,GAAG,UAAC,aAAuB,EAAE,MAAc;QAClE,IAAM,oBAAoB,GAAG,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAEnE,oBAAoB,CAAC,SAAS,GAAG,uBAAuB,CAAC;QACzD,oBAAoB,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;QACjD,oBAAoB,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC9C,oBAAoB,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;QAC7C,oBAAoB,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;QACvC,oBAAoB,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QACxC,oBAAoB,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrD,oBAAoB,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACvD,oBAAoB,CAAC,SAAS,GAAG,IAAI,CAAC;QACtC,oBAAoB,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAC5D,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QAErD,OAAO,oBAAoB,CAAC;IAChC,CAAC,CAAC;IAEF,IAAM,UAAU,GAAG,UAAC,GAAqB;QACrC,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO;YACvB,IAAI,GAAG,CAAC,QAAQ,EAAE;gBACd,OAAO,EAAE,CAAC;gBACV,OAAO;aACV;YACD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;gBACV,OAAO,EAAE,CAAC;gBACV,OAAO;aACV;YACD,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC;YACrB,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;SACzB,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,IAAM,WAAW,GAAG,UAAC,QAAsB;QACvC,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC;IAEF,IAAM,YAAY,GAAG,UAAC,MAAyB;QAC3C,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAC/B,IAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC;YAEzC,IAAI,CAAC,WAAW,EAAE;gBACd,OAAO,MAAM,CAAC,+BAA+B,CAAC,CAAC;aAClD;YAED,IAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC;YAE3C,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG;gBACjC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;gBAC1C,IAAM,QAAQ,GAAG,WAAW,CAAC;oBACzB,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,UAAU,KAAK,UAAU,EAAE;wBACrF,aAAa,CAAC,QAAQ,CAAC,CAAC;wBACxB,OAAO,CAAC,MAAM,CAAC,CAAC;qBACnB;iBACJ,EAAE,EAAE,CAAC,CAAC;aACV,CAAC;SACL,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,IAAM,sBAAsB,GAAG;QAC3B,KAAK;QACL,GAAG;QACH,SAAS;KACZ,CAAC;IAEK,IAAM,aAAa,GAAG,UAAqC,KAA0B,EAAE,MAAS;;QAEnG,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YACxC,IAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;gBACjD,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;aACxE;SACJ;QACD,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;IAEF,IAAM,gBAAgB,GAAG,UAAC,OAA6B;QACnD,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,OAAO,EAAE;YACT,GAAG,IAAI,YAAY,CAAC;YACpB,IAAI,OAAO,CAAC,IAAI,EAAE;gBACd,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;aACvB;YAED,IAAI,OAAO,CAAC,cAAc,EAAE;gBACxB,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC;aACjC;YAED,IAAI,OAAO,CAAC,QAAQ,EAAE;gBAClB,GAAG,IAAI,OAAI,OAAO,CAAC,QAAQ,OAAG,CAAC;aAClC;YAED,IAAI,OAAO,CAAC,QAAQ,EAAE;gBAClB,GAAG,IAAI,OAAI,OAAO,CAAC,QAAQ,OAAG,CAAC;aAClC;YAED,GAAG,IAAI,GAAG,CAAC;SACd;QAED,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;IAEF,IAAM,kBAAkB,GAAG,UAAC,aAA8B,EAAE,CAAS,EAAE,CAAS;QAC5E,IACI,aAAa;YACb,aAAa,CAAC,WAAW;aACxB,CAAC,KAAK,aAAa,CAAC,WAAW,CAAC,WAAW,IAAI,CAAC,KAAK,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,EAC9F;YACE,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC5C;IACL,CAAC,CAAC;IAEF,IAAM,iBAAiB,GAAG,UAAC,EAA8C;YAA7C,OAAO,QAAA,EAAE,CAAC,QAAA,EAAE,CAAC,QAAA;QACrC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;QACvB,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,IAAM,aAAa,GAAG,SAAS,CAAC;IAChC,IAAM,YAAY,GAAG,QAAQ,CAAC;IAC9B,IAAM,gCAAgC,GAAG,uCAAuC,CAAC;IACjF,IAAM,+BAA+B,GAAG,sCAAsC,CAAC;IAE/E,IAAM,yBAAyB,GAAG,oEAGhC,CAAC;IAEH,IAAM,sBAAsB,GAAG,UAAC,IAAiB;QAC7C,YAAY,CACR,IAAI,EACJ,MAAI,gCAAgC,GAAG,aAAa,GAAG,yBAAyB,oBAC5E,+BAA+B,GAAG,YAAY,GAAG,yBAA2B,CACnF,CAAC;IACN,CAAC,CAAC;IAEF,IAAM,YAAY,GAAG,UAAC,IAAiB,EAAE,MAAc;QACnD,IAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;QACpC,IAAI,QAAQ,EAAE;YACV,IAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC9C,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;YAC3B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAC3B;IACL,CAAC;;ICznBD;QAAA;SAuBC;QAnBU,sBAAS,GAAhB,UAAiB,GAAW;YACxB,IAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,IAAI,EAAE;gBACP,OAAO,aAAa,CAAC;aACxB;YAED,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;YAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACtB,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;SACpD;QAEM,yBAAY,GAAnB,UAAoB,GAAW;YAC3B,OAAO,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,YAAY,CAAC,OAAO,CAAC;SAC/D;QAEM,uBAAU,GAAjB,UAAkB,MAAc;YAC5B,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACxD,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SACvE;QApBc,oBAAO,GAAG,aAAa,CAAC;QAqB3C,mBAAC;KAvBD,IAuBC;IASD;QAII,eAA6B,OAAgB,EAAmB,QAAyB;YAA5D,YAAO,GAAP,OAAO,CAAS;YAAmB,aAAQ,GAAR,QAAQ,CAAiB;;YAFxE,WAAM,GAAkC,EAAE,CAAC;SAEiC;QAE7F,wBAAQ,GAAR,UAAS,GAAW;YAChB,IAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACf,OAAO,MAAM,CAAC;aACjB;YAED,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE;gBACvC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;;iBAE9C,CAAC,CAAC;gBACH,OAAO,MAAM,CAAC;aACjB;YAED,OAAO,MAAM,CAAC;SACjB;;QAGD,qBAAK,GAAL,UAAM,GAAW;YACb,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAC3B;QAEa,yBAAS,GAAvB,UAAwB,GAAW;;;;;;;4BACzB,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;4BAC9C,OAAO,GACT,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,IAAI,IAAI,QAAQ,CAAC,mBAAmB,IAAI,CAAC,YAAY,CAAC;4BACrG,QAAQ,GACV,CAAC,aAAa,CAAC,GAAG,CAAC;gCACnB,CAAC,YAAY;gCACb,CAAC,WAAW,CAAC,GAAG,CAAC;gCACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ;gCACvC,QAAQ,CAAC,gBAAgB;gCACzB,CAAC,OAAO,CAAC;4BACb,IACI,CAAC,YAAY;gCACb,IAAI,CAAC,QAAQ,CAAC,UAAU,KAAK,KAAK;gCAClC,CAAC,aAAa,CAAC,GAAG,CAAC;gCACnB,CAAC,WAAW,CAAC,GAAG,CAAC;gCACjB,CAAC,QAAQ;gCACT,CAAC,OAAO,EACV;gCACE,sBAAO;6BACV;4BAEG,GAAG,GAAG,GAAG,CAAC;iCACV,QAAQ,EAAR,wBAAQ;4BACF,qBAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAA;;4BAA3B,GAAG,GAAG,SAAqB,CAAC;;;4BAGhC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAe,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAG,CAAC,CAAC;4BAE3D,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;oCACrC,IAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;oCACxB,GAAG,CAAC,MAAM,GAAG,cAAM,OAAA,OAAO,CAAC,GAAG,CAAC,GAAA,CAAC;oCAChC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;;oCAErB,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE;wCACrC,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;qCACjC;oCACD,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;oCACd,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,EAAE;;wCAEvB,UAAU,CAAC,cAAM,OAAA,OAAO,CAAC,GAAG,CAAC,GAAA,EAAE,GAAG,CAAC,CAAC;qCACvC;oCACD,IAAI,KAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,EAAE;wCAChC,UAAU,CACN,cAAM,OAAA,MAAM,CAAC,gBAAc,KAAI,CAAC,QAAQ,CAAC,YAAY,sBAAmB,CAAC,GAAA,EACzE,KAAI,CAAC,QAAQ,CAAC,YAAY,CAC7B,CAAC;qCACL;iCACJ,CAAC,EAAA;gCAnBF,sBAAO,SAmBL,EAAC;;;;SACN;QAEO,mBAAG,GAAX,UAAY,GAAW;YACnB,OAAO,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC;SAClD;QAED,oBAAI,GAAJ;YACI,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;SACpD;QAEO,qBAAK,GAAb,UAAc,GAAW;YAAzB,iBA2CC;YA1CG,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAElC,IAAI,CAAC,KAAK,EAAE;gBACR,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;aACvC;YAED,IAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAElC,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;gBAC/B,IAAM,YAAY,GAAG,QAAQ,CAAC,qBAAqB,GAAG,MAAM,GAAG,MAAM,CAAC;gBACtE,IAAM,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;gBACjC,GAAG,CAAC,MAAM,GAAG;oBACT,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;wBACpB,IAAI,YAAY,KAAK,MAAM,EAAE;4BACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;yBACzB;6BAAM;4BACH,IAAM,QAAM,GAAG,IAAI,UAAU,EAAE,CAAC;4BAChC,QAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,cAAM,OAAA,OAAO,CAAC,QAAM,CAAC,MAAgB,CAAC,GAAA,EAAE,KAAK,CAAC,CAAC;4BAC/E,QAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAC,CAAC,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,GAAA,EAAE,KAAK,CAAC,CAAC;4BAC1D,QAAM,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;yBACtC;qBACJ;yBAAM;wBACH,MAAM,CAAC,8BAA4B,GAAG,0BAAqB,GAAG,CAAC,MAAQ,CAAC,CAAC;qBAC5E;iBACJ,CAAC;gBAEF,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;gBACrB,IAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;gBACxD,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAG,KAAK,GAAG,WAAW,YAAO,kBAAkB,CAAC,GAAG,CAAC,sBAAiB,YAAc,CAAC,CAAC;gBAErG,IAAI,YAAY,KAAK,MAAM,IAAI,GAAG,YAAY,cAAc,EAAE;oBAC1D,GAAG,CAAC,YAAY,GAAG,YAAY,CAAC;iBACnC;gBAED,IAAI,KAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;oBAC5B,IAAM,SAAO,GAAG,KAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;oBAC3C,GAAG,CAAC,OAAO,GAAG,SAAO,CAAC;oBACtB,GAAG,CAAC,SAAS,GAAG,cAAM,OAAA,MAAM,CAAC,gBAAc,SAAO,qBAAgB,GAAK,CAAC,GAAA,CAAC;iBAC5E;gBAED,GAAG,CAAC,IAAI,EAAE,CAAC;aACd,CAAC,CAAC;SACN;QACL,YAAC;IAAD,CAAC,IAAA;IAED,IAAM,UAAU,GAAG,wBAAwB,CAAC;IAC5C,IAAM,aAAa,GAAG,0BAA0B,CAAC;IACjD,IAAM,UAAU,GAAG,kBAAkB,CAAC;IAEtC,IAAM,YAAY,GAAG,UAAC,GAAW,IAAc,OAAA,QAAQ,CAAC,mBAAmB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAA,CAAC;IAC3F,IAAM,aAAa,GAAG,UAAC,GAAW,IAAc,OAAA,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;IACrE,IAAM,mBAAmB,GAAG,UAAC,GAAW,IAAc,OAAA,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;IAC9E,IAAM,WAAW,GAAG,UAAC,GAAW,IAAc,OAAA,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,GAAA,CAAC;IAE1E,IAAM,KAAK,GAAG,UAAC,GAAW,IAAc,OAAA,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA;;IC9KtG;QAKI,gBAAY,CAAS,EAAE,CAAS;YAC5B,IAAI,CAAC,IAAI,kBAAmB;YAC5B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;SACd;QAED,oBAAG,GAAH,UAAI,MAAc,EAAE,MAAc;YAC9B,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;SACvD;QACL,aAAC;IAAD,CAAC;;ICbD,IAAM,IAAI,GAAG,UAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACzC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC;IAEF;QAOI,qBAAY,KAAa,EAAE,YAAoB,EAAE,UAAkB,EAAE,GAAW;YAC5E,IAAI,CAAC,IAAI,wBAAyB;YAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;YACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC7B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;SAClB;QAED,+BAAS,GAAT,UAAU,CAAS,EAAE,SAAkB;YACnC,IAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YAClD,IAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACvD,IAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC9C,IAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7B,IAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7B,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACjC,OAAO,SAAS,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;SAC9G;QAED,yBAAG,GAAH,UAAI,MAAc,EAAE,MAAc;YAC9B,OAAO,IAAI,WAAW,CAClB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAC/B,CAAC;SACL;QAED,6BAAO,GAAP;YACI,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SACpF;QACL,kBAAC;IAAD,CAAC,IAAA;IAEM,IAAM,aAAa,GAAG,UAAC,IAAU,IAA0B,OAAA,IAAI,CAAC,IAAI,4BAA0B;;ICxCrG;QA0BI,qBAAY,OAAyB;YACjC,IAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC9B,IAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAE1B,IAAA,KAAa,wBAAwB,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAA7F,GAAG,QAAA,EAAE,GAAG,QAAqF,CAAC;YAC/F,IAAA,KAAa,wBAAwB,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAA9F,GAAG,QAAA,EAAE,GAAG,QAAsF,CAAC;YAChG,IAAA,KAAa,wBAAwB,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAjG,GAAG,QAAA,EAAE,GAAG,QAAyF,CAAC;YACnG,IAAA,KAAa,wBAAwB,CAAC,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAhG,GAAG,QAAA,EAAE,GAAG,QAAwF,CAAC;YAEtG,IAAM,OAAO,GAAG,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAM,SAAS,GAAG,IAAI,CAAC,GAAG,OAAR,IAAI,EAAQ,OAAO,CAAC,CAAC;YAEvC,IAAI,SAAS,GAAG,CAAC,EAAE;gBACf,GAAG,IAAI,SAAS,CAAC;gBACjB,GAAG,IAAI,SAAS,CAAC;gBACjB,GAAG,IAAI,SAAS,CAAC;gBACjB,GAAG,IAAI,SAAS,CAAC;gBACjB,GAAG,IAAI,SAAS,CAAC;gBACjB,GAAG,IAAI,SAAS,CAAC;gBACjB,GAAG,IAAI,SAAS,CAAC;gBACjB,GAAG,IAAI,SAAS,CAAC;aACpB;YAED,IAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;YACpC,IAAM,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;YACxC,IAAM,WAAW,GAAG,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;YACvC,IAAM,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;YAEvC,IAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;YAC7C,IAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;YACjD,IAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;YACnD,IAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;YAE/C,IAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7E,IAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACjF,IAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnF,IAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAE/E,IAAI,CAAC,2BAA2B;gBAC5B,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,eAAe,GAAG,CAAC,EACjC,MAAM,CAAC,GAAG,GAAG,cAAc,GAAG,CAAC,EAC/B,GAAG,GAAG,eAAe,GAAG,CAAC,EACzB,GAAG,GAAG,cAAc,GAAG,CAAC,EACxB,MAAM,CAAC,QAAQ,CAClB;sBACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,eAAe,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC;YACzF,IAAI,CAAC,4BAA4B;gBAC7B,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,QAAQ,EACtB,MAAM,CAAC,GAAG,GAAG,cAAc,GAAG,CAAC,EAC/B,GAAG,GAAG,gBAAgB,GAAG,CAAC,EAC1B,GAAG,GAAG,cAAc,GAAG,CAAC,EACxB,MAAM,CAAC,SAAS,CACnB;sBACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,gBAAgB,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC;YACzG,IAAI,CAAC,+BAA+B;gBAChC,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,WAAW,EACzB,MAAM,CAAC,GAAG,GAAG,WAAW,EACxB,GAAG,GAAG,gBAAgB,GAAG,CAAC,EAC1B,GAAG,GAAG,iBAAiB,GAAG,CAAC,EAC3B,MAAM,CAAC,YAAY,CACtB;sBACD,IAAI,MAAM,CACN,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,gBAAgB,GAAG,CAAC,EACjD,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,iBAAiB,GAAG,CAAC,CACrD,CAAC;YACZ,IAAI,CAAC,8BAA8B;gBAC/B,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,eAAe,GAAG,CAAC,EACjC,MAAM,CAAC,GAAG,GAAG,UAAU,EACvB,GAAG,GAAG,eAAe,GAAG,CAAC,EACzB,GAAG,GAAG,iBAAiB,GAAG,CAAC,EAC3B,MAAM,CAAC,WAAW,CACrB;sBACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,eAAe,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,iBAAiB,GAAG,CAAC,CAAC,CAAC;YAC5G,IAAI,CAAC,2BAA2B;gBAC5B,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,EACvC,MAAM,CAAC,GAAG,GAAG,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,EACrC,GAAG,GAAG,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,EAC/B,GAAG,GAAG,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,EAC9B,MAAM,CAAC,QAAQ,CAClB;sBACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACrG,IAAI,CAAC,4BAA4B;gBAC7B,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,QAAQ,EACtB,MAAM,CAAC,GAAG,GAAG,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,EACrC,GAAG,GAAG,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,EAChC,GAAG,GAAG,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,EAC9B,MAAM,CAAC,SAAS,CACnB;sBACD,IAAI,MAAM,CACN,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,EACvD,MAAM,CAAC,GAAG,GAAG,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,CACxC,CAAC;YACZ,IAAI,CAAC,+BAA+B;gBAChC,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,WAAW,EACzB,MAAM,CAAC,GAAG,GAAG,WAAW,EACxB,GAAG,GAAG,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,EAChC,GAAG,GAAG,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,EACjC,MAAM,CAAC,YAAY,CACtB;sBACD,IAAI,MAAM,CACN,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,EACvD,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,CAC3D,CAAC;YACZ,IAAI,CAAC,8BAA8B;gBAC/B,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,EACvC,MAAM,CAAC,GAAG,GAAG,UAAU,EACvB,GAAG,GAAG,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,EAC/B,GAAG,GAAG,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,EACjC,MAAM,CAAC,WAAW,CACrB;sBACD,IAAI,MAAM,CACN,MAAM,CAAC,IAAI,GAAG,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,EACvC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,CAC3D,CAAC;YACZ,IAAI,CAAC,mBAAmB;gBACpB,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,eAAe,GAAG,CAAC,EACjC,MAAM,CAAC,GAAG,GAAG,cAAc,GAAG,CAAC,EAC/B,GAAG,GAAG,eAAe,GAAG,CAAC,EACzB,GAAG,GAAG,cAAc,GAAG,CAAC,EACxB,MAAM,CAAC,QAAQ,CAClB;sBACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,eAAe,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC;YACzF,IAAI,CAAC,oBAAoB;gBACrB,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,QAAQ,EACtB,MAAM,CAAC,GAAG,GAAG,cAAc,GAAG,CAAC,EAC/B,GAAG,GAAG,gBAAgB,GAAG,CAAC,EAC1B,GAAG,GAAG,cAAc,GAAG,CAAC,EACxB,MAAM,CAAC,SAAS,CACnB;sBACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,gBAAgB,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC;YACzG,IAAI,CAAC,uBAAuB;gBACxB,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,WAAW,EACzB,MAAM,CAAC,GAAG,GAAG,WAAW,EACxB,GAAG,GAAG,gBAAgB,GAAG,CAAC,EAC1B,GAAG,GAAG,iBAAiB,GAAG,CAAC,EAC3B,MAAM,CAAC,YAAY,CACtB;sBACD,IAAI,MAAM,CACN,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,gBAAgB,GAAG,CAAC,EACjD,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,iBAAiB,GAAG,CAAC,CACrD,CAAC;YACZ,IAAI,CAAC,sBAAsB;gBACvB,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,eAAe,GAAG,CAAC,EACjC,MAAM,CAAC,GAAG,GAAG,UAAU,EACvB,GAAG,GAAG,eAAe,GAAG,CAAC,EACzB,GAAG,GAAG,iBAAiB,GAAG,CAAC,EAC3B,MAAM,CAAC,WAAW,CACrB;sBACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,eAAe,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,iBAAiB,GAAG,CAAC,CAAC,CAAC;YAC5G,IAAI,CAAC,gBAAgB;gBACjB,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC;sBAClE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,iBAAiB;gBAClB,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CAAC,MAAM,CAAC,IAAI,GAAG,QAAQ,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC;sBAC9E,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,CAAC,oBAAoB;gBACrB,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CAAC,MAAM,CAAC,IAAI,GAAG,WAAW,EAAE,MAAM,CAAC,GAAG,GAAG,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC;sBAClG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7E,IAAI,CAAC,mBAAmB;gBACpB,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,GAAG,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC;sBAClF,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9D,IAAI,CAAC,iBAAiB;gBAClB,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,eAAe,EAC7B,MAAM,CAAC,GAAG,GAAG,cAAc,EAC3B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,eAAe,CAAC,EAClC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,cAAc,CAAC,EACjC,MAAM,CAAC,QAAQ,CAClB;sBACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,eAAe,EAAE,MAAM,CAAC,GAAG,GAAG,cAAc,CAAC,CAAC;YACjF,IAAI,CAAC,kBAAkB;gBACnB,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,GAAG,gBAAgB,CAAC,EACjE,MAAM,CAAC,GAAG,GAAG,cAAc,EAC3B,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,gBAAgB,CAAC,EACpF,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,cAAc,CAAC,EACjC,MAAM,CAAC,SAAS,CACnB;sBACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,gBAAgB,EAAE,MAAM,CAAC,GAAG,GAAG,cAAc,CAAC,CAAC;YACjG,IAAI,CAAC,qBAAqB;gBACtB,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,EACnE,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,GAAG,iBAAiB,CAAC,EACrE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,gBAAgB,CAAC,EACnC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,iBAAiB,CAAC,EACpC,MAAM,CAAC,YAAY,CACtB;sBACD,IAAI,MAAM,CACN,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,gBAAgB,EAC7C,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,iBAAiB,CACjD,CAAC;YACZ,IAAI,CAAC,oBAAoB;gBACrB,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,eAAe,EAC7B,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,GAAG,iBAAiB,CAAC,EACpE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,eAAe,CAAC,EAClC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,iBAAiB,CAAC,EACpC,MAAM,CAAC,WAAW,CACrB;sBACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,eAAe,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,iBAAiB,CAAC,CAAC;YACpG,IAAI,CAAC,iBAAiB;gBAClB,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,eAAe,GAAG,WAAW,EAC3C,MAAM,CAAC,GAAG,GAAG,cAAc,GAAG,UAAU,EACxC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,eAAe,GAAG,WAAW,CAAC,CAAC,EAClD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,cAAc,GAAG,UAAU,CAAC,CAAC,EAChD,MAAM,CAAC,QAAQ,CAClB;sBACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,eAAe,GAAG,WAAW,EAAE,MAAM,CAAC,GAAG,GAAG,cAAc,GAAG,UAAU,CAAC,CAAC;YAC5G,IAAI,CAAC,kBAAkB;gBACnB,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,GAAG,eAAe,GAAG,WAAW,CAAC,EAC9E,MAAM,CAAC,GAAG,GAAG,cAAc,GAAG,UAAU,EACxC,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,eAAe,GAAG,WAAW,GAAG,CAAC,GAAG,GAAG,GAAG,eAAe,GAAG,WAAW,EACjG,GAAG,IAAI,cAAc,GAAG,UAAU,CAAC,EACnC,MAAM,CAAC,SAAS,CACnB;sBACD,IAAI,MAAM,CACN,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,gBAAgB,GAAG,YAAY,CAAC,EAC9D,MAAM,CAAC,GAAG,GAAG,cAAc,GAAG,UAAU,CAC3C,CAAC;YACZ,IAAI,CAAC,qBAAqB;gBACtB,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,IAAI,eAAe,GAAG,WAAW,CAAC,CAAC,EACnF,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,GAAG,cAAc,GAAG,UAAU,CAAC,EAC/E,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,gBAAgB,GAAG,YAAY,CAAC,CAAC,EACpD,GAAG,IAAI,iBAAiB,GAAG,aAAa,CAAC,EACzC,MAAM,CAAC,YAAY,CACtB;sBACD,IAAI,MAAM,CACN,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,gBAAgB,GAAG,YAAY,CAAC,EAC9D,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,iBAAiB,GAAG,aAAa,CAAC,CACnE,CAAC;YACZ,IAAI,CAAC,oBAAoB;gBACrB,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;sBACZ,cAAc,CACV,MAAM,CAAC,IAAI,GAAG,eAAe,GAAG,WAAW,EAC3C,MAAM,CAAC,GAAG,GAAG,UAAU,EACvB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,eAAe,GAAG,WAAW,CAAC,CAAC,EAClD,GAAG,IAAI,iBAAiB,GAAG,aAAa,CAAC,EACzC,MAAM,CAAC,WAAW,CACrB;sBACD,IAAI,MAAM,CACN,MAAM,CAAC,IAAI,GAAG,eAAe,GAAG,WAAW,EAC3C,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,iBAAiB,GAAG,aAAa,CAAC,CACnE,CAAC;SACf;QACL,kBAAC;IAAD,CAAC,IAAA;IAED,IAAK,MAKJ;IALD,WAAK,MAAM;QACP,2CAAY,CAAA;QACZ,6CAAa,CAAA;QACb,mDAAgB,CAAA;QAChB,iDAAe,CAAA;IACnB,CAAC,EALI,MAAM,KAAN,MAAM,QAKV;IAED,IAAM,cAAc,GAAG,UAAC,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,QAAgB;QAClF,IAAM,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3C,IAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QACtB,IAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QACtB,IAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QAClB,IAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QAElB,QAAQ,QAAQ;YACZ,KAAK,MAAM,CAAC,QAAQ;gBAChB,OAAO,IAAI,WAAW,CAClB,IAAI,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EACjB,IAAI,MAAM,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EACtB,IAAI,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EACtB,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CACpB,CAAC;YACN,KAAK,MAAM,CAAC,SAAS;gBACjB,OAAO,IAAI,WAAW,CAClB,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAChB,IAAI,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EACrB,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EACvB,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CACrB,CAAC;YACN,KAAK,MAAM,CAAC,YAAY;gBACpB,OAAO,IAAI,WAAW,CAClB,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EACjB,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EACtB,IAAI,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EACtB,IAAI,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CACpB,CAAC;YACN,KAAK,MAAM,CAAC,WAAW,CAAC;YACxB;gBACI,OAAO,IAAI,WAAW,CAClB,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAClB,IAAI,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EACvB,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EACrB,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CACnB,CAAC;SACT;IACL,CAAC,CAAC;IAEK,IAAM,sBAAsB,GAAG,UAAC,MAAmB;QACtD,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACxH,CAAC,CAAC;IAEK,IAAM,uBAAuB,GAAG,UAAC,MAAmB;QACvD,OAAO;YACH,MAAM,CAAC,iBAAiB;YACxB,MAAM,CAAC,kBAAkB;YACzB,MAAM,CAAC,qBAAqB;YAC5B,MAAM,CAAC,oBAAoB;SAC9B,CAAC;IACN,CAAC,CAAC;IAEK,IAAM,uBAAuB,GAAG,UAAC,MAAmB;QACvD,OAAO;YACH,MAAM,CAAC,iBAAiB;YACxB,MAAM,CAAC,kBAAkB;YACzB,MAAM,CAAC,qBAAqB;YAC5B,MAAM,CAAC,oBAAoB;SAC9B,CAAC;IACN,CAAC;;IChXD;QAII,yBAAqB,OAAe,EAAW,OAAe,EAAW,MAAc;YAAlE,YAAO,GAAP,OAAO,CAAQ;YAAW,YAAO,GAAP,OAAO,CAAQ;YAAW,WAAM,GAAN,MAAM,CAAQ;YAH9E,SAAI,qBAAoC;YACxC,WAAM,GAAW,6CAAuD;SAEU;QAC/F,sBAAC;IAAD,CAAC,IAAA;IAED;QAGI,oBAAqB,IAAY,EAAW,MAAoB;YAA3C,SAAI,GAAJ,IAAI,CAAQ;YAAW,WAAM,GAAN,MAAM,CAAc;YAFvD,SAAI,gBAA+B;SAEwB;QACxE,iBAAC;IAAD,CAAC,IAAA;IAED;QAII,uBAAqB,OAAe;YAAf,YAAO,GAAP,OAAO,CAAQ;YAH3B,SAAI,mBAAkC;YACtC,WAAM,GAAW,6CAAuD;SAEzC;QAC5C,oBAAC;IAAD,CAAC,IAAA;IAEM,IAAM,iBAAiB,GAAG,UAAC,MAAsB;QACpD,OAAA,MAAM,CAAC,IAAI;IAAX,CAAoC,CAAC;IAClC,IAAM,YAAY,GAAG,UAAC,MAAsB,IAA2B,OAAA,MAAM,CAAC,IAAI,oBAAoB,CAAC;IACvG,IAAM,eAAe,GAAG,UAAC,MAAsB,IAA8B,OAAA,MAAM,CAAC,IAAI,uBAAuB;;IC9B/G,IAAM,SAAS,GAAG,UAAC,CAAS,EAAE,CAAS;QAC1C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE;YACvB,OAAO,CAAC,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAA,CAAC,CAAC;SACvC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;IAEK,IAAM,aAAa,GAAG,UAAC,IAAY,EAAE,MAAc,EAAE,MAAc,EAAE,MAAc,EAAE,MAAc;QACtG,OAAO,IAAI,CAAC,GAAG,CAAC,UAAC,KAAK,EAAE,KAAK;YACzB,QAAQ,KAAK;gBACT,KAAK,CAAC;oBACF,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACrC,KAAK,CAAC;oBACF,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC9C,KAAK,CAAC;oBACF,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;gBACvD,KAAK,CAAC;oBACF,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;aACjD;YACD,OAAO,KAAK,CAAC;SAChB,CAAC,CAAC;IACP,CAAC;;ICtBD;QAUI,yBAAY,SAAuB;YAC/B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,sCAAsC,GAAG,EAAE,CAAC;YACjD,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;SACtC;QACL,sBAAC;IAAD,CAAC,IAAA;IAED;QAKI,sBAAqB,SAA2B,EAAW,MAA2B;YAAjE,cAAS,GAAT,SAAS,CAAkB;YAAW,WAAM,GAAN,MAAM,CAAqB;YAJ7E,YAAO,GAAqB,EAAE,CAAC;YAKpC,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE;gBACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;aACvE;YAED,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE;gBAC1C,IAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC7F,IAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC5F,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;aACpE;YAED,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,sBAAuB;gBACtD,IAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtD,IAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAExD,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE;oBAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,SAAS,EAAE,6CAAuD,CAAC,CAAC;iBACxG;qBAAM;oBACH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,SAAS,6BAAkC,CAAC,CAAC;oBAC9E,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,UAAU,kBAAuB,CAAC,CAAC;iBACvE;aACJ;SACJ;QAED,iCAAU,GAAV,UAAW,MAAoB;YAC3B,IAAI,MAAM,GAAG,iCAAmC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAChG,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YACzB,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACtC,OAAO,MAAM,EAAE;gBACX,IAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAC,MAAM,IAAK,OAAA,CAAC,YAAY,CAAC,MAAM,CAAC,GAAA,CAAC,CAAC;gBACjF,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,uBAAwB,CAAC,MAAM,CAAC,MAAM,EAAE;oBAClF,OAAO,CAAC,OAAO,OAAf,OAAO,EAAY,eAAe,EAAE;oBACpC,MAAM,GAAG,iCAAmC,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC9F,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,sBAAuB;wBACxD,IAAM,SAAS,GAAG,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBACxD,IAAM,UAAU,GAAG,uBAAuB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBAC1D,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE;4BACnC,OAAO,CAAC,OAAO,CACX,IAAI,UAAU,CAAC,UAAU,EAAE,6CAAuD,CACrF,CAAC;yBACL;qBACJ;iBACJ;qBAAM;oBACH,OAAO,CAAC,OAAO,OAAf,OAAO,EAAY,eAAe,EAAE;iBACvC;gBAED,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;aAC1B;YAED,OAAO,OAAO,CAAC,MAAM,CAAC,UAAC,MAAM,IAAK,OAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAA,CAAC,CAAC;SACtE;QACL,mBAAC;IAAD,CAAC,IAAA;IAED,IAAM,cAAc,GAAG,UACnB,MAAoB,EACpB,eAAgC,EAChC,mBAAoC,EACpC,SAAyB;QAEzB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,KAAK;YACpC,IAAM,0BAA0B,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,wCAAsC,CAAC;YAC9F,IAAM,sBAAsB,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,mCAAiC,CAAC;YACrF,IAAM,cAAc,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACvD,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,uBAAoB,EAAE;gBACnD,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;aAClC;YAED,IAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,wBAAsB,GAAG,EAAE,GAAG,SAAS,CAAC;YAEnF,IAAI,0BAA0B,IAAI,sBAAsB,EAAE;gBACtD,IAAM,WAAW,GACb,0BAA0B,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,mBAAmB,GAAG,eAAe,CAAC;gBAEtG,IAAM,KAAK,GAAG,IAAI,eAAe,CAAC,cAAc,CAAC,CAAC;gBAElD,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE;oBACzF,IAAM,OAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;oBACxC,IAAI,OAAK,GAAG,CAAC,EAAE;wBACX,IAAI,OAAK,GAAG,CAAC,CAAC;wBAEd,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,UAAC,OAAO,EAAE,CAAC;4BACvC,IAAI,OAAK,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;gCACvD,OAAK,GAAG,CAAC,CAAC;gCACV,OAAO,KAAK,CAAC;6BAChB;iCAAM,IAAI,OAAK,GAAG,CAAC,EAAE;gCAClB,OAAO,IAAI,CAAC;6BACf;4BAED,OAAO,KAAK,CAAC;yBAChB,CAAC,CAAC;wBACH,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,OAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;qBACtD;yBAAM,IAAI,OAAK,GAAG,CAAC,EAAE;wBAClB,IAAI,OAAK,GAAG,CAAC,CAAC;wBACd,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,UAAC,OAAO,EAAE,CAAC;4BACvC,IAAI,OAAK,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;gCACxD,OAAK,GAAG,CAAC,GAAG,CAAC,CAAC;gCACd,OAAO,KAAK,CAAC;6BAChB;iCAAM,IAAI,OAAK,GAAG,CAAC,EAAE;gCAClB,OAAO,IAAI,CAAC;6BACf;4BAED,OAAO,KAAK,CAAC;yBAChB,CAAC,CAAC;wBACH,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,OAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;qBACtD;yBAAM;wBACH,WAAW,CAAC,sCAAsC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBAClE;iBACJ;qBAAM;oBACH,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE;wBAC3B,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBAC/C;yBAAM;wBACH,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACpD;iBACJ;gBAED,cAAc,CACV,cAAc,EACd,KAAK,EACL,0BAA0B,GAAG,KAAK,GAAG,mBAAmB,EACxD,cAAc,CACjB,CAAC;aACL;iBAAM;gBACH,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE;oBAC9B,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;iBACpD;qBAAM;oBACH,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;iBACvD;gBAED,cAAc,CAAC,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,cAAc,CAAC,CAAC;aACxF;YAED,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,wBAAsB,EAAE;gBAC5C,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;aAC3C;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,IAAM,gBAAgB,GAAG,UAAC,KAAuB,EAAE,QAAwB;QACvE,IAAI,SAAS,GAAG,KAAK,YAAY,kBAAkB,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QACtE,IAAM,QAAQ,GAAG,KAAK,YAAY,kBAAkB,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,IAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzB,IACI,IAAI,CAAC,SAAS,YAAY,kBAAkB;gBAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,QAAQ;gBACxC,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC,EAC5B;gBACE,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;aACpC;YAED,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YAEzF,SAAS,IAAI,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;SAClC;IACL,CAAC,CAAC;IAEK,IAAM,qBAAqB,GAAG,UAAC,SAA2B;QAC7D,IAAM,cAAc,GAAG,IAAI,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACzD,IAAM,IAAI,GAAG,IAAI,eAAe,CAAC,cAAc,CAAC,CAAC;QACjD,IAAM,SAAS,GAAmB,EAAE,CAAC;QACrC,cAAc,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACtD,gBAAgB,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IAChB,CAAC;;ICxMM,IAAM,kBAAkB,GAAG,UAAC,MAAmB,EAAE,UAAkB;QACtE,QAAQ,UAAU;YACd,KAAK,CAAC;gBACF,OAAO,oBAAoB,CACvB,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,kBAAkB,CAC5B,CAAC;YACN,KAAK,CAAC;gBACF,OAAO,oBAAoB,CACvB,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,kBAAkB,EACzB,MAAM,CAAC,oBAAoB,EAC3B,MAAM,CAAC,qBAAqB,CAC/B,CAAC;YACN,KAAK,CAAC;gBACF,OAAO,oBAAoB,CACvB,MAAM,CAAC,oBAAoB,EAC3B,MAAM,CAAC,qBAAqB,EAC5B,MAAM,CAAC,mBAAmB,EAC1B,MAAM,CAAC,oBAAoB,CAC9B,CAAC;YACN,KAAK,CAAC,CAAC;YACP;gBACI,OAAO,oBAAoB,CACvB,MAAM,CAAC,mBAAmB,EAC1B,MAAM,CAAC,oBAAoB,EAC3B,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,iBAAiB,CAC3B,CAAC;SACT;IACL,CAAC,CAAC;IAEK,IAAM,6BAA6B,GAAG,UAAC,MAAmB,EAAE,UAAkB;QACjF,QAAQ,UAAU;YACd,KAAK,CAAC;gBACF,OAAO,oBAAoB,CACvB,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,2BAA2B,EAClC,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,4BAA4B,CACtC,CAAC;YACN,KAAK,CAAC;gBACF,OAAO,oBAAoB,CACvB,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,4BAA4B,EACnC,MAAM,CAAC,oBAAoB,EAC3B,MAAM,CAAC,+BAA+B,CACzC,CAAC;YACN,KAAK,CAAC;gBACF,OAAO,oBAAoB,CACvB,MAAM,CAAC,oBAAoB,EAC3B,MAAM,CAAC,+BAA+B,EACtC,MAAM,CAAC,mBAAmB,EAC1B,MAAM,CAAC,8BAA8B,CACxC,CAAC;YACN,KAAK,CAAC,CAAC;YACP;gBACI,OAAO,oBAAoB,CACvB,MAAM,CAAC,mBAAmB,EAC1B,MAAM,CAAC,8BAA8B,EACrC,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,2BAA2B,CACrC,CAAC;SACT;IACL,CAAC,CAAC;IAEK,IAAM,6BAA6B,GAAG,UAAC,MAAmB,EAAE,UAAkB;QACjF,QAAQ,UAAU;YACd,KAAK,CAAC;gBACF,OAAO,oBAAoB,CACvB,MAAM,CAAC,2BAA2B,EAClC,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,4BAA4B,EACnC,MAAM,CAAC,kBAAkB,CAC5B,CAAC;YACN,KAAK,CAAC;gBACF,OAAO,oBAAoB,CACvB,MAAM,CAAC,4BAA4B,EACnC,MAAM,CAAC,kBAAkB,EACzB,MAAM,CAAC,+BAA+B,EACtC,MAAM,CAAC,qBAAqB,CAC/B,CAAC;YACN,KAAK,CAAC;gBACF,OAAO,oBAAoB,CACvB,MAAM,CAAC,+BAA+B,EACtC,MAAM,CAAC,qBAAqB,EAC5B,MAAM,CAAC,8BAA8B,EACrC,MAAM,CAAC,oBAAoB,CAC9B,CAAC;YACN,KAAK,CAAC,CAAC;YACP;gBACI,OAAO,oBAAoB,CACvB,MAAM,CAAC,8BAA8B,EACrC,MAAM,CAAC,oBAAoB,EAC3B,MAAM,CAAC,2BAA2B,EAClC,MAAM,CAAC,iBAAiB,CAC3B,CAAC;SACT;IACL,CAAC,CAAC;IAEK,IAAM,wBAAwB,GAAG,UAAC,MAAmB,EAAE,UAAkB;QAC5E,QAAQ,UAAU;YACd,KAAK,CAAC;gBACF,OAAO,0BAA0B,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAC/F,KAAK,CAAC;gBACF,OAAO,0BAA0B,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,uBAAuB,CAAC,CAAC;YACnG,KAAK,CAAC;gBACF,OAAO,0BAA0B,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,sBAAsB,CAAC,CAAC;YACrG,KAAK,CAAC,CAAC;YACP;gBACI,OAAO,0BAA0B,CAAC,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;SACpG;IACL,CAAC,CAAC;IAEF,IAAM,0BAA0B,GAAG,UAAC,MAAY,EAAE,MAAY;QAC1D,IAAM,IAAI,GAAG,EAAE,CAAC;QAChB,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;SAC3C;aAAM;YACH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACrB;QAED,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;SAC1C;aAAM;YACH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACrB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEF,IAAM,oBAAoB,GAAG,UAAC,MAAY,EAAE,MAAY,EAAE,MAAY,EAAE,MAAY;QAChF,IAAM,IAAI,GAAG,EAAE,CAAC;QAChB,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;SAC3C;aAAM;YACH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACrB;QAED,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;SAC1C;aAAM;YACH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACrB;QAED,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;SACpD;aAAM;YACH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACrB;QAED,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;SACrD;aAAM;YACH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACrB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;;IChKM,IAAM,UAAU,GAAG,UAAC,OAAyB;QAChD,IAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,OAAO,MAAM,CAAC,GAAG,CACb,MAAM,CAAC,eAAe,EACtB,MAAM,CAAC,cAAc,EACrB,EAAE,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC,EACnD,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC,CACtD,CAAC;IACN,CAAC,CAAC;IAEK,IAAM,UAAU,GAAG,UAAC,OAAyB;QAChD,IAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAE9B,IAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,IAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACzE,IAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACrE,IAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAE3E,OAAO,MAAM,CAAC,GAAG,CACb,WAAW,GAAG,MAAM,CAAC,eAAe,EACpC,UAAU,GAAG,MAAM,CAAC,cAAc,EAClC,EAAE,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,eAAe,GAAG,WAAW,GAAG,YAAY,CAAC,EAChF,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,iBAAiB,GAAG,UAAU,GAAG,aAAa,CAAC,CACnF,CAAC;IACN,CAAC;;IClBM,IAAM,kCAAkC,GAAG,UAC9C,gBAAmC,EACnC,OAAyB;QAEzB,IAAI,gBAAgB,yBAAmC;YACnD,OAAO,OAAO,CAAC,MAAM,CAAC;SACzB;QAED,IAAI,gBAAgB,0BAAoC;YACpD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;SAC9B;QAED,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEK,IAAM,+BAA+B,GAAG,UAAC,cAA+B,EAAE,OAAyB;QACtG,IAAI,cAAc,yBAAiC;YAC/C,OAAO,OAAO,CAAC,MAAM,CAAC;SACzB;QAED,IAAI,cAAc,0BAAkC;YAChD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;SAC9B;QAED,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEK,IAAM,4BAA4B,GAAG,UACxC,SAA2B,EAC3B,KAAa,EACb,aAA4D;QAE5D,IAAM,yBAAyB,GAAG,kCAAkC,CAChE,0BAA0B,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,EACpE,SAAS,CACZ,CAAC;QAEF,IAAM,sBAAsB,GAAG,+BAA+B,CAC1D,0BAA0B,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,EAClE,SAAS,CACZ,CAAC;QAEF,IAAM,mBAAmB,GAAG,uBAAuB,CAC/C,0BAA0B,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,EAClE,aAAa,EACb,yBAAyB,CAC5B,CAAC;QAEK,IAAA,SAAS,GAAgB,mBAAmB,GAAnC,EAAE,UAAU,GAAI,mBAAmB,GAAvB,CAAwB;QAEpD,IAAM,QAAQ,GAAG,wBAAwB,CACrC,0BAA0B,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,EACtE,yBAAyB,CAAC,KAAK,GAAG,SAAS,EAC3C,yBAAyB,CAAC,MAAM,GAAG,UAAU,CAChD,CAAC;QAEF,IAAM,IAAI,GAAG,6BAA6B,CACtC,0BAA0B,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,EACpE,QAAQ,EACR,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,CACzB,CAAC;QAEF,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAExE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC3D,CAAC,CAAC;IAEK,IAAM,MAAM,GAAG,UAAC,KAAe,IAAc,OAAA,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,eAAe,CAAC,IAAI,GAAA,CAAC;IAEhH,IAAM,iBAAiB,GAAG,UAAC,KAAoB,IAAsB,OAAA,OAAO,KAAK,KAAK,QAAQ,GAAA,CAAC;IAExF,IAAM,uBAAuB,GAAG,UACnC,IAA0B,EAC1B,EAAqG,EACrG,MAAc;YADb,cAAc,QAAA,EAAE,eAAe,QAAA,EAAE,mBAAmB,QAAA;QAG9C,IAAA,KAAK,GAAY,IAAI,GAAhB,EAAE,MAAM,GAAI,IAAI,GAAR,CAAS;QAE7B,IAAI,CAAC,KAAK,EAAE;YACR,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACjB;QAED,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAI,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE;YACnE,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;SAC3F;QAED,IAAM,sBAAsB,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;QAEtE,IAAI,YAAY,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,KAAK,eAAe,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,eAAe,CAAC,KAAK,CAAC,EAAE;YAC3G,IAAI,iBAAiB,CAAC,mBAAmB,CAAC,EAAE;gBACxC,IAAM,WAAW,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;gBAEjD,OAAO,WAAW,GAAG,mBAAmB,MAAM,KAAK,CAAC,KAAK,KAAK,eAAe,CAAC,KAAK,CAAC;sBAC9E,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC;sBAClD,CAAC,MAAM,CAAC,MAAM,GAAG,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;aAC9D;YAED,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;SACxC;QAED,IAAM,iBAAiB,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAC5D,IAAM,kBAAkB,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAC9D,IAAM,sBAAsB,GAAG,iBAAiB,IAAI,kBAAkB,CAAC;;QAGvE,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE;;YAE9C,IAAI,iBAAiB,IAAI,kBAAkB,EAAE;gBACzC,OAAO,CAAC,cAAwB,EAAE,eAAyB,CAAC,CAAC;aAChE;;;YAKD,IAAI,CAAC,sBAAsB,IAAI,CAAC,sBAAsB,EAAE;gBACpD,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;aACxC;;;;YAMD,IAAI,sBAAsB,IAAI,sBAAsB,EAAE;gBAClD,IAAM,OAAK,GAAG,iBAAiB;sBACxB,cAAyB;sBACzB,eAA0B,GAAI,mBAA8B,CAAC;gBACpE,IAAM,QAAM,GAAG,kBAAkB;sBAC1B,eAA0B;sBAC1B,cAAyB,GAAI,mBAA8B,CAAC;gBACnE,OAAO,CAAC,OAAK,EAAE,QAAM,CAAC,CAAC;aAC1B;;;YAID,IAAM,OAAK,GAAG,iBAAiB,GAAI,cAAyB,GAAG,MAAM,CAAC,KAAK,CAAC;YAC5E,IAAM,QAAM,GAAG,kBAAkB,GAAI,eAA0B,GAAG,MAAM,CAAC,MAAM,CAAC;YAChF,OAAO,CAAC,OAAK,EAAE,QAAM,CAAC,CAAC;SAC1B;;;QAID,IAAI,sBAAsB,EAAE;YACxB,IAAI,OAAK,GAAG,CAAC,CAAC;YACd,IAAI,QAAM,GAAG,CAAC,CAAC;YACf,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBAC3B,OAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;aACjD;iBAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE;gBACnC,QAAM,GAAG,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;aACpD;YAED,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;gBACf,OAAK,GAAG,QAAM,GAAI,mBAA8B,CAAC;aACpD;iBAAM,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE;gBAClC,QAAM,GAAG,OAAK,GAAI,mBAA8B,CAAC;aACpD;YAED,OAAO,CAAC,OAAK,EAAE,QAAM,CAAC,CAAC;SAC1B;;;;;QAOD,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,MAAM,GAAG,IAAI,CAAC;QAElB,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE;YAC3B,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;SACjD;aAAM,IAAI,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE;YAC7C,MAAM,GAAG,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;SACpD;QAED,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE;YAC/C,MAAM;gBACF,iBAAiB,IAAI,kBAAkB;sBACjC,CAAC,KAAK,GAAI,cAAyB,IAAK,eAA0B;sBAClE,MAAM,CAAC,MAAM,CAAC;SAC3B;QAED,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;YAClC,KAAK;gBACD,iBAAiB,IAAI,kBAAkB;sBACjC,CAAC,MAAM,GAAI,eAA0B,IAAK,cAAyB;sBACnE,MAAM,CAAC,KAAK,CAAC;SAC1B;QAED,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE;YACnC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;SAC1B;QAED,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACvE,CAAC,CAAC;IAEK,IAAM,0BAA0B,GAAG,UAAI,MAAW,EAAE,KAAa;QACpE,IAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;YAC9B,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;SACpB;QAED,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;IAEK,IAAM,6BAA6B,GAAG,UACzC,MAAyB,EACzB,EAAwB,EACxB,EAAiC,EACjC,yBAAiC,EACjC,sBAA8B;YAH7B,CAAC,QAAA,EAAE,CAAC,QAAA;YACJ,KAAK,QAAA,EAAE,MAAM,QAAA;QAId,QAAQ,MAAM;YACV;gBACI,OAAO;oBACH,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACrG,IAAI,MAAM,CACN,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,GAAG,yBAAyB,CAAC,KAAK,CAAC,EAC5E,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,GAAG,GAAG,CAAC,CAAC,CAChD;oBACD,IAAI,MAAM,CACN,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,GAAG,yBAAyB,CAAC,KAAK,CAAC,EAC5E,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,yBAAyB,CAAC,GAAG,GAAG,CAAC,CAAC,CACzD;oBACD,IAAI,MAAM,CACN,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,yBAAyB,CAAC,GAAG,GAAG,CAAC,CAAC,CACzD;iBACJ,CAAC;YACN;gBACI,OAAO;oBACH,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC;oBACrG,IAAI,MAAM,CACN,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,EACtD,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAC5C;oBACD,IAAI,MAAM,CACN,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,EACtD,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAC/E;oBACD,IAAI,MAAM,CACN,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,GAAG,CAAC,CAAC,EAC9C,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAC/E;iBACJ,CAAC;YACN;gBACI,OAAO;oBACH,IAAI,MAAM,CACN,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,GAAG,CAAC,CAAC,EAC9C,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,GAAG,GAAG,CAAC,CAAC,CAChD;oBACD,IAAI,MAAM,CACN,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,EACtD,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,GAAG,GAAG,CAAC,CAAC,CAChD;oBACD,IAAI,MAAM,CACN,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,EACtD,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,CACzD;oBACD,IAAI,MAAM,CACN,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,GAAG,CAAC,CAAC,EAC9C,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,CACzD;iBACJ,CAAC;YACN;gBACI,OAAO;oBACH,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;oBAC3F,IAAI,MAAM,CACN,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,EACtE,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,GAAG,CAAC,CACzC;oBACD,IAAI,MAAM,CACN,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,EACtE,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,GAAG,sBAAsB,CAAC,GAAG,CAAC,CACzE;oBACD,IAAI,MAAM,CACN,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,EACvC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,GAAG,sBAAsB,CAAC,GAAG,CAAC,CACzE;iBACJ,CAAC;SACT;IACL,CAAC;;ICtSM,IAAM,WAAW,GAAG,gFAAgF;;ICM3G,IAAM,WAAW,GAAG,aAAa,CAAC;IAElC;QAII,qBAAY,QAAkB;YAC1B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;SAC7B;QAEO,kCAAY,GAApB,UAAqB,UAAkB,EAAE,QAAgB;YACrD,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACtD,IAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAChD,IAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAElD,IAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAuB,CAAC;YAEpD,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;YACtC,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;YACxC,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACpC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;YAC7B,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;YAC9B,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;YAEtC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAE5B,GAAG,CAAC,GAAG,GAAG,WAAW,CAAC;YACtB,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;YACd,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YAEf,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;YACvB,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;YACxB,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC;YAErC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;YAEzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;YAC7D,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC5B,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YAEpD,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC5B,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;YAElE,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;YACtC,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC;YAElC,IAAM,MAAM,GAAG,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;YAEvD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAE5B,OAAO,EAAC,QAAQ,UAAA,EAAE,MAAM,QAAA,EAAC,CAAC;SAC7B;QACD,gCAAU,GAAV,UAAW,UAAkB,EAAE,QAAgB;YAC3C,IAAM,GAAG,GAAM,UAAU,SAAI,QAAU,CAAC;YACxC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE;gBACxC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;aAC7D;YAED,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SAC1B;QACL,kBAAC;IAAD,CAAC;;ICpED;QACI,kBAA+B,OAAgB,EAAqB,OAA6B;YAAlE,YAAO,GAAP,OAAO,CAAS;YAAqB,YAAO,GAAP,OAAO,CAAsB;SAAI;QACzG,eAAC;IAAD,CAAC;;ICuDD,IAAM,WAAW,GAAG,KAAK,CAAC;IAE1B;QAAoC,kCAAQ;QAMxC,wBAAY,OAAgB,EAAE,OAA6B;YAA3D,YACI,kBAAM,OAAO,EAAE,OAAO,CAAC,SAiB1B;YArBgB,oBAAc,GAAqB,EAAE,CAAC;YAKnD,KAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACjF,KAAI,CAAC,GAAG,GAAG,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAA6B,CAAC;YACpE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACjB,KAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC9D,KAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;gBAChE,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAM,OAAO,CAAC,KAAK,OAAI,CAAC;gBAC/C,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAM,OAAO,CAAC,MAAM,OAAI,CAAC;aACpD;YACD,KAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC7C,KAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACvD,KAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC3C,KAAI,CAAC,GAAG,CAAC,YAAY,GAAG,QAAQ,CAAC;YACjC,KAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACrB,kCAAgC,OAAO,CAAC,KAAK,SAAI,OAAO,CAAC,MAAM,qBAAgB,OAAO,CAAC,KAAO,CACjG,CAAC;;SACL;QAED,qCAAY,GAAZ,UAAa,OAAyB;YAAtC,iBAMC;YALG,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;gBAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;aACpB;YAED,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM,IAAK,OAAA,KAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAA,CAAC,CAAC;SACzD;QAED,oCAAW,GAAX,UAAY,MAAsB;YAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAChB,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE;gBACzB,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;aACzC;YAED,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE;gBAC3B,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBACnD,IAAI,CAAC,GAAG,CAAC,SAAS,CACd,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAChB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAChB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAChB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAChB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAChB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CACnB,CAAC;gBACF,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;aACxD;YAED,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;gBACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;aACnB;YAED,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACpC;QAED,kCAAS,GAAT;YACI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SACtB;QAEK,oCAAW,GAAjB,UAAkB,KAAsB;;;;;;4BAC9B,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;iCAC1C,MAAM,CAAC,SAAS,EAAE,EAAlB,wBAAkB;4BAClB,qBAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAA;;4BAApC,SAAoC,CAAC;;;;;;SAE5C;QAEK,mCAAU,GAAhB,UAAiB,KAAmB;;;;;4BAChC,IAAI,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,wBAAqB,EAAE;gCACrD,SAAS;6BACZ;iCAEG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,EAAlC,wBAAkC;4BAClC,qBAAM,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,EAAA;;4BAAhD,SAAgD,CAAC;4BACjD,qBAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAA;;4BAAnC,SAAmC,CAAC;;;;;;SAE3C;QAED,oDAA2B,GAA3B,UAA4B,IAAgB,EAAE,aAAqB,EAAE,QAAgB;YAArF,iBAWC;YAVG,IAAI,aAAa,KAAK,CAAC,EAAE;gBACrB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC;aAC9E;iBAAM;gBACH,IAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,OAAO,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,MAAM;oBACxB,KAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC;oBAE5D,OAAO,IAAI,GAAG,KAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;iBACpD,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aACxB;SACJ;QAEO,wCAAe,GAAvB,UAAwB,MAA4B;YAChD,IAAM,WAAW,GAAG,MAAM,CAAC,WAAW;iBACjC,MAAM,CAAC,UAAC,OAAO,IAAK,OAAA,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,YAAY,GAAA,CAAC;iBACrE,IAAI,CAAC,EAAE,CAAC,CAAC;YACd,IAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnE,IAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC;kBAC5C,KAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAM;kBAC/C,MAAM,CAAC,QAAQ,CAAC,MAAM,OAAI,CAAC;YAEpC,OAAO;gBACH,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBAClF,UAAU;gBACV,QAAQ;aACX,CAAC;SACL;QAEK,uCAAc,GAApB,UAAqB,IAAmB,EAAE,MAA4B;;;;;oBAC5D,KAA+B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAA1D,IAAI,QAAA,EAAE,UAAU,QAAA,EAAE,QAAQ,QAAA,CAAiC;oBAElE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;oBAErB,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,mBAAqB,KAAK,GAAG,KAAK,CAAC;oBACxE,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC;oBAC5B,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,YAAY,CAAC;oBAC/B,KAAqB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,EAArE,QAAQ,cAAA,EAAE,MAAM,YAAA,CAAsD;oBACvE,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;oBAErC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,IAAI;wBACzB,UAAU,CAAC,OAAO,CAAC,UAAC,eAAe;4BAC/B,QAAQ,eAAe;gCACnB;oCACI,KAAI,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oCAC5C,KAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;oCACvE,IAAM,WAAW,GAAe,MAAM,CAAC,UAAU,CAAC;oCAElD,IAAI,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;wCAC/C,WAAW;6CACN,KAAK,CAAC,CAAC,CAAC;6CACR,OAAO,EAAE;6CACT,OAAO,CAAC,UAAC,UAAU;4CAChB,KAAI,CAAC,GAAG,CAAC,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;4CAClD,KAAI,CAAC,GAAG,CAAC,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC;4CACxE,KAAI,CAAC,GAAG,CAAC,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC;4CACxE,KAAI,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;4CAE7C,KAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;yCAC1E,CAAC,CAAC;wCAEP,KAAI,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC;wCAC1B,KAAI,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC;wCAC3B,KAAI,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC;wCAC3B,KAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;qCAC3B;oCAED,IAAI,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE;wCAClC,KAAI,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;wCAC1E,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAC,kBAAkB;4CACjD,QAAQ,kBAAkB;gDACtB;;;;oDAII,KAAI,CAAC,GAAG,CAAC,QAAQ,CACb,IAAI,CAAC,MAAM,CAAC,IAAI,EAChB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,QAAQ,CAAC,EACtC,IAAI,CAAC,MAAM,CAAC,KAAK,EACjB,CAAC,CACJ,CAAC;oDAEF,MAAM;gDACV;oDACI,KAAI,CAAC,GAAG,CAAC,QAAQ,CACb,IAAI,CAAC,MAAM,CAAC,IAAI,EAChB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,EACjB,CAAC,CACJ,CAAC;oDACF,MAAM;gDACV;;oDAEI,KAAI,CAAC,GAAG,CAAC,QAAQ,CACb,IAAI,CAAC,MAAM,CAAC,IAAI,EAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,EACnC,IAAI,CAAC,MAAM,CAAC,KAAK,EACjB,CAAC,CACJ,CAAC;oDACF,MAAM;6CACb;yCACJ,CAAC,CAAC;qCACN;oCACD,MAAM;gCACV;oCACI,IAAI,MAAM,CAAC,qBAAqB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;wCACzD,KAAI,CAAC,GAAG,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;wCAC9D,KAAI,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,qBAAqB,CAAC;;wCAElD,KAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAE,MAAc,CAAC,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;wCACjE,KAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC;qCAChF;oCACD,KAAI,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC;oCAC1B,KAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;oCACvB,KAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC;oCAC5B,MAAM;6BACb;yBACJ,CAAC,CAAC;qBACN,CAAC,CAAC;;;;SACN;QAED,8CAAqB,GAArB,UACI,SAAmC,EACnC,MAAmB,EACnB,KAA2C;YAE3C,IAAI,KAAK,IAAI,SAAS,CAAC,cAAc,GAAG,CAAC,IAAI,SAAS,CAAC,eAAe,GAAG,CAAC,EAAE;gBACxE,IAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;gBAClC,IAAM,IAAI,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;gBAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAChB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAChB,IAAI,CAAC,GAAG,CAAC,SAAS,CACd,KAAK,EACL,CAAC,EACD,CAAC,EACD,SAAS,CAAC,cAAc,EACxB,SAAS,CAAC,eAAe,EACzB,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,CACb,CAAC;gBACF,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;aACtB;SACJ;QAEK,0CAAiB,GAAvB,UAAwB,KAAmB;;;;;;4BACvC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,iBAAsB,CAAC,CAAC;4BACpD,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;4BAC5B,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;4BACtB,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;kCACO,EAAnB,KAAA,SAAS,CAAC,SAAS;;;kCAAnB,cAAmB,CAAA;4BAA5B,KAAK;4BACZ,qBAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAAA;;4BAAxC,SAAwC,CAAC;;;4BADzB,IAAmB,CAAA;;;kCAInC,SAAS,YAAY,qBAAqB,CAAA,EAA1C,wBAA0C;;;;4BAExB,qBAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAA;;4BAArD,KAAK,GAAG,SAA6C;4BAC3D,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;;;;4BAErD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAuB,SAAS,CAAC,GAAK,CAAC,CAAC;;;4BAI1E,IAAI,SAAS,YAAY,sBAAsB,EAAE;gCAC7C,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;6BACnE;kCAEG,SAAS,YAAY,mBAAmB,CAAA,EAAxC,yBAAwC;;;;4BAEtB,qBAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAA;;4BAArD,KAAK,GAAG,SAA6C;4BAC3D,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;;;;4BAErD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAqB,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAG,CAAC,CAAC;;;kCAItF,SAAS,YAAY,sBAAsB,IAAI,SAAS,CAAC,IAAI,CAAA,EAA7D,yBAA6D;4BACvD,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE;gCACpD,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;gCACzB,eAAe,EAAE,SAAS,CAAC,eAAe;gCAC1C,CAAC,EAAE,CAAC;gCACJ,CAAC,EAAE,CAAC;gCACJ,KAAK,EAAE,SAAS,CAAC,KAAK;gCACtB,MAAM,EAAE,SAAS,CAAC,MAAM;6BAC3B,CAAC,CAAC;4BAEY,qBAAM,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAA;;4BAApD,MAAM,GAAG,SAA2C;4BAC1D,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE;gCACrC,IAAI,CAAC,GAAG,CAAC,SAAS,CACd,MAAM,EACN,CAAC,EACD,CAAC,EACD,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,MAAM,CAAC,IAAI,EACrB,SAAS,CAAC,MAAM,CAAC,GAAG,EACpB,SAAS,CAAC,MAAM,CAAC,KAAK,EACtB,SAAS,CAAC,MAAM,CAAC,MAAM,CAC1B,CAAC;6BACL;;;4BAGL,IAAI,SAAS,YAAY,qBAAqB,EAAE;gCACtC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gCAEvE,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE;oCAC7B,IAAI,SAAS,CAAC,OAAO,EAAE;wCACnB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;wCAChB,IAAI,CAAC,IAAI,CAAC;4CACN,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;4CACtF,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC;4CACrF,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,OAAO,CAAC;4CACzF,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC;4CACxF,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;4CACtF,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,OAAO,CAAC;4CACtF,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;yCACzF,CAAC,CAAC;wCAEH,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;wCAC3C,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;wCAChB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;qCACtB;iCACJ;qCAAM,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE;oCACjC,IAAI,SAAS,CAAC,OAAO,EAAE;wCACnB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;wCAChB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;wCACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CACR,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,EAChC,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,EAC/B,IAAI,GAAG,CAAC,EACR,CAAC,EACD,IAAI,CAAC,EAAE,GAAG,CAAC,EACX,IAAI,CACP,CAAC;wCACF,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;wCAC3C,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;wCAChB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;qCACtB;iCACJ;6BACJ;4BAED,IAAI,kBAAkB,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE;gCACnD,KAAyB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAApD,UAAU,QAAA,EAAE,QAAQ,QAAA,CAAiC;gCACrD,QAAQ,GAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,SAArD,CAAsD;gCAErE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC;gCAC3B,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gCAE5C,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,YAAY,CAAC;gCACrC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gCAE3D,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;gCAEjC,CAAC,GAAG,CAAC,CAAC;gCAEV,QAAQ,SAAS,CAAC,MAAM,CAAC,SAAS;oCAC9B;wCACI,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;wCACtB,MAAM;oCACV;wCACI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC;wCAClB,MAAM;iCACb;gCAEK,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gCAE/D,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gCAChB,IAAI,CAAC,IAAI,CAAC;oCACN,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC;oCACnC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;oCAClD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;oCAClE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;iCACtD,CAAC,CAAC;gCAEH,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gCAChB,IAAI,CAAC,2BAA2B,CAC5B,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,EAC3C,MAAM,CAAC,aAAa,EACpB,QAAQ,CACX,CAAC;gCACF,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;gCACnB,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,YAAY,CAAC;gCACrC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC;6BAC/B;iCAEG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,uBAAoB,EAArD,yBAAqD;kCACjD,SAAS,CAAC,MAAM,CAAC,cAAc,KAAK,IAAI,CAAA,EAAxC,yBAAwC;4BAClC,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;kCACxC,GAAG,CAAC,IAAI,iBAAqB,EAA7B,yBAA6B;4BACzB,KAAK,SAAA,CAAC;4BACJ,GAAG,GAAI,GAAmB,CAAC,GAAG,CAAC;;;;4BAEzB,qBAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAA;;4BAA3C,KAAK,GAAG,SAAmC,CAAC;4BAC5C,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;;;4BAE5F,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAkC,GAAK,CAAC,CAAC;;;;4BAGxE,IAAI,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC,aAAa,oBAA2B;gCAC5E,UAAU,GAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAhC,CAAiC;gCAElD,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC;gCAC3B,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gCAE5C,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,QAAQ,CAAC;gCACjC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC;gCACvB,MAAM,GAAG,IAAI,MAAM,CACrB,SAAS,CAAC,MAAM,CAAC,IAAI,EACrB,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5F,SAAS,CAAC,MAAM,CAAC,KAAK,EACtB,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CACvE,CAAC;gCAEF,IAAI,CAAC,2BAA2B,CAC5B,IAAI,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,EACvC,MAAM,CAAC,aAAa,EACpB,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CACvE,CAAC;gCACF,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,QAAQ,CAAC;gCACjC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC;6BAC/B;;;;;;SAER;QAEK,2CAAkB,GAAxB,UAAyB,KAAsB;;;;;;4BAC3C,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,wBAAqB,EAAE;gCAC7D,SAAS;6BACZ;;;4BAGD,qBAAM,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,OAAO,CAAC,EAAA;;;;4BAAxD,SAAwD,CAAC;kCAEjB,EAApB,KAAA,KAAK,CAAC,cAAc;;;kCAApB,cAAoB,CAAA;4BAA7B,KAAK;4BACZ,qBAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAA;;4BAA7B,SAA6B,CAAC;;;4BADd,IAAoB,CAAA;;;;wBAIxC,qBAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAA;;;4BAA3C,SAA2C,CAAC;kCAEJ,EAApB,KAAA,KAAK,CAAC,cAAc;;;kCAApB,cAAoB,CAAA;4BAA7B,KAAK;4BACZ,qBAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAA;;4BAA5B,SAA4B,CAAC;;;4BADb,IAAoB,CAAA;;;kCAOK,EAAzB,KAAA,KAAK,CAAC,mBAAmB;;;kCAAzB,cAAyB,CAAA;4BAAlC,KAAK;4BACZ,qBAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAA;;4BAA7B,SAA6B,CAAC;;;4BADd,IAAyB,CAAA;;;kCAIK,EAA9B,KAAA,KAAK,CAAC,wBAAwB;;;kCAA9B,cAA8B,CAAA;4BAAvC,KAAK;4BACZ,qBAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAA;;4BAA7B,SAA6B,CAAC;;;4BADd,IAA8B,CAAA;;;kCAGb,EAAjB,KAAA,KAAK,CAAC,WAAW;;;kCAAjB,cAAiB,CAAA;4BAA1B,KAAK;4BACZ,qBAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAA;;4BAA5B,SAA4B,CAAC;;;4BADb,IAAiB,CAAA;;;kCAa2B,EAA5C,KAAA,KAAK,CAAC,sCAAsC;;;kCAA5C,cAA4C,CAAA;4BAArD,KAAK;4BACZ,qBAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAA;;4BAA7B,SAA6B,CAAC;;;4BADd,IAA4C,CAAA;;;kCAKxB,EAApB,KAAA,KAAK,CAAC,cAAc;;;kCAApB,cAAoB,CAAA;4BAA7B,KAAK;4BACZ,qBAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAA;;4BAA7B,SAA6B,CAAC;;;4BADd,IAAoB,CAAA;;;;;;SAG3C;QAED,6BAAI,GAAJ,UAAK,KAAa;YACd,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;SACxB;QAED,6BAAI,GAAJ,UAAK,KAAa;YACd,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;SACxB;QAED,mCAAU,GAAV,UAAW,KAAa;YAAxB,iBAoBC;YAnBG,KAAK,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,KAAK;gBACvB,IAAM,KAAK,GAAW,aAAa,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;gBACjE,IAAI,KAAK,KAAK,CAAC,EAAE;oBACb,KAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;iBACrC;qBAAM;oBACH,KAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;iBACrC;gBAED,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;oBACtB,KAAI,CAAC,GAAG,CAAC,aAAa,CAClB,KAAK,CAAC,YAAY,CAAC,CAAC,EACpB,KAAK,CAAC,YAAY,CAAC,CAAC,EACpB,KAAK,CAAC,UAAU,CAAC,CAAC,EAClB,KAAK,CAAC,UAAU,CAAC,CAAC,EAClB,KAAK,CAAC,GAAG,CAAC,CAAC,EACX,KAAK,CAAC,GAAG,CAAC,CAAC,CACd,CAAC;iBACL;aACJ,CAAC,CAAC;SACN;QAED,qCAAY,GAAZ,UAAa,IAAY,EAAE,OAAuC,EAAE,OAAe,EAAE,OAAe;YAChG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;SAC1C;QAED,oCAAW,GAAX,UAAY,KAAuB,EAAE,KAAa,EAAE,MAAc;;YAC9D,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;gBAClD,OAAO,KAAK,CAAC;aAChB;YAED,IAAM,aAAa,GAAG,MAAA,IAAI,CAAC,MAAM,CAAC,aAAa,mCAAI,QAAQ,CAAC;YAC5D,IAAM,MAAM,GAAG,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACrD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACpC,IAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAA6B,CAAC;YAChE,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC3E,OAAO,MAAM,CAAC;SACjB;QAEK,8CAAqB,GAA3B,UAA4B,SAA2B;;;;;;4BAC/C,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;gDAC7C,eAAe;;;;;kDAClB,eAAe,CAAC,IAAI,iBAAqB,EAAzC,wBAAyC;4CACrC,KAAK,SAAA,CAAC;4CACJ,GAAG,GAAI,eAA+B,CAAC,GAAG,CAAC;;;;4CAErC,qBAAM,OAAK,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAA;;4CAA3C,KAAK,GAAG,SAAmC,CAAC;;;;4CAE5C,OAAK,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAkC,GAAK,CAAC,CAAC;;;4CAGvE,IAAI,KAAK,EAAE;gDACD,KAA8B,4BAA4B,CAAC,SAAS,EAAE,KAAK,EAAE;oDAC/E,KAAK,CAAC,KAAK;oDACX,KAAK,CAAC,MAAM;oDACZ,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM;iDAC7B,CAAC,EAJK,IAAI,QAAA,EAAE,CAAC,QAAA,EAAE,CAAC,QAAA,EAAE,KAAK,QAAA,EAAE,MAAM,QAAA,CAI7B;gDACG,OAAO,GAAG,OAAK,GAAG,CAAC,aAAa,CAClC,OAAK,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EACtC,QAAQ,CACM,CAAC;gDACnB,OAAK,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;6CAC1C;;;4CACE,IAAI,gBAAgB,CAAC,eAAe,CAAC,EAAE;gDACpC,KAA8B,4BAA4B,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EAA/F,IAAI,QAAA,EAAE,CAAC,QAAA,EAAE,CAAC,QAAA,EAAE,KAAK,QAAA,EAAE,MAAM,QAAA,CAAuE;gDACjG,KAA+B,0BAA0B,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAA9F,UAAU,QAAA,EAAE,EAAE,QAAA,EAAE,EAAE,QAAA,EAAE,EAAE,QAAA,EAAE,EAAE,QAAA,CAAqE;gDAEhG,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gDAChD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;gDACrB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;gDACjB,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAA6B,CAAC;gDAC1D,aAAW,GAAG,CAAC,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gDAE1D,iBAAiB,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,UAAC,SAAS;oDACnE,OAAA,UAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;iDAAA,CACnE,CAAC;gDAEF,GAAG,CAAC,SAAS,GAAG,UAAQ,CAAC;gDACzB,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gDAClC,IAAI,KAAK,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;oDACnB,OAAO,GAAG,OAAK,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAkB,CAAC;oDAC1E,OAAK,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;iDAC1C;6CACJ;iDAAM,IAAI,gBAAgB,CAAC,eAAe,CAAC,EAAE;gDACpC,KAAmC,4BAA4B,CAAC,SAAS,EAAE,KAAK,EAAE;oDACpF,IAAI;oDACJ,IAAI;oDACJ,IAAI;iDACP,CAAC,EAJK,IAAI,QAAA,EAAE,IAAI,QAAA,EAAE,aAAG,EAAE,KAAK,QAAA,EAAE,MAAM,QAAA,CAIlC;gDACG,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC;gDAC9F,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gDACzC,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gDAE5D,KAAW,eAAe,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAA/D,EAAE,QAAA,EAAE,EAAE,QAAA,CAA0D;gDACvE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;oDACZ,mBAAiB,OAAK,GAAG,CAAC,oBAAoB,CAAC,IAAI,GAAG,CAAC,EAAE,KAAG,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;oDAElG,iBAAiB,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,UAAC,SAAS;wDAC/D,OAAA,gBAAc,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;qDAAA,CACzE,CAAC;oDAEF,OAAK,IAAI,CAAC,IAAI,CAAC,CAAC;oDAChB,OAAK,GAAG,CAAC,SAAS,GAAG,gBAAc,CAAC;oDACpC,IAAI,EAAE,KAAK,EAAE,EAAE;wDAEL,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;wDAC5D,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;wDAC5D,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;wDACZ,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;wDAEnB,OAAK,GAAG,CAAC,IAAI,EAAE,CAAC;wDAChB,OAAK,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;wDAC/B,OAAK,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wDACrC,OAAK,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;wDAEjC,OAAK,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,KAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;wDAC1E,OAAK,GAAG,CAAC,OAAO,EAAE,CAAC;qDACtB;yDAAM;wDACH,OAAK,GAAG,CAAC,IAAI,EAAE,CAAC;qDACnB;iDACJ;6CACJ;;;4CACD,KAAK,EAAE,CAAC;;;;;;kCAjFqE,EAAnD,KAAA,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;;;kCAAnD,cAAmD,CAAA;4BAAtE,eAAe;0DAAf,eAAe;;;;;4BAAI,IAAmD,CAAA;;;;;;SAmFpF;QAEK,0CAAiB,GAAvB,UAAwB,KAAY,EAAE,IAAY,EAAE,WAAwB;;;oBACxE,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;oBACjD,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACrC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;;;;SACnB;QAEK,2CAAkB,GAAxB,UAAyB,KAAY,EAAE,KAAa,EAAE,IAAY,EAAE,WAAwB;;;;;;kCACpF,KAAK,GAAG,CAAC,CAAA,EAAT,wBAAS;4BACT,qBAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,EAAA;;4BAAtD,SAAsD,CAAC;4BACvD,sBAAO;;4BAGL,UAAU,GAAG,6BAA6B,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;4BACpE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;4BACtB,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;4BACrC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;4BACV,UAAU,GAAG,6BAA6B,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;4BACpE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;4BACtB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;;;;;SACnB;QAEK,uDAA8B,GAApC,UAAqC,KAAmB;;;;;;;4BACpD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,4BAAiC,CAAC,CAAC;4BAC/D,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;4BAChC,aAAa,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC;4BAExF,OAAO,GAAG;gCACZ,EAAC,KAAK,EAAE,MAAM,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,cAAc,EAAC;gCAC1F,EAAC,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAE,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAE,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAC;gCAChG,EAAC,KAAK,EAAE,MAAM,CAAC,iBAAiB,EAAE,KAAK,EAAE,MAAM,CAAC,iBAAiB,EAAE,KAAK,EAAE,MAAM,CAAC,iBAAiB,EAAC;gCACnG,EAAC,KAAK,EAAE,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,CAAC,eAAe,EAAC;6BAChG,CAAC;4BAEI,sBAAsB,GAAG,qCAAqC,CAChE,0BAA0B,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,EACpD,KAAK,CAAC,MAAM,CACf,CAAC;kCAEE,aAAa,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAA,EAAxC,wBAAwC;4BACxC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;4BAChB,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;4BAClC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;4BAEhB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE;gCACxC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;gCACtD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;6BACnB;4BAED,qBAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAA;;4BAAjD,SAAiD,CAAC;4BAElD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;4BAEnB,MAAM,CAAC,SAAS;iCACX,KAAK,CAAC,CAAC,CAAC;iCACR,OAAO,EAAE;iCACT,OAAO,CAAC,UAAC,MAAM;gCACZ,KAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gCAChB,IAAM,aAAa,GAAG,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gCAC3D,IAAM,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,WAAW,CAAC;gCAClD,IAAM,kBAAkB,GAAG,aAAa,CACpC,aAAa,EACb,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAC5D,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAC9C,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAC9C,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CACjD,CAAC;gCAEF,IAAI,MAAM,CAAC,KAAK,EAAE;oCACd,KAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oCACzB,KAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;oCAChB,KAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;iCACjC;qCAAM;oCACH,KAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oCACzB,KAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;oCAChB,KAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;iCACjC;gCAED,KAAI,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC;gCAC5D,KAAI,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;gCAC/C,KAAI,CAAC,GAAG,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gCAC9C,KAAI,CAAC,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gCACzC,KAAI,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC;gCAE7E,KAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gCAChB,KAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;6BACtB,CAAC,CAAC;;;4BAGP,IAAI,GAAG,CAAC,CAAC;kCACe,EAAP,mBAAO;;;kCAAP,qBAAO,CAAA;4BAAjB,MAAM;kCACT,MAAM,CAAC,KAAK,qBAA0B,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAA,EAAtF,yBAAsF;kCAClF,MAAM,CAAC,KAAK,oBAAwB,EAApC,wBAAoC;4BACpC,qBAAM,IAAI,CAAC,wBAAwB,CAC/B,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,KAAK,EACZ,IAAI,EACJ,KAAK,CAAC,MAAM,iBAEf,EAAA;;4BAND,SAMC,CAAC;;;kCACK,MAAM,CAAC,KAAK,oBAAwB,EAApC,wBAAoC;4BAC3C,qBAAM,IAAI,CAAC,wBAAwB,CAC/B,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,KAAK,EACZ,IAAI,EACJ,KAAK,CAAC,MAAM,iBAEf,EAAA;;4BAND,SAMC,CAAC;;;kCACK,MAAM,CAAC,KAAK,oBAAwB,EAApC,wBAAoC;4BAC3C,qBAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAA;;4BAA7E,SAA6E,CAAC;;gCAE9E,qBAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAA;;4BAA9D,SAA8D,CAAC;;;4BAGvE,IAAI,EAAE,CAAC;;;4BAxBU,IAAO,CAAA;;;;;;SA0B/B;QAEK,iDAAwB,GAA9B,UACI,KAAY,EACZ,KAAa,EACb,IAAY,EACZ,WAAwB,EACxB,KAAmB;;;;oBAEnB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;oBAEV,WAAW,GAAG,wBAAwB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;oBAC1D,QAAQ,GAAG,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;oBAEvD,IAAI,KAAK,qBAA0B;wBAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACpB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;qBACnB;oBAGD,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;wBAC5B,MAAM,GAAI,QAAQ,CAAC,CAAC,CAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC9C,MAAM,GAAI,QAAQ,CAAC,CAAC,CAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;qBACjD;yBAAM;wBACH,MAAM,GAAI,QAAQ,CAAC,CAAC,CAAY,CAAC,CAAC,CAAC;wBACnC,MAAM,GAAI,QAAQ,CAAC,CAAC,CAAY,CAAC,CAAC,CAAC;qBACtC;oBACD,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;wBAC5B,IAAI,GAAI,QAAQ,CAAC,CAAC,CAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;wBAC1C,IAAI,GAAI,QAAQ,CAAC,CAAC,CAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;qBAC7C;yBAAM;wBACH,IAAI,GAAI,QAAQ,CAAC,CAAC,CAAY,CAAC,CAAC,CAAC;wBACjC,IAAI,GAAI,QAAQ,CAAC,CAAC,CAAY,CAAC,CAAC,CAAC;qBACpC;oBAGD,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE;wBAC1B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;qBACpC;yBAAM;wBACH,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;qBACpC;oBAED,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;oBACrB,IAAI,KAAK,qBAA0B;wBAC/B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;qBAChC;yBAAM;wBACH,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;qBACzC;oBAEG,UAAU,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;oBAC/C,WAAW,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC;oBAChD,IAAI,KAAK,qBAA0B;wBAC/B,UAAU,GAAG,KAAK,CAAC;wBACnB,WAAW,GAAG,KAAK,CAAC;qBACvB;oBAEG,WAAW,GAAG,IAAI,CAAC;oBACvB,IAAI,MAAM,IAAI,UAAU,GAAG,CAAC,EAAE;wBAC1B,WAAW,GAAG,KAAK,CAAC;qBACvB;yBAAM,IAAI,MAAM,IAAI,UAAU,GAAG,CAAC,GAAG,WAAW,EAAE;wBACzC,UAAU,GAAG,MAAM,IAAI,CAAC,GAAG,UAAU,GAAG,WAAW,CAAC,CAAC;wBAC3D,UAAU,IAAI,UAAU,CAAC;wBACzB,WAAW,IAAI,UAAU,CAAC;qBAC7B;yBAAM;wBACG,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,WAAW,KAAK,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC;wBACjF,QAAQ,GAAG,CAAC,MAAM,GAAG,cAAc,GAAG,UAAU,KAAK,cAAc,GAAG,CAAC,CAAC,CAAC;wBACzE,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,cAAc,GAAG,CAAC,IAAI,UAAU,IAAI,cAAc,CAAC;wBAC/E,WAAW;4BACP,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,QAAQ,CAAC;kCAC9E,QAAQ;kCACR,QAAQ,CAAC;qBACtB;oBAED,IAAI,WAAW,EAAE;wBACb,IAAI,KAAK,qBAA0B;4BAC/B,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC;yBACvD;6BAAM;4BACH,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;yBACnD;qBACJ;oBAED,IAAI,KAAK,qBAA0B;wBAC/B,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;wBAC3B,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;qBAC9B;yBAAM;wBACH,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC;qBACxC;oBACD,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACvC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;oBAClB,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;;oBAGzB,IAAI,KAAK,qBAA0B;wBAC/B,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;4BACtB,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAgB,CAAC;4BACnC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAgB,CAAC;4BACzC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;4BACrB,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAClG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;yBACrB;wBACD,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;4BACtB,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAgB,CAAC;4BACnC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAgB,CAAC;4BACzC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;4BACrB,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAClG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;yBACrB;qBACJ;oBAED,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;;;;SACtB;QAEK,+BAAM,GAAZ,UAAa,OAAyB;;;;;;4BAClC,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;gCAC9B,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;gCAC5D,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;6BAC9F;4BAEK,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;4BAE7C,qBAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAA;;4BAA7B,SAA6B,CAAC;4BAC9B,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;4BACtB,sBAAO,IAAI,CAAC,MAAM,EAAC;;;;SACtB;QACL,qBAAC;IAAD,CAh1BA,CAAoC,QAAQ,GAg1B3C;IAED,IAAM,kBAAkB,GAAG,UACvB,SAA2B;QAE3B,IAAI,SAAS,YAAY,wBAAwB,EAAE;YAC/C,OAAO,IAAI,CAAC;SACf;aAAM,IAAI,SAAS,YAAY,sBAAsB,EAAE;YACpD,OAAO,IAAI,CAAC;SACf;aAAM,IAAI,SAAS,YAAY,qBAAqB,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC9G,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;IAEF,IAAM,qCAAqC,GAAG,UAAC,IAAqB,EAAE,MAAmB;QACrF,QAAQ,IAAI;YACR;gBACI,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;YAC1C;gBACI,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC;YAC3C,yBAAiC;YACjC;gBACI,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC;SAC9C;IACL,CAAC,CAAC;IAEF,IAAM,eAAe,GAAG,UAAC,SAAqB;QAC1C,QAAQ,SAAS;YACb;gBACI,OAAO,QAAQ,CAAC;YACpB;gBACI,OAAO,OAAO,CAAC;YACnB,kBAAqB;YACrB;gBACI,OAAO,MAAM,CAAC;SACrB;IACL,CAAC,CAAC;IAEF;IACA,IAAM,cAAc,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAEtD,IAAM,iBAAiB,GAAG,UAAC,YAAsB;QAC7C,OAAO,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;cACtD,YAAY,CAAC,MAAM,CAAC,UAAC,UAAU,IAAK,OAAA,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAA,CAAC;cAC9E,YAAY,CAAC;IACvB,CAAC;;ICt7BD;QAA2C,yCAAQ;QAK/C,+BAAY,OAAgB,EAAE,OAA6B;YAA3D,YACI,kBAAM,OAAO,EAAE,OAAO,CAAC,SAc1B;YAbG,KAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACjF,KAAI,CAAC,GAAG,GAAG,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAA6B,CAAC;YACpE,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,KAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9D,KAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAChE,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAM,OAAO,CAAC,KAAK,OAAI,CAAC;YAC/C,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAM,OAAO,CAAC,MAAM,OAAI,CAAC;YAEjD,KAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACvD,KAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC3C,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACrB,sDAAoD,OAAO,CAAC,KAAK,SAAI,OAAO,CAAC,MAAM,YAAO,OAAO,CAAC,CAAC,SAAI,OAAO,CAAC,CAAC,qBAAgB,OAAO,CAAC,KAAO,CAClJ,CAAC;;SACL;QAEK,sCAAM,GAAZ,UAAa,OAAoB;;;;;;4BACvB,GAAG,GAAG,sBAAsB,CAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EACvC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EACxC,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,OAAO,CACV,CAAC;4BAEU,qBAAM,iBAAiB,CAAC,GAAG,CAAC,EAAA;;4BAAlC,GAAG,GAAG,SAA4B;4BAExC,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;gCAC9B,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;gCAC5D,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;6BAC9G;4BAED,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;4BAEpG,sBAAO,IAAI,CAAC,MAAM,EAAC;;;;SACtB;QACL,4BAAC;IAAD,CA1CA,CAA2C,QAAQ,GA0ClD;IAEM,IAAM,iBAAiB,GAAG,UAAC,GAAS;QACvC,OAAA,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YACxB,IAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,GAAG,CAAC,MAAM,GAAG;gBACT,OAAO,CAAC,GAAG,CAAC,CAAC;aAChB,CAAC;YACF,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;YAErB,GAAG,CAAC,GAAG,GAAG,sCAAoC,kBAAkB,CAAC,IAAI,aAAa,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAG,CAAC;SAClH,CAAC;IARF,CAQE;;ICtDN;QAOI,gBAAY,EAA4B;gBAA3B,EAAE,QAAA,EAAE,OAAO,aAAA;YACpB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;SAC3B;;QAGD,sBAAK,GAAL;YAAM,cAAkB;iBAAlB,UAAkB,EAAlB,qBAAkB,EAAlB,IAAkB;gBAAlB,yBAAkB;;YACpB,IAAI,IAAI,CAAC,OAAO,EAAE;;gBAEd,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE;;oBAExF,OAAO,CAAC,KAAK,OAAb,OAAO,iBAAO,IAAI,CAAC,EAAE,EAAK,IAAI,CAAC,OAAO,EAAE,OAAI,GAAK,IAAI,GAAE;iBAC1D;qBAAM;oBACH,IAAI,CAAC,IAAI,OAAT,IAAI,EAAS,IAAI,EAAE;iBACtB;aACJ;SACJ;QAED,wBAAO,GAAP;YACI,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;SAClC;;QAGD,qBAAI,GAAJ;YAAK,cAAkB;iBAAlB,UAAkB,EAAlB,qBAAkB,EAAlB,IAAkB;gBAAlB,yBAAkB;;YACnB,IAAI,IAAI,CAAC,OAAO,EAAE;;gBAEd,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;;oBAEvF,OAAO,CAAC,IAAI,OAAZ,OAAO,iBAAM,IAAI,CAAC,EAAE,EAAK,IAAI,CAAC,OAAO,EAAE,OAAI,GAAK,IAAI,GAAE;iBACzD;aACJ;SACJ;;QAGD,qBAAI,GAAJ;YAAK,cAAkB;iBAAlB,UAAkB,EAAlB,qBAAkB,EAAlB,IAAkB;gBAAlB,yBAAkB;;YACnB,IAAI,IAAI,CAAC,OAAO,EAAE;;gBAEd,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;;oBAEvF,OAAO,CAAC,IAAI,OAAZ,OAAO,iBAAM,IAAI,CAAC,EAAE,EAAK,IAAI,CAAC,OAAO,EAAE,OAAI,GAAK,IAAI,GAAE;iBACzD;qBAAM;oBACH,IAAI,CAAC,IAAI,OAAT,IAAI,EAAS,IAAI,EAAE;iBACtB;aACJ;SACJ;;QAGD,sBAAK,GAAL;YAAM,cAAkB;iBAAlB,UAAkB,EAAlB,qBAAkB,EAAlB,IAAkB;gBAAlB,yBAAkB;;YACpB,IAAI,IAAI,CAAC,OAAO,EAAE;;gBAEd,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE;;oBAExF,OAAO,CAAC,KAAK,OAAb,OAAO,iBAAO,IAAI,CAAC,EAAE,EAAK,IAAI,CAAC,OAAO,EAAE,OAAI,GAAK,IAAI,GAAE;iBAC1D;qBAAM;oBACH,IAAI,CAAC,IAAI,OAAT,IAAI,EAAS,IAAI,EAAE;iBACtB;aACJ;SACJ;QAhEM,gBAAS,GAA4B,EAAE,CAAC;QAiEnD,aAAC;KAlED;;ICIA;QAOI,iBAAY,OAAuB,EAAS,YAAoB;;YAApB,iBAAY,GAAZ,YAAY,CAAQ;YAN/C,iBAAY,GAAG,MAAI,OAAO,CAAC,aAAa,EAAI,CAAC;YAO1D,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,EAAC,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAC,CAAC,CAAC;YAC5E,IAAI,CAAC,KAAK,GAAG,MAAA,OAAO,CAAC,KAAK,mCAAI,IAAI,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SAC1D;QALc,qBAAa,GAAG,CAAC,CAAC;QAMrC,cAAC;KAXD;;QCSM,WAAW,GAAG,UAAC,OAAoB,EAAE,OAA8B;QAA9B,wBAAA,EAAA,YAA8B;QACrE,OAAO,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,EAAE;IAIF,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QAC/B,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;KACnC;IAED,IAAM,aAAa,GAAG,UAAO,OAAoB,EAAE,IAAsB;;;;;;oBACrE,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;wBACzC,sBAAO,OAAO,CAAC,MAAM,CAAC,4CAA4C,CAAC,EAAC;qBACvE;oBACK,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;oBAE5C,IAAI,CAAC,aAAa,EAAE;wBAChB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;qBAC5D;oBAEK,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC;oBAE9C,IAAI,CAAC,WAAW,EAAE;wBACd,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;qBAC3D;oBAEK,eAAe,GAAG;wBACpB,UAAU,EAAE,MAAA,IAAI,CAAC,UAAU,mCAAI,KAAK;wBACpC,YAAY,EAAE,MAAA,IAAI,CAAC,YAAY,mCAAI,KAAK;wBACxC,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,OAAO,EAAE,MAAA,IAAI,CAAC,OAAO,mCAAI,KAAK;qBACjC,CAAC;oBAEI,cAAc,cAChB,OAAO,EAAE,MAAA,IAAI,CAAC,OAAO,mCAAI,IAAI,EAC7B,KAAK,EAAE,IAAI,CAAC,KAAK,IACd,eAAe,CACrB,CAAC;oBAEI,aAAa,GAAG;wBAClB,WAAW,EAAE,MAAA,IAAI,CAAC,WAAW,mCAAI,WAAW,CAAC,UAAU;wBACvD,YAAY,EAAE,MAAA,IAAI,CAAC,YAAY,mCAAI,WAAW,CAAC,WAAW;wBAC1D,OAAO,EAAE,MAAA,IAAI,CAAC,OAAO,mCAAI,WAAW,CAAC,WAAW;wBAChD,OAAO,EAAE,MAAA,IAAI,CAAC,OAAO,mCAAI,WAAW,CAAC,WAAW;qBACnD,CAAC;oBAEI,YAAY,GAAG,IAAI,MAAM,CAC3B,aAAa,CAAC,OAAO,EACrB,aAAa,CAAC,OAAO,EACrB,aAAa,CAAC,WAAW,EACzB,aAAa,CAAC,YAAY,CAC7B,CAAC;oBAEI,OAAO,GAAG,IAAI,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;oBAEpD,sBAAsB,GAAG,MAAA,IAAI,CAAC,sBAAsB,mCAAI,KAAK,CAAC;oBAE9D,YAAY,GAAwB;wBACtC,UAAU,EAAE,MAAA,IAAI,CAAC,UAAU,mCAAI,KAAK;wBACpC,OAAO,EAAE,IAAI,CAAC,OAAO;wBACrB,cAAc,EAAE,IAAI,CAAC,cAAc;wBACnC,YAAY,EAAE,sBAAsB;wBACpC,UAAU,EAAE,sBAAsB;qBACrC,CAAC;oBAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,uCAAqC,YAAY,CAAC,KAAK,SACnD,YAAY,CAAC,MAAM,qBACP,CAAC,YAAY,CAAC,IAAI,SAAI,CAAC,YAAY,CAAC,GAAK,CAC5D,CAAC;oBAEI,cAAc,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;oBACpE,aAAa,GAAG,cAAc,CAAC,sBAAsB,CAAC;oBAC5D,IAAI,CAAC,aAAa,EAAE;wBAChB,sBAAO,OAAO,CAAC,MAAM,CAAC,yCAAyC,CAAC,EAAC;qBACpE;oBAEiB,qBAAM,cAAc,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC,EAAA;;oBAAtE,SAAS,GAAG,SAA0D;oBAEtE,KACF,aAAa,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,aAAa,CAAC;0BACtD,iBAAiB,CAAC,aAAa,CAAC,aAAa,CAAC;0BAC9C,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC,EAHtC,KAAK,WAAA,EAAE,MAAM,YAAA,EAAE,IAAI,UAAA,EAAE,GAAG,SAAA,CAGe;oBAExC,eAAe,GAAG,oBAAoB,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;oBAErF,aAAa,GAAyB;wBACxC,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,eAAe,iBAAA;wBACf,KAAK,EAAE,MAAA,MAAA,IAAI,CAAC,KAAK,mCAAI,WAAW,CAAC,gBAAgB,mCAAI,CAAC;wBACtD,CAAC,EAAE,CAAC,MAAA,IAAI,CAAC,CAAC,mCAAI,CAAC,IAAI,IAAI;wBACvB,CAAC,EAAE,CAAC,MAAA,IAAI,CAAC,CAAC,mCAAI,CAAC,IAAI,GAAG;wBACtB,KAAK,EAAE,MAAA,IAAI,CAAC,KAAK,mCAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;wBACrC,MAAM,EAAE,MAAA,IAAI,CAAC,MAAM,mCAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;qBAC3C,CAAC;yBAIE,sBAAsB,EAAtB,wBAAsB;oBACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;oBAClE,QAAQ,GAAG,IAAI,qBAAqB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;oBAC1D,qBAAM,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,EAAA;;oBAA7C,MAAM,GAAG,SAAoC,CAAC;;;oBAE9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,yCAAuC,IAAI,SAAI,GAAG,mBAAc,KAAK,SAAI,MAAM,8BAA2B,CAC7G,CAAC;oBAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;oBACvC,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;oBAE/C,IAAI,eAAe,KAAK,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;wBACjD,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC;qBACpD;oBAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,sCAAoC,aAAa,CAAC,CAAC,SAAI,aAAa,CAAC,CAAC,mBAAc,aAAa,CAAC,KAAK,SAAI,aAAa,CAAC,MAAQ,CACpI,CAAC;oBAEI,QAAQ,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;oBACnD,qBAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAA;;oBAApC,MAAM,GAAG,SAA2B,CAAC;;;oBAGzC,IAAI,MAAA,IAAI,CAAC,eAAe,mCAAI,IAAI,EAAE;wBAC9B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;4BACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;yBACvF;qBACJ;oBAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;oBAC3C,sBAAO,MAAM,EAAC;;;SACjB,CAAC;IAEF,IAAM,oBAAoB,GAAG,UAAC,OAAgB,EAAE,OAAoB,EAAE,uBAAuC;QACzG,IAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;;QAE5C,IAAM,uBAAuB,GAAG,aAAa,CAAC,eAAe;cACvD,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,eAAyB,CAAC;cAC9F,MAAM,CAAC,WAAW,CAAC;QACzB,IAAM,mBAAmB,GAAG,aAAa,CAAC,IAAI;cACxC,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,eAAyB,CAAC;cACnF,MAAM,CAAC,WAAW,CAAC;QAEzB,IAAM,sBAAsB,GACxB,OAAO,uBAAuB,KAAK,QAAQ;cACrC,UAAU,CAAC,OAAO,EAAE,uBAAuB,CAAC;cAC5C,uBAAuB,KAAK,IAAI;kBAChC,MAAM,CAAC,WAAW;kBAClB,UAAU,CAAC;QAErB,OAAO,OAAO,KAAK,aAAa,CAAC,eAAe;cAC1C,aAAa,CAAC,uBAAuB,CAAC;kBAClC,aAAa,CAAC,mBAAmB,CAAC;sBAC9B,sBAAsB;sBACtB,mBAAmB;kBACvB,uBAAuB;cAC3B,sBAAsB,CAAC;IACjC,CAAC;;;;;;;;"}
