{"version":3,"file":"html2canvas.esm.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":"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"}