From 047f6993d34a8c96131d373e0b15bcc49a79479a Mon Sep 17 00:00:00 2001 From: ssamilg Date: Mon, 25 Mar 2024 16:25:19 +0300 Subject: [PATCH 1/7] add html2canvas-pro --- package.json | 1 + src/index.js | 1 + src/worker.js | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 211983f..096622d 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "dependencies": { "es6-promise": "^4.2.5", "html2canvas": "^1.0.0", + "html2canvas-pro": "^1.4.3", "jspdf": "^2.3.1" }, "devDependencies": { diff --git a/src/index.js b/src/index.js index 1b82157..d199efb 100644 --- a/src/index.js +++ b/src/index.js @@ -12,6 +12,7 @@ import './plugin/hyperlinks.js'; * sent as settings to their corresponding functions. */ var html2pdf = function html2pdf(src, opt) { + console.log("---SSG TESTING---"); // Create a new worker with the given options. var worker = new html2pdf.Worker(opt); diff --git a/src/worker.js b/src/worker.js index 336d7b3..b317162 100644 --- a/src/worker.js +++ b/src/worker.js @@ -1,5 +1,6 @@ import { jsPDF } from 'jspdf'; -import * as html2canvas from 'html2canvas'; +// import * as html2canvas from 'html2canvas'; +import * as html2canvas from 'html2canvas-pro'; import { objType, createElement, cloneNode, toPx } from './utils.js'; import es6promise from 'es6-promise'; var Promise = es6promise.Promise; From 7fdb5815befbc0e6248669d1f67ae48be8e060e6 Mon Sep 17 00:00:00 2001 From: ssamilg Date: Mon, 25 Mar 2024 16:32:56 +0300 Subject: [PATCH 2/7] build v0.11.0 --- dist/html2pdf.bundle.js | 12426 ++++++++++++++++++---- dist/html2pdf.bundle.min.js | 2 +- dist/html2pdf.bundle.min.js.LICENSE.txt | 29 +- dist/html2pdf.bundle.min.js.map | 2 +- dist/html2pdf.js | 7983 +++++++++++++- dist/html2pdf.min.js | 2 +- dist/html2pdf.min.js.LICENSE.txt | 33 +- dist/html2pdf.min.js.map | 2 +- package-lock.json | 87 + package.json | 2 +- 10 files changed, 18308 insertions(+), 2260 deletions(-) diff --git a/dist/html2pdf.bundle.js b/dist/html2pdf.bundle.js index 468b442..d01be16 100644 --- a/dist/html2pdf.bundle.js +++ b/dist/html2pdf.bundle.js @@ -1,6 +1,6 @@ /*! * html2pdf.js v0.10.1 - * Copyright (c) 2021 Erik Koopmans + * Copyright (c) 2024 Erik Koopmans * Released under the MIT License. */ (function webpackUniversalModuleDefinition(root, factory) { @@ -1674,8 +1674,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ "./node_modules/core-js/modules/web.dom-collections.for-each.js"); /* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var jspdf__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! jspdf */ "./node_modules/jspdf/dist/jspdf.es.min.js"); -/* harmony import */ var html2canvas__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! html2canvas */ "./node_modules/html2canvas/dist/html2canvas.js"); -/* harmony import */ var html2canvas__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(html2canvas__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var html2canvas_pro__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! html2canvas-pro */ "./node_modules/html2canvas-pro/dist/html2canvas-pro.js"); +/* harmony import */ var html2canvas_pro__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(html2canvas_pro__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils.js */ "./src/utils.js"); /* harmony import */ var es6_promise__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! es6-promise */ "./node_modules/es6-promise/dist/es6-promise.js"); /* harmony import */ var es6_promise__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(es6_promise__WEBPACK_IMPORTED_MODULE_11__); @@ -1687,6 +1687,7 @@ __webpack_require__.r(__webpack_exports__); + // import * as html2canvas from 'html2canvas'; @@ -1867,7 +1868,7 @@ Worker.prototype.toCanvas = function toCanvas() { // Handle old-fashioned 'onrendered' argument. var options = Object.assign({}, this.opt.html2canvas); delete options.onrendered; - return html2canvas__WEBPACK_IMPORTED_MODULE_9__(this.prop.container, options); + return html2canvas_pro__WEBPACK_IMPORTED_MODULE_9__(this.prop.container, options); }).then(function toCanvas_post(canvas) { // Handle old-fashioned 'onrendered' argument. var onRendered = this.opt.html2canvas.onrendered || function () {}; @@ -2448,32 +2449,32 @@ __webpack_require__.r(__webpack_exports__); -/** - * HTML-safe compress white-spaces. - * @param str - String to compress. +/** + * HTML-safe compress white-spaces. + * @param str - String to compress. */ function compressSpaces(str) { return str.replace(/(?!\u3000)\s+/gm, ' '); } -/** - * HTML-safe left trim. - * @param str - String to trim. +/** + * HTML-safe left trim. + * @param str - String to trim. */ function trimLeft(str) { return str.replace(/^[\n \t]+/, ''); } -/** - * HTML-safe right trim. - * @param str - String to trim. +/** + * HTML-safe right trim. + * @param str - String to trim. */ function trimRight(str) { return str.replace(/[\n \t]+$/, ''); } -/** - * String to numbers array. - * @param str - Numbers string. +/** + * String to numbers array. + * @param str - Numbers string. */ function toNumbers(str) { @@ -2482,9 +2483,9 @@ function toNumbers(str) { } // Microsoft Edge fix var allUppercase = /^[A-Z-]+$/; -/** - * Normalize attribute name. - * @param name - Attribute name. +/** + * Normalize attribute name. + * @param name - Attribute name. */ function normalizeAttributeName(name) { @@ -2494,9 +2495,9 @@ function normalizeAttributeName(name) { return name; } -/** - * Parse external URL. - * @param url - CSS url string. +/** + * Parse external URL. + * @param url - CSS url string. */ function parseExternalUrl(url) { @@ -2507,9 +2508,9 @@ function parseExternalUrl(url) { var urlMatch = url.match(/url\(('([^']+)'|"([^"]+)"|([^'"\)]+))\)/) || []; return urlMatch[2] || urlMatch[3] || urlMatch[4]; } -/** - * Transform floats to integers in rgb colors. - * @param color - Color to normalize. +/** + * Transform floats to integers in rgb colors. + * @param color - Color to normalize. */ function normalizeColor(color) { @@ -2542,9 +2543,9 @@ function findSelectorMatch(selector, regex) { return [selector.replace(regex, ' '), matches.length]; } -/** - * Measure selector specificity. - * @param selector - Selector to measure. +/** + * Measure selector specificity. + * @param selector - Selector to measure. */ @@ -2614,22 +2615,22 @@ function getSelectorSpecificity(selector) { } var PSEUDO_ZERO = .00000001; -/** - * Vector magnitude. +/** + * Vector magnitude. */ function vectorMagnitude(v) { return Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2)); } -/** - * Ratio between two vectors. +/** + * Ratio between two vectors. */ function vectorsRatio(u, v) { return (u[0] * v[0] + u[1] * v[1]) / (vectorMagnitude(u) * vectorMagnitude(v)); } -/** - * Angle between two vectors. +/** + * Angle between two vectors. */ function vectorsAngle(u, v) { @@ -4569,8 +4570,8 @@ function prepareFontFamily(fontFamily) { return typeof process === 'undefined' ? fontFamily : _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default()(_context = _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_24___default()(fontFamily).call(fontFamily).split(',')).call(_context, wrapFontFamily).join(','); } -/** - * https://developer.mozilla.org/en-US/docs/Web/CSS/font-style +/** + * https://developer.mozilla.org/en-US/docs/Web/CSS/font-style */ @@ -4598,8 +4599,8 @@ function prepareFontStyle(fontStyle) { return ''; } } -/** - * https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight +/** + * https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight */ @@ -6451,11 +6452,11 @@ var SVGElement = /*#__PURE__*/function (_RenderedElement) { this.document.screen.viewPort.removeCurrent(); } - /** - * Resize SVG to fit in given size. - * @param width - * @param height - * @param preserveAspectRatio + /** + * Resize SVG to fit in given size. + * @param width + * @param height + * @param preserveAspectRatio */ }, { @@ -9970,16 +9971,16 @@ Document.elementTypes = elementTypes; function ownKeys$2(object, enumerableOnly) { var keys = _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_11___default()(object); if ((_babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_10___default())) { var symbols = _babel_runtime_corejs3_core_js_stable_object_get_own_property_symbols__WEBPACK_IMPORTED_MODULE_10___default()(object); if (enumerableOnly) symbols = _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_9___default()(symbols).call(symbols, function (sym) { return _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_8___default()(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context3; _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_7___default()(_context3 = ownKeys$2(Object(source), true)).call(_context3, function (key) { (0,_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_14__.default)(target, key, source[key]); }); } else if ((_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_6___default())) { _babel_runtime_corejs3_core_js_stable_object_define_properties__WEBPACK_IMPORTED_MODULE_5___default()(target, _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_6___default()(source)); } else { var _context4; _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_7___default()(_context4 = ownKeys$2(Object(source))).call(_context4, function (key) { _babel_runtime_corejs3_core_js_stable_object_define_property__WEBPACK_IMPORTED_MODULE_4___default()(target, key, _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_8___default()(source, key)); }); } } return target; } -/** - * SVG renderer on canvas. +/** + * SVG renderer on canvas. */ var Canvg = /*#__PURE__*/function () { - /** - * Main constructor. - * @param ctx - Rendering context. - * @param svg - SVG Document. - * @param options - Rendering options. + /** + * Main constructor. + * @param ctx - Rendering context. + * @param svg - SVG Document. + * @param options - Rendering options. */ function Canvg(ctx, svg) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; @@ -9994,32 +9995,32 @@ var Canvg = /*#__PURE__*/function () { this.document = document; this.documentElement = documentElement; } - /** - * Create Canvg instance from SVG source string or URL. - * @param ctx - Rendering context. - * @param svg - SVG source string or URL. - * @param options - Rendering options. + /** + * Create Canvg instance from SVG source string or URL. + * @param ctx - Rendering context. + * @param svg - SVG source string or URL. + * @param options - Rendering options. */ (0,_babel_runtime_corejs3_helpers_createClass__WEBPACK_IMPORTED_MODULE_16__.default)(Canvg, [{ key: "fork", - /** - * Create new Canvg instance with inherited options. - * @param ctx - Rendering context. - * @param svg - SVG source string or URL. - * @param options - Rendering options. + /** + * Create new Canvg instance with inherited options. + * @param ctx - Rendering context. + * @param svg - SVG source string or URL. + * @param options - Rendering options. */ value: function fork(ctx, svg) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return Canvg.from(ctx, svg, _objectSpread$2(_objectSpread$2({}, this.options), options)); } - /** - * Create new Canvg instance with inherited options. - * @param ctx - Rendering context. - * @param svg - SVG source string. - * @param options - Rendering options. + /** + * Create new Canvg instance with inherited options. + * @param ctx - Rendering context. + * @param svg - SVG source string. + * @param options - Rendering options. */ }, { @@ -10028,8 +10029,8 @@ var Canvg = /*#__PURE__*/function () { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return Canvg.fromString(ctx, svg, _objectSpread$2(_objectSpread$2({}, this.options), options)); } - /** - * Document is ready promise. + /** + * Document is ready promise. */ }, { @@ -10037,8 +10038,8 @@ var Canvg = /*#__PURE__*/function () { value: function ready() { return this.screen.ready(); } - /** - * Document is ready value. + /** + * Document is ready value. */ }, { @@ -10046,9 +10047,9 @@ var Canvg = /*#__PURE__*/function () { value: function isReady() { return this.screen.isReady(); } - /** - * Render only first frame, ignoring animations and mouse. - * @param options - Rendering options. + /** + * Render only first frame, ignoring animations and mouse. + * @param options - Rendering options. */ }, { @@ -10087,9 +10088,9 @@ var Canvg = /*#__PURE__*/function () { return render; }() - /** - * Start rendering. - * @param options - Render options. + /** + * Start rendering. + * @param options - Render options. */ }, { @@ -10103,8 +10104,8 @@ var Canvg = /*#__PURE__*/function () { enableRedraw: true }, baseOptions), options)); } - /** - * Stop rendering. + /** + * Stop rendering. */ }, { @@ -10112,11 +10113,11 @@ var Canvg = /*#__PURE__*/function () { value: function stop() { this.screen.stop(); } - /** - * Resize SVG to fit in given size. - * @param width - * @param height - * @param preserveAspectRatio + /** + * Resize SVG to fit in given size. + * @param width + * @param height + * @param preserveAspectRatio */ }, { @@ -10161,11 +10162,11 @@ var Canvg = /*#__PURE__*/function () { return from; }() - /** - * Create Canvg instance from SVG source string. - * @param ctx - Rendering context. - * @param svg - SVG source string. - * @param options - Rendering options. + /** + * Create Canvg instance from SVG source string. + * @param ctx - Rendering context. + * @param svg - SVG source string. + * @param options - Rendering options. */ }, { @@ -10181,10 +10182,10 @@ var Canvg = /*#__PURE__*/function () { return Canvg; }(); -/** - * Options preset for `OffscreenCanvas`. - * @param config - Preset requirements. - * @param config.DOMParser - XML/HTML parser from string into DOM Document. +/** + * Options preset for `OffscreenCanvas`. + * @param config - Preset requirements. + * @param config.DOMParser - XML/HTML parser from string into DOM Document. */ function offscreen() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, @@ -10239,12 +10240,12 @@ function offscreen() { return preset; } -/** - * Options preset for `node-canvas`. - * @param config - Preset requirements. - * @param config.DOMParser - XML/HTML parser from string into DOM Document. - * @param config.canvas - `node-canvas` exports. - * @param config.fetch - WHATWG-compatible `fetch` function. +/** + * Options preset for `node-canvas`. + * @param config - Preset requirements. + * @param config.DOMParser - XML/HTML parser from string into DOM Document. + * @param config.canvas - `node-canvas` exports. + * @param config.fetch - WHATWG-compatible `fetch` function. */ function node(_ref) { var DOMParser = _ref.DOMParser, @@ -25653,116 +25654,136 @@ function unzipSync(data) { /***/ }), -/***/ "./node_modules/html2canvas/dist/html2canvas.js": -/*!******************************************************!*\ - !*** ./node_modules/html2canvas/dist/html2canvas.js ***! - \******************************************************/ +/***/ "./node_modules/html2canvas-pro/dist/html2canvas-pro.js": +/*!**************************************************************!*\ + !*** ./node_modules/html2canvas-pro/dist/html2canvas-pro.js ***! + \**************************************************************/ /***/ (function(module) { /*! - * html2canvas 1.0.0 - * Copyright (c) 2021 Niklas von Hertzen + * html2canvas-pro 1.4.3 + * Copyright (c) 2024 yorickshan * Released under MIT License */ (function (global, factory) { true ? module.exports = factory() : 0; -}(this, function () { 'use strict'; - - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. All rights reserved. - Licensed under the Apache License, Version 2.0 (the "License"); you may not use - this file except in compliance with the License. You may obtain a copy of the - License at http://www.apache.org/licenses/LICENSE-2.0 - - THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED - WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, - MERCHANTABLITY OR NON-INFRINGEMENT. - - See the Apache Version 2.0 License for specific language governing permissions - and limitations under the License. - ***************************************************************************** */ - /* global Reflect, Promise */ - - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - - function __extends(d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - } - - var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - - function __awaiter(thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - } +}(this, (function () { 'use strict'; - function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - 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; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + + function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + } + + function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + 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; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + } + + function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || from); } var Bounds = /** @class */ (function () { - function Bounds(x, y, w, h) { - this.left = x; - this.top = y; - this.width = w; - this.height = h; + function Bounds(left, top, width, height) { + this.left = left; + this.top = top; + this.width = width; + this.height = height; } Bounds.prototype.add = function (x, y, w, h) { return new Bounds(this.left + x, this.top + y, this.width + w, this.height + h); }; - Bounds.fromClientRect = function (clientRect) { - return new Bounds(clientRect.left, clientRect.top, clientRect.width, clientRect.height); + Bounds.fromClientRect = function (context, clientRect) { + return new Bounds(clientRect.left + context.windowBounds.left, clientRect.top + context.windowBounds.top, clientRect.width, clientRect.height); + }; + Bounds.fromDOMRectList = function (context, domRectList) { + var domRect = Array.from(domRectList).find(function (rect) { return rect.width !== 0; }); + return domRect + ? new Bounds(domRect.left + context.windowBounds.left, domRect.top + context.windowBounds.top, domRect.width, domRect.height) + : Bounds.EMPTY; }; + Bounds.EMPTY = new Bounds(0, 0, 0, 0); return Bounds; }()); - var parseBounds = function (node) { - return Bounds.fromClientRect(node.getBoundingClientRect()); + var parseBounds = function (context, node) { + return Bounds.fromClientRect(context, node.getBoundingClientRect()); }; var parseDocumentSize = function (document) { var body = document.body; @@ -25776,11 +25797,11 @@ function unzipSync(data) { }; /* - * css-line-break 1.1.1 - * Copyright (c) 2019 Niklas von Hertzen + * css-line-break 2.1.0 + * Copyright (c) 2022 Niklas von Hertzen * Released under MIT License */ - var toCodePoints = function (str) { + var toCodePoints$1 = function (str) { var codePoints = []; var i = 0; var length = str.length; @@ -25802,7 +25823,7 @@ function unzipSync(data) { } return codePoints; }; - var fromCodePoint = function () { + var fromCodePoint$1 = function () { var codePoints = []; for (var _i = 0; _i < arguments.length; _i++) { codePoints[_i] = arguments[_i]; @@ -25824,7 +25845,7 @@ function unzipSync(data) { } else { codePoint -= 0x10000; - codeUnits.push((codePoint >> 10) + 0xd800, codePoint % 0x400 + 0xdc00); + codeUnits.push((codePoint >> 10) + 0xd800, (codePoint % 0x400) + 0xdc00); } if (index + 1 === length || codeUnits.length > 0x4000) { result += String.fromCharCode.apply(String, codeUnits); @@ -25833,13 +25854,25 @@ function unzipSync(data) { } return result; }; - var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + var chars$2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; // Use a lookup table to find the index. - var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256); - for (var i = 0; i < chars.length; i++) { - lookup[chars.charCodeAt(i)] = i; + var lookup$2 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256); + for (var i$2 = 0; i$2 < chars$2.length; i$2++) { + lookup$2[chars$2.charCodeAt(i$2)] = i$2; } - var decode = function (base64) { + + /* + * utrie 1.0.2 + * Copyright (c) 2022 Niklas von Hertzen + * Released under MIT License + */ + var chars$1$1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + // Use a lookup table to find the index. + var lookup$1$1 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256); + for (var i$1$1 = 0; i$1$1 < chars$1$1.length; i$1$1++) { + lookup$1$1[chars$1$1.charCodeAt(i$1$1)] = i$1$1; + } + var decode$1 = function (base64) { var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4; if (base64[base64.length - 1] === '=') { bufferLength--; @@ -25854,17 +25887,17 @@ function unzipSync(data) { : new Array(bufferLength); var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer); for (i = 0; i < len; i += 4) { - encoded1 = lookup[base64.charCodeAt(i)]; - encoded2 = lookup[base64.charCodeAt(i + 1)]; - encoded3 = lookup[base64.charCodeAt(i + 2)]; - encoded4 = lookup[base64.charCodeAt(i + 3)]; + encoded1 = lookup$1$1[base64.charCodeAt(i)]; + encoded2 = lookup$1$1[base64.charCodeAt(i + 1)]; + encoded3 = lookup$1$1[base64.charCodeAt(i + 2)]; + encoded4 = lookup$1$1[base64.charCodeAt(i + 3)]; bytes[p++] = (encoded1 << 2) | (encoded2 >> 4); bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2); bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63); } return buffer; }; - var polyUint16Array = function (buffer) { + var polyUint16Array$1 = function (buffer) { var length = buffer.length; var bytes = []; for (var i = 0; i < length; i += 2) { @@ -25872,7 +25905,7 @@ function unzipSync(data) { } return bytes; }; - var polyUint32Array = function (buffer) { + var polyUint32Array$1 = function (buffer) { var length = buffer.length; var bytes = []; for (var i = 0; i < length; i += 4) { @@ -25882,41 +25915,41 @@ function unzipSync(data) { }; /** Shift size for getting the index-2 table offset. */ - var UTRIE2_SHIFT_2 = 5; + var UTRIE2_SHIFT_2$1 = 5; /** Shift size for getting the index-1 table offset. */ - var UTRIE2_SHIFT_1 = 6 + 5; + var UTRIE2_SHIFT_1$1 = 6 + 5; /** * Shift size for shifting left the index array values. * Increases possible data size with 16-bit index values at the cost * of compactability. * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY. */ - var UTRIE2_INDEX_SHIFT = 2; + var UTRIE2_INDEX_SHIFT$1 = 2; /** * Difference between the two shift sizes, * for getting an index-1 offset from an index-2 offset. 6=11-5 */ - var UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2; + var UTRIE2_SHIFT_1_2$1 = UTRIE2_SHIFT_1$1 - UTRIE2_SHIFT_2$1; /** * The part of the index-2 table for U+D800..U+DBFF stores values for * lead surrogate code _units_ not code _points_. * Values for lead surrogate code _points_ are indexed with this portion of the table. * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.) */ - var UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2; + var UTRIE2_LSCP_INDEX_2_OFFSET$1 = 0x10000 >> UTRIE2_SHIFT_2$1; /** Number of entries in a data block. 32=0x20 */ - var UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2; + var UTRIE2_DATA_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_2$1; /** Mask for getting the lower bits for the in-data-block offset. */ - var UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1; - var UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2; + var UTRIE2_DATA_MASK$1 = UTRIE2_DATA_BLOCK_LENGTH$1 - 1; + var UTRIE2_LSCP_INDEX_2_LENGTH$1 = 0x400 >> UTRIE2_SHIFT_2$1; /** Count the lengths of both BMP pieces. 2080=0x820 */ - var UTRIE2_INDEX_2_BMP_LENGTH = UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH; + var UTRIE2_INDEX_2_BMP_LENGTH$1 = UTRIE2_LSCP_INDEX_2_OFFSET$1 + UTRIE2_LSCP_INDEX_2_LENGTH$1; /** * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820. * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2. */ - var UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH; - var UTRIE2_UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */ + var UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 = UTRIE2_INDEX_2_BMP_LENGTH$1; + var UTRIE2_UTF8_2B_INDEX_2_LENGTH$1 = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */ /** * The index-1 table, only used for supplementary code points, at offset 2112=0x840. * Variable length, for code points up to highStart, where the last single-value range starts. @@ -25929,40 +25962,40 @@ function unzipSync(data) { * Both the index-1 table and the following part of the index-2 table * are omitted completely if there is only BMP data. */ - var UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH; + var UTRIE2_INDEX_1_OFFSET$1 = UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 + UTRIE2_UTF8_2B_INDEX_2_LENGTH$1; /** * Number of index-1 entries for the BMP. 32=0x20 * This part of the index-1 table is omitted from the serialized form. */ - var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1; + var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 = 0x10000 >> UTRIE2_SHIFT_1$1; /** Number of entries in an index-2 block. 64=0x40 */ - var UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2; + var UTRIE2_INDEX_2_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_1_2$1; /** Mask for getting the lower bits for the in-index-2-block offset. */ - var UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1; - var slice16 = function (view, start, end) { + var UTRIE2_INDEX_2_MASK$1 = UTRIE2_INDEX_2_BLOCK_LENGTH$1 - 1; + var slice16$1 = function (view, start, end) { if (view.slice) { return view.slice(start, end); } return new Uint16Array(Array.prototype.slice.call(view, start, end)); }; - var slice32 = function (view, start, end) { + var slice32$1 = function (view, start, end) { if (view.slice) { return view.slice(start, end); } return new Uint32Array(Array.prototype.slice.call(view, start, end)); }; - var createTrieFromBase64 = function (base64) { - var buffer = decode(base64); - var view32 = Array.isArray(buffer) ? polyUint32Array(buffer) : new Uint32Array(buffer); - var view16 = Array.isArray(buffer) ? polyUint16Array(buffer) : new Uint16Array(buffer); + var createTrieFromBase64$1 = function (base64, _byteLength) { + var buffer = decode$1(base64); + var view32 = Array.isArray(buffer) ? polyUint32Array$1(buffer) : new Uint32Array(buffer); + var view16 = Array.isArray(buffer) ? polyUint16Array$1(buffer) : new Uint16Array(buffer); var headerLength = 24; - var index = slice16(view16, headerLength / 2, view32[4] / 2); + var index = slice16$1(view16, headerLength / 2, view32[4] / 2); var data = view32[5] === 2 - ? slice16(view16, (headerLength + view32[4]) / 2) - : slice32(view32, Math.ceil((headerLength + view32[4]) / 4)); - return new Trie(view32[0], view32[1], view32[2], view32[3], index, data); + ? slice16$1(view16, (headerLength + view32[4]) / 2) + : slice32$1(view32, Math.ceil((headerLength + view32[4]) / 4)); + return new Trie$1(view32[0], view32[1], view32[2], view32[3], index, data); }; - var Trie = /** @class */ (function () { + var Trie$1 = /** @class */ (function () { function Trie(initialValue, errorValue, highStart, highValueIndex, index, data) { this.initialValue = initialValue; this.errorValue = errorValue; @@ -25984,8 +26017,8 @@ function unzipSync(data) { // Ordinary BMP code point, excluding leading surrogates. // BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index. // 16 bit data is stored in the index array itself. - ix = this.index[codePoint >> UTRIE2_SHIFT_2]; - ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK); + ix = this.index[codePoint >> UTRIE2_SHIFT_2$1]; + ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1); return this.data[ix]; } if (codePoint <= 0xffff) { @@ -25995,17 +26028,17 @@ function unzipSync(data) { // For this function, we need the code point data. // Note: this expression could be refactored for slightly improved efficiency, but // surrogate code points will be so rare in practice that it's not worth it. - ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2)]; - ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK); + ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET$1 + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2$1)]; + ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1); return this.data[ix]; } if (codePoint < this.highStart) { // Supplemental code point, use two-level lookup. - ix = UTRIE2_INDEX_1_OFFSET - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> UTRIE2_SHIFT_1); + ix = UTRIE2_INDEX_1_OFFSET$1 - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 + (codePoint >> UTRIE2_SHIFT_1$1); ix = this.index[ix]; - ix += (codePoint >> UTRIE2_SHIFT_2) & UTRIE2_INDEX_2_MASK; + ix += (codePoint >> UTRIE2_SHIFT_2$1) & UTRIE2_INDEX_2_MASK$1; ix = this.index[ix]; - ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK); + ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1); return this.data[ix]; } if (codePoint <= 0x10ffff) { @@ -26018,21 +26051,32 @@ function unzipSync(data) { return Trie; }()); - var base64 = 'KwAAAAAAAAAACA4AIDoAAPAfAAACAAAAAAAIABAAGABAAEgAUABYAF4AZgBeAGYAYABoAHAAeABeAGYAfACEAIAAiACQAJgAoACoAK0AtQC9AMUAXgBmAF4AZgBeAGYAzQDVAF4AZgDRANkA3gDmAOwA9AD8AAQBDAEUARoBIgGAAIgAJwEvATcBPwFFAU0BTAFUAVwBZAFsAXMBewGDATAAiwGTAZsBogGkAawBtAG8AcIBygHSAdoB4AHoAfAB+AH+AQYCDgIWAv4BHgImAi4CNgI+AkUCTQJTAlsCYwJrAnECeQKBAk0CiQKRApkCoQKoArACuALAAsQCzAIwANQC3ALkAjAA7AL0AvwCAQMJAxADGAMwACADJgMuAzYDPgOAAEYDSgNSA1IDUgNaA1oDYANiA2IDgACAAGoDgAByA3YDfgOAAIQDgACKA5IDmgOAAIAAogOqA4AAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAK8DtwOAAIAAvwPHA88D1wPfAyAD5wPsA/QD/AOAAIAABAQMBBIEgAAWBB4EJgQuBDMEIAM7BEEEXgBJBCADUQRZBGEEaQQwADAAcQQ+AXkEgQSJBJEEgACYBIAAoASoBK8EtwQwAL8ExQSAAIAAgACAAIAAgACgAM0EXgBeAF4AXgBeAF4AXgBeANUEXgDZBOEEXgDpBPEE+QQBBQkFEQUZBSEFKQUxBTUFPQVFBUwFVAVcBV4AYwVeAGsFcwV7BYMFiwWSBV4AmgWgBacFXgBeAF4AXgBeAKsFXgCyBbEFugW7BcIFwgXIBcIFwgXQBdQF3AXkBesF8wX7BQMGCwYTBhsGIwYrBjMGOwZeAD8GRwZNBl4AVAZbBl4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAGMGXgBqBnEGXgBeAF4AXgBeAF4AXgBeAF4AXgB5BoAG4wSGBo4GkwaAAIADHgR5AF4AXgBeAJsGgABGA4AAowarBrMGswagALsGwwbLBjAA0wbaBtoG3QbaBtoG2gbaBtoG2gblBusG8wb7BgMHCwcTBxsHCwcjBysHMAc1BzUHOgdCB9oGSgdSB1oHYAfaBloHaAfaBlIH2gbaBtoG2gbaBtoG2gbaBjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHbQdeAF4ANQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQd1B30HNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B4MH2gaKB68EgACAAIAAgACAAIAAgACAAI8HlwdeAJ8HpweAAIAArwe3B14AXgC/B8UHygcwANAH2AfgB4AA6AfwBz4B+AcACFwBCAgPCBcIogEYAR8IJwiAAC8INwg/CCADRwhPCFcIXwhnCEoDGgSAAIAAgABvCHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIhAiLCI4IMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAANQc1BzUHNQc1BzUHNQc1BzUHNQc1B54INQc1B6II2gaqCLIIugiAAIAAvgjGCIAAgACAAIAAgACAAIAAgACAAIAAywiHAYAA0wiAANkI3QjlCO0I9Aj8CIAAgACAAAIJCgkSCRoJIgknCTYHLwk3CZYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiAAIAAAAFAAXgBeAGAAcABeAHwAQACQAKAArQC9AJ4AXgBeAE0A3gBRAN4A7AD8AMwBGgEAAKcBNwEFAUwBXAF4QkhCmEKnArcCgAHHAsABz4LAAcABwAHAAd+C6ABoAG+C/4LAAcABwAHAAc+DF4MAAcAB54M3gweDV4Nng3eDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEeDqABVg6WDqABoQ6gAaABoAHXDvcONw/3DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DncPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB7cPPwlGCU4JMACAAIAAgABWCV4JYQmAAGkJcAl4CXwJgAkwADAAMAAwAIgJgACLCZMJgACZCZ8JowmrCYAAswkwAF4AXgB8AIAAuwkABMMJyQmAAM4JgADVCTAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAqwYWBNkIMAAwADAAMADdCeAJ6AnuCR4E9gkwAP4JBQoNCjAAMACAABUK0wiAAB0KJAosCjQKgAAwADwKQwqAAEsKvQmdCVMKWwowADAAgACAALcEMACAAGMKgABrCjAAMAAwADAAMAAwADAAMAAwADAAMAAeBDAAMAAwADAAMAAwADAAMAAwADAAMAAwAIkEPQFzCnoKiQSCCooKkAqJBJgKoAqkCokEGAGsCrQKvArBCjAAMADJCtEKFQHZCuEK/gHpCvEKMAAwADAAMACAAIwE+QowAIAAPwEBCzAAMAAwADAAMACAAAkLEQswAIAAPwEZCyELgAAOCCkLMAAxCzkLMAAwADAAMAAwADAAXgBeAEELMAAwADAAMAAwADAAMAAwAEkLTQtVC4AAXAtkC4AAiQkwADAAMAAwADAAMAAwADAAbAtxC3kLgAuFC4sLMAAwAJMLlwufCzAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAApwswADAAMACAAIAAgACvC4AAgACAAIAAgACAALcLMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAvwuAAMcLgACAAIAAgACAAIAAyguAAIAAgACAAIAA0QswADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAANkLgACAAIAA4AswADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACJCR4E6AswADAAhwHwC4AA+AsADAgMEAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMACAAIAAGAwdDCUMMAAwAC0MNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQw1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHPQwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADUHNQc1BzUHNQc1BzUHNQc2BzAAMAA5DDUHNQc1BzUHNQc1BzUHNQc1BzUHNQdFDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAATQxSDFoMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAF4AXgBeAF4AXgBeAF4AYgxeAGoMXgBxDHkMfwxeAIUMXgBeAI0MMAAwADAAMAAwAF4AXgCVDJ0MMAAwADAAMABeAF4ApQxeAKsMswy7DF4Awgy9DMoMXgBeAF4AXgBeAF4AXgBeAF4AXgDRDNkMeQBqCeAM3Ax8AOYM7Az0DPgMXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgCgAAANoAAHDQ4NFg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAeDSYNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAC4NMABeAF4ANg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAD4NRg1ODVYNXg1mDTAAbQ0wADAAMAAwADAAMAAwADAA2gbaBtoG2gbaBtoG2gbaBnUNeg3CBYANwgWFDdoGjA3aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gaUDZwNpA2oDdoG2gawDbcNvw3HDdoG2gbPDdYN3A3fDeYN2gbsDfMN2gbaBvoN/g3aBgYODg7aBl4AXgBeABYOXgBeACUG2gYeDl4AJA5eACwO2w3aBtoGMQ45DtoG2gbaBtoGQQ7aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B1EO2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQdZDjUHNQc1BzUHNQc1B2EONQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHaA41BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B3AO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B2EO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBkkOeA6gAKAAoAAwADAAMAAwAKAAoACgAKAAoACgAKAAgA4wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAD//wQABAAEAAQABAAEAAQABAAEAA0AAwABAAEAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAKABMAFwAeABsAGgAeABcAFgASAB4AGwAYAA8AGAAcAEsASwBLAEsASwBLAEsASwBLAEsAGAAYAB4AHgAeABMAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAFgAbABIAHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYADQARAB4ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkAFgAaABsAGwAbAB4AHQAdAB4ATwAXAB4ADQAeAB4AGgAbAE8ATwAOAFAAHQAdAB0ATwBPABcATwBPAE8AFgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwArAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAAQABAANAA0ASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAUAArACsAKwArACsAKwArACsABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAGgAaAFAAUABQAFAAUABMAB4AGwBQAB4AKwArACsABAAEAAQAKwBQAFAAUABQAFAAUAArACsAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUAArAFAAUAArACsABAArAAQABAAEAAQABAArACsAKwArAAQABAArACsABAAEAAQAKwArACsABAArACsAKwArACsAKwArAFAAUABQAFAAKwBQACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwAEAAQAUABQAFAABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQAKwArAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeABsAKwArACsAKwArACsAKwBQAAQABAAEAAQABAAEACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAKwArACsAKwArACsAKwArAAQABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwAEAFAAKwBQAFAAUABQAFAAUAArACsAKwBQAFAAUAArAFAAUABQAFAAKwArACsAUABQACsAUAArAFAAUAArACsAKwBQAFAAKwArACsAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQAKwArACsABAAEAAQAKwAEAAQABAAEACsAKwBQACsAKwArACsAKwArAAQAKwArACsAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAB4AHgAeAB4AHgAeABsAHgArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArAFAAUABQACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAB4AUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArACsAKwArACsAKwArAFAAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwArAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAKwBcAFwAKwBcACsAKwBcACsAKwArACsAKwArAFwAXABcAFwAKwBcAFwAXABcAFwAXABcACsAXABcAFwAKwBcACsAXAArACsAXABcACsAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgArACoAKgBcACsAKwBcAFwAXABcAFwAKwBcACsAKgAqACoAKgAqACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAFwAXABcAFwAUAAOAA4ADgAOAB4ADgAOAAkADgAOAA0ACQATABMAEwATABMACQAeABMAHgAeAB4ABAAEAB4AHgAeAB4AHgAeAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUAANAAQAHgAEAB4ABAAWABEAFgARAAQABABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAAQABAAEAAQABAANAAQABABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsADQANAB4AHgAeAB4AHgAeAAQAHgAeAB4AHgAeAB4AKwAeAB4ADgAOAA0ADgAeAB4AHgAeAB4ACQAJACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgAeAB4AHgBcAFwAXABcAFwAXAAqACoAKgAqAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAKgAqACoAKgAqACoAKgBcAFwAXAAqACoAKgAqAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAXAAqAEsASwBLAEsASwBLAEsASwBLAEsAKgAqACoAKgAqACoAUABQAFAAUABQAFAAKwBQACsAKwArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQACsAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwAEAAQABAAeAA0AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAEQArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAADQANAA0AUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAA0ADQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoADQANABUAXAANAB4ADQAbAFwAKgArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAB4AHgATABMADQANAA4AHgATABMAHgAEAAQABAAJACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAUABQAFAAUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwAeACsAKwArABMAEwBLAEsASwBLAEsASwBLAEsASwBLAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwBcAFwAXABcAFwAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcACsAKwArACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwAeAB4AXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsABABLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKgAqACoAKgAqACoAKgBcACoAKgAqACoAKgAqACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAUABQAFAAUABQAFAAUAArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4ADQANAA0ADQAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAHgAeAB4AHgBQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwANAA0ADQANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwBQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsABAAEAAQAHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAABABQAFAAUABQAAQABAAEAFAAUAAEAAQABAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAKwBQACsAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAKwArAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAKwAeAB4AHgAeAB4AHgAeAA4AHgArAA0ADQANAA0ADQANAA0ACQANAA0ADQAIAAQACwAEAAQADQAJAA0ADQAMAB0AHQAeABcAFwAWABcAFwAXABYAFwAdAB0AHgAeABQAFAAUAA0AAQABAAQABAAEAAQABAAJABoAGgAaABoAGgAaABoAGgAeABcAFwAdABUAFQAeAB4AHgAeAB4AHgAYABYAEQAVABUAFQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgANAB4ADQANAA0ADQAeAA0ADQANAAcAHgAeAB4AHgArAAQABAAEAAQABAAEAAQABAAEAAQAUABQACsAKwBPAFAAUABQAFAAUAAeAB4AHgAWABEATwBQAE8ATwBPAE8AUABQAFAAUABQAB4AHgAeABYAEQArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGgAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgBQABoAHgAdAB4AUAAeABoAHgAeAB4AHgAeAB4AHgAeAB4ATwAeAFAAGwAeAB4AUABQAFAAUABQAB4AHgAeAB0AHQAeAFAAHgBQAB4AUAAeAFAATwBQAFAAHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AUABQAFAAUABPAE8AUABQAFAAUABQAE8AUABQAE8AUABPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAE8ATwBPAE8ATwBPAE8ATwBPAE8AUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAATwAeAB4AKwArACsAKwAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB0AHQAeAB4AHgAdAB0AHgAeAB0AHgAeAB4AHQAeAB0AGwAbAB4AHQAeAB4AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB0AHgAdAB4AHQAdAB0AHQAdAB0AHgAdAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAdAB0AHQAdAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAlACUAHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB0AHQAeAB4AHgAeAB0AHQAdAB4AHgAdAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB0AHQAeAB4AHQAeAB4AHgAeAB0AHQAeAB4AHgAeACUAJQAdAB0AJQAeACUAJQAlACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHQAdAB0AHgAdACUAHQAdAB4AHQAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHQAdAB0AHQAlAB4AJQAlACUAHQAlACUAHQAdAB0AJQAlAB0AHQAlAB0AHQAlACUAJQAeAB0AHgAeAB4AHgAdAB0AJQAdAB0AHQAdAB0AHQAlACUAJQAlACUAHQAlACUAIAAlAB0AHQAlACUAJQAlACUAJQAlACUAHgAeAB4AJQAlACAAIAAgACAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeABcAFwAXABcAFwAXAB4AEwATACUAHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACUAJQBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwArACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAE8ATwBPAE8ATwBPAE8ATwAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeACsAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUAArACsAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQBQAFAAUABQACsAKwArACsAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAABAAEAAQAKwAEAAQAKwArACsAKwArAAQABAAEAAQAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsABAAEAAQAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsADQANAA0ADQANAA0ADQANAB4AKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAUABQAFAAUABQAA0ADQANAA0ADQANABQAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwANAA0ADQANAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAeAAQABAAEAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLACsADQArAB4AKwArAAQABAAEAAQAUABQAB4AUAArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwAEAAQABAAEAAQABAAEAAQABAAOAA0ADQATABMAHgAeAB4ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0AUABQAFAAUAAEAAQAKwArAAQADQANAB4AUAArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXABcAA0ADQANACoASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUAArACsAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANACsADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEcARwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwAeAAQABAANAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAEAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUAArACsAUAArACsAUABQACsAKwBQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAeAB4ADQANAA0ADQAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAArAAQABAArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAEAAQABAAEAAQABAAEACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAFgAWAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAKwBQACsAKwArACsAKwArAFAAKwArACsAKwBQACsAUAArAFAAKwBQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQACsAUAArAFAAKwBQACsAUABQACsAUAArACsAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAUABQAFAAUAArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUAArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAlACUAJQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeACUAJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeACUAJQAlACUAJQAeACUAJQAlACUAJQAgACAAIAAlACUAIAAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIQAhACEAIQAhACUAJQAgACAAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAIAAlACUAJQAlACAAJQAgACAAIAAgACAAIAAgACAAIAAlACUAJQAgACUAJQAlACUAIAAgACAAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeACUAHgAlAB4AJQAlACUAJQAlACAAJQAlACUAJQAeACUAHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAIAAgACAAIAAgAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFwAXABcAFQAVABUAHgAeAB4AHgAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAlACAAIAAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsA'; + /* + * base64-arraybuffer 1.0.2 + * Copyright (c) 2022 Niklas von Hertzen + * Released under MIT License + */ + var chars$3 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + // Use a lookup table to find the index. + var lookup$3 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256); + for (var i$3 = 0; i$3 < chars$3.length; i$3++) { + lookup$3[chars$3.charCodeAt(i$3)] = i$3; + } + + var base64$1 = 'KwAAAAAAAAAACA4AUD0AADAgAAACAAAAAAAIABAAGABAAEgAUABYAGAAaABgAGgAYgBqAF8AZwBgAGgAcQB5AHUAfQCFAI0AlQCdAKIAqgCyALoAYABoAGAAaABgAGgAwgDKAGAAaADGAM4A0wDbAOEA6QDxAPkAAQEJAQ8BFwF1AH0AHAEkASwBNAE6AUIBQQFJAVEBWQFhAWgBcAF4ATAAgAGGAY4BlQGXAZ8BpwGvAbUBvQHFAc0B0wHbAeMB6wHxAfkBAQIJAvEBEQIZAiECKQIxAjgCQAJGAk4CVgJeAmQCbAJ0AnwCgQKJApECmQKgAqgCsAK4ArwCxAIwAMwC0wLbAjAA4wLrAvMC+AIAAwcDDwMwABcDHQMlAy0DNQN1AD0DQQNJA0kDSQNRA1EDVwNZA1kDdQB1AGEDdQBpA20DdQN1AHsDdQCBA4kDkQN1AHUAmQOhA3UAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AKYDrgN1AHUAtgO+A8YDzgPWAxcD3gPjA+sD8wN1AHUA+wMDBAkEdQANBBUEHQQlBCoEFwMyBDgEYABABBcDSARQBFgEYARoBDAAcAQzAXgEgASIBJAEdQCXBHUAnwSnBK4EtgS6BMIEyAR1AHUAdQB1AHUAdQCVANAEYABgAGAAYABgAGAAYABgANgEYADcBOQEYADsBPQE/AQEBQwFFAUcBSQFLAU0BWQEPAVEBUsFUwVbBWAAYgVgAGoFcgV6BYIFigWRBWAAmQWfBaYFYABgAGAAYABgAKoFYACxBbAFuQW6BcEFwQXHBcEFwQXPBdMF2wXjBeoF8gX6BQIGCgYSBhoGIgYqBjIGOgZgAD4GRgZMBmAAUwZaBmAAYABgAGAAYABgAGAAYABgAGAAYABgAGIGYABpBnAGYABgAGAAYABgAGAAYABgAGAAYAB4Bn8GhQZgAGAAYAB1AHcDFQSLBmAAYABgAJMGdQA9A3UAmwajBqsGqwaVALMGuwbDBjAAywbSBtIG1QbSBtIG0gbSBtIG0gbdBuMG6wbzBvsGAwcLBxMHAwcbByMHJwcsBywHMQcsB9IGOAdAB0gHTgfSBkgHVgfSBtIG0gbSBtIG0gbSBtIG0gbSBiwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdgAGAALAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdbB2MHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB2kH0gZwB64EdQB1AHUAdQB1AHUAdQB1AHUHfQdgAIUHjQd1AHUAlQedB2AAYAClB6sHYACzB7YHvgfGB3UAzgfWBzMB3gfmB1EB7gf1B/0HlQENAQUIDQh1ABUIHQglCBcDLQg1CD0IRQhNCEEDUwh1AHUAdQBbCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIcAh3CHoIMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIgggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAALAcsBywHLAcsBywHLAcsBywHLAcsB4oILAcsB44I0gaWCJ4Ipgh1AHUAqgiyCHUAdQB1AHUAdQB1AHUAdQB1AHUAtwh8AXUAvwh1AMUIyQjRCNkI4AjoCHUAdQB1AO4I9gj+CAYJDgkTCS0HGwkjCYIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiAAIAAAAFAAYABgAGIAXwBgAHEAdQBFAJUAogCyAKAAYABgAEIA4ABGANMA4QDxAMEBDwE1AFwBLAE6AQEBUQF4QkhCmEKoQrhCgAHIQsAB0MLAAcABwAHAAeDC6ABoAHDCwMMAAcABwAHAAdDDGMMAAcAB6MM4wwjDWMNow3jDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEjDqABWw6bDqABpg6gAaABoAHcDvwOPA+gAaABfA/8DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DpcPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB9cPKwkyCToJMAB1AHUAdQBCCUoJTQl1AFUJXAljCWcJawkwADAAMAAwAHMJdQB2CX4JdQCECYoJjgmWCXUAngkwAGAAYABxAHUApgn3A64JtAl1ALkJdQDACTAAMAAwADAAdQB1AHUAdQB1AHUAdQB1AHUAowYNBMUIMAAwADAAMADICcsJ0wnZCRUE4QkwAOkJ8An4CTAAMAB1AAAKvwh1AAgKDwoXCh8KdQAwACcKLgp1ADYKqAmICT4KRgowADAAdQB1AE4KMAB1AFYKdQBeCnUAZQowADAAMAAwADAAMAAwADAAMAAVBHUAbQowADAAdQC5CXUKMAAwAHwBxAijBogEMgF9CoQKiASMCpQKmgqIBKIKqgquCogEDQG2Cr4KxgrLCjAAMADTCtsKCgHjCusK8Qr5CgELMAAwADAAMAB1AIsECQsRC3UANAEZCzAAMAAwADAAMAB1ACELKQswAHUANAExCzkLdQBBC0kLMABRC1kLMAAwADAAMAAwADAAdQBhCzAAMAAwAGAAYABpC3ELdwt/CzAAMACHC4sLkwubC58Lpwt1AK4Ltgt1APsDMAAwADAAMAAwADAAMAAwAL4LwwvLC9IL1wvdCzAAMADlC+kL8Qv5C/8LSQswADAAMAAwADAAMAAwADAAMAAHDDAAMAAwADAAMAAODBYMHgx1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1ACYMMAAwADAAdQB1AHUALgx1AHUAdQB1AHUAdQA2DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AD4MdQBGDHUAdQB1AHUAdQB1AEkMdQB1AHUAdQB1AFAMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQBYDHUAdQB1AF8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUA+wMVBGcMMAAwAHwBbwx1AHcMfwyHDI8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAYABgAJcMMAAwADAAdQB1AJ8MlQClDDAAMACtDCwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB7UMLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AA0EMAC9DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAsBywHLAcsBywHLAcsBywHLQcwAMEMyAwsBywHLAcsBywHLAcsBywHLAcsBywHzAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1ANQM2QzhDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMABgAGAAYABgAGAAYABgAOkMYADxDGAA+AwADQYNYABhCWAAYAAODTAAMAAwADAAFg1gAGAAHg37AzAAMAAwADAAYABgACYNYAAsDTQNPA1gAEMNPg1LDWAAYABgAGAAYABgAGAAYABgAGAAUg1aDYsGVglhDV0NcQBnDW0NdQ15DWAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAlQCBDZUAiA2PDZcNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAnw2nDTAAMAAwADAAMAAwAHUArw23DTAAMAAwADAAMAAwADAAMAAwADAAMAB1AL8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQDHDTAAYABgAM8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA1w11ANwNMAAwAD0B5A0wADAAMAAwADAAMADsDfQN/A0EDgwOFA4wABsOMAAwADAAMAAwADAAMAAwANIG0gbSBtIG0gbSBtIG0gYjDigOwQUuDsEFMw7SBjoO0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGQg5KDlIOVg7SBtIGXg5lDm0OdQ7SBtIGfQ6EDooOjQ6UDtIGmg6hDtIG0gaoDqwO0ga0DrwO0gZgAGAAYADEDmAAYAAkBtIGzA5gANIOYADaDokO0gbSBt8O5w7SBu8O0gb1DvwO0gZgAGAAxA7SBtIG0gbSBtIGYABgAGAAYAAED2AAsAUMD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHJA8sBywHLAcsBywHLAccDywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywPLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAc0D9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHPA/SBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gYUD0QPlQCVAJUAMAAwADAAMACVAJUAlQCVAJUAlQCVAEwPMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA//8EAAQABAAEAAQABAAEAAQABAANAAMAAQABAAIABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQACgATABcAHgAbABoAHgAXABYAEgAeABsAGAAPABgAHABLAEsASwBLAEsASwBLAEsASwBLABgAGAAeAB4AHgATAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAGwASAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWAA0AEQAeAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAFAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJABYAGgAbABsAGwAeAB0AHQAeAE8AFwAeAA0AHgAeABoAGwBPAE8ADgBQAB0AHQAdAE8ATwAXAE8ATwBPABYAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwBWAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsABAAbABsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEAA0ADQBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABABQACsAKwArACsAKwArACsAKwAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUAAaABoAUABQAFAAUABQAEwAHgAbAFAAHgAEACsAKwAEAAQABAArAFAAUABQAFAAUABQACsAKwArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQACsAUABQACsAKwAEACsABAAEAAQABAAEACsAKwArACsABAAEACsAKwAEAAQABAArACsAKwAEACsAKwArACsAKwArACsAUABQAFAAUAArAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAAQABABQAFAAUAAEAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAArACsAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AGwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAKwArACsAKwArAAQABAAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAAQAUAArAFAAUABQAFAAUABQACsAKwArAFAAUABQACsAUABQAFAAUAArACsAKwBQAFAAKwBQACsAUABQACsAKwArAFAAUAArACsAKwBQAFAAUAArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAArACsAKwAEAAQABAArAAQABAAEAAQAKwArAFAAKwArACsAKwArACsABAArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAHgAeAB4AHgAeAB4AGwAeACsAKwArACsAKwAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAUABQAFAAKwArACsAKwArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwAOAFAAUABQAFAAUABQAFAAHgBQAAQABAAEAA4AUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAKwArAAQAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAKwArACsAKwArACsAUAArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAXABcAFwAXABcACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAXAArAFwAXABcAFwAXABcAFwAXABcAFwAKgBcAFwAKgAqACoAKgAqACoAKgAqACoAXAArACsAXABcAFwAXABcACsAXAArACoAKgAqACoAKgAqACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwBcAFwAXABcAFAADgAOAA4ADgAeAA4ADgAJAA4ADgANAAkAEwATABMAEwATAAkAHgATAB4AHgAeAAQABAAeAB4AHgAeAB4AHgBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAADQAEAB4ABAAeAAQAFgARABYAEQAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAAQABAAEAAQADQAEAAQAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAA0ADQAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeACsAHgAeAA4ADgANAA4AHgAeAB4AHgAeAAkACQArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgBcAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4AHgAeAB4AXABcAFwAXABcAFwAKgAqACoAKgBcAFwAXABcACoAKgAqAFwAKgAqACoAXABcACoAKgAqACoAKgAqACoAXABcAFwAKgAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwAKgBLAEsASwBLAEsASwBLAEsASwBLACoAKgAqACoAKgAqAFAAUABQAFAAUABQACsAUAArACsAKwArACsAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAKwBQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsABAAEAAQAHgANAB4AHgAeAB4AHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUAArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWABEAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAANAA0AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUAArAAQABAArACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAA0ADQAVAFwADQAeAA0AGwBcACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwAeAB4AEwATAA0ADQAOAB4AEwATAB4ABAAEAAQACQArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAHgArACsAKwATABMASwBLAEsASwBLAEsASwBLAEsASwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAXABcAFwAXABcACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXAArACsAKwAqACoAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsAHgAeAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKwArAAQASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACoAKgAqACoAKgAqACoAXAAqACoAKgAqACoAKgArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABABQAFAAUABQAFAAUABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgANAA0ADQANAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwAeAB4AHgAeAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArAA0ADQANAA0ADQBLAEsASwBLAEsASwBLAEsASwBLACsAKwArAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUAAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAAQAUABQAFAAUABQAFAABABQAFAABAAEAAQAUAArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQACsAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQACsAKwAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQACsAHgAeAB4AHgAeAB4AHgAOAB4AKwANAA0ADQANAA0ADQANAAkADQANAA0ACAAEAAsABAAEAA0ACQANAA0ADAAdAB0AHgAXABcAFgAXABcAFwAWABcAHQAdAB4AHgAUABQAFAANAAEAAQAEAAQABAAEAAQACQAaABoAGgAaABoAGgAaABoAHgAXABcAHQAVABUAHgAeAB4AHgAeAB4AGAAWABEAFQAVABUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ADQAeAA0ADQANAA0AHgANAA0ADQAHAB4AHgAeAB4AKwAEAAQABAAEAAQABAAEAAQABAAEAFAAUAArACsATwBQAFAAUABQAFAAHgAeAB4AFgARAE8AUABPAE8ATwBPAFAAUABQAFAAUAAeAB4AHgAWABEAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArABsAGwAbABsAGwAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGgAbABsAGwAbABoAGwAbABoAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAFAAGgAeAB0AHgBQAB4AGgAeAB4AHgAeAB4AHgAeAB4AHgBPAB4AUAAbAB4AHgBQAFAAUABQAFAAHgAeAB4AHQAdAB4AUAAeAFAAHgBQAB4AUABPAFAAUAAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgBQAFAAUABQAE8ATwBQAFAAUABQAFAATwBQAFAATwBQAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAUABQAFAATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABPAB4AHgArACsAKwArAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAdAB4AHgAeAB0AHQAeAB4AHQAeAB4AHgAdAB4AHQAbABsAHgAdAB4AHgAeAB4AHQAeAB4AHQAdAB0AHQAeAB4AHQAeAB0AHgAdAB0AHQAdAB0AHQAeAB0AHgAeAB4AHgAeAB0AHQAdAB0AHgAeAB4AHgAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB0AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAdAB0AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHQAdAB0AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHQAdAB4AHgAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AJQAlAB0AHQAlAB4AJQAlACUAIAAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAeAB0AJQAdAB0AHgAdAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAdAB0AHQAdACUAHgAlACUAJQAdACUAJQAdAB0AHQAlACUAHQAdACUAHQAdACUAJQAlAB4AHQAeAB4AHgAeAB0AHQAlAB0AHQAdAB0AHQAdACUAJQAlACUAJQAdACUAJQAgACUAHQAdACUAJQAlACUAJQAlACUAJQAeAB4AHgAlACUAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AFwAXABcAFwAXABcAHgATABMAJQAeAB4AHgAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARABYAEQAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANAA0AHgANAB4ADQANAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwAlACUAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACsAKwArACsAKwArACsAKwArACsAKwArAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBPAE8ATwBPAE8ATwBPAE8AJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeAAQAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUABQAAQAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAUABQAFAAUABQAAQABAAEACsABAAEACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAKwBQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAA0ADQANAA0ADQANAA0ADQAeACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAArACsAKwArAFAAUABQAFAAUAANAA0ADQANAA0ADQAUACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQANAA0ADQANAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAANACsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAB4AHgAeAB4AHgArACsAKwArACsAKwAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANAFAABAAEAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAEAAQABAAEAB4ABAAEAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsABAAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLAA0ADQArAB4ABABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUAAeAFAAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAAEAAQADgANAA0AEwATAB4AHgAeAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAFAAUABQAFAABAAEACsAKwAEAA0ADQAeAFAAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcAFwADQANAA0AKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQAKwAEAAQAKwArAAQABAAEAAQAUAAEAFAABAAEAA0ADQANACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABABQAA4AUAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANAFAADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAaABoAGgAaAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAJAAkACQAJAAkACQAJABYAEQArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AHgAeACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAARwBHABUARwAJACsAKwArACsAKwArACsAKwArACsAKwAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAKwArACsAKwArACsAKwArACsAKwArACsAKwBRAFEAUQBRACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAHgAEAAQADQAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAeAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQAHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAKwArAFAAKwArAFAAUAArACsAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAHgAeAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeACsAKwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4ABAAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAHgAeAA0ADQANAA0AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArAAQABAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwBQAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArABsAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAB4AHgAeAB4ABAAEAAQABAAEAAQABABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArABYAFgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAGgBQAFAAUAAaAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUAArACsAKwArACsAKwBQACsAKwArACsAUAArAFAAKwBQACsAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUAArAFAAKwBQACsAUAArAFAAUAArAFAAKwArAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAKwBQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeACUAJQAlAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAHgAlACUAJQAlACUAIAAgACAAJQAlACAAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACEAIQAhACEAIQAlACUAIAAgACUAJQAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAlACUAJQAlACAAIAAgACUAIAAgACAAJQAlACUAJQAlACUAJQAgACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAlAB4AJQAeACUAJQAlACUAJQAgACUAJQAlACUAHgAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACAAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABcAFwAXABUAFQAVAB4AHgAeAB4AJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAgACUAJQAgACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAIAAgACUAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACAAIAAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACAAIAAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAA=='; - /* @flow */ var LETTER_NUMBER_MODIFIER = 50; // Non-tailorable Line Breaking Classes var BK = 1; // Cause a line break (after) - var CR = 2; // Cause a line break (after), except between CR and LF - var LF = 3; // Cause a line break (after) + var CR$1 = 2; // Cause a line break (after), except between CR and LF + var LF$1 = 3; // Cause a line break (after) var CM = 4; // Prohibit a line break between the character and the preceding character var NL = 5; // Cause a line break (after) var WJ = 7; // Prohibit line breaks before and after var ZW = 8; // Provide a break opportunity var GL = 9; // Prohibit line breaks before and after var SP = 10; // Enable indirect line breaks - var ZWJ = 11; // Prohibit line breaks within joiner sequences + var ZWJ$1 = 11; // Prohibit line breaks within joiner sequences // Break Opportunities var B2 = 12; // Provide a line break opportunity before and after the character var BA = 13; // Generally provide a line break opportunity after the character @@ -26066,27 +26110,28 @@ function unzipSync(data) { var JL = 38; // Form Korean syllable blocks var JV = 39; // Form Korean syllable blocks var JT = 40; // Form Korean syllable blocks - var RI = 41; // Keep pairs together. For pairs; break before and after other classes + var RI$1 = 41; // Keep pairs together. For pairs; break before and after other classes var SA = 42; // Provide a line break opportunity contingent on additional, language-specific context analysis var XX = 43; // Have as yet unknown line breaking behavior or unassigned code positions + var ea_OP = [0x2329, 0xff08]; var BREAK_MANDATORY = '!'; - var BREAK_NOT_ALLOWED = '×'; - var BREAK_ALLOWED = '÷'; - var UnicodeTrie = createTrieFromBase64(base64); + var BREAK_NOT_ALLOWED$1 = '×'; + var BREAK_ALLOWED$1 = '÷'; + var UnicodeTrie$1 = createTrieFromBase64$1(base64$1); var ALPHABETICS = [AL, HL]; - var HARD_LINE_BREAKS = [BK, CR, LF, NL]; - var SPACE = [SP, ZW]; + var HARD_LINE_BREAKS = [BK, CR$1, LF$1, NL]; + var SPACE$1 = [SP, ZW]; var PREFIX_POSTFIX = [PR, PO]; - var LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE); + var LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE$1); var KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3]; var HYPHEN = [HY, BA]; var codePointsToCharacterClasses = function (codePoints, lineBreak) { if (lineBreak === void 0) { lineBreak = 'strict'; } var types = []; - var indicies = []; + var indices = []; var categories = []; codePoints.forEach(function (codePoint, index) { - var classType = UnicodeTrie.get(codePoint); + var classType = UnicodeTrie$1.get(codePoint); if (classType > LETTER_NUMBER_MODIFIER) { categories.push(true); classType -= LETTER_NUMBER_MODIFIER; @@ -26097,27 +26142,27 @@ function unzipSync(data) { if (['normal', 'auto', 'loose'].indexOf(lineBreak) !== -1) { // U+2010, – U+2013, 〜 U+301C, ゠ U+30A0 if ([0x2010, 0x2013, 0x301c, 0x30a0].indexOf(codePoint) !== -1) { - indicies.push(index); + indices.push(index); return types.push(CB); } } - if (classType === CM || classType === ZWJ) { + if (classType === CM || classType === ZWJ$1) { // LB10 Treat any remaining combining mark or ZWJ as AL. if (index === 0) { - indicies.push(index); + indices.push(index); return types.push(AL); } // LB9 Do not break a combining character sequence; treat it as if it has the line breaking class of // the base character in all of the following rules. Treat ZWJ as if it were CM. var prev = types[index - 1]; if (LINE_BREAKS.indexOf(prev) === -1) { - indicies.push(indicies[index - 1]); + indices.push(indices[index - 1]); return types.push(prev); } - indicies.push(index); + indices.push(index); return types.push(AL); } - indicies.push(index); + indices.push(index); if (classType === CJ) { return types.push(lineBreak === 'strict' ? NS : ID); } @@ -26140,7 +26185,7 @@ function unzipSync(data) { } types.push(classType); }); - return [indicies, types, categories]; + return [indices, types, categories]; }; var isAdjacentWithSpaceIgnored = function (a, b, currentIndex, classTypes) { var current = classTypes[currentIndex]; @@ -26197,11 +26242,11 @@ function unzipSync(data) { }; var _lineBreakAtIndex = function (codePoints, classTypes, indicies, index, forbiddenBreaks) { if (indicies[index] === 0) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } var currentIndex = index - 1; if (Array.isArray(forbiddenBreaks) && forbiddenBreaks[currentIndex] === true) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } var beforeIndex = currentIndex - 1; var afterIndex = currentIndex + 1; @@ -26210,101 +26255,105 @@ function unzipSync(data) { // LB5 Treat CR followed by LF, as well as CR, LF, and NL as hard line breaks. var before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0; var next = classTypes[afterIndex]; - if (current === CR && next === LF) { - return BREAK_NOT_ALLOWED; + if (current === CR$1 && next === LF$1) { + return BREAK_NOT_ALLOWED$1; } if (HARD_LINE_BREAKS.indexOf(current) !== -1) { return BREAK_MANDATORY; } // LB6 Do not break before hard line breaks. if (HARD_LINE_BREAKS.indexOf(next) !== -1) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB7 Do not break before spaces or zero width space. - if (SPACE.indexOf(next) !== -1) { - return BREAK_NOT_ALLOWED; + if (SPACE$1.indexOf(next) !== -1) { + return BREAK_NOT_ALLOWED$1; } // LB8 Break before any character following a zero-width space, even if one or more spaces intervene. if (previousNonSpaceClassType(currentIndex, classTypes) === ZW) { - return BREAK_ALLOWED; + return BREAK_ALLOWED$1; } - // LB8a Do not break between a zero width joiner and an ideograph, emoji base or emoji modifier. - if (UnicodeTrie.get(codePoints[currentIndex]) === ZWJ && (next === ID || next === EB || next === EM)) { - return BREAK_NOT_ALLOWED; + // LB8a Do not break after a zero width joiner. + if (UnicodeTrie$1.get(codePoints[currentIndex]) === ZWJ$1) { + return BREAK_NOT_ALLOWED$1; + } + // zwj emojis + if ((current === EB || current === EM) && UnicodeTrie$1.get(codePoints[afterIndex]) === ZWJ$1) { + return BREAK_NOT_ALLOWED$1; } // LB11 Do not break before or after Word joiner and related characters. if (current === WJ || next === WJ) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB12 Do not break after NBSP and related characters. if (current === GL) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB12a Do not break before NBSP and related characters, except after spaces and hyphens. if ([SP, BA, HY].indexOf(current) === -1 && next === GL) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB13 Do not break before ‘]’ or ‘!’ or ‘;’ or ‘/’, even after spaces. if ([CL, CP, EX, IS, SY].indexOf(next) !== -1) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB14 Do not break after ‘[’, even after spaces. if (previousNonSpaceClassType(currentIndex, classTypes) === OP) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB15 Do not break within ‘”[’, even with intervening spaces. if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB16 Do not break between closing punctuation and a nonstarter (lb=NS), even with intervening spaces. if (isAdjacentWithSpaceIgnored([CL, CP], NS, currentIndex, classTypes)) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB17 Do not break within ‘——’, even with intervening spaces. if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB18 Break after spaces. if (current === SP) { - return BREAK_ALLOWED; + return BREAK_ALLOWED$1; } // LB19 Do not break before or after quotation marks, such as ‘ ” ’. if (current === QU || next === QU) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB20 Break before and after unresolved CB. if (next === CB || current === CB) { - return BREAK_ALLOWED; + return BREAK_ALLOWED$1; } // LB21 Do not break before hyphen-minus, other hyphens, fixed-width spaces, small kana, and other non-starters, or after acute accents. if ([BA, HY, NS].indexOf(next) !== -1 || current === BB) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB21a Don't break after Hebrew + Hyphen. if (before === HL && HYPHEN.indexOf(current) !== -1) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB21b Don’t break between Solidus and Hebrew letters. if (current === SY && next === HL) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } - // LB22 Do not break between two ellipses, or between letters, numbers or exclamations and ellipsis. - if (next === IN && ALPHABETICS.concat(IN, EX, NU, ID, EB, EM).indexOf(current) !== -1) { - return BREAK_NOT_ALLOWED; + // LB22 Do not break before ellipsis. + if (next === IN) { + return BREAK_NOT_ALLOWED$1; } // LB23 Do not break between digits and letters. if ((ALPHABETICS.indexOf(next) !== -1 && current === NU) || (ALPHABETICS.indexOf(current) !== -1 && next === NU)) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB23a Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes. if ((current === PR && [ID, EB, EM].indexOf(next) !== -1) || ([ID, EB, EM].indexOf(current) !== -1 && next === PO)) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB24 Do not break between numeric prefix/postfix and letters, or between letters and prefix/postfix. if ((ALPHABETICS.indexOf(current) !== -1 && PREFIX_POSTFIX.indexOf(next) !== -1) || (PREFIX_POSTFIX.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1)) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB25 Do not break between the following pairs of classes relevant to numbers: if ( @@ -26315,7 +26364,7 @@ function unzipSync(data) { ([OP, HY].indexOf(current) !== -1 && next === NU) || // NU × (NU | SY | IS) (current === NU && [NU, SY, IS].indexOf(next) !== -1)) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // NU (NU | SY | IS)* × (NU | SY | IS | CL | CP) if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) { @@ -26323,7 +26372,7 @@ function unzipSync(data) { while (prevIndex >= 0) { var type = classTypes[prevIndex]; if (type === NU) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } else if ([SY, IS].indexOf(type) !== -1) { prevIndex--; @@ -26339,7 +26388,7 @@ function unzipSync(data) { while (prevIndex >= 0) { var type = classTypes[prevIndex]; if (type === NU) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } else if ([SY, IS].indexOf(type) !== -1) { prevIndex--; @@ -26353,34 +26402,36 @@ function unzipSync(data) { if ((JL === current && [JL, JV, H2, H3].indexOf(next) !== -1) || ([JV, H2].indexOf(current) !== -1 && [JV, JT].indexOf(next) !== -1) || ([JT, H3].indexOf(current) !== -1 && next === JT)) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB27 Treat a Korean Syllable Block the same as ID. if ((KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 && [IN, PO].indexOf(next) !== -1) || (KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR)) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB28 Do not break between alphabetics (“at”). if (ALPHABETICS.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB29 Do not break between numeric punctuation and alphabetics (“e.g.”). if (current === IS && ALPHABETICS.indexOf(next) !== -1) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB30 Do not break between letters, numbers, or ordinary symbols and opening or closing parentheses. - if ((ALPHABETICS.concat(NU).indexOf(current) !== -1 && next === OP) || + if ((ALPHABETICS.concat(NU).indexOf(current) !== -1 && + next === OP && + ea_OP.indexOf(codePoints[afterIndex]) === -1) || (ALPHABETICS.concat(NU).indexOf(next) !== -1 && current === CP)) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } // LB30a Break between two regional indicator symbols if and only if there are an even number of regional // indicators preceding the position of the break. - if (current === RI && next === RI) { + if (current === RI$1 && next === RI$1) { var i = indicies[currentIndex]; var count = 1; while (i > 0) { i--; - if (classTypes[i] === RI) { + if (classTypes[i] === RI$1) { count++; } else { @@ -26388,14 +26439,14 @@ function unzipSync(data) { } } if (count % 2 !== 0) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } } // LB30b Do not break between an emoji base and an emoji modifier. if (current === EB && next === EM) { - return BREAK_NOT_ALLOWED; + return BREAK_NOT_ALLOWED$1; } - return BREAK_ALLOWED; + return BREAK_ALLOWED$1; }; var cssFormattedClasses = function (codePoints, options) { if (!options) { @@ -26420,12 +26471,12 @@ function unzipSync(data) { this.end = end; } Break.prototype.slice = function () { - return fromCodePoint.apply(void 0, this.codePoints.slice(this.start, this.end)); + return fromCodePoint$1.apply(void 0, this.codePoints.slice(this.start, this.end)); }; return Break; }()); var LineBreaker = function (str, options) { - var codePoints = toCodePoints(str); + var codePoints = toCodePoints$1(str); var _a = cssFormattedClasses(codePoints, options), indicies = _a[0], classTypes = _a[1], forbiddenBreakpoints = _a[2]; var length = codePoints.length; var lastEnd = 0; @@ -26435,11 +26486,11 @@ function unzipSync(data) { if (nextIndex >= length) { return { done: true, value: null }; } - var lineBreak = BREAK_NOT_ALLOWED; + var lineBreak = BREAK_NOT_ALLOWED$1; while (nextIndex < length && (lineBreak = _lineBreakAtIndex(codePoints, classTypes, indicies, ++nextIndex, forbiddenBreakpoints)) === - BREAK_NOT_ALLOWED) { } - if (lineBreak !== BREAK_NOT_ALLOWED || nextIndex === length) { + BREAK_NOT_ALLOWED$1) { } + if (lineBreak !== BREAK_NOT_ALLOWED$1 || nextIndex === length) { var value = new Break(codePoints, lineBreak, lastEnd, nextIndex); lastEnd = nextIndex; return { value: value, done: false }; @@ -26450,42 +26501,6 @@ function unzipSync(data) { }; // https://www.w3.org/TR/css-syntax-3 - var TokenType; - (function (TokenType) { - TokenType[TokenType["STRING_TOKEN"] = 0] = "STRING_TOKEN"; - TokenType[TokenType["BAD_STRING_TOKEN"] = 1] = "BAD_STRING_TOKEN"; - TokenType[TokenType["LEFT_PARENTHESIS_TOKEN"] = 2] = "LEFT_PARENTHESIS_TOKEN"; - TokenType[TokenType["RIGHT_PARENTHESIS_TOKEN"] = 3] = "RIGHT_PARENTHESIS_TOKEN"; - TokenType[TokenType["COMMA_TOKEN"] = 4] = "COMMA_TOKEN"; - TokenType[TokenType["HASH_TOKEN"] = 5] = "HASH_TOKEN"; - TokenType[TokenType["DELIM_TOKEN"] = 6] = "DELIM_TOKEN"; - TokenType[TokenType["AT_KEYWORD_TOKEN"] = 7] = "AT_KEYWORD_TOKEN"; - TokenType[TokenType["PREFIX_MATCH_TOKEN"] = 8] = "PREFIX_MATCH_TOKEN"; - TokenType[TokenType["DASH_MATCH_TOKEN"] = 9] = "DASH_MATCH_TOKEN"; - TokenType[TokenType["INCLUDE_MATCH_TOKEN"] = 10] = "INCLUDE_MATCH_TOKEN"; - TokenType[TokenType["LEFT_CURLY_BRACKET_TOKEN"] = 11] = "LEFT_CURLY_BRACKET_TOKEN"; - TokenType[TokenType["RIGHT_CURLY_BRACKET_TOKEN"] = 12] = "RIGHT_CURLY_BRACKET_TOKEN"; - TokenType[TokenType["SUFFIX_MATCH_TOKEN"] = 13] = "SUFFIX_MATCH_TOKEN"; - TokenType[TokenType["SUBSTRING_MATCH_TOKEN"] = 14] = "SUBSTRING_MATCH_TOKEN"; - TokenType[TokenType["DIMENSION_TOKEN"] = 15] = "DIMENSION_TOKEN"; - TokenType[TokenType["PERCENTAGE_TOKEN"] = 16] = "PERCENTAGE_TOKEN"; - TokenType[TokenType["NUMBER_TOKEN"] = 17] = "NUMBER_TOKEN"; - TokenType[TokenType["FUNCTION"] = 18] = "FUNCTION"; - TokenType[TokenType["FUNCTION_TOKEN"] = 19] = "FUNCTION_TOKEN"; - TokenType[TokenType["IDENT_TOKEN"] = 20] = "IDENT_TOKEN"; - TokenType[TokenType["COLUMN_TOKEN"] = 21] = "COLUMN_TOKEN"; - TokenType[TokenType["URL_TOKEN"] = 22] = "URL_TOKEN"; - TokenType[TokenType["BAD_URL_TOKEN"] = 23] = "BAD_URL_TOKEN"; - TokenType[TokenType["CDC_TOKEN"] = 24] = "CDC_TOKEN"; - TokenType[TokenType["CDO_TOKEN"] = 25] = "CDO_TOKEN"; - TokenType[TokenType["COLON_TOKEN"] = 26] = "COLON_TOKEN"; - TokenType[TokenType["SEMICOLON_TOKEN"] = 27] = "SEMICOLON_TOKEN"; - TokenType[TokenType["LEFT_SQUARE_BRACKET_TOKEN"] = 28] = "LEFT_SQUARE_BRACKET_TOKEN"; - TokenType[TokenType["RIGHT_SQUARE_BRACKET_TOKEN"] = 29] = "RIGHT_SQUARE_BRACKET_TOKEN"; - TokenType[TokenType["UNICODE_RANGE_TOKEN"] = 30] = "UNICODE_RANGE_TOKEN"; - TokenType[TokenType["WHITESPACE_TOKEN"] = 31] = "WHITESPACE_TOKEN"; - TokenType[TokenType["EOF_TOKEN"] = 32] = "EOF_TOKEN"; - })(TokenType || (TokenType = {})); var FLAG_UNRESTRICTED = 1 << 0; var FLAG_ID = 1 << 1; var FLAG_INTEGER = 1 << 2; @@ -26494,7 +26509,7 @@ function unzipSync(data) { var SOLIDUS = 0x002f; var REVERSE_SOLIDUS = 0x005c; var CHARACTER_TABULATION = 0x0009; - var SPACE$1 = 0x0020; + var SPACE = 0x0020; var QUOTATION_MARK = 0x0022; var EQUALS_SIGN = 0x003d; var NUMBER_SIGN = 0x0023; @@ -26553,7 +26568,7 @@ function unzipSync(data) { var isLetter = function (codePoint) { return isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint); }; var isNonASCIICodePoint = function (codePoint) { return codePoint >= CONTROL; }; var isWhiteSpace = function (codePoint) { - return codePoint === LINE_FEED || codePoint === CHARACTER_TABULATION || codePoint === SPACE$1; + return codePoint === LINE_FEED || codePoint === CHARACTER_TABULATION || codePoint === SPACE; }; var isNameStartCodePoint = function (codePoint) { return isLetter(codePoint) || isNonASCIICodePoint(codePoint) || codePoint === LOW_LINE; @@ -26610,7 +26625,7 @@ function unzipSync(data) { while (isDigit(codePoints[c])) { integers.push(codePoints[c++]); } - var int = integers.length ? parseInt(fromCodePoint.apply(void 0, integers), 10) : 0; + var int = integers.length ? parseInt(fromCodePoint$1.apply(void 0, integers), 10) : 0; if (codePoints[c] === FULL_STOP) { c++; } @@ -26619,7 +26634,7 @@ function unzipSync(data) { fraction.push(codePoints[c++]); } var fracd = fraction.length; - var frac = fracd ? parseInt(fromCodePoint.apply(void 0, fraction), 10) : 0; + var frac = fracd ? parseInt(fromCodePoint$1.apply(void 0, fraction), 10) : 0; if (codePoints[c] === E || codePoints[c] === e) { c++; } @@ -26634,48 +26649,48 @@ function unzipSync(data) { while (isDigit(codePoints[c])) { exponent.push(codePoints[c++]); } - var exp = exponent.length ? parseInt(fromCodePoint.apply(void 0, exponent), 10) : 0; + var exp = exponent.length ? parseInt(fromCodePoint$1.apply(void 0, exponent), 10) : 0; return sign * (int + frac * Math.pow(10, -fracd)) * Math.pow(10, expsign * exp); }; var LEFT_PARENTHESIS_TOKEN = { - type: TokenType.LEFT_PARENTHESIS_TOKEN + type: 2 /* LEFT_PARENTHESIS_TOKEN */ }; var RIGHT_PARENTHESIS_TOKEN = { - type: TokenType.RIGHT_PARENTHESIS_TOKEN - }; - var COMMA_TOKEN = { type: TokenType.COMMA_TOKEN }; - var SUFFIX_MATCH_TOKEN = { type: TokenType.SUFFIX_MATCH_TOKEN }; - var PREFIX_MATCH_TOKEN = { type: TokenType.PREFIX_MATCH_TOKEN }; - var COLUMN_TOKEN = { type: TokenType.COLUMN_TOKEN }; - var DASH_MATCH_TOKEN = { type: TokenType.DASH_MATCH_TOKEN }; - var INCLUDE_MATCH_TOKEN = { type: TokenType.INCLUDE_MATCH_TOKEN }; + type: 3 /* RIGHT_PARENTHESIS_TOKEN */ + }; + var COMMA_TOKEN = { type: 4 /* COMMA_TOKEN */ }; + var SUFFIX_MATCH_TOKEN = { type: 13 /* SUFFIX_MATCH_TOKEN */ }; + var PREFIX_MATCH_TOKEN = { type: 8 /* PREFIX_MATCH_TOKEN */ }; + var COLUMN_TOKEN = { type: 21 /* COLUMN_TOKEN */ }; + var DASH_MATCH_TOKEN = { type: 9 /* DASH_MATCH_TOKEN */ }; + var INCLUDE_MATCH_TOKEN = { type: 10 /* INCLUDE_MATCH_TOKEN */ }; var LEFT_CURLY_BRACKET_TOKEN = { - type: TokenType.LEFT_CURLY_BRACKET_TOKEN + type: 11 /* LEFT_CURLY_BRACKET_TOKEN */ }; var RIGHT_CURLY_BRACKET_TOKEN = { - type: TokenType.RIGHT_CURLY_BRACKET_TOKEN - }; - var SUBSTRING_MATCH_TOKEN = { type: TokenType.SUBSTRING_MATCH_TOKEN }; - var BAD_URL_TOKEN = { type: TokenType.BAD_URL_TOKEN }; - var BAD_STRING_TOKEN = { type: TokenType.BAD_STRING_TOKEN }; - var CDO_TOKEN = { type: TokenType.CDO_TOKEN }; - var CDC_TOKEN = { type: TokenType.CDC_TOKEN }; - var COLON_TOKEN = { type: TokenType.COLON_TOKEN }; - var SEMICOLON_TOKEN = { type: TokenType.SEMICOLON_TOKEN }; + type: 12 /* RIGHT_CURLY_BRACKET_TOKEN */ + }; + var SUBSTRING_MATCH_TOKEN = { type: 14 /* SUBSTRING_MATCH_TOKEN */ }; + var BAD_URL_TOKEN = { type: 23 /* BAD_URL_TOKEN */ }; + var BAD_STRING_TOKEN = { type: 1 /* BAD_STRING_TOKEN */ }; + var CDO_TOKEN = { type: 25 /* CDO_TOKEN */ }; + var CDC_TOKEN = { type: 24 /* CDC_TOKEN */ }; + var COLON_TOKEN = { type: 26 /* COLON_TOKEN */ }; + var SEMICOLON_TOKEN = { type: 27 /* SEMICOLON_TOKEN */ }; var LEFT_SQUARE_BRACKET_TOKEN = { - type: TokenType.LEFT_SQUARE_BRACKET_TOKEN + type: 28 /* LEFT_SQUARE_BRACKET_TOKEN */ }; var RIGHT_SQUARE_BRACKET_TOKEN = { - type: TokenType.RIGHT_SQUARE_BRACKET_TOKEN + type: 29 /* RIGHT_SQUARE_BRACKET_TOKEN */ }; - var WHITESPACE_TOKEN = { type: TokenType.WHITESPACE_TOKEN }; - var EOF_TOKEN = { type: TokenType.EOF_TOKEN }; + var WHITESPACE_TOKEN = { type: 31 /* WHITESPACE_TOKEN */ }; + var EOF_TOKEN = { type: 32 /* EOF_TOKEN */ }; var Tokenizer = /** @class */ (function () { function Tokenizer() { this._value = []; } Tokenizer.prototype.write = function (chunk) { - this._value = this._value.concat(toCodePoints(chunk)); + this._value = this._value.concat(toCodePoints$1(chunk)); }; Tokenizer.prototype.read = function () { var tokens = []; @@ -26698,7 +26713,7 @@ function unzipSync(data) { if (isNameCodePoint(c1) || isValidEscape(c2, c3)) { var flags = isIdentifierStart(c1, c2, c3) ? FLAG_ID : FLAG_UNRESTRICTED; var value = this.consumeName(); - return { type: TokenType.HASH_TOKEN, value: value, flags: flags }; + return { type: 5 /* HASH_TOKEN */, value: value, flags: flags }; } break; case DOLLAR_SIGN: @@ -26787,7 +26802,7 @@ function unzipSync(data) { var a3 = this.peekCodePoint(2); if (isIdentifierStart(a1, a2, a3)) { var value = this.consumeName(); - return { type: TokenType.AT_KEYWORD_TOKEN, value: value }; + return { type: 7 /* AT_KEYWORD_TOKEN */, value: value }; } break; case LEFT_SQUARE_BRACKET: @@ -26851,7 +26866,7 @@ function unzipSync(data) { this.reconsumeCodePoint(codePoint); return this.consumeIdentLikeToken(); } - return { type: TokenType.DELIM_TOKEN, value: fromCodePoint(codePoint) }; + return { type: 6 /* DELIM_TOKEN */, value: fromCodePoint$1(codePoint) }; }; Tokenizer.prototype.consumeCodePoint = function () { var value = this._value.shift(); @@ -26880,11 +26895,11 @@ function unzipSync(data) { questionMarks = true; } if (questionMarks) { - var start_1 = parseInt(fromCodePoint.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? ZERO : digit); })), 16); - var end = parseInt(fromCodePoint.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? F : digit); })), 16); - return { type: TokenType.UNICODE_RANGE_TOKEN, start: start_1, end: end }; + var start_1 = parseInt(fromCodePoint$1.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? ZERO : digit); })), 16); + var end = parseInt(fromCodePoint$1.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? F : digit); })), 16); + return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start_1, end: end }; } - var start = parseInt(fromCodePoint.apply(void 0, digits), 16); + var start = parseInt(fromCodePoint$1.apply(void 0, digits), 16); if (this.peekCodePoint(0) === HYPHEN_MINUS && isHex(this.peekCodePoint(1))) { this.consumeCodePoint(); codePoint = this.consumeCodePoint(); @@ -26893,11 +26908,11 @@ function unzipSync(data) { endDigits.push(codePoint); codePoint = this.consumeCodePoint(); } - var end = parseInt(fromCodePoint.apply(void 0, endDigits), 16); - return { type: TokenType.UNICODE_RANGE_TOKEN, start: start, end: end }; + var end = parseInt(fromCodePoint$1.apply(void 0, endDigits), 16); + return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start, end: end }; } else { - return { type: TokenType.UNICODE_RANGE_TOKEN, start: start, end: start }; + return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start, end: start }; } }; Tokenizer.prototype.consumeIdentLikeToken = function () { @@ -26908,24 +26923,24 @@ function unzipSync(data) { } else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) { this.consumeCodePoint(); - return { type: TokenType.FUNCTION_TOKEN, value: value }; + return { type: 19 /* FUNCTION_TOKEN */, value: value }; } - return { type: TokenType.IDENT_TOKEN, value: value }; + return { type: 20 /* IDENT_TOKEN */, value: value }; }; Tokenizer.prototype.consumeUrlToken = function () { var value = []; this.consumeWhiteSpace(); if (this.peekCodePoint(0) === EOF) { - return { type: TokenType.URL_TOKEN, value: '' }; + return { type: 22 /* URL_TOKEN */, value: '' }; } var next = this.peekCodePoint(0); if (next === APOSTROPHE || next === QUOTATION_MARK) { var stringToken = this.consumeStringToken(this.consumeCodePoint()); - if (stringToken.type === TokenType.STRING_TOKEN) { + if (stringToken.type === 0 /* STRING_TOKEN */) { this.consumeWhiteSpace(); if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) { this.consumeCodePoint(); - return { type: TokenType.URL_TOKEN, value: stringToken.value }; + return { type: 22 /* URL_TOKEN */, value: stringToken.value }; } } this.consumeBadUrlRemnants(); @@ -26934,13 +26949,13 @@ function unzipSync(data) { while (true) { var codePoint = this.consumeCodePoint(); if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) { - return { type: TokenType.URL_TOKEN, value: fromCodePoint.apply(void 0, value) }; + return { type: 22 /* URL_TOKEN */, value: fromCodePoint$1.apply(void 0, value) }; } else if (isWhiteSpace(codePoint)) { this.consumeWhiteSpace(); if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) { this.consumeCodePoint(); - return { type: TokenType.URL_TOKEN, value: fromCodePoint.apply(void 0, value) }; + return { type: 22 /* URL_TOKEN */, value: fromCodePoint$1.apply(void 0, value) }; } this.consumeBadUrlRemnants(); return BAD_URL_TOKEN; @@ -26983,11 +26998,11 @@ function unzipSync(data) { } }; Tokenizer.prototype.consumeStringSlice = function (count) { - var SLICE_STACK_SIZE = 60000; + var SLICE_STACK_SIZE = 50000; var value = ''; while (count > 0) { var amount = Math.min(SLICE_STACK_SIZE, count); - value += fromCodePoint.apply(void 0, this._value.splice(0, amount)); + value += fromCodePoint$1.apply(void 0, this._value.splice(0, amount)); count -= amount; } this._value.shift(); @@ -27000,7 +27015,7 @@ function unzipSync(data) { var codePoint = this._value[i]; if (codePoint === EOF || codePoint === undefined || codePoint === endingCodePoint) { value += this.consumeStringSlice(i); - return { type: TokenType.STRING_TOKEN, value: value }; + return { type: 0 /* STRING_TOKEN */, value: value }; } if (codePoint === LINE_FEED) { this._value.splice(0, i); @@ -27016,7 +27031,7 @@ function unzipSync(data) { } else if (isValidEscape(codePoint, next)) { value += this.consumeStringSlice(i); - value += fromCodePoint(this.consumeEscapedCodePoint()); + value += fromCodePoint$1(this.consumeEscapedCodePoint()); i = -1; } } @@ -27062,20 +27077,20 @@ function unzipSync(data) { var c3 = this.peekCodePoint(2); if (isIdentifierStart(c1, c2, c3)) { var unit = this.consumeName(); - return { type: TokenType.DIMENSION_TOKEN, number: number, flags: flags, unit: unit }; + return { type: 15 /* DIMENSION_TOKEN */, number: number, flags: flags, unit: unit }; } if (c1 === PERCENTAGE_SIGN) { this.consumeCodePoint(); - return { type: TokenType.PERCENTAGE_TOKEN, number: number, flags: flags }; + return { type: 16 /* PERCENTAGE_TOKEN */, number: number, flags: flags }; } - return { type: TokenType.NUMBER_TOKEN, number: number, flags: flags }; + return { type: 17 /* NUMBER_TOKEN */, number: number, flags: flags }; }; Tokenizer.prototype.consumeEscapedCodePoint = function () { var codePoint = this.consumeCodePoint(); if (isHex(codePoint)) { - var hex = fromCodePoint(codePoint); + var hex = fromCodePoint$1(codePoint); while (isHex(this.peekCodePoint(0)) && hex.length < 6) { - hex += fromCodePoint(this.consumeCodePoint()); + hex += fromCodePoint$1(this.consumeCodePoint()); } if (isWhiteSpace(this.peekCodePoint(0))) { this.consumeCodePoint(); @@ -27096,10 +27111,10 @@ function unzipSync(data) { while (true) { var codePoint = this.consumeCodePoint(); if (isNameCodePoint(codePoint)) { - result += fromCodePoint(codePoint); + result += fromCodePoint$1(codePoint); } else if (isValidEscape(codePoint, this.peekCodePoint(0))) { - result += fromCodePoint(this.consumeEscapedCodePoint()); + result += fromCodePoint$1(this.consumeEscapedCodePoint()); } else { this.reconsumeCodePoint(codePoint); @@ -27127,18 +27142,18 @@ function unzipSync(data) { }; Parser.prototype.parseComponentValue = function () { var token = this.consumeToken(); - while (token.type === TokenType.WHITESPACE_TOKEN) { + while (token.type === 31 /* WHITESPACE_TOKEN */) { token = this.consumeToken(); } - if (token.type === TokenType.EOF_TOKEN) { + if (token.type === 32 /* EOF_TOKEN */) { throw new SyntaxError("Error parsing CSS component value, unexpected EOF"); } this.reconsumeToken(token); var value = this.consumeComponentValue(); do { token = this.consumeToken(); - } while (token.type === TokenType.WHITESPACE_TOKEN); - if (token.type === TokenType.EOF_TOKEN) { + } while (token.type === 31 /* WHITESPACE_TOKEN */); + if (token.type === 32 /* EOF_TOKEN */) { return value; } throw new SyntaxError("Error parsing CSS component value, multiple values found when expecting only one"); @@ -27147,7 +27162,7 @@ function unzipSync(data) { var values = []; while (true) { var value = this.consumeComponentValue(); - if (value.type === TokenType.EOF_TOKEN) { + if (value.type === 32 /* EOF_TOKEN */) { return values; } values.push(value); @@ -27157,11 +27172,11 @@ function unzipSync(data) { Parser.prototype.consumeComponentValue = function () { var token = this.consumeToken(); switch (token.type) { - case TokenType.LEFT_CURLY_BRACKET_TOKEN: - case TokenType.LEFT_SQUARE_BRACKET_TOKEN: - case TokenType.LEFT_PARENTHESIS_TOKEN: + case 11 /* LEFT_CURLY_BRACKET_TOKEN */: + case 28 /* LEFT_SQUARE_BRACKET_TOKEN */: + case 2 /* LEFT_PARENTHESIS_TOKEN */: return this.consumeSimpleBlock(token.type); - case TokenType.FUNCTION_TOKEN: + case 19 /* FUNCTION_TOKEN */: return this.consumeFunction(token); } return token; @@ -27170,7 +27185,7 @@ function unzipSync(data) { var block = { type: type, values: [] }; var token = this.consumeToken(); while (true) { - if (token.type === TokenType.EOF_TOKEN || isEndingTokenFor(token, type)) { + if (token.type === 32 /* EOF_TOKEN */ || isEndingTokenFor(token, type)) { return block; } this.reconsumeToken(token); @@ -27182,11 +27197,11 @@ function unzipSync(data) { var cssFunction = { name: functionToken.value, values: [], - type: TokenType.FUNCTION + type: 18 /* FUNCTION */ }; while (true) { var token = this.consumeToken(); - if (token.type === TokenType.EOF_TOKEN || token.type === TokenType.RIGHT_PARENTHESIS_TOKEN) { + if (token.type === 32 /* EOF_TOKEN */ || token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */) { return cssFunction; } this.reconsumeToken(token); @@ -27202,22 +27217,22 @@ function unzipSync(data) { }; return Parser; }()); - var isDimensionToken = function (token) { return token.type === TokenType.DIMENSION_TOKEN; }; - var isNumberToken = function (token) { return token.type === TokenType.NUMBER_TOKEN; }; - var isIdentToken = function (token) { return token.type === TokenType.IDENT_TOKEN; }; - var isStringToken = function (token) { return token.type === TokenType.STRING_TOKEN; }; + var isDimensionToken = function (token) { return token.type === 15 /* DIMENSION_TOKEN */; }; + var isNumberToken = function (token) { return token.type === 17 /* NUMBER_TOKEN */; }; + var isIdentToken = function (token) { return token.type === 20 /* IDENT_TOKEN */; }; + var isStringToken = function (token) { return token.type === 0 /* STRING_TOKEN */; }; var isIdentWithValue = function (token, value) { return isIdentToken(token) && token.value === value; }; - var nonWhiteSpace = function (token) { return token.type !== TokenType.WHITESPACE_TOKEN; }; + var nonWhiteSpace = function (token) { return token.type !== 31 /* WHITESPACE_TOKEN */; }; var nonFunctionArgSeparator = function (token) { - return token.type !== TokenType.WHITESPACE_TOKEN && token.type !== TokenType.COMMA_TOKEN; + return token.type !== 31 /* WHITESPACE_TOKEN */ && token.type !== 4 /* COMMA_TOKEN */; }; var parseFunctionArgs = function (tokens) { var args = []; var arg = []; tokens.forEach(function (token) { - if (token.type === TokenType.COMMA_TOKEN) { + if (token.type === 4 /* COMMA_TOKEN */) { if (arg.length === 0) { throw new Error("Error parsing function args, zero tokens for arg"); } @@ -27225,7 +27240,7 @@ function unzipSync(data) { arg = []; return; } - if (token.type !== TokenType.WHITESPACE_TOKEN) { + if (token.type !== 31 /* WHITESPACE_TOKEN */) { arg.push(token); } }); @@ -27235,37 +27250,37 @@ function unzipSync(data) { return args; }; var isEndingTokenFor = function (token, type) { - if (type === TokenType.LEFT_CURLY_BRACKET_TOKEN && token.type === TokenType.RIGHT_CURLY_BRACKET_TOKEN) { + if (type === 11 /* LEFT_CURLY_BRACKET_TOKEN */ && token.type === 12 /* RIGHT_CURLY_BRACKET_TOKEN */) { return true; } - if (type === TokenType.LEFT_SQUARE_BRACKET_TOKEN && token.type === TokenType.RIGHT_SQUARE_BRACKET_TOKEN) { + if (type === 28 /* LEFT_SQUARE_BRACKET_TOKEN */ && token.type === 29 /* RIGHT_SQUARE_BRACKET_TOKEN */) { return true; } - return type === TokenType.LEFT_PARENTHESIS_TOKEN && token.type === TokenType.RIGHT_PARENTHESIS_TOKEN; + return type === 2 /* LEFT_PARENTHESIS_TOKEN */ && token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */; }; var isLength = function (token) { - return token.type === TokenType.NUMBER_TOKEN || token.type === TokenType.DIMENSION_TOKEN; + return token.type === 17 /* NUMBER_TOKEN */ || token.type === 15 /* DIMENSION_TOKEN */; }; var isLengthPercentage = function (token) { - return token.type === TokenType.PERCENTAGE_TOKEN || isLength(token); + return token.type === 16 /* PERCENTAGE_TOKEN */ || isLength(token); }; var parseLengthPercentageTuple = function (tokens) { return tokens.length > 1 ? [tokens[0], tokens[1]] : [tokens[0]]; }; var ZERO_LENGTH = { - type: TokenType.NUMBER_TOKEN, + type: 17 /* NUMBER_TOKEN */, number: 0, flags: FLAG_INTEGER }; var FIFTY_PERCENT = { - type: TokenType.PERCENTAGE_TOKEN, + type: 16 /* PERCENTAGE_TOKEN */, number: 50, flags: FLAG_INTEGER }; var HUNDRED_PERCENT = { - type: TokenType.PERCENTAGE_TOKEN, + type: 16 /* PERCENTAGE_TOKEN */, number: 100, flags: FLAG_INTEGER }; @@ -27274,7 +27289,7 @@ function unzipSync(data) { return [getAbsoluteValue(x, width), getAbsoluteValue(typeof y !== 'undefined' ? y : x, height)]; }; var getAbsoluteValue = function (token, parent) { - if (token.type === TokenType.PERCENTAGE_TOKEN) { + if (token.type === 16 /* PERCENTAGE_TOKEN */) { return (token.number / 100) * parent; } if (isDimensionToken(token)) { @@ -27296,8 +27311,8 @@ function unzipSync(data) { var TURN = 'turn'; var angle = { name: 'angle', - parse: function (value) { - if (value.type === TokenType.DIMENSION_TOKEN) { + parse: function (_context, value) { + if (value.type === 15 /* DIMENSION_TOKEN */) { switch (value.unit) { case DEG: return (Math.PI * value.number) / 180; @@ -27313,7 +27328,7 @@ function unzipSync(data) { } }; var isAngle = function (value) { - if (value.type === TokenType.DIMENSION_TOKEN) { + if (value.type === 15 /* DIMENSION_TOKEN */) { if (value.unit === DEG || value.unit === GRAD || value.unit === RAD || value.unit === TURN) { return true; } @@ -27363,17 +27378,17 @@ function unzipSync(data) { }; var deg = function (deg) { return (Math.PI * deg) / 180; }; - var color = { + var color$1 = { name: 'color', - parse: function (value) { - if (value.type === TokenType.FUNCTION) { + parse: function (context, value) { + if (value.type === 18 /* FUNCTION */) { var colorFunction = SUPPORTED_COLOR_FUNCTIONS[value.name]; if (typeof colorFunction === 'undefined') { throw new Error("Attempting to parse an unsupported color function \"" + value.name + "\""); } - return colorFunction(value.values); + return colorFunction(context, value.values); } - if (value.type === TokenType.HASH_TOKEN) { + if (value.type === 5 /* HASH_TOKEN */) { if (value.value.length === 3) { var r = value.value.substring(0, 1); var g = value.value.substring(1, 2); @@ -27401,7 +27416,7 @@ function unzipSync(data) { return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), parseInt(a, 16) / 255); } } - if (value.type === TokenType.IDENT_TOKEN) { + if (value.type === 20 /* IDENT_TOKEN */) { var namedColor = COLORS[value.value.toUpperCase()]; if (typeof namedColor !== 'undefined') { return namedColor; @@ -27422,16 +27437,16 @@ function unzipSync(data) { return ((r << 24) | (g << 16) | (b << 8) | (Math.round(a * 255) << 0)) >>> 0; }; var getTokenColorValue = function (token, i) { - if (token.type === TokenType.NUMBER_TOKEN) { + if (token.type === 17 /* NUMBER_TOKEN */) { return token.number; } - if (token.type === TokenType.PERCENTAGE_TOKEN) { + if (token.type === 16 /* PERCENTAGE_TOKEN */) { var max = i === 3 ? 1 : 255; return i === 3 ? (token.number / 100) * max : Math.round((token.number / 100) * max); } return 0; }; - var rgb = function (args) { + var rgb = function (_context, args) { var tokens = args.filter(nonFunctionArgSeparator); if (tokens.length === 3) { var _a = tokens.map(getTokenColorValue), r = _a[0], g = _a[1], b = _a[2]; @@ -27463,10 +27478,10 @@ function unzipSync(data) { return t1; } } - var hsl = function (args) { + var hsl = function (context, args) { var tokens = args.filter(nonFunctionArgSeparator); var hue = tokens[0], saturation = tokens[1], lightness = tokens[2], alpha = tokens[3]; - var h = (hue.type === TokenType.NUMBER_TOKEN ? deg(hue.number) : angle.parse(hue)) / (Math.PI * 2); + var h = (hue.type === 17 /* NUMBER_TOKEN */ ? deg(hue.number) : angle.parse(context, hue)) / (Math.PI * 2); var s = isLengthPercentage(saturation) ? saturation.number / 100 : 0; var l = isLengthPercentage(lightness) ? lightness.number / 100 : 0; var a = typeof alpha !== 'undefined' && isLengthPercentage(alpha) ? getAbsoluteValue(alpha, 1) : 1; @@ -27480,11 +27495,33 @@ function unzipSync(data) { var b = hue2rgb(t1, t2, h - 1 / 3); return pack(r * 255, g * 255, b * 255, a); }; + var clamp = function (value, min, max) { return Math.min(Math.max(value, min), max); }; + var oklch = function (context, args) { + var tokens = args.filter(nonFunctionArgSeparator); + var lightness = tokens[0], chroma = tokens[1], hue = tokens[2], alpha = tokens[3]; + var l = isLengthPercentage(lightness) ? lightness.number / 100 : 0; + var c = isLengthPercentage(chroma) ? chroma.number / 100 : 0; + var h = hue.type === 17 /* NUMBER_TOKEN */ ? deg(hue.number) : angle.parse(context, hue); + var a = typeof alpha !== 'undefined' && isLengthPercentage(alpha) ? getAbsoluteValue(alpha, 1) : 1; + var hrad = h / (Math.PI * 180); + var lr = l * 255; + var cr = c * 128; + var x = cr * Math.cos(hrad); + var y = cr * Math.sin(hrad); + var r = lr + x; + var g = lr - x * 0.57735 - y * 1.1547; + var b = lr + y * 1.73205; + return pack(clamp(r, 0, 255), clamp(g, 0, 255), clamp(b, 0, 255), a); + }; var SUPPORTED_COLOR_FUNCTIONS = { hsl: hsl, hsla: hsl, rgb: rgb, - rgba: rgb + rgba: rgb, + oklch: oklch + }; + var parseColor = function (context, value) { + return color$1.parse(context, Parser.create(value).parseComponentValue()); }; var COLORS = { ALICEBLUE: 0xf0f8ffff, @@ -27638,37 +27675,22 @@ function unzipSync(data) { YELLOWGREEN: 0x9acd32ff }; - var PropertyDescriptorParsingType; - (function (PropertyDescriptorParsingType) { - PropertyDescriptorParsingType[PropertyDescriptorParsingType["VALUE"] = 0] = "VALUE"; - PropertyDescriptorParsingType[PropertyDescriptorParsingType["LIST"] = 1] = "LIST"; - PropertyDescriptorParsingType[PropertyDescriptorParsingType["IDENT_VALUE"] = 2] = "IDENT_VALUE"; - PropertyDescriptorParsingType[PropertyDescriptorParsingType["TYPE_VALUE"] = 3] = "TYPE_VALUE"; - PropertyDescriptorParsingType[PropertyDescriptorParsingType["TOKEN_VALUE"] = 4] = "TOKEN_VALUE"; - })(PropertyDescriptorParsingType || (PropertyDescriptorParsingType = {})); - - var BACKGROUND_CLIP; - (function (BACKGROUND_CLIP) { - BACKGROUND_CLIP[BACKGROUND_CLIP["BORDER_BOX"] = 0] = "BORDER_BOX"; - BACKGROUND_CLIP[BACKGROUND_CLIP["PADDING_BOX"] = 1] = "PADDING_BOX"; - BACKGROUND_CLIP[BACKGROUND_CLIP["CONTENT_BOX"] = 2] = "CONTENT_BOX"; - })(BACKGROUND_CLIP || (BACKGROUND_CLIP = {})); var backgroundClip = { name: 'background-clip', initialValue: 'border-box', prefix: false, - type: PropertyDescriptorParsingType.LIST, - parse: function (tokens) { + type: 1 /* LIST */, + parse: function (_context, tokens) { return tokens.map(function (token) { if (isIdentToken(token)) { switch (token.value) { case 'padding-box': - return BACKGROUND_CLIP.PADDING_BOX; + return 1 /* PADDING_BOX */; case 'content-box': - return BACKGROUND_CLIP.CONTENT_BOX; + return 2 /* CONTENT_BOX */; } } - return BACKGROUND_CLIP.BORDER_BOX; + return 0 /* BORDER_BOX */; }); } }; @@ -27677,14 +27699,14 @@ function unzipSync(data) { name: "background-color", initialValue: 'transparent', prefix: false, - type: PropertyDescriptorParsingType.TYPE_VALUE, + type: 3 /* TYPE_VALUE */, format: 'color' }; - var parseColorStop = function (args) { - var color$1 = color.parse(args[0]); + var parseColorStop = function (context, args) { + var color = color$1.parse(context, args[0]); var stop = args[1]; - return stop && isLengthPercentage(stop) ? { color: color$1, stop: stop } : { color: color$1, stop: null }; + return stop && isLengthPercentage(stop) ? { color: color, stop: stop } : { color: color, stop: null }; }; var processColorStops = function (stops, lineLength) { var first = stops[0]; @@ -27755,7 +27777,12 @@ function unzipSync(data) { }; var distance = function (a, b) { return Math.sqrt(a * a + b * b); }; var findCorner = function (width, height, x, y, closest) { - var corners = [[0, 0], [0, height], [width, 0], [width, height]]; + var corners = [ + [0, 0], + [0, height], + [width, 0], + [width, height] + ]; return corners.reduce(function (stat, corner) { var cx = corner[0], cy = corner[1]; var d = distance(x - cx, y - cy); @@ -27775,24 +27802,24 @@ function unzipSync(data) { var rx = 0; var ry = 0; switch (gradient.size) { - case CSSRadialExtent.CLOSEST_SIDE: + case 0 /* CLOSEST_SIDE */: // The ending shape is sized so that that it exactly meets the side of the gradient box closest to the gradient’s center. // If the shape is an ellipse, it exactly meets the closest side in each dimension. - if (gradient.shape === CSSRadialShape.CIRCLE) { + if (gradient.shape === 0 /* CIRCLE */) { rx = ry = Math.min(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height)); } - else if (gradient.shape === CSSRadialShape.ELLIPSE) { + else if (gradient.shape === 1 /* ELLIPSE */) { rx = Math.min(Math.abs(x), Math.abs(x - width)); ry = Math.min(Math.abs(y), Math.abs(y - height)); } break; - case CSSRadialExtent.CLOSEST_CORNER: + case 2 /* CLOSEST_CORNER */: // The ending shape is sized so that that it passes through the corner of the gradient box closest to the gradient’s center. // If the shape is an ellipse, the ending shape is given the same aspect-ratio it would have if closest-side were specified. - if (gradient.shape === CSSRadialShape.CIRCLE) { + if (gradient.shape === 0 /* CIRCLE */) { rx = ry = Math.min(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height)); } - else if (gradient.shape === CSSRadialShape.ELLIPSE) { + else if (gradient.shape === 1 /* ELLIPSE */) { // Compute the ratio ry/rx (which is to be the same as for "closest-side") var c = Math.min(Math.abs(y), Math.abs(y - height)) / Math.min(Math.abs(x), Math.abs(x - width)); var _a = findCorner(width, height, x, y, true), cx = _a[0], cy = _a[1]; @@ -27800,23 +27827,23 @@ function unzipSync(data) { ry = c * rx; } break; - case CSSRadialExtent.FARTHEST_SIDE: + case 1 /* FARTHEST_SIDE */: // Same as closest-side, except the ending shape is sized based on the farthest side(s) - if (gradient.shape === CSSRadialShape.CIRCLE) { + if (gradient.shape === 0 /* CIRCLE */) { rx = ry = Math.max(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height)); } - else if (gradient.shape === CSSRadialShape.ELLIPSE) { + else if (gradient.shape === 1 /* ELLIPSE */) { rx = Math.max(Math.abs(x), Math.abs(x - width)); ry = Math.max(Math.abs(y), Math.abs(y - height)); } break; - case CSSRadialExtent.FARTHEST_CORNER: + case 3 /* FARTHEST_CORNER */: // Same as closest-corner, except the ending shape is sized based on the farthest corner. // If the shape is an ellipse, the ending shape is given the same aspect ratio it would have if farthest-side were specified. - if (gradient.shape === CSSRadialShape.CIRCLE) { + if (gradient.shape === 0 /* CIRCLE */) { rx = ry = Math.max(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height)); } - else if (gradient.shape === CSSRadialShape.ELLIPSE) { + else if (gradient.shape === 1 /* ELLIPSE */) { // Compute the ratio ry/rx (which is to be the same as for "farthest-side") var c = Math.max(Math.abs(y), Math.abs(y - height)) / Math.max(Math.abs(x), Math.abs(x - width)); var _b = findCorner(width, height, x, y, false), cx = _b[0], cy = _b[1]; @@ -27832,694 +27859,290 @@ function unzipSync(data) { return [rx, ry]; }; - var linearGradient = function (tokens) { + var linearGradient = function (context, tokens) { var angle$1 = deg(180); var stops = []; parseFunctionArgs(tokens).forEach(function (arg, i) { if (i === 0) { var firstToken = arg[0]; - if (firstToken.type === TokenType.IDENT_TOKEN && firstToken.value === 'to') { + if (firstToken.type === 20 /* IDENT_TOKEN */ && firstToken.value === 'to') { angle$1 = parseNamedSide(arg); return; } else if (isAngle(firstToken)) { - angle$1 = angle.parse(firstToken); + angle$1 = angle.parse(context, firstToken); return; } } - var colorStop = parseColorStop(arg); + var colorStop = parseColorStop(context, arg); stops.push(colorStop); }); - return { angle: angle$1, stops: stops, type: CSSImageType.LINEAR_GRADIENT }; + return { angle: angle$1, stops: stops, type: 1 /* LINEAR_GRADIENT */ }; }; - var prefixLinearGradient = function (tokens) { + var prefixLinearGradient = function (context, tokens) { var angle$1 = deg(180); var stops = []; parseFunctionArgs(tokens).forEach(function (arg, i) { if (i === 0) { var firstToken = arg[0]; - if (firstToken.type === TokenType.IDENT_TOKEN && + if (firstToken.type === 20 /* IDENT_TOKEN */ && ['top', 'left', 'right', 'bottom'].indexOf(firstToken.value) !== -1) { angle$1 = parseNamedSide(arg); return; } else if (isAngle(firstToken)) { - angle$1 = (angle.parse(firstToken) + deg(270)) % deg(360); + angle$1 = (angle.parse(context, firstToken) + deg(270)) % deg(360); return; } } - var colorStop = parseColorStop(arg); + var colorStop = parseColorStop(context, arg); stops.push(colorStop); }); return { angle: angle$1, stops: stops, - type: CSSImageType.LINEAR_GRADIENT + type: 1 /* LINEAR_GRADIENT */ }; }; - var testRangeBounds = function (document) { - var TEST_HEIGHT = 123; - if (document.createRange) { - var range = document.createRange(); - if (range.getBoundingClientRect) { - var testElement = document.createElement('boundtest'); - testElement.style.height = TEST_HEIGHT + "px"; - testElement.style.display = 'block'; - document.body.appendChild(testElement); - range.selectNode(testElement); - var rangeBounds = range.getBoundingClientRect(); - var rangeHeight = Math.round(rangeBounds.height); - document.body.removeChild(testElement); - if (rangeHeight === TEST_HEIGHT) { - return true; + var webkitGradient = function (context, tokens) { + var angle = deg(180); + var stops = []; + var type = 1 /* LINEAR_GRADIENT */; + var shape = 0 /* CIRCLE */; + var size = 3 /* FARTHEST_CORNER */; + var position = []; + parseFunctionArgs(tokens).forEach(function (arg, i) { + var firstToken = arg[0]; + if (i === 0) { + if (isIdentToken(firstToken) && firstToken.value === 'linear') { + type = 1 /* LINEAR_GRADIENT */; + return; + } + else if (isIdentToken(firstToken) && firstToken.value === 'radial') { + type = 2 /* RADIAL_GRADIENT */; + return; + } + } + if (firstToken.type === 18 /* FUNCTION */) { + if (firstToken.name === 'from') { + var color = color$1.parse(context, firstToken.values[0]); + stops.push({ stop: ZERO_LENGTH, color: color }); + } + else if (firstToken.name === 'to') { + var color = color$1.parse(context, firstToken.values[0]); + stops.push({ stop: HUNDRED_PERCENT, color: color }); + } + else if (firstToken.name === 'color-stop') { + var values = firstToken.values.filter(nonFunctionArgSeparator); + if (values.length === 2) { + var color = color$1.parse(context, values[1]); + var stop_1 = values[0]; + if (isNumberToken(stop_1)) { + stops.push({ + stop: { type: 16 /* PERCENTAGE_TOKEN */, number: stop_1.number * 100, flags: stop_1.flags }, + color: color + }); + } + } } } - } - return false; - }; - var testCORS = function () { return typeof new Image().crossOrigin !== 'undefined'; }; - var testResponseType = function () { return typeof new XMLHttpRequest().responseType === 'string'; }; - var testSVG = function (document) { - var img = new Image(); - var canvas = document.createElement('canvas'); - var ctx = canvas.getContext('2d'); - if (!ctx) { - return false; - } - img.src = "data:image/svg+xml,"; - try { - ctx.drawImage(img, 0, 0); - canvas.toDataURL(); - } - catch (e) { - return false; - } - return true; - }; - var isGreenPixel = function (data) { - return data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255; - }; - var testForeignObject = function (document) { - var canvas = document.createElement('canvas'); - var size = 100; - canvas.width = size; - canvas.height = size; - var ctx = canvas.getContext('2d'); - if (!ctx) { - return Promise.reject(false); - } - ctx.fillStyle = 'rgb(0, 255, 0)'; - ctx.fillRect(0, 0, size, size); - var img = new Image(); - var greenImageSrc = canvas.toDataURL(); - img.src = greenImageSrc; - var svg = createForeignObjectSVG(size, size, 0, 0, img); - ctx.fillStyle = 'red'; - ctx.fillRect(0, 0, size, size); - return loadSerializedSVG(svg) - .then(function (img) { - ctx.drawImage(img, 0, 0); - var data = ctx.getImageData(0, 0, size, size).data; - ctx.fillStyle = 'red'; - ctx.fillRect(0, 0, size, size); - var node = document.createElement('div'); - node.style.backgroundImage = "url(" + greenImageSrc + ")"; - node.style.height = size + "px"; - // Firefox 55 does not render inline tags - return isGreenPixel(data) - ? loadSerializedSVG(createForeignObjectSVG(size, size, 0, 0, node)) - : Promise.reject(false); - }) - .then(function (img) { - ctx.drawImage(img, 0, 0); - // Edge does not render background-images - return isGreenPixel(ctx.getImageData(0, 0, size, size).data); - }) - .catch(function () { return false; }); - }; - var createForeignObjectSVG = function (width, height, x, y, node) { - var xmlns = 'http://www.w3.org/2000/svg'; - var svg = document.createElementNS(xmlns, 'svg'); - var foreignObject = document.createElementNS(xmlns, 'foreignObject'); - svg.setAttributeNS(null, 'width', width.toString()); - svg.setAttributeNS(null, 'height', height.toString()); - foreignObject.setAttributeNS(null, 'width', '100%'); - foreignObject.setAttributeNS(null, 'height', '100%'); - foreignObject.setAttributeNS(null, 'x', x.toString()); - foreignObject.setAttributeNS(null, 'y', y.toString()); - foreignObject.setAttributeNS(null, 'externalResourcesRequired', 'true'); - svg.appendChild(foreignObject); - foreignObject.appendChild(node); - return svg; - }; - var loadSerializedSVG = function (svg) { - return new Promise(function (resolve, reject) { - var img = new Image(); - img.onload = function () { return resolve(img); }; - img.onerror = reject; - img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(new XMLSerializer().serializeToString(svg)); }); + return type === 1 /* LINEAR_GRADIENT */ + ? { + angle: (angle + deg(180)) % deg(360), + stops: stops, + type: type + } + : { size: size, shape: shape, stops: stops, position: position, type: type }; }; - var FEATURES = { - get SUPPORT_RANGE_BOUNDS() { - var value = testRangeBounds(document); - Object.defineProperty(FEATURES, 'SUPPORT_RANGE_BOUNDS', { value: value }); - return value; - }, - get SUPPORT_SVG_DRAWING() { - var value = testSVG(document); - Object.defineProperty(FEATURES, 'SUPPORT_SVG_DRAWING', { value: value }); - return value; - }, - get SUPPORT_FOREIGNOBJECT_DRAWING() { - var value = typeof Array.from === 'function' && typeof window.fetch === 'function' - ? testForeignObject(document) - : Promise.resolve(false); - Object.defineProperty(FEATURES, 'SUPPORT_FOREIGNOBJECT_DRAWING', { value: value }); - return value; - }, - get SUPPORT_CORS_IMAGES() { - var value = testCORS(); - Object.defineProperty(FEATURES, 'SUPPORT_CORS_IMAGES', { value: value }); - return value; - }, - get SUPPORT_RESPONSE_TYPE() { - var value = testResponseType(); - Object.defineProperty(FEATURES, 'SUPPORT_RESPONSE_TYPE', { value: value }); - return value; - }, - get SUPPORT_CORS_XHR() { - var value = 'withCredentials' in new XMLHttpRequest(); - Object.defineProperty(FEATURES, 'SUPPORT_CORS_XHR', { value: value }); - return value; - } + + var CLOSEST_SIDE = 'closest-side'; + var FARTHEST_SIDE = 'farthest-side'; + var CLOSEST_CORNER = 'closest-corner'; + var FARTHEST_CORNER = 'farthest-corner'; + var CIRCLE = 'circle'; + var ELLIPSE = 'ellipse'; + var COVER = 'cover'; + var CONTAIN = 'contain'; + var radialGradient = function (context, tokens) { + var shape = 0 /* CIRCLE */; + var size = 3 /* FARTHEST_CORNER */; + var stops = []; + var position = []; + parseFunctionArgs(tokens).forEach(function (arg, i) { + var isColorStop = true; + if (i === 0) { + var isAtPosition_1 = false; + isColorStop = arg.reduce(function (acc, token) { + if (isAtPosition_1) { + if (isIdentToken(token)) { + switch (token.value) { + case 'center': + position.push(FIFTY_PERCENT); + return acc; + case 'top': + case 'left': + position.push(ZERO_LENGTH); + return acc; + case 'right': + case 'bottom': + position.push(HUNDRED_PERCENT); + return acc; + } + } + else if (isLengthPercentage(token) || isLength(token)) { + position.push(token); + } + } + else if (isIdentToken(token)) { + switch (token.value) { + case CIRCLE: + shape = 0 /* CIRCLE */; + return false; + case ELLIPSE: + shape = 1 /* ELLIPSE */; + return false; + case 'at': + isAtPosition_1 = true; + return false; + case CLOSEST_SIDE: + size = 0 /* CLOSEST_SIDE */; + return false; + case COVER: + case FARTHEST_SIDE: + size = 1 /* FARTHEST_SIDE */; + return false; + case CONTAIN: + case CLOSEST_CORNER: + size = 2 /* CLOSEST_CORNER */; + return false; + case FARTHEST_CORNER: + size = 3 /* FARTHEST_CORNER */; + return false; + } + } + else if (isLength(token) || isLengthPercentage(token)) { + if (!Array.isArray(size)) { + size = []; + } + size.push(token); + return false; + } + return acc; + }, isColorStop); + } + if (isColorStop) { + var colorStop = parseColorStop(context, arg); + stops.push(colorStop); + } + }); + return { size: size, shape: shape, stops: stops, position: position, type: 2 /* RADIAL_GRADIENT */ }; }; - var Logger = /** @class */ (function () { - function Logger(_a) { - var id = _a.id, enabled = _a.enabled; - this.id = id; - this.enabled = enabled; - this.start = Date.now(); - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - Logger.prototype.debug = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; + var prefixRadialGradient = function (context, tokens) { + var shape = 0 /* CIRCLE */; + var size = 3 /* FARTHEST_CORNER */; + var stops = []; + var position = []; + parseFunctionArgs(tokens).forEach(function (arg, i) { + var isColorStop = true; + if (i === 0) { + isColorStop = arg.reduce(function (acc, token) { + if (isIdentToken(token)) { + switch (token.value) { + case 'center': + position.push(FIFTY_PERCENT); + return false; + case 'top': + case 'left': + position.push(ZERO_LENGTH); + return false; + case 'right': + case 'bottom': + position.push(HUNDRED_PERCENT); + return false; + } + } + else if (isLengthPercentage(token) || isLength(token)) { + position.push(token); + return false; + } + return acc; + }, isColorStop); } - if (this.enabled) { - // eslint-disable-next-line no-console - if (typeof window !== 'undefined' && window.console && typeof console.debug === 'function') { - // eslint-disable-next-line no-console - console.debug.apply(console, [this.id, this.getTime() + "ms"].concat(args)); - } - else { - this.info.apply(this, args); - } + else if (i === 1) { + isColorStop = arg.reduce(function (acc, token) { + if (isIdentToken(token)) { + switch (token.value) { + case CIRCLE: + shape = 0 /* CIRCLE */; + return false; + case ELLIPSE: + shape = 1 /* ELLIPSE */; + return false; + case CONTAIN: + case CLOSEST_SIDE: + size = 0 /* CLOSEST_SIDE */; + return false; + case FARTHEST_SIDE: + size = 1 /* FARTHEST_SIDE */; + return false; + case CLOSEST_CORNER: + size = 2 /* CLOSEST_CORNER */; + return false; + case COVER: + case FARTHEST_CORNER: + size = 3 /* FARTHEST_CORNER */; + return false; + } + } + else if (isLength(token) || isLengthPercentage(token)) { + if (!Array.isArray(size)) { + size = []; + } + size.push(token); + return false; + } + return acc; + }, isColorStop); } - }; - Logger.prototype.getTime = function () { - return Date.now() - this.start; - }; - Logger.create = function (options) { - Logger.instances[options.id] = new Logger(options); - }; - Logger.destroy = function (id) { - delete Logger.instances[id]; - }; - Logger.getInstance = function (id) { - var instance = Logger.instances[id]; - if (typeof instance === 'undefined') { - throw new Error("No logger instance found with id " + id); + if (isColorStop) { + var colorStop = parseColorStop(context, arg); + stops.push(colorStop); } - return instance; - }; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - Logger.prototype.info = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; + }); + return { size: size, shape: shape, stops: stops, position: position, type: 2 /* RADIAL_GRADIENT */ }; + }; + + var isLinearGradient = function (background) { + return background.type === 1 /* LINEAR_GRADIENT */; + }; + var isRadialGradient = function (background) { + return background.type === 2 /* RADIAL_GRADIENT */; + }; + var image = { + name: 'image', + parse: function (context, value) { + if (value.type === 22 /* URL_TOKEN */) { + var image_1 = { url: value.value, type: 0 /* URL */ }; + context.cache.addImage(value.value); + return image_1; } - if (this.enabled) { - // eslint-disable-next-line no-console - if (typeof window !== 'undefined' && window.console && typeof console.info === 'function') { - // eslint-disable-next-line no-console - console.info.apply(console, [this.id, this.getTime() + "ms"].concat(args)); + if (value.type === 18 /* FUNCTION */) { + var imageFunction = SUPPORTED_IMAGE_FUNCTIONS[value.name]; + if (typeof imageFunction === 'undefined') { + throw new Error("Attempting to parse an unsupported image function \"" + value.name + "\""); } + return imageFunction(context, value.values); } - }; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - Logger.prototype.error = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - if (this.enabled) { - // eslint-disable-next-line no-console - if (typeof window !== 'undefined' && window.console && typeof console.error === 'function') { - // eslint-disable-next-line no-console - console.error.apply(console, [this.id, this.getTime() + "ms"].concat(args)); - } - else { - this.info.apply(this, args); - } - } - }; - Logger.instances = {}; - return Logger; - }()); - - var CacheStorage = /** @class */ (function () { - function CacheStorage() { - } - CacheStorage.create = function (name, options) { - return (CacheStorage._caches[name] = new Cache(name, options)); - }; - CacheStorage.destroy = function (name) { - delete CacheStorage._caches[name]; - }; - CacheStorage.open = function (name) { - var cache = CacheStorage._caches[name]; - if (typeof cache !== 'undefined') { - return cache; - } - throw new Error("Cache with key \"" + name + "\" not found"); - }; - CacheStorage.getOrigin = function (url) { - var link = CacheStorage._link; - if (!link) { - return 'about:blank'; - } - link.href = url; - link.href = link.href; // IE9, LOL! - http://jsfiddle.net/niklasvh/2e48b/ - return link.protocol + link.hostname + link.port; - }; - CacheStorage.isSameOrigin = function (src) { - return CacheStorage.getOrigin(src) === CacheStorage._origin; - }; - CacheStorage.setContext = function (window) { - CacheStorage._link = window.document.createElement('a'); - CacheStorage._origin = CacheStorage.getOrigin(window.location.href); - }; - CacheStorage.getInstance = function () { - var current = CacheStorage._current; - if (current === null) { - throw new Error("No cache instance attached"); - } - return current; - }; - CacheStorage.attachInstance = function (cache) { - CacheStorage._current = cache; - }; - CacheStorage.detachInstance = function () { - CacheStorage._current = null; - }; - CacheStorage._caches = {}; - CacheStorage._origin = 'about:blank'; - CacheStorage._current = null; - return CacheStorage; - }()); - var Cache = /** @class */ (function () { - function Cache(id, options) { - this.id = id; - this._options = options; - this._cache = {}; - } - Cache.prototype.addImage = function (src) { - var result = Promise.resolve(); - if (this.has(src)) { - return result; - } - if (isBlobImage(src) || isRenderable(src)) { - this._cache[src] = this.loadImage(src); - return result; - } - return result; - }; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - Cache.prototype.match = function (src) { - return this._cache[src]; - }; - Cache.prototype.loadImage = function (key) { - return __awaiter(this, void 0, void 0, function () { - var isSameOrigin, useCORS, useProxy, src; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - isSameOrigin = CacheStorage.isSameOrigin(key); - useCORS = !isInlineImage(key) && this._options.useCORS === true && FEATURES.SUPPORT_CORS_IMAGES && !isSameOrigin; - useProxy = !isInlineImage(key) && - !isSameOrigin && - typeof this._options.proxy === 'string' && - FEATURES.SUPPORT_CORS_XHR && - !useCORS; - if (!isSameOrigin && this._options.allowTaint === false && !isInlineImage(key) && !useProxy && !useCORS) { - return [2 /*return*/]; - } - src = key; - if (!useProxy) return [3 /*break*/, 2]; - return [4 /*yield*/, this.proxy(src)]; - case 1: - src = _a.sent(); - _a.label = 2; - case 2: - Logger.getInstance(this.id).debug("Added image " + key.substring(0, 256)); - return [4 /*yield*/, new Promise(function (resolve, reject) { - var img = new Image(); - img.onload = function () { return resolve(img); }; - img.onerror = reject; - //ios safari 10.3 taints canvas with data urls unless crossOrigin is set to anonymous - if (isInlineBase64Image(src) || useCORS) { - img.crossOrigin = 'anonymous'; - } - img.src = src; - if (img.complete === true) { - // Inline XML images may fail to parse, throwing an Error later on - setTimeout(function () { return resolve(img); }, 500); - } - if (_this._options.imageTimeout > 0) { - setTimeout(function () { return reject("Timed out (" + _this._options.imageTimeout + "ms) loading image"); }, _this._options.imageTimeout); - } - })]; - case 3: return [2 /*return*/, _a.sent()]; - } - }); - }); - }; - Cache.prototype.has = function (key) { - return typeof this._cache[key] !== 'undefined'; - }; - Cache.prototype.keys = function () { - return Promise.resolve(Object.keys(this._cache)); - }; - Cache.prototype.proxy = function (src) { - var _this = this; - var proxy = this._options.proxy; - if (!proxy) { - throw new Error('No proxy defined'); - } - var key = src.substring(0, 256); - return new Promise(function (resolve, reject) { - var responseType = FEATURES.SUPPORT_RESPONSE_TYPE ? 'blob' : 'text'; - var xhr = new XMLHttpRequest(); - xhr.onload = function () { - if (xhr.status === 200) { - if (responseType === 'text') { - resolve(xhr.response); - } - else { - var reader_1 = new FileReader(); - reader_1.addEventListener('load', function () { return resolve(reader_1.result); }, false); - reader_1.addEventListener('error', function (e) { return reject(e); }, false); - reader_1.readAsDataURL(xhr.response); - } - } - else { - reject("Failed to proxy resource " + key + " with status code " + xhr.status); - } - }; - xhr.onerror = reject; - xhr.open('GET', proxy + "?url=" + encodeURIComponent(src) + "&responseType=" + responseType); - if (responseType !== 'text' && xhr instanceof XMLHttpRequest) { - xhr.responseType = responseType; - } - if (_this._options.imageTimeout) { - var timeout_1 = _this._options.imageTimeout; - xhr.timeout = timeout_1; - xhr.ontimeout = function () { return reject("Timed out (" + timeout_1 + "ms) proxying " + key); }; - } - xhr.send(); - }); - }; - return Cache; - }()); - var INLINE_SVG = /^data:image\/svg\+xml/i; - var INLINE_BASE64 = /^data:image\/.*;base64,/i; - var INLINE_IMG = /^data:image\/.*/i; - var isRenderable = function (src) { return FEATURES.SUPPORT_SVG_DRAWING || !isSVG(src); }; - var isInlineImage = function (src) { return INLINE_IMG.test(src); }; - var isInlineBase64Image = function (src) { return INLINE_BASE64.test(src); }; - var isBlobImage = function (src) { return src.substr(0, 4) === 'blob'; }; - var isSVG = function (src) { return src.substr(-3).toLowerCase() === 'svg' || INLINE_SVG.test(src); }; - - var webkitGradient = function (tokens) { - var angle = deg(180); - var stops = []; - var type = CSSImageType.LINEAR_GRADIENT; - var shape = CSSRadialShape.CIRCLE; - var size = CSSRadialExtent.FARTHEST_CORNER; - var position = []; - parseFunctionArgs(tokens).forEach(function (arg, i) { - var firstToken = arg[0]; - if (i === 0) { - if (isIdentToken(firstToken) && firstToken.value === 'linear') { - type = CSSImageType.LINEAR_GRADIENT; - return; - } - else if (isIdentToken(firstToken) && firstToken.value === 'radial') { - type = CSSImageType.RADIAL_GRADIENT; - return; - } - } - if (firstToken.type === TokenType.FUNCTION) { - if (firstToken.name === 'from') { - var color$1 = color.parse(firstToken.values[0]); - stops.push({ stop: ZERO_LENGTH, color: color$1 }); - } - else if (firstToken.name === 'to') { - var color$1 = color.parse(firstToken.values[0]); - stops.push({ stop: HUNDRED_PERCENT, color: color$1 }); - } - else if (firstToken.name === 'color-stop') { - var values = firstToken.values.filter(nonFunctionArgSeparator); - if (values.length === 2) { - var color$1 = color.parse(values[1]); - var stop_1 = values[0]; - if (isNumberToken(stop_1)) { - stops.push({ - stop: { type: TokenType.PERCENTAGE_TOKEN, number: stop_1.number * 100, flags: stop_1.flags }, - color: color$1 - }); - } - } - } - } - }); - return type === CSSImageType.LINEAR_GRADIENT - ? { - angle: (angle + deg(180)) % deg(360), - stops: stops, - type: type - } - : { size: size, shape: shape, stops: stops, position: position, type: type }; - }; - - var CLOSEST_SIDE = 'closest-side'; - var FARTHEST_SIDE = 'farthest-side'; - var CLOSEST_CORNER = 'closest-corner'; - var FARTHEST_CORNER = 'farthest-corner'; - var CIRCLE = 'circle'; - var ELLIPSE = 'ellipse'; - var COVER = 'cover'; - var CONTAIN = 'contain'; - var radialGradient = function (tokens) { - var shape = CSSRadialShape.CIRCLE; - var size = CSSRadialExtent.FARTHEST_CORNER; - var stops = []; - var position = []; - parseFunctionArgs(tokens).forEach(function (arg, i) { - var isColorStop = true; - if (i === 0) { - var isAtPosition_1 = false; - isColorStop = arg.reduce(function (acc, token) { - if (isAtPosition_1) { - if (isIdentToken(token)) { - switch (token.value) { - case 'center': - position.push(FIFTY_PERCENT); - return acc; - case 'top': - case 'left': - position.push(ZERO_LENGTH); - return acc; - case 'right': - case 'bottom': - position.push(HUNDRED_PERCENT); - return acc; - } - } - else if (isLengthPercentage(token) || isLength(token)) { - position.push(token); - } - } - else if (isIdentToken(token)) { - switch (token.value) { - case CIRCLE: - shape = CSSRadialShape.CIRCLE; - return false; - case ELLIPSE: - shape = CSSRadialShape.ELLIPSE; - return false; - case 'at': - isAtPosition_1 = true; - return false; - case CLOSEST_SIDE: - size = CSSRadialExtent.CLOSEST_SIDE; - return false; - case COVER: - case FARTHEST_SIDE: - size = CSSRadialExtent.FARTHEST_SIDE; - return false; - case CONTAIN: - case CLOSEST_CORNER: - size = CSSRadialExtent.CLOSEST_CORNER; - return false; - case FARTHEST_CORNER: - size = CSSRadialExtent.FARTHEST_CORNER; - return false; - } - } - else if (isLength(token) || isLengthPercentage(token)) { - if (!Array.isArray(size)) { - size = []; - } - size.push(token); - return false; - } - return acc; - }, isColorStop); - } - if (isColorStop) { - var colorStop = parseColorStop(arg); - stops.push(colorStop); - } - }); - return { size: size, shape: shape, stops: stops, position: position, type: CSSImageType.RADIAL_GRADIENT }; - }; - - var prefixRadialGradient = function (tokens) { - var shape = CSSRadialShape.CIRCLE; - var size = CSSRadialExtent.FARTHEST_CORNER; - var stops = []; - var position = []; - parseFunctionArgs(tokens).forEach(function (arg, i) { - var isColorStop = true; - if (i === 0) { - isColorStop = arg.reduce(function (acc, token) { - if (isIdentToken(token)) { - switch (token.value) { - case 'center': - position.push(FIFTY_PERCENT); - return false; - case 'top': - case 'left': - position.push(ZERO_LENGTH); - return false; - case 'right': - case 'bottom': - position.push(HUNDRED_PERCENT); - return false; - } - } - else if (isLengthPercentage(token) || isLength(token)) { - position.push(token); - return false; - } - return acc; - }, isColorStop); - } - else if (i === 1) { - isColorStop = arg.reduce(function (acc, token) { - if (isIdentToken(token)) { - switch (token.value) { - case CIRCLE: - shape = CSSRadialShape.CIRCLE; - return false; - case ELLIPSE: - shape = CSSRadialShape.ELLIPSE; - return false; - case CONTAIN: - case CLOSEST_SIDE: - size = CSSRadialExtent.CLOSEST_SIDE; - return false; - case FARTHEST_SIDE: - size = CSSRadialExtent.FARTHEST_SIDE; - return false; - case CLOSEST_CORNER: - size = CSSRadialExtent.CLOSEST_CORNER; - return false; - case COVER: - case FARTHEST_CORNER: - size = CSSRadialExtent.FARTHEST_CORNER; - return false; - } - } - else if (isLength(token) || isLengthPercentage(token)) { - if (!Array.isArray(size)) { - size = []; - } - size.push(token); - return false; - } - return acc; - }, isColorStop); - } - if (isColorStop) { - var colorStop = parseColorStop(arg); - stops.push(colorStop); - } - }); - return { size: size, shape: shape, stops: stops, position: position, type: CSSImageType.RADIAL_GRADIENT }; - }; - - var CSSImageType; - (function (CSSImageType) { - CSSImageType[CSSImageType["URL"] = 0] = "URL"; - CSSImageType[CSSImageType["LINEAR_GRADIENT"] = 1] = "LINEAR_GRADIENT"; - CSSImageType[CSSImageType["RADIAL_GRADIENT"] = 2] = "RADIAL_GRADIENT"; - })(CSSImageType || (CSSImageType = {})); - var isLinearGradient = function (background) { - return background.type === CSSImageType.LINEAR_GRADIENT; - }; - var isRadialGradient = function (background) { - return background.type === CSSImageType.RADIAL_GRADIENT; - }; - var CSSRadialShape; - (function (CSSRadialShape) { - CSSRadialShape[CSSRadialShape["CIRCLE"] = 0] = "CIRCLE"; - CSSRadialShape[CSSRadialShape["ELLIPSE"] = 1] = "ELLIPSE"; - })(CSSRadialShape || (CSSRadialShape = {})); - var CSSRadialExtent; - (function (CSSRadialExtent) { - CSSRadialExtent[CSSRadialExtent["CLOSEST_SIDE"] = 0] = "CLOSEST_SIDE"; - CSSRadialExtent[CSSRadialExtent["FARTHEST_SIDE"] = 1] = "FARTHEST_SIDE"; - CSSRadialExtent[CSSRadialExtent["CLOSEST_CORNER"] = 2] = "CLOSEST_CORNER"; - CSSRadialExtent[CSSRadialExtent["FARTHEST_CORNER"] = 3] = "FARTHEST_CORNER"; - })(CSSRadialExtent || (CSSRadialExtent = {})); - var image = { - name: 'image', - parse: function (value) { - if (value.type === TokenType.URL_TOKEN) { - var image_1 = { url: value.value, type: CSSImageType.URL }; - CacheStorage.getInstance().addImage(value.value); - return image_1; - } - if (value.type === TokenType.FUNCTION) { - var imageFunction = SUPPORTED_IMAGE_FUNCTIONS[value.name]; - if (typeof imageFunction === 'undefined') { - throw new Error("Attempting to parse an unsupported image function \"" + value.name + "\""); - } - return imageFunction(value.values); - } - throw new Error("Unsupported image type"); + throw new Error("Unsupported image type " + value.type); } }; function isSupportedImage(value) { - return value.type !== TokenType.FUNCTION || SUPPORTED_IMAGE_FUNCTIONS[value.name]; + return (!(value.type === 20 /* IDENT_TOKEN */ && value.value === 'none') && + (value.type !== 18 /* FUNCTION */ || !!SUPPORTED_IMAGE_FUNCTIONS[value.name])); } var SUPPORTED_IMAGE_FUNCTIONS = { 'linear-gradient': linearGradient, @@ -28538,17 +28161,19 @@ function unzipSync(data) { var backgroundImage = { name: 'background-image', initialValue: 'none', - type: PropertyDescriptorParsingType.LIST, + type: 1 /* LIST */, prefix: false, - parse: function (tokens) { + parse: function (context, tokens) { if (tokens.length === 0) { return []; } var first = tokens[0]; - if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') { + if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') { return []; } - return tokens.filter(function (value) { return nonFunctionArgSeparator(value) && isSupportedImage(value); }).map(image.parse); + return tokens + .filter(function (value) { return nonFunctionArgSeparator(value) && isSupportedImage(value); }) + .map(function (value) { return image.parse(context, value); }); } }; @@ -28556,8 +28181,8 @@ function unzipSync(data) { name: 'background-origin', initialValue: 'border-box', prefix: false, - type: PropertyDescriptorParsingType.LIST, - parse: function (tokens) { + type: 1 /* LIST */, + parse: function (_context, tokens) { return tokens.map(function (token) { if (isIdentToken(token)) { switch (token.value) { @@ -28575,28 +28200,21 @@ function unzipSync(data) { var backgroundPosition = { name: 'background-position', initialValue: '0% 0%', - type: PropertyDescriptorParsingType.LIST, + type: 1 /* LIST */, prefix: false, - parse: function (tokens) { + parse: function (_context, tokens) { return parseFunctionArgs(tokens) .map(function (values) { return values.filter(isLengthPercentage); }) .map(parseLengthPercentageTuple); } }; - var BACKGROUND_REPEAT; - (function (BACKGROUND_REPEAT) { - BACKGROUND_REPEAT[BACKGROUND_REPEAT["REPEAT"] = 0] = "REPEAT"; - BACKGROUND_REPEAT[BACKGROUND_REPEAT["NO_REPEAT"] = 1] = "NO_REPEAT"; - BACKGROUND_REPEAT[BACKGROUND_REPEAT["REPEAT_X"] = 2] = "REPEAT_X"; - BACKGROUND_REPEAT[BACKGROUND_REPEAT["REPEAT_Y"] = 3] = "REPEAT_Y"; - })(BACKGROUND_REPEAT || (BACKGROUND_REPEAT = {})); var backgroundRepeat = { name: 'background-repeat', initialValue: 'repeat', prefix: false, - type: PropertyDescriptorParsingType.LIST, - parse: function (tokens) { + type: 1 /* LIST */, + parse: function (_context, tokens) { return parseFunctionArgs(tokens) .map(function (values) { return values @@ -28610,16 +28228,16 @@ function unzipSync(data) { var parseBackgroundRepeat = function (value) { switch (value) { case 'no-repeat': - return BACKGROUND_REPEAT.NO_REPEAT; + return 1 /* NO_REPEAT */; case 'repeat-x': case 'repeat no-repeat': - return BACKGROUND_REPEAT.REPEAT_X; + return 2 /* REPEAT_X */; case 'repeat-y': case 'no-repeat repeat': - return BACKGROUND_REPEAT.REPEAT_Y; + return 3 /* REPEAT_Y */; case 'repeat': default: - return BACKGROUND_REPEAT.REPEAT; + return 0 /* REPEAT */; } }; @@ -28633,8 +28251,8 @@ function unzipSync(data) { name: 'background-size', initialValue: '0', prefix: false, - type: PropertyDescriptorParsingType.LIST, - parse: function (tokens) { + type: 1 /* LIST */, + parse: function (_context, tokens) { return parseFunctionArgs(tokens).map(function (values) { return values.filter(isBackgroundSizeInfoToken); }); } }; @@ -28646,7 +28264,7 @@ function unzipSync(data) { name: "border-" + side + "-color", initialValue: 'transparent', prefix: false, - type: PropertyDescriptorParsingType.TYPE_VALUE, + type: 3 /* TYPE_VALUE */, format: 'color' }); }; var borderTopColor = borderColorForSide('top'); @@ -28658,39 +28276,33 @@ function unzipSync(data) { name: "border-radius-" + side, initialValue: '0 0', prefix: false, - type: PropertyDescriptorParsingType.LIST, - parse: function (tokens) { return parseLengthPercentageTuple(tokens.filter(isLengthPercentage)); } + type: 1 /* LIST */, + parse: function (_context, tokens) { + return parseLengthPercentageTuple(tokens.filter(isLengthPercentage)); + } }); }; var borderTopLeftRadius = borderRadiusForSide('top-left'); var borderTopRightRadius = borderRadiusForSide('top-right'); var borderBottomRightRadius = borderRadiusForSide('bottom-right'); var borderBottomLeftRadius = borderRadiusForSide('bottom-left'); - var BORDER_STYLE; - (function (BORDER_STYLE) { - BORDER_STYLE[BORDER_STYLE["NONE"] = 0] = "NONE"; - BORDER_STYLE[BORDER_STYLE["SOLID"] = 1] = "SOLID"; - BORDER_STYLE[BORDER_STYLE["DASHED"] = 2] = "DASHED"; - BORDER_STYLE[BORDER_STYLE["DOTTED"] = 3] = "DOTTED"; - BORDER_STYLE[BORDER_STYLE["DOUBLE"] = 4] = "DOUBLE"; - })(BORDER_STYLE || (BORDER_STYLE = {})); var borderStyleForSide = function (side) { return ({ name: "border-" + side + "-style", initialValue: 'solid', prefix: false, - type: PropertyDescriptorParsingType.IDENT_VALUE, - parse: function (style) { + type: 2 /* IDENT_VALUE */, + parse: function (_context, style) { switch (style) { case 'none': - return BORDER_STYLE.NONE; + return 0 /* NONE */; case 'dashed': - return BORDER_STYLE.DASHED; + return 2 /* DASHED */; case 'dotted': - return BORDER_STYLE.DOTTED; + return 3 /* DOTTED */; case 'double': - return BORDER_STYLE.DOUBLE; + return 4 /* DOUBLE */; } - return BORDER_STYLE.SOLID; + return 1 /* SOLID */; } }); }; var borderTopStyle = borderStyleForSide('top'); @@ -28701,9 +28313,9 @@ function unzipSync(data) { var borderWidthForSide = function (side) { return ({ name: "border-" + side + "-width", initialValue: '0', - type: PropertyDescriptorParsingType.VALUE, + type: 0 /* VALUE */, prefix: false, - parse: function (token) { + parse: function (_context, token) { if (isDimensionToken(token)) { return token.number; } @@ -28715,26 +28327,42 @@ function unzipSync(data) { var borderBottomWidth = borderWidthForSide('bottom'); var borderLeftWidth = borderWidthForSide('left'); - var color$1 = { + var color = { name: "color", initialValue: 'transparent', prefix: false, - type: PropertyDescriptorParsingType.TYPE_VALUE, + type: 3 /* TYPE_VALUE */, format: 'color' }; + var direction = { + name: 'direction', + initialValue: 'ltr', + prefix: false, + type: 2 /* IDENT_VALUE */, + parse: function (_context, direction) { + switch (direction) { + case 'rtl': + return 1 /* RTL */; + case 'ltr': + default: + return 0 /* LTR */; + } + } + }; + var display = { name: 'display', initialValue: 'inline-block', prefix: false, - type: PropertyDescriptorParsingType.LIST, - parse: function (tokens) { + type: 1 /* LIST */, + parse: function (_context, tokens) { return tokens.filter(isIdentToken).reduce(function (bit, token) { - return bit | parseDisplayValue(token.value); + return bit | parseDisplayValue$1(token.value); }, 0 /* NONE */); } }; - var parseDisplayValue = function (display) { + var parseDisplayValue$1 = function (display) { switch (display) { case 'block': case '-webkit-box': @@ -28801,31 +28429,23 @@ function unzipSync(data) { return 0 /* NONE */; }; - var FLOAT; - (function (FLOAT) { - FLOAT[FLOAT["NONE"] = 0] = "NONE"; - FLOAT[FLOAT["LEFT"] = 1] = "LEFT"; - FLOAT[FLOAT["RIGHT"] = 2] = "RIGHT"; - FLOAT[FLOAT["INLINE_START"] = 3] = "INLINE_START"; - FLOAT[FLOAT["INLINE_END"] = 4] = "INLINE_END"; - })(FLOAT || (FLOAT = {})); var float = { name: 'float', initialValue: 'none', prefix: false, - type: PropertyDescriptorParsingType.IDENT_VALUE, - parse: function (float) { + type: 2 /* IDENT_VALUE */, + parse: function (_context, float) { switch (float) { case 'left': - return FLOAT.LEFT; + return 1 /* LEFT */; case 'right': - return FLOAT.RIGHT; + return 2 /* RIGHT */; case 'inline-start': - return FLOAT.INLINE_START; + return 3 /* INLINE_START */; case 'inline-end': - return FLOAT.INLINE_END; + return 4 /* INLINE_END */; } - return FLOAT.NONE; + return 0 /* NONE */; } }; @@ -28833,15 +28453,15 @@ function unzipSync(data) { name: 'letter-spacing', initialValue: '0', prefix: false, - type: PropertyDescriptorParsingType.VALUE, - parse: function (token) { - if (token.type === TokenType.IDENT_TOKEN && token.value === 'normal') { + type: 0 /* VALUE */, + parse: function (_context, token) { + if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'normal') { return 0; } - if (token.type === TokenType.NUMBER_TOKEN) { + if (token.type === 17 /* NUMBER_TOKEN */) { return token.number; } - if (token.type === TokenType.DIMENSION_TOKEN) { + if (token.type === 15 /* DIMENSION_TOKEN */) { return token.number; } return 0; @@ -28857,8 +28477,8 @@ function unzipSync(data) { name: 'line-break', initialValue: 'normal', prefix: false, - type: PropertyDescriptorParsingType.IDENT_VALUE, - parse: function (lineBreak) { + type: 2 /* IDENT_VALUE */, + parse: function (_context, lineBreak) { switch (lineBreak) { case 'strict': return LINE_BREAK.STRICT; @@ -28873,13 +28493,13 @@ function unzipSync(data) { name: 'line-height', initialValue: 'normal', prefix: false, - type: PropertyDescriptorParsingType.TOKEN_VALUE + type: 4 /* TOKEN_VALUE */ }; var computeLineHeight = function (token, fontSize) { if (isIdentToken(token) && token.value === 'normal') { return 1.2 * fontSize; } - else if (token.type === TokenType.NUMBER_TOKEN) { + else if (token.type === 17 /* NUMBER_TOKEN */) { return fontSize * token.number; } else if (isLengthPercentage(token)) { @@ -28891,210 +28511,148 @@ function unzipSync(data) { var listStyleImage = { name: 'list-style-image', initialValue: 'none', - type: PropertyDescriptorParsingType.VALUE, + type: 0 /* VALUE */, prefix: false, - parse: function (token) { - if (token.type === TokenType.IDENT_TOKEN && token.value === 'none') { + parse: function (context, token) { + if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'none') { return null; } - return image.parse(token); + return image.parse(context, token); } }; - var LIST_STYLE_POSITION; - (function (LIST_STYLE_POSITION) { - LIST_STYLE_POSITION[LIST_STYLE_POSITION["INSIDE"] = 0] = "INSIDE"; - LIST_STYLE_POSITION[LIST_STYLE_POSITION["OUTSIDE"] = 1] = "OUTSIDE"; - })(LIST_STYLE_POSITION || (LIST_STYLE_POSITION = {})); var listStylePosition = { name: 'list-style-position', initialValue: 'outside', prefix: false, - type: PropertyDescriptorParsingType.IDENT_VALUE, - parse: function (position) { + type: 2 /* IDENT_VALUE */, + parse: function (_context, position) { switch (position) { case 'inside': - return LIST_STYLE_POSITION.INSIDE; + return 0 /* INSIDE */; case 'outside': default: - return LIST_STYLE_POSITION.OUTSIDE; - } - } - }; - - var LIST_STYLE_TYPE; - (function (LIST_STYLE_TYPE) { - LIST_STYLE_TYPE[LIST_STYLE_TYPE["NONE"] = -1] = "NONE"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["DISC"] = 0] = "DISC"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["CIRCLE"] = 1] = "CIRCLE"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["SQUARE"] = 2] = "SQUARE"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["DECIMAL"] = 3] = "DECIMAL"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["CJK_DECIMAL"] = 4] = "CJK_DECIMAL"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["DECIMAL_LEADING_ZERO"] = 5] = "DECIMAL_LEADING_ZERO"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["LOWER_ROMAN"] = 6] = "LOWER_ROMAN"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["UPPER_ROMAN"] = 7] = "UPPER_ROMAN"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["LOWER_GREEK"] = 8] = "LOWER_GREEK"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["LOWER_ALPHA"] = 9] = "LOWER_ALPHA"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["UPPER_ALPHA"] = 10] = "UPPER_ALPHA"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["ARABIC_INDIC"] = 11] = "ARABIC_INDIC"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["ARMENIAN"] = 12] = "ARMENIAN"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["BENGALI"] = 13] = "BENGALI"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["CAMBODIAN"] = 14] = "CAMBODIAN"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["CJK_EARTHLY_BRANCH"] = 15] = "CJK_EARTHLY_BRANCH"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["CJK_HEAVENLY_STEM"] = 16] = "CJK_HEAVENLY_STEM"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["CJK_IDEOGRAPHIC"] = 17] = "CJK_IDEOGRAPHIC"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["DEVANAGARI"] = 18] = "DEVANAGARI"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["ETHIOPIC_NUMERIC"] = 19] = "ETHIOPIC_NUMERIC"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["GEORGIAN"] = 20] = "GEORGIAN"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["GUJARATI"] = 21] = "GUJARATI"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["GURMUKHI"] = 22] = "GURMUKHI"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["HEBREW"] = 22] = "HEBREW"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["HIRAGANA"] = 23] = "HIRAGANA"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["HIRAGANA_IROHA"] = 24] = "HIRAGANA_IROHA"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["JAPANESE_FORMAL"] = 25] = "JAPANESE_FORMAL"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["JAPANESE_INFORMAL"] = 26] = "JAPANESE_INFORMAL"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["KANNADA"] = 27] = "KANNADA"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["KATAKANA"] = 28] = "KATAKANA"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["KATAKANA_IROHA"] = 29] = "KATAKANA_IROHA"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["KHMER"] = 30] = "KHMER"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["KOREAN_HANGUL_FORMAL"] = 31] = "KOREAN_HANGUL_FORMAL"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["KOREAN_HANJA_FORMAL"] = 32] = "KOREAN_HANJA_FORMAL"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["KOREAN_HANJA_INFORMAL"] = 33] = "KOREAN_HANJA_INFORMAL"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["LAO"] = 34] = "LAO"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["LOWER_ARMENIAN"] = 35] = "LOWER_ARMENIAN"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["MALAYALAM"] = 36] = "MALAYALAM"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["MONGOLIAN"] = 37] = "MONGOLIAN"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["MYANMAR"] = 38] = "MYANMAR"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["ORIYA"] = 39] = "ORIYA"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["PERSIAN"] = 40] = "PERSIAN"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["SIMP_CHINESE_FORMAL"] = 41] = "SIMP_CHINESE_FORMAL"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["SIMP_CHINESE_INFORMAL"] = 42] = "SIMP_CHINESE_INFORMAL"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["TAMIL"] = 43] = "TAMIL"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["TELUGU"] = 44] = "TELUGU"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["THAI"] = 45] = "THAI"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["TIBETAN"] = 46] = "TIBETAN"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["TRAD_CHINESE_FORMAL"] = 47] = "TRAD_CHINESE_FORMAL"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["TRAD_CHINESE_INFORMAL"] = 48] = "TRAD_CHINESE_INFORMAL"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["UPPER_ARMENIAN"] = 49] = "UPPER_ARMENIAN"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["DISCLOSURE_OPEN"] = 50] = "DISCLOSURE_OPEN"; - LIST_STYLE_TYPE[LIST_STYLE_TYPE["DISCLOSURE_CLOSED"] = 51] = "DISCLOSURE_CLOSED"; - })(LIST_STYLE_TYPE || (LIST_STYLE_TYPE = {})); + return 1 /* OUTSIDE */; + } + } + }; + var listStyleType = { name: 'list-style-type', initialValue: 'none', prefix: false, - type: PropertyDescriptorParsingType.IDENT_VALUE, - parse: function (type) { + type: 2 /* IDENT_VALUE */, + parse: function (_context, type) { switch (type) { case 'disc': - return LIST_STYLE_TYPE.DISC; + return 0 /* DISC */; case 'circle': - return LIST_STYLE_TYPE.CIRCLE; + return 1 /* CIRCLE */; case 'square': - return LIST_STYLE_TYPE.SQUARE; + return 2 /* SQUARE */; case 'decimal': - return LIST_STYLE_TYPE.DECIMAL; + return 3 /* DECIMAL */; case 'cjk-decimal': - return LIST_STYLE_TYPE.CJK_DECIMAL; + return 4 /* CJK_DECIMAL */; case 'decimal-leading-zero': - return LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO; + return 5 /* DECIMAL_LEADING_ZERO */; case 'lower-roman': - return LIST_STYLE_TYPE.LOWER_ROMAN; + return 6 /* LOWER_ROMAN */; case 'upper-roman': - return LIST_STYLE_TYPE.UPPER_ROMAN; + return 7 /* UPPER_ROMAN */; case 'lower-greek': - return LIST_STYLE_TYPE.LOWER_GREEK; + return 8 /* LOWER_GREEK */; case 'lower-alpha': - return LIST_STYLE_TYPE.LOWER_ALPHA; + return 9 /* LOWER_ALPHA */; case 'upper-alpha': - return LIST_STYLE_TYPE.UPPER_ALPHA; + return 10 /* UPPER_ALPHA */; case 'arabic-indic': - return LIST_STYLE_TYPE.ARABIC_INDIC; + return 11 /* ARABIC_INDIC */; case 'armenian': - return LIST_STYLE_TYPE.ARMENIAN; + return 12 /* ARMENIAN */; case 'bengali': - return LIST_STYLE_TYPE.BENGALI; + return 13 /* BENGALI */; case 'cambodian': - return LIST_STYLE_TYPE.CAMBODIAN; + return 14 /* CAMBODIAN */; case 'cjk-earthly-branch': - return LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH; + return 15 /* CJK_EARTHLY_BRANCH */; case 'cjk-heavenly-stem': - return LIST_STYLE_TYPE.CJK_HEAVENLY_STEM; + return 16 /* CJK_HEAVENLY_STEM */; case 'cjk-ideographic': - return LIST_STYLE_TYPE.CJK_IDEOGRAPHIC; + return 17 /* CJK_IDEOGRAPHIC */; case 'devanagari': - return LIST_STYLE_TYPE.DEVANAGARI; + return 18 /* DEVANAGARI */; case 'ethiopic-numeric': - return LIST_STYLE_TYPE.ETHIOPIC_NUMERIC; + return 19 /* ETHIOPIC_NUMERIC */; case 'georgian': - return LIST_STYLE_TYPE.GEORGIAN; + return 20 /* GEORGIAN */; case 'gujarati': - return LIST_STYLE_TYPE.GUJARATI; + return 21 /* GUJARATI */; case 'gurmukhi': - return LIST_STYLE_TYPE.GURMUKHI; + return 22 /* GURMUKHI */; case 'hebrew': - return LIST_STYLE_TYPE.HEBREW; + return 22 /* HEBREW */; case 'hiragana': - return LIST_STYLE_TYPE.HIRAGANA; + return 23 /* HIRAGANA */; case 'hiragana-iroha': - return LIST_STYLE_TYPE.HIRAGANA_IROHA; + return 24 /* HIRAGANA_IROHA */; case 'japanese-formal': - return LIST_STYLE_TYPE.JAPANESE_FORMAL; + return 25 /* JAPANESE_FORMAL */; case 'japanese-informal': - return LIST_STYLE_TYPE.JAPANESE_INFORMAL; + return 26 /* JAPANESE_INFORMAL */; case 'kannada': - return LIST_STYLE_TYPE.KANNADA; + return 27 /* KANNADA */; case 'katakana': - return LIST_STYLE_TYPE.KATAKANA; + return 28 /* KATAKANA */; case 'katakana-iroha': - return LIST_STYLE_TYPE.KATAKANA_IROHA; + return 29 /* KATAKANA_IROHA */; case 'khmer': - return LIST_STYLE_TYPE.KHMER; + return 30 /* KHMER */; case 'korean-hangul-formal': - return LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL; + return 31 /* KOREAN_HANGUL_FORMAL */; case 'korean-hanja-formal': - return LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL; + return 32 /* KOREAN_HANJA_FORMAL */; case 'korean-hanja-informal': - return LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL; + return 33 /* KOREAN_HANJA_INFORMAL */; case 'lao': - return LIST_STYLE_TYPE.LAO; + return 34 /* LAO */; case 'lower-armenian': - return LIST_STYLE_TYPE.LOWER_ARMENIAN; + return 35 /* LOWER_ARMENIAN */; case 'malayalam': - return LIST_STYLE_TYPE.MALAYALAM; + return 36 /* MALAYALAM */; case 'mongolian': - return LIST_STYLE_TYPE.MONGOLIAN; + return 37 /* MONGOLIAN */; case 'myanmar': - return LIST_STYLE_TYPE.MYANMAR; + return 38 /* MYANMAR */; case 'oriya': - return LIST_STYLE_TYPE.ORIYA; + return 39 /* ORIYA */; case 'persian': - return LIST_STYLE_TYPE.PERSIAN; + return 40 /* PERSIAN */; case 'simp-chinese-formal': - return LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL; + return 41 /* SIMP_CHINESE_FORMAL */; case 'simp-chinese-informal': - return LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL; + return 42 /* SIMP_CHINESE_INFORMAL */; case 'tamil': - return LIST_STYLE_TYPE.TAMIL; + return 43 /* TAMIL */; case 'telugu': - return LIST_STYLE_TYPE.TELUGU; + return 44 /* TELUGU */; case 'thai': - return LIST_STYLE_TYPE.THAI; + return 45 /* THAI */; case 'tibetan': - return LIST_STYLE_TYPE.TIBETAN; + return 46 /* TIBETAN */; case 'trad-chinese-formal': - return LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL; + return 47 /* TRAD_CHINESE_FORMAL */; case 'trad-chinese-informal': - return LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL; + return 48 /* TRAD_CHINESE_INFORMAL */; case 'upper-armenian': - return LIST_STYLE_TYPE.UPPER_ARMENIAN; + return 49 /* UPPER_ARMENIAN */; case 'disclosure-open': - return LIST_STYLE_TYPE.DISCLOSURE_OPEN; + return 50 /* DISCLOSURE_OPEN */; case 'disclosure-closed': - return LIST_STYLE_TYPE.DISCLOSURE_CLOSED; + return 51 /* DISCLOSURE_CLOSED */; case 'none': default: - return LIST_STYLE_TYPE.NONE; + return -1 /* NONE */; } } }; @@ -29103,59 +28661,49 @@ function unzipSync(data) { name: "margin-" + side, initialValue: '0', prefix: false, - type: PropertyDescriptorParsingType.TOKEN_VALUE + type: 4 /* TOKEN_VALUE */ }); }; var marginTop = marginForSide('top'); var marginRight = marginForSide('right'); var marginBottom = marginForSide('bottom'); var marginLeft = marginForSide('left'); - var OVERFLOW; - (function (OVERFLOW) { - OVERFLOW[OVERFLOW["VISIBLE"] = 0] = "VISIBLE"; - OVERFLOW[OVERFLOW["HIDDEN"] = 1] = "HIDDEN"; - OVERFLOW[OVERFLOW["SCROLL"] = 2] = "SCROLL"; - OVERFLOW[OVERFLOW["AUTO"] = 3] = "AUTO"; - })(OVERFLOW || (OVERFLOW = {})); var overflow = { name: 'overflow', initialValue: 'visible', prefix: false, - type: PropertyDescriptorParsingType.LIST, - parse: function (tokens) { + type: 1 /* LIST */, + parse: function (_context, tokens) { return tokens.filter(isIdentToken).map(function (overflow) { switch (overflow.value) { case 'hidden': - return OVERFLOW.HIDDEN; + return 1 /* HIDDEN */; case 'scroll': - return OVERFLOW.SCROLL; + return 2 /* SCROLL */; + case 'clip': + return 3 /* CLIP */; case 'auto': - return OVERFLOW.AUTO; + return 4 /* AUTO */; case 'visible': default: - return OVERFLOW.VISIBLE; + return 0 /* VISIBLE */; } }); } }; - var OVERFLOW_WRAP; - (function (OVERFLOW_WRAP) { - OVERFLOW_WRAP["NORMAL"] = "normal"; - OVERFLOW_WRAP["BREAK_WORD"] = "break-word"; - })(OVERFLOW_WRAP || (OVERFLOW_WRAP = {})); var overflowWrap = { name: 'overflow-wrap', initialValue: 'normal', prefix: false, - type: PropertyDescriptorParsingType.IDENT_VALUE, - parse: function (overflow) { + type: 2 /* IDENT_VALUE */, + parse: function (_context, overflow) { switch (overflow) { case 'break-word': - return OVERFLOW_WRAP.BREAK_WORD; + return "break-word" /* BREAK_WORD */; case 'normal': default: - return OVERFLOW_WRAP.NORMAL; + return "normal" /* NORMAL */; } } }; @@ -29164,7 +28712,7 @@ function unzipSync(data) { name: "padding-" + side, initialValue: '0', prefix: false, - type: PropertyDescriptorParsingType.TYPE_VALUE, + type: 3 /* TYPE_VALUE */, format: 'length-percentage' }); }; var paddingTop = paddingForSide('top'); @@ -29172,65 +28720,51 @@ function unzipSync(data) { var paddingBottom = paddingForSide('bottom'); var paddingLeft = paddingForSide('left'); - var TEXT_ALIGN; - (function (TEXT_ALIGN) { - TEXT_ALIGN[TEXT_ALIGN["LEFT"] = 0] = "LEFT"; - TEXT_ALIGN[TEXT_ALIGN["CENTER"] = 1] = "CENTER"; - TEXT_ALIGN[TEXT_ALIGN["RIGHT"] = 2] = "RIGHT"; - })(TEXT_ALIGN || (TEXT_ALIGN = {})); var textAlign = { name: 'text-align', initialValue: 'left', prefix: false, - type: PropertyDescriptorParsingType.IDENT_VALUE, - parse: function (textAlign) { + type: 2 /* IDENT_VALUE */, + parse: function (_context, textAlign) { switch (textAlign) { case 'right': - return TEXT_ALIGN.RIGHT; + return 2 /* RIGHT */; case 'center': case 'justify': - return TEXT_ALIGN.CENTER; + return 1 /* CENTER */; case 'left': default: - return TEXT_ALIGN.LEFT; + return 0 /* LEFT */; } } }; - var POSITION; - (function (POSITION) { - POSITION[POSITION["STATIC"] = 0] = "STATIC"; - POSITION[POSITION["RELATIVE"] = 1] = "RELATIVE"; - POSITION[POSITION["ABSOLUTE"] = 2] = "ABSOLUTE"; - POSITION[POSITION["FIXED"] = 3] = "FIXED"; - POSITION[POSITION["STICKY"] = 4] = "STICKY"; - })(POSITION || (POSITION = {})); var position = { name: 'position', initialValue: 'static', prefix: false, - type: PropertyDescriptorParsingType.IDENT_VALUE, - parse: function (position) { + type: 2 /* IDENT_VALUE */, + parse: function (_context, position) { switch (position) { case 'relative': - return POSITION.RELATIVE; + return 1 /* RELATIVE */; case 'absolute': - return POSITION.ABSOLUTE; + return 2 /* ABSOLUTE */; case 'fixed': - return POSITION.FIXED; + return 3 /* FIXED */; case 'sticky': - return POSITION.STICKY; + return 4 /* STICKY */; } - return POSITION.STATIC; + return 0 /* STATIC */; } }; var textShadow = { name: 'text-shadow', initialValue: 'none', - type: PropertyDescriptorParsingType.LIST, + type: 1 /* LIST */, prefix: false, - parse: function (tokens) { + parse: function (context, tokens) { if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) { return []; } @@ -29257,7 +28791,7 @@ function unzipSync(data) { c++; } else { - shadow.color = color.parse(token); + shadow.color = color$1.parse(context, token); } } return shadow; @@ -29265,41 +28799,34 @@ function unzipSync(data) { } }; - var TEXT_TRANSFORM; - (function (TEXT_TRANSFORM) { - TEXT_TRANSFORM[TEXT_TRANSFORM["NONE"] = 0] = "NONE"; - TEXT_TRANSFORM[TEXT_TRANSFORM["LOWERCASE"] = 1] = "LOWERCASE"; - TEXT_TRANSFORM[TEXT_TRANSFORM["UPPERCASE"] = 2] = "UPPERCASE"; - TEXT_TRANSFORM[TEXT_TRANSFORM["CAPITALIZE"] = 3] = "CAPITALIZE"; - })(TEXT_TRANSFORM || (TEXT_TRANSFORM = {})); var textTransform = { name: 'text-transform', initialValue: 'none', prefix: false, - type: PropertyDescriptorParsingType.IDENT_VALUE, - parse: function (textTransform) { + type: 2 /* IDENT_VALUE */, + parse: function (_context, textTransform) { switch (textTransform) { case 'uppercase': - return TEXT_TRANSFORM.UPPERCASE; + return 2 /* UPPERCASE */; case 'lowercase': - return TEXT_TRANSFORM.LOWERCASE; + return 1 /* LOWERCASE */; case 'capitalize': - return TEXT_TRANSFORM.CAPITALIZE; + return 3 /* CAPITALIZE */; } - return TEXT_TRANSFORM.NONE; + return 0 /* NONE */; } }; - var transform = { + var transform$1 = { name: 'transform', initialValue: 'none', prefix: true, - type: PropertyDescriptorParsingType.VALUE, - parse: function (token) { - if (token.type === TokenType.IDENT_TOKEN && token.value === 'none') { + type: 0 /* VALUE */, + parse: function (_context, token) { + if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'none') { return null; } - if (token.type === TokenType.FUNCTION) { + if (token.type === 18 /* FUNCTION */) { var transformFunction = SUPPORTED_TRANSFORM_FUNCTIONS[token.name]; if (typeof transformFunction === 'undefined') { throw new Error("Attempting to parse an unsupported transform function \"" + token.name + "\""); @@ -29310,13 +28837,13 @@ function unzipSync(data) { } }; var matrix = function (args) { - var values = args.filter(function (arg) { return arg.type === TokenType.NUMBER_TOKEN; }).map(function (arg) { return arg.number; }); + var values = args.filter(function (arg) { return arg.type === 17 /* NUMBER_TOKEN */; }).map(function (arg) { return arg.number; }); return values.length === 6 ? values : null; }; // doesn't support 3D transforms at the moment var matrix3d = function (args) { - var values = args.filter(function (arg) { return arg.type === TokenType.NUMBER_TOKEN; }).map(function (arg) { return arg.number; }); - var a1 = values[0], b1 = values[1], _a = values[2], _b = values[3], a2 = values[4], b2 = values[5], _c = values[6], _d = values[7], _e = values[8], _f = values[9], _g = values[10], _h = values[11], a4 = values[12], b4 = values[13], _j = values[14], _k = values[15]; + var values = args.filter(function (arg) { return arg.type === 17 /* NUMBER_TOKEN */; }).map(function (arg) { return arg.number; }); + var a1 = values[0], b1 = values[1]; values[2]; values[3]; var a2 = values[4], b2 = values[5]; values[6]; values[7]; values[8]; values[9]; values[10]; values[11]; var a4 = values[12], b4 = values[13]; values[14]; values[15]; return values.length === 16 ? [a1, b1, a2, b2, a4, b4] : null; }; var SUPPORTED_TRANSFORM_FUNCTIONS = { @@ -29325,7 +28852,7 @@ function unzipSync(data) { }; var DEFAULT_VALUE = { - type: TokenType.PERCENTAGE_TOKEN, + type: 16 /* PERCENTAGE_TOKEN */, number: 50, flags: FLAG_INTEGER }; @@ -29334,8 +28861,8 @@ function unzipSync(data) { name: 'transform-origin', initialValue: '50% 50%', prefix: true, - type: PropertyDescriptorParsingType.LIST, - parse: function (tokens) { + type: 1 /* LIST */, + parse: function (_context, tokens) { var origins = tokens.filter(isLengthPercentage); if (origins.length !== 2) { return DEFAULT; @@ -29344,26 +28871,20 @@ function unzipSync(data) { } }; - var VISIBILITY; - (function (VISIBILITY) { - VISIBILITY[VISIBILITY["VISIBLE"] = 0] = "VISIBLE"; - VISIBILITY[VISIBILITY["HIDDEN"] = 1] = "HIDDEN"; - VISIBILITY[VISIBILITY["COLLAPSE"] = 2] = "COLLAPSE"; - })(VISIBILITY || (VISIBILITY = {})); var visibility = { name: 'visible', initialValue: 'none', prefix: false, - type: PropertyDescriptorParsingType.IDENT_VALUE, - parse: function (visibility) { + type: 2 /* IDENT_VALUE */, + parse: function (_context, visibility) { switch (visibility) { case 'hidden': - return VISIBILITY.HIDDEN; + return 1 /* HIDDEN */; case 'collapse': - return VISIBILITY.COLLAPSE; + return 2 /* COLLAPSE */; case 'visible': default: - return VISIBILITY.VISIBLE; + return 0 /* VISIBLE */; } } }; @@ -29378,8 +28899,8 @@ function unzipSync(data) { name: 'word-break', initialValue: 'normal', prefix: false, - type: PropertyDescriptorParsingType.IDENT_VALUE, - parse: function (wordBreak) { + type: 2 /* IDENT_VALUE */, + parse: function (_context, wordBreak) { switch (wordBreak) { case 'break-all': return WORD_BREAK.BREAK_ALL; @@ -29396,9 +28917,9 @@ function unzipSync(data) { name: 'z-index', initialValue: 'auto', prefix: false, - type: PropertyDescriptorParsingType.VALUE, - parse: function (token) { - if (token.type === TokenType.IDENT_TOKEN) { + type: 0 /* VALUE */, + parse: function (_context, token) { + if (token.type === 20 /* IDENT_TOKEN */) { return { auto: true, order: 0 }; } if (isNumberToken(token)) { @@ -29408,12 +28929,27 @@ function unzipSync(data) { } }; + var time = { + name: 'time', + parse: function (_context, value) { + if (value.type === 15 /* DIMENSION_TOKEN */) { + switch (value.unit.toLowerCase()) { + case 's': + return 1000 * value.number; + case 'ms': + return value.number; + } + } + throw new Error("Unsupported time type"); + } + }; + var opacity = { name: 'opacity', initialValue: '1', - type: PropertyDescriptorParsingType.VALUE, + type: 0 /* VALUE */, prefix: false, - parse: function (token) { + parse: function (_context, token) { if (isNumberToken(token)) { return token.number; } @@ -29425,7 +28961,7 @@ function unzipSync(data) { name: "text-decoration-color", initialValue: 'transparent', prefix: false, - type: PropertyDescriptorParsingType.TYPE_VALUE, + type: 3 /* TYPE_VALUE */, format: 'color' }; @@ -29433,8 +28969,8 @@ function unzipSync(data) { name: 'text-decoration-line', initialValue: 'none', prefix: false, - type: PropertyDescriptorParsingType.LIST, - parse: function (tokens) { + type: 1 /* LIST */, + parse: function (_context, tokens) { return tokens .filter(isIdentToken) .map(function (token) { @@ -29458,20 +28994,20 @@ function unzipSync(data) { name: "font-family", initialValue: '', prefix: false, - type: PropertyDescriptorParsingType.LIST, - parse: function (tokens) { + type: 1 /* LIST */, + parse: function (_context, tokens) { var accumulator = []; var results = []; tokens.forEach(function (token) { switch (token.type) { - case TokenType.IDENT_TOKEN: - case TokenType.STRING_TOKEN: + case 20 /* IDENT_TOKEN */: + case 0 /* STRING_TOKEN */: accumulator.push(token.value); break; - case TokenType.NUMBER_TOKEN: + case 17 /* NUMBER_TOKEN */: accumulator.push(token.number.toString()); break; - case TokenType.COMMA_TOKEN: + case 4 /* COMMA_TOKEN */: results.push(accumulator.join(' ')); accumulator.length = 0; break; @@ -29488,16 +29024,16 @@ function unzipSync(data) { name: "font-size", initialValue: '0', prefix: false, - type: PropertyDescriptorParsingType.TYPE_VALUE, + type: 3 /* TYPE_VALUE */, format: 'length' }; var fontWeight = { name: 'font-weight', initialValue: 'normal', - type: PropertyDescriptorParsingType.VALUE, + type: 0 /* VALUE */, prefix: false, - parse: function (token) { + parse: function (_context, token) { if (isNumberToken(token)) { return token.number; } @@ -29517,33 +29053,27 @@ function unzipSync(data) { var fontVariant = { name: 'font-variant', initialValue: 'none', - type: PropertyDescriptorParsingType.LIST, + type: 1 /* LIST */, prefix: false, - parse: function (tokens) { + parse: function (_context, tokens) { return tokens.filter(isIdentToken).map(function (token) { return token.value; }); } }; - var FONT_STYLE; - (function (FONT_STYLE) { - FONT_STYLE["NORMAL"] = "normal"; - FONT_STYLE["ITALIC"] = "italic"; - FONT_STYLE["OBLIQUE"] = "oblique"; - })(FONT_STYLE || (FONT_STYLE = {})); var fontStyle = { name: 'font-style', initialValue: 'normal', prefix: false, - type: PropertyDescriptorParsingType.IDENT_VALUE, - parse: function (overflow) { + type: 2 /* IDENT_VALUE */, + parse: function (_context, overflow) { switch (overflow) { case 'oblique': - return FONT_STYLE.OBLIQUE; + return "oblique" /* OBLIQUE */; case 'italic': - return FONT_STYLE.ITALIC; + return "italic" /* ITALIC */; case 'normal': default: - return FONT_STYLE.NORMAL; + return "normal" /* NORMAL */; } } }; @@ -29553,14 +29083,14 @@ function unzipSync(data) { var content = { name: 'content', initialValue: 'none', - type: PropertyDescriptorParsingType.LIST, + type: 1 /* LIST */, prefix: false, - parse: function (tokens) { + parse: function (_context, tokens) { if (tokens.length === 0) { return []; } var first = tokens[0]; - if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') { + if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') { return []; } return tokens; @@ -29571,13 +29101,13 @@ function unzipSync(data) { name: 'counter-increment', initialValue: 'none', prefix: true, - type: PropertyDescriptorParsingType.LIST, - parse: function (tokens) { + type: 1 /* LIST */, + parse: function (_context, tokens) { if (tokens.length === 0) { return null; } var first = tokens[0]; - if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') { + if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') { return null; } var increments = []; @@ -29585,7 +29115,7 @@ function unzipSync(data) { for (var i = 0; i < filtered.length; i++) { var counter = filtered[i]; var next = filtered[i + 1]; - if (counter.type === TokenType.IDENT_TOKEN) { + if (counter.type === 20 /* IDENT_TOKEN */) { var increment = next && isNumberToken(next) ? next.number : 1; increments.push({ counter: counter.value, increment: increment }); } @@ -29598,8 +29128,8 @@ function unzipSync(data) { name: 'counter-reset', initialValue: 'none', prefix: true, - type: PropertyDescriptorParsingType.LIST, - parse: function (tokens) { + type: 1 /* LIST */, + parse: function (_context, tokens) { if (tokens.length === 0) { return []; } @@ -29617,17 +29147,27 @@ function unzipSync(data) { } }; + var duration = { + name: 'duration', + initialValue: '0s', + prefix: false, + type: 1 /* LIST */, + parse: function (context, tokens) { + return tokens.filter(isDimensionToken).map(function (token) { return time.parse(context, token); }); + } + }; + var quotes = { name: 'quotes', initialValue: 'none', prefix: true, - type: PropertyDescriptorParsingType.LIST, - parse: function (tokens) { + type: 1 /* LIST */, + parse: function (_context, tokens) { if (tokens.length === 0) { return null; } var first = tokens[0]; - if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') { + if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') { return null; } var quotes = []; @@ -29657,9 +29197,9 @@ function unzipSync(data) { var boxShadow = { name: 'box-shadow', initialValue: 'none', - type: PropertyDescriptorParsingType.LIST, + type: 1 /* LIST */, prefix: false, - parse: function (tokens) { + parse: function (context, tokens) { if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) { return []; } @@ -29694,7 +29234,7 @@ function unzipSync(data) { c++; } else { - shadow.color = color.parse(token); + shadow.color = color$1.parse(context, token); } } return shadow; @@ -29702,73 +29242,156 @@ function unzipSync(data) { } }; + var paintOrder = { + name: 'paint-order', + initialValue: 'normal', + prefix: false, + type: 1 /* LIST */, + parse: function (_context, tokens) { + var DEFAULT_VALUE = [0 /* FILL */, 1 /* STROKE */, 2 /* MARKERS */]; + var layers = []; + tokens.filter(isIdentToken).forEach(function (token) { + switch (token.value) { + case 'stroke': + layers.push(1 /* STROKE */); + break; + case 'fill': + layers.push(0 /* FILL */); + break; + case 'markers': + layers.push(2 /* MARKERS */); + break; + } + }); + DEFAULT_VALUE.forEach(function (value) { + if (layers.indexOf(value) === -1) { + layers.push(value); + } + }); + return layers; + } + }; + + var webkitTextStrokeColor = { + name: "-webkit-text-stroke-color", + initialValue: 'currentcolor', + prefix: false, + type: 3 /* TYPE_VALUE */, + format: 'color' + }; + + var webkitTextStrokeWidth = { + name: "-webkit-text-stroke-width", + initialValue: '0', + type: 0 /* VALUE */, + prefix: false, + parse: function (_context, token) { + if (isDimensionToken(token)) { + return token.number; + } + return 0; + } + }; + + var objectFit = { + name: 'objectFit', + initialValue: 'fill', + prefix: false, + type: 1 /* LIST */, + parse: function (_context, tokens) { + return tokens.filter(isIdentToken).reduce(function (bit, token) { + return bit | parseDisplayValue(token.value); + }, 0 /* FILL */); + } + }; + var parseDisplayValue = function (display) { + switch (display) { + case 'contain': + return 2 /* CONTAIN */; + case 'cover': + return 4 /* COVER */; + case 'none': + return 8 /* NONE */; + case 'scale-down': + return 16 /* SCALE_DOWN */; + } + return 0 /* FILL */; + }; + var CSSParsedDeclaration = /** @class */ (function () { - function CSSParsedDeclaration(declaration) { - this.backgroundClip = parse(backgroundClip, declaration.backgroundClip); - this.backgroundColor = parse(backgroundColor, declaration.backgroundColor); - this.backgroundImage = parse(backgroundImage, declaration.backgroundImage); - this.backgroundOrigin = parse(backgroundOrigin, declaration.backgroundOrigin); - this.backgroundPosition = parse(backgroundPosition, declaration.backgroundPosition); - this.backgroundRepeat = parse(backgroundRepeat, declaration.backgroundRepeat); - this.backgroundSize = parse(backgroundSize, declaration.backgroundSize); - this.borderTopColor = parse(borderTopColor, declaration.borderTopColor); - this.borderRightColor = parse(borderRightColor, declaration.borderRightColor); - this.borderBottomColor = parse(borderBottomColor, declaration.borderBottomColor); - this.borderLeftColor = parse(borderLeftColor, declaration.borderLeftColor); - this.borderTopLeftRadius = parse(borderTopLeftRadius, declaration.borderTopLeftRadius); - this.borderTopRightRadius = parse(borderTopRightRadius, declaration.borderTopRightRadius); - this.borderBottomRightRadius = parse(borderBottomRightRadius, declaration.borderBottomRightRadius); - this.borderBottomLeftRadius = parse(borderBottomLeftRadius, declaration.borderBottomLeftRadius); - this.borderTopStyle = parse(borderTopStyle, declaration.borderTopStyle); - this.borderRightStyle = parse(borderRightStyle, declaration.borderRightStyle); - this.borderBottomStyle = parse(borderBottomStyle, declaration.borderBottomStyle); - this.borderLeftStyle = parse(borderLeftStyle, declaration.borderLeftStyle); - this.borderTopWidth = parse(borderTopWidth, declaration.borderTopWidth); - this.borderRightWidth = parse(borderRightWidth, declaration.borderRightWidth); - this.borderBottomWidth = parse(borderBottomWidth, declaration.borderBottomWidth); - this.borderLeftWidth = parse(borderLeftWidth, declaration.borderLeftWidth); - this.boxShadow = parse(boxShadow, declaration.boxShadow); - this.color = parse(color$1, declaration.color); - this.display = parse(display, declaration.display); - this.float = parse(float, declaration.cssFloat); - this.fontFamily = parse(fontFamily, declaration.fontFamily); - this.fontSize = parse(fontSize, declaration.fontSize); - this.fontStyle = parse(fontStyle, declaration.fontStyle); - this.fontVariant = parse(fontVariant, declaration.fontVariant); - this.fontWeight = parse(fontWeight, declaration.fontWeight); - this.letterSpacing = parse(letterSpacing, declaration.letterSpacing); - this.lineBreak = parse(lineBreak, declaration.lineBreak); - this.lineHeight = parse(lineHeight, declaration.lineHeight); - this.listStyleImage = parse(listStyleImage, declaration.listStyleImage); - this.listStylePosition = parse(listStylePosition, declaration.listStylePosition); - this.listStyleType = parse(listStyleType, declaration.listStyleType); - this.marginTop = parse(marginTop, declaration.marginTop); - this.marginRight = parse(marginRight, declaration.marginRight); - this.marginBottom = parse(marginBottom, declaration.marginBottom); - this.marginLeft = parse(marginLeft, declaration.marginLeft); - this.opacity = parse(opacity, declaration.opacity); - var overflowTuple = parse(overflow, declaration.overflow); + function CSSParsedDeclaration(context, declaration) { + var _a, _b; + this.animationDuration = parse(context, duration, declaration.animationDuration); + this.backgroundClip = parse(context, backgroundClip, declaration.backgroundClip); + this.backgroundColor = parse(context, backgroundColor, declaration.backgroundColor); + this.backgroundImage = parse(context, backgroundImage, declaration.backgroundImage); + this.backgroundOrigin = parse(context, backgroundOrigin, declaration.backgroundOrigin); + this.backgroundPosition = parse(context, backgroundPosition, declaration.backgroundPosition); + this.backgroundRepeat = parse(context, backgroundRepeat, declaration.backgroundRepeat); + this.backgroundSize = parse(context, backgroundSize, declaration.backgroundSize); + this.borderTopColor = parse(context, borderTopColor, declaration.borderTopColor); + this.borderRightColor = parse(context, borderRightColor, declaration.borderRightColor); + this.borderBottomColor = parse(context, borderBottomColor, declaration.borderBottomColor); + this.borderLeftColor = parse(context, borderLeftColor, declaration.borderLeftColor); + this.borderTopLeftRadius = parse(context, borderTopLeftRadius, declaration.borderTopLeftRadius); + this.borderTopRightRadius = parse(context, borderTopRightRadius, declaration.borderTopRightRadius); + this.borderBottomRightRadius = parse(context, borderBottomRightRadius, declaration.borderBottomRightRadius); + this.borderBottomLeftRadius = parse(context, borderBottomLeftRadius, declaration.borderBottomLeftRadius); + this.borderTopStyle = parse(context, borderTopStyle, declaration.borderTopStyle); + this.borderRightStyle = parse(context, borderRightStyle, declaration.borderRightStyle); + this.borderBottomStyle = parse(context, borderBottomStyle, declaration.borderBottomStyle); + this.borderLeftStyle = parse(context, borderLeftStyle, declaration.borderLeftStyle); + this.borderTopWidth = parse(context, borderTopWidth, declaration.borderTopWidth); + this.borderRightWidth = parse(context, borderRightWidth, declaration.borderRightWidth); + this.borderBottomWidth = parse(context, borderBottomWidth, declaration.borderBottomWidth); + this.borderLeftWidth = parse(context, borderLeftWidth, declaration.borderLeftWidth); + this.boxShadow = parse(context, boxShadow, declaration.boxShadow); + this.color = parse(context, color, declaration.color); + this.direction = parse(context, direction, declaration.direction); + this.display = parse(context, display, declaration.display); + this.float = parse(context, float, declaration.cssFloat); + this.fontFamily = parse(context, fontFamily, declaration.fontFamily); + this.fontSize = parse(context, fontSize, declaration.fontSize); + this.fontStyle = parse(context, fontStyle, declaration.fontStyle); + this.fontVariant = parse(context, fontVariant, declaration.fontVariant); + this.fontWeight = parse(context, fontWeight, declaration.fontWeight); + this.letterSpacing = parse(context, letterSpacing, declaration.letterSpacing); + this.lineBreak = parse(context, lineBreak, declaration.lineBreak); + this.lineHeight = parse(context, lineHeight, declaration.lineHeight); + this.listStyleImage = parse(context, listStyleImage, declaration.listStyleImage); + this.listStylePosition = parse(context, listStylePosition, declaration.listStylePosition); + this.listStyleType = parse(context, listStyleType, declaration.listStyleType); + this.marginTop = parse(context, marginTop, declaration.marginTop); + this.marginRight = parse(context, marginRight, declaration.marginRight); + this.marginBottom = parse(context, marginBottom, declaration.marginBottom); + this.marginLeft = parse(context, marginLeft, declaration.marginLeft); + this.opacity = parse(context, opacity, declaration.opacity); + var overflowTuple = parse(context, overflow, declaration.overflow); this.overflowX = overflowTuple[0]; this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0]; - this.overflowWrap = parse(overflowWrap, declaration.overflowWrap); - this.paddingTop = parse(paddingTop, declaration.paddingTop); - this.paddingRight = parse(paddingRight, declaration.paddingRight); - this.paddingBottom = parse(paddingBottom, declaration.paddingBottom); - this.paddingLeft = parse(paddingLeft, declaration.paddingLeft); - this.position = parse(position, declaration.position); - this.textAlign = parse(textAlign, declaration.textAlign); - this.textDecorationColor = parse(textDecorationColor, declaration.textDecorationColor || declaration.color); - this.textDecorationLine = parse(textDecorationLine, declaration.textDecorationLine); - this.textShadow = parse(textShadow, declaration.textShadow); - this.textTransform = parse(textTransform, declaration.textTransform); - this.transform = parse(transform, declaration.transform); - this.transformOrigin = parse(transformOrigin, declaration.transformOrigin); - this.visibility = parse(visibility, declaration.visibility); - this.wordBreak = parse(wordBreak, declaration.wordBreak); - this.zIndex = parse(zIndex, declaration.zIndex); + this.overflowWrap = parse(context, overflowWrap, declaration.overflowWrap); + this.paddingTop = parse(context, paddingTop, declaration.paddingTop); + this.paddingRight = parse(context, paddingRight, declaration.paddingRight); + this.paddingBottom = parse(context, paddingBottom, declaration.paddingBottom); + this.paddingLeft = parse(context, paddingLeft, declaration.paddingLeft); + this.paintOrder = parse(context, paintOrder, declaration.paintOrder); + this.position = parse(context, position, declaration.position); + this.textAlign = parse(context, textAlign, declaration.textAlign); + this.textDecorationColor = parse(context, textDecorationColor, (_a = declaration.textDecorationColor) !== null && _a !== void 0 ? _a : declaration.color); + this.textDecorationLine = parse(context, textDecorationLine, (_b = declaration.textDecorationLine) !== null && _b !== void 0 ? _b : declaration.textDecoration); + this.textShadow = parse(context, textShadow, declaration.textShadow); + this.textTransform = parse(context, textTransform, declaration.textTransform); + this.transform = parse(context, transform$1, declaration.transform); + this.transformOrigin = parse(context, transformOrigin, declaration.transformOrigin); + this.visibility = parse(context, visibility, declaration.visibility); + this.webkitTextStrokeColor = parse(context, webkitTextStrokeColor, declaration.webkitTextStrokeColor); + this.webkitTextStrokeWidth = parse(context, webkitTextStrokeWidth, declaration.webkitTextStrokeWidth); + this.wordBreak = parse(context, wordBreak, declaration.wordBreak); + this.zIndex = parse(context, zIndex, declaration.zIndex); + this.objectFit = parse(context, objectFit, declaration.objectFit); } CSSParsedDeclaration.prototype.isVisible = function () { - return this.display > 0 && this.opacity > 0 && this.visibility === VISIBILITY.VISIBLE; + return this.display > 0 && this.opacity > 0 && this.visibility === 0 /* VISIBLE */; }; CSSParsedDeclaration.prototype.isTransparent = function () { return isTransparent(this.backgroundColor); @@ -29777,13 +29400,13 @@ function unzipSync(data) { return this.transform !== null; }; CSSParsedDeclaration.prototype.isPositioned = function () { - return this.position !== POSITION.STATIC; + return this.position !== 0 /* STATIC */; }; CSSParsedDeclaration.prototype.isPositionedWithZIndex = function () { return this.isPositioned() && !this.zIndex.auto; }; CSSParsedDeclaration.prototype.isFloating = function () { - return this.float !== FLOAT.NONE; + return this.float !== 0 /* NONE */; }; CSSParsedDeclaration.prototype.isInlineLevel = function () { return (contains(this.display, 4 /* INLINE */) || @@ -29796,69 +29419,665 @@ function unzipSync(data) { return CSSParsedDeclaration; }()); var CSSParsedPseudoDeclaration = /** @class */ (function () { - function CSSParsedPseudoDeclaration(declaration) { - this.content = parse(content, declaration.content); - this.quotes = parse(quotes, declaration.quotes); + function CSSParsedPseudoDeclaration(context, declaration) { + this.content = parse(context, content, declaration.content); + this.quotes = parse(context, quotes, declaration.quotes); } return CSSParsedPseudoDeclaration; }()); var CSSParsedCounterDeclaration = /** @class */ (function () { - function CSSParsedCounterDeclaration(declaration) { - this.counterIncrement = parse(counterIncrement, declaration.counterIncrement); - this.counterReset = parse(counterReset, declaration.counterReset); + function CSSParsedCounterDeclaration(context, declaration) { + this.counterIncrement = parse(context, counterIncrement, declaration.counterIncrement); + this.counterReset = parse(context, counterReset, declaration.counterReset); } return CSSParsedCounterDeclaration; }()); // eslint-disable-next-line @typescript-eslint/no-explicit-any - var parse = function (descriptor, style) { + var parse = function (context, descriptor, style) { var tokenizer = new Tokenizer(); var value = style !== null && typeof style !== 'undefined' ? style.toString() : descriptor.initialValue; tokenizer.write(value); var parser = new Parser(tokenizer.read()); switch (descriptor.type) { - case PropertyDescriptorParsingType.IDENT_VALUE: + case 2 /* IDENT_VALUE */: var token = parser.parseComponentValue(); - return descriptor.parse(isIdentToken(token) ? token.value : descriptor.initialValue); - case PropertyDescriptorParsingType.VALUE: - return descriptor.parse(parser.parseComponentValue()); - case PropertyDescriptorParsingType.LIST: - return descriptor.parse(parser.parseComponentValues()); - case PropertyDescriptorParsingType.TOKEN_VALUE: + return descriptor.parse(context, isIdentToken(token) ? token.value : descriptor.initialValue); + case 0 /* VALUE */: + return descriptor.parse(context, parser.parseComponentValue()); + case 1 /* LIST */: + return descriptor.parse(context, parser.parseComponentValues()); + case 4 /* TOKEN_VALUE */: return parser.parseComponentValue(); - case PropertyDescriptorParsingType.TYPE_VALUE: + case 3 /* TYPE_VALUE */: switch (descriptor.format) { case 'angle': - return angle.parse(parser.parseComponentValue()); + return angle.parse(context, parser.parseComponentValue()); case 'color': - return color.parse(parser.parseComponentValue()); + return color$1.parse(context, parser.parseComponentValue()); case 'image': - return image.parse(parser.parseComponentValue()); + return image.parse(context, parser.parseComponentValue()); case 'length': var length_1 = parser.parseComponentValue(); return isLength(length_1) ? length_1 : ZERO_LENGTH; case 'length-percentage': var value_1 = parser.parseComponentValue(); return isLengthPercentage(value_1) ? value_1 : ZERO_LENGTH; + case 'time': + return time.parse(context, parser.parseComponentValue()); } + break; + } + }; + + var elementDebuggerAttribute = 'data-html2canvas-debug'; + var getElementDebugType = function (element) { + var attribute = element.getAttribute(elementDebuggerAttribute); + switch (attribute) { + case 'all': + return 1 /* ALL */; + case 'clone': + return 2 /* CLONE */; + case 'parse': + return 3 /* PARSE */; + case 'render': + return 4 /* RENDER */; + default: + return 0 /* NONE */; } - throw new Error("Attempting to parse unsupported css format type " + descriptor.format); + }; + var isDebugging = function (element, type) { + var elementType = getElementDebugType(element); + return elementType === 1 /* ALL */ || type === elementType; }; var ElementContainer = /** @class */ (function () { - function ElementContainer(element) { - this.styles = new CSSParsedDeclaration(window.getComputedStyle(element, null)); + function ElementContainer(context, element) { + this.context = context; this.textNodes = []; this.elements = []; - if (this.styles.transform !== null && isHTMLElementNode(element)) { - // getBoundingClientRect takes transforms into account - element.style.transform = 'none'; - } - this.bounds = parseBounds(element); this.flags = 0; + if (isDebugging(element, 3 /* PARSE */)) { + debugger; + } + this.styles = new CSSParsedDeclaration(context, window.getComputedStyle(element, null)); + if (isHTMLElementNode(element)) { + if (this.styles.animationDuration.some(function (duration) { return duration > 0; })) { + element.style.animationDuration = '0s'; + } + if (this.styles.transform !== null) { + // getBoundingClientRect takes transforms into account + element.style.transform = 'none'; + } + } + this.bounds = parseBounds(this.context, element); + if (isDebugging(element, 4 /* RENDER */)) { + this.flags |= 16 /* DEBUG_RENDER */; + } } return ElementContainer; }()); + /* + * text-segmentation 1.0.3 + * Copyright (c) 2022 Niklas von Hertzen + * Released under MIT License + */ + var base64 = 'AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA='; + + /* + * utrie 1.0.2 + * Copyright (c) 2022 Niklas von Hertzen + * Released under MIT License + */ + var chars$1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + // Use a lookup table to find the index. + var lookup$1 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256); + for (var i$1 = 0; i$1 < chars$1.length; i$1++) { + lookup$1[chars$1.charCodeAt(i$1)] = i$1; + } + var decode = function (base64) { + var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4; + if (base64[base64.length - 1] === '=') { + bufferLength--; + if (base64[base64.length - 2] === '=') { + bufferLength--; + } + } + var buffer = typeof ArrayBuffer !== 'undefined' && + typeof Uint8Array !== 'undefined' && + typeof Uint8Array.prototype.slice !== 'undefined' + ? new ArrayBuffer(bufferLength) + : new Array(bufferLength); + var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer); + for (i = 0; i < len; i += 4) { + encoded1 = lookup$1[base64.charCodeAt(i)]; + encoded2 = lookup$1[base64.charCodeAt(i + 1)]; + encoded3 = lookup$1[base64.charCodeAt(i + 2)]; + encoded4 = lookup$1[base64.charCodeAt(i + 3)]; + bytes[p++] = (encoded1 << 2) | (encoded2 >> 4); + bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2); + bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63); + } + return buffer; + }; + var polyUint16Array = function (buffer) { + var length = buffer.length; + var bytes = []; + for (var i = 0; i < length; i += 2) { + bytes.push((buffer[i + 1] << 8) | buffer[i]); + } + return bytes; + }; + var polyUint32Array = function (buffer) { + var length = buffer.length; + var bytes = []; + for (var i = 0; i < length; i += 4) { + bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]); + } + return bytes; + }; + + /** Shift size for getting the index-2 table offset. */ + var UTRIE2_SHIFT_2 = 5; + /** Shift size for getting the index-1 table offset. */ + var UTRIE2_SHIFT_1 = 6 + 5; + /** + * Shift size for shifting left the index array values. + * Increases possible data size with 16-bit index values at the cost + * of compactability. + * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY. + */ + var UTRIE2_INDEX_SHIFT = 2; + /** + * Difference between the two shift sizes, + * for getting an index-1 offset from an index-2 offset. 6=11-5 + */ + var UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2; + /** + * The part of the index-2 table for U+D800..U+DBFF stores values for + * lead surrogate code _units_ not code _points_. + * Values for lead surrogate code _points_ are indexed with this portion of the table. + * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.) + */ + var UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2; + /** Number of entries in a data block. 32=0x20 */ + var UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2; + /** Mask for getting the lower bits for the in-data-block offset. */ + var UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1; + var UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2; + /** Count the lengths of both BMP pieces. 2080=0x820 */ + var UTRIE2_INDEX_2_BMP_LENGTH = UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH; + /** + * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820. + * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2. + */ + var UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH; + var UTRIE2_UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */ + /** + * The index-1 table, only used for supplementary code points, at offset 2112=0x840. + * Variable length, for code points up to highStart, where the last single-value range starts. + * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1. + * (For 0x100000 supplementary code points U+10000..U+10ffff.) + * + * The part of the index-2 table for supplementary code points starts + * after this index-1 table. + * + * Both the index-1 table and the following part of the index-2 table + * are omitted completely if there is only BMP data. + */ + var UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH; + /** + * Number of index-1 entries for the BMP. 32=0x20 + * This part of the index-1 table is omitted from the serialized form. + */ + var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1; + /** Number of entries in an index-2 block. 64=0x40 */ + var UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2; + /** Mask for getting the lower bits for the in-index-2-block offset. */ + var UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1; + var slice16 = function (view, start, end) { + if (view.slice) { + return view.slice(start, end); + } + return new Uint16Array(Array.prototype.slice.call(view, start, end)); + }; + var slice32 = function (view, start, end) { + if (view.slice) { + return view.slice(start, end); + } + return new Uint32Array(Array.prototype.slice.call(view, start, end)); + }; + var createTrieFromBase64 = function (base64, _byteLength) { + var buffer = decode(base64); + var view32 = Array.isArray(buffer) ? polyUint32Array(buffer) : new Uint32Array(buffer); + var view16 = Array.isArray(buffer) ? polyUint16Array(buffer) : new Uint16Array(buffer); + var headerLength = 24; + var index = slice16(view16, headerLength / 2, view32[4] / 2); + var data = view32[5] === 2 + ? slice16(view16, (headerLength + view32[4]) / 2) + : slice32(view32, Math.ceil((headerLength + view32[4]) / 4)); + return new Trie(view32[0], view32[1], view32[2], view32[3], index, data); + }; + var Trie = /** @class */ (function () { + function Trie(initialValue, errorValue, highStart, highValueIndex, index, data) { + this.initialValue = initialValue; + this.errorValue = errorValue; + this.highStart = highStart; + this.highValueIndex = highValueIndex; + this.index = index; + this.data = data; + } + /** + * Get the value for a code point as stored in the Trie. + * + * @param codePoint the code point + * @return the value + */ + Trie.prototype.get = function (codePoint) { + var ix; + if (codePoint >= 0) { + if (codePoint < 0x0d800 || (codePoint > 0x0dbff && codePoint <= 0x0ffff)) { + // Ordinary BMP code point, excluding leading surrogates. + // BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index. + // 16 bit data is stored in the index array itself. + ix = this.index[codePoint >> UTRIE2_SHIFT_2]; + ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK); + return this.data[ix]; + } + if (codePoint <= 0xffff) { + // Lead Surrogate Code Point. A Separate index section is stored for + // lead surrogate code units and code points. + // The main index has the code unit data. + // For this function, we need the code point data. + // Note: this expression could be refactored for slightly improved efficiency, but + // surrogate code points will be so rare in practice that it's not worth it. + ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2)]; + ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK); + return this.data[ix]; + } + if (codePoint < this.highStart) { + // Supplemental code point, use two-level lookup. + ix = UTRIE2_INDEX_1_OFFSET - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> UTRIE2_SHIFT_1); + ix = this.index[ix]; + ix += (codePoint >> UTRIE2_SHIFT_2) & UTRIE2_INDEX_2_MASK; + ix = this.index[ix]; + ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK); + return this.data[ix]; + } + if (codePoint <= 0x10ffff) { + return this.data[this.highValueIndex]; + } + } + // Fall through. The code point is outside of the legal range of 0..0x10ffff. + return this.errorValue; + }; + return Trie; + }()); + + /* + * base64-arraybuffer 1.0.2 + * Copyright (c) 2022 Niklas von Hertzen + * Released under MIT License + */ + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + // Use a lookup table to find the index. + var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256); + for (var i = 0; i < chars.length; i++) { + lookup[chars.charCodeAt(i)] = i; + } + + var Prepend = 1; + var CR = 2; + var LF = 3; + var Control = 4; + var Extend = 5; + var SpacingMark = 7; + var L = 8; + var V = 9; + var T = 10; + var LV = 11; + var LVT = 12; + var ZWJ = 13; + var Extended_Pictographic = 14; + var RI = 15; + var toCodePoints = function (str) { + var codePoints = []; + var i = 0; + var length = str.length; + while (i < length) { + var value = str.charCodeAt(i++); + if (value >= 0xd800 && value <= 0xdbff && i < length) { + var extra = str.charCodeAt(i++); + if ((extra & 0xfc00) === 0xdc00) { + codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000); + } + else { + codePoints.push(value); + i--; + } + } + else { + codePoints.push(value); + } + } + return codePoints; + }; + var fromCodePoint = function () { + var codePoints = []; + for (var _i = 0; _i < arguments.length; _i++) { + codePoints[_i] = arguments[_i]; + } + if (String.fromCodePoint) { + return String.fromCodePoint.apply(String, codePoints); + } + var length = codePoints.length; + if (!length) { + return ''; + } + var codeUnits = []; + var index = -1; + var result = ''; + while (++index < length) { + var codePoint = codePoints[index]; + if (codePoint <= 0xffff) { + codeUnits.push(codePoint); + } + else { + codePoint -= 0x10000; + codeUnits.push((codePoint >> 10) + 0xd800, (codePoint % 0x400) + 0xdc00); + } + if (index + 1 === length || codeUnits.length > 0x4000) { + result += String.fromCharCode.apply(String, codeUnits); + codeUnits.length = 0; + } + } + return result; + }; + var UnicodeTrie = createTrieFromBase64(base64); + var BREAK_NOT_ALLOWED = '×'; + var BREAK_ALLOWED = '÷'; + var codePointToClass = function (codePoint) { return UnicodeTrie.get(codePoint); }; + var _graphemeBreakAtIndex = function (_codePoints, classTypes, index) { + var prevIndex = index - 2; + var prev = classTypes[prevIndex]; + var current = classTypes[index - 1]; + var next = classTypes[index]; + // GB3 Do not break between a CR and LF + if (current === CR && next === LF) { + return BREAK_NOT_ALLOWED; + } + // GB4 Otherwise, break before and after controls. + if (current === CR || current === LF || current === Control) { + return BREAK_ALLOWED; + } + // GB5 + if (next === CR || next === LF || next === Control) { + return BREAK_ALLOWED; + } + // Do not break Hangul syllable sequences. + // GB6 + if (current === L && [L, V, LV, LVT].indexOf(next) !== -1) { + return BREAK_NOT_ALLOWED; + } + // GB7 + if ((current === LV || current === V) && (next === V || next === T)) { + return BREAK_NOT_ALLOWED; + } + // GB8 + if ((current === LVT || current === T) && next === T) { + return BREAK_NOT_ALLOWED; + } + // GB9 Do not break before extending characters or ZWJ. + if (next === ZWJ || next === Extend) { + return BREAK_NOT_ALLOWED; + } + // Do not break before SpacingMarks, or after Prepend characters. + // GB9a + if (next === SpacingMark) { + return BREAK_NOT_ALLOWED; + } + // GB9a + if (current === Prepend) { + return BREAK_NOT_ALLOWED; + } + // GB11 Do not break within emoji modifier sequences or emoji zwj sequences. + if (current === ZWJ && next === Extended_Pictographic) { + while (prev === Extend) { + prev = classTypes[--prevIndex]; + } + if (prev === Extended_Pictographic) { + return BREAK_NOT_ALLOWED; + } + } + // GB12 Do not break within emoji flag sequences. + // That is, do not break between regional indicator (RI) symbols + // if there is an odd number of RI characters before the break point. + if (current === RI && next === RI) { + var countRI = 0; + while (prev === RI) { + countRI++; + prev = classTypes[--prevIndex]; + } + if (countRI % 2 === 0) { + return BREAK_NOT_ALLOWED; + } + } + return BREAK_ALLOWED; + }; + var GraphemeBreaker = function (str) { + var codePoints = toCodePoints(str); + var length = codePoints.length; + var index = 0; + var lastEnd = 0; + var classTypes = codePoints.map(codePointToClass); + return { + next: function () { + if (index >= length) { + return { done: true, value: null }; + } + var graphemeBreak = BREAK_NOT_ALLOWED; + while (index < length && + (graphemeBreak = _graphemeBreakAtIndex(codePoints, classTypes, ++index)) === BREAK_NOT_ALLOWED) { } + if (graphemeBreak !== BREAK_NOT_ALLOWED || index === length) { + var value = fromCodePoint.apply(null, codePoints.slice(lastEnd, index)); + lastEnd = index; + return { value: value, done: false }; + } + return { done: true, value: null }; + }, + }; + }; + var splitGraphemes = function (str) { + var breaker = GraphemeBreaker(str); + var graphemes = []; + var bk; + while (!(bk = breaker.next()).done) { + if (bk.value) { + graphemes.push(bk.value.slice()); + } + } + return graphemes; + }; + + var testRangeBounds = function (document) { + var TEST_HEIGHT = 123; + if (document.createRange) { + var range = document.createRange(); + if (range.getBoundingClientRect) { + var testElement = document.createElement('boundtest'); + testElement.style.height = TEST_HEIGHT + "px"; + testElement.style.display = 'block'; + document.body.appendChild(testElement); + range.selectNode(testElement); + var rangeBounds = range.getBoundingClientRect(); + var rangeHeight = Math.round(rangeBounds.height); + document.body.removeChild(testElement); + if (rangeHeight === TEST_HEIGHT) { + return true; + } + } + } + return false; + }; + var testIOSLineBreak = function (document) { + var testElement = document.createElement('boundtest'); + testElement.style.width = '50px'; + testElement.style.display = 'block'; + testElement.style.fontSize = '12px'; + testElement.style.letterSpacing = '0px'; + testElement.style.wordSpacing = '0px'; + document.body.appendChild(testElement); + var range = document.createRange(); + testElement.innerHTML = typeof ''.repeat === 'function' ? '👨'.repeat(10) : ''; + var node = testElement.firstChild; + var textList = toCodePoints$1(node.data).map(function (i) { return fromCodePoint$1(i); }); + var offset = 0; + var prev = {}; + // ios 13 does not handle range getBoundingClientRect line changes correctly #2177 + var supports = textList.every(function (text, i) { + range.setStart(node, offset); + range.setEnd(node, offset + text.length); + var rect = range.getBoundingClientRect(); + offset += text.length; + var boundAhead = rect.x > prev.x || rect.y > prev.y; + prev = rect; + if (i === 0) { + return true; + } + return boundAhead; + }); + document.body.removeChild(testElement); + return supports; + }; + var testCORS = function () { return typeof new Image().crossOrigin !== 'undefined'; }; + var testResponseType = function () { return typeof new XMLHttpRequest().responseType === 'string'; }; + var testSVG = function (document) { + var img = new Image(); + var canvas = document.createElement('canvas'); + var ctx = canvas.getContext('2d'); + if (!ctx) { + return false; + } + img.src = "data:image/svg+xml,"; + try { + ctx.drawImage(img, 0, 0); + canvas.toDataURL(); + } + catch (e) { + return false; + } + return true; + }; + var isGreenPixel = function (data) { + return data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255; + }; + var testForeignObject = function (document) { + var canvas = document.createElement('canvas'); + var size = 100; + canvas.width = size; + canvas.height = size; + var ctx = canvas.getContext('2d'); + if (!ctx) { + return Promise.reject(false); + } + ctx.fillStyle = 'rgb(0, 255, 0)'; + ctx.fillRect(0, 0, size, size); + var img = new Image(); + var greenImageSrc = canvas.toDataURL(); + img.src = greenImageSrc; + var svg = createForeignObjectSVG(size, size, 0, 0, img); + ctx.fillStyle = 'red'; + ctx.fillRect(0, 0, size, size); + return loadSerializedSVG$1(svg) + .then(function (img) { + ctx.drawImage(img, 0, 0); + var data = ctx.getImageData(0, 0, size, size).data; + ctx.fillStyle = 'red'; + ctx.fillRect(0, 0, size, size); + var node = document.createElement('div'); + node.style.backgroundImage = "url(" + greenImageSrc + ")"; + node.style.height = size + "px"; + // Firefox 55 does not render inline tags + return isGreenPixel(data) + ? loadSerializedSVG$1(createForeignObjectSVG(size, size, 0, 0, node)) + : Promise.reject(false); + }) + .then(function (img) { + ctx.drawImage(img, 0, 0); + // Edge does not render background-images + return isGreenPixel(ctx.getImageData(0, 0, size, size).data); + }) + .catch(function () { return false; }); + }; + var createForeignObjectSVG = function (width, height, x, y, node) { + var xmlns = 'http://www.w3.org/2000/svg'; + var svg = document.createElementNS(xmlns, 'svg'); + var foreignObject = document.createElementNS(xmlns, 'foreignObject'); + svg.setAttributeNS(null, 'width', width.toString()); + svg.setAttributeNS(null, 'height', height.toString()); + foreignObject.setAttributeNS(null, 'width', '100%'); + foreignObject.setAttributeNS(null, 'height', '100%'); + foreignObject.setAttributeNS(null, 'x', x.toString()); + foreignObject.setAttributeNS(null, 'y', y.toString()); + foreignObject.setAttributeNS(null, 'externalResourcesRequired', 'true'); + svg.appendChild(foreignObject); + foreignObject.appendChild(node); + return svg; + }; + var loadSerializedSVG$1 = function (svg) { + return new Promise(function (resolve, reject) { + var img = new Image(); + img.onload = function () { return resolve(img); }; + img.onerror = reject; + img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(new XMLSerializer().serializeToString(svg)); + }); + }; + var FEATURES = { + get SUPPORT_RANGE_BOUNDS() { + var value = testRangeBounds(document); + Object.defineProperty(FEATURES, 'SUPPORT_RANGE_BOUNDS', { value: value }); + return value; + }, + get SUPPORT_WORD_BREAKING() { + var value = FEATURES.SUPPORT_RANGE_BOUNDS && testIOSLineBreak(document); + Object.defineProperty(FEATURES, 'SUPPORT_WORD_BREAKING', { value: value }); + return value; + }, + get SUPPORT_SVG_DRAWING() { + var value = testSVG(document); + Object.defineProperty(FEATURES, 'SUPPORT_SVG_DRAWING', { value: value }); + return value; + }, + get SUPPORT_FOREIGNOBJECT_DRAWING() { + var value = typeof Array.from === 'function' && typeof window.fetch === 'function' + ? testForeignObject(document) + : Promise.resolve(false); + Object.defineProperty(FEATURES, 'SUPPORT_FOREIGNOBJECT_DRAWING', { value: value }); + return value; + }, + get SUPPORT_CORS_IMAGES() { + var value = testCORS(); + Object.defineProperty(FEATURES, 'SUPPORT_CORS_IMAGES', { value: value }); + return value; + }, + get SUPPORT_RESPONSE_TYPE() { + var value = testResponseType(); + Object.defineProperty(FEATURES, 'SUPPORT_RESPONSE_TYPE', { value: value }); + return value; + }, + get SUPPORT_CORS_XHR() { + var value = 'withCredentials' in new XMLHttpRequest(); + Object.defineProperty(FEATURES, 'SUPPORT_CORS_XHR', { value: value }); + return value; + }, + get SUPPORT_NATIVE_TEXT_SEGMENTATION() { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + var value = !!(typeof Intl !== 'undefined' && Intl.Segmenter); + Object.defineProperty(FEATURES, 'SUPPORT_NATIVE_TEXT_SEGMENTATION', { value: value }); + return value; + } + }; + var TextBounds = /** @class */ (function () { function TextBounds(text, bounds) { this.text = text; @@ -29866,18 +30085,29 @@ function unzipSync(data) { } return TextBounds; }()); - var parseTextBounds = function (value, styles, node) { + var parseTextBounds = function (context, value, styles, node) { var textList = breakText(value, styles); var textBounds = []; var offset = 0; textList.forEach(function (text) { if (styles.textDecorationLine.length || text.trim().length > 0) { if (FEATURES.SUPPORT_RANGE_BOUNDS) { - textBounds.push(new TextBounds(text, getRangeBounds(node, offset, text.length))); + var clientRects = createRange(node, offset, text.length).getClientRects(); + if (clientRects.length > 1) { + var subSegments = segmentGraphemes(text); + var subOffset_1 = 0; + subSegments.forEach(function (subSegment) { + textBounds.push(new TextBounds(subSegment, Bounds.fromDOMRectList(context, createRange(node, subOffset_1 + offset, subSegment.length).getClientRects()))); + subOffset_1 += subSegment.length; + }); + } + else { + textBounds.push(new TextBounds(text, Bounds.fromDOMRectList(context, clientRects))); + } } else { var replacementNode = node.splitText(text.length); - textBounds.push(new TextBounds(text, getWrapperBounds(node))); + textBounds.push(new TextBounds(text, getWrapperBounds(context, node))); node = replacementNode; } } @@ -29888,7 +30118,7 @@ function unzipSync(data) { }); return textBounds; }; - var getWrapperBounds = function (node) { + var getWrapperBounds = function (context, node) { var ownerDocument = node.ownerDocument; if (ownerDocument) { var wrapper = ownerDocument.createElement('html2canvaswrapper'); @@ -29896,16 +30126,16 @@ function unzipSync(data) { var parentNode = node.parentNode; if (parentNode) { parentNode.replaceChild(wrapper, node); - var bounds = parseBounds(wrapper); + var bounds = parseBounds(context, wrapper); if (wrapper.firstChild) { parentNode.replaceChild(wrapper.firstChild, wrapper); } return bounds; } } - return new Bounds(0, 0, 0, 0); + return Bounds.EMPTY; }; - var getRangeBounds = function (node, offset, length) { + var createRange = function (node, offset, length) { var ownerDocument = node.ownerDocument; if (!ownerDocument) { throw new Error('Node has no owner document'); @@ -29913,40 +30143,82 @@ function unzipSync(data) { var range = ownerDocument.createRange(); range.setStart(node, offset); range.setEnd(node, offset + length); - return Bounds.fromClientRect(range.getBoundingClientRect()); + return range; + }; + var segmentGraphemes = function (value) { + if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + var segmenter = new Intl.Segmenter(void 0, { granularity: 'grapheme' }); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return Array.from(segmenter.segment(value)).map(function (segment) { return segment.segment; }); + } + return splitGraphemes(value); + }; + var segmentWords = function (value, styles) { + if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + var segmenter = new Intl.Segmenter(void 0, { + granularity: 'word' + }); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return Array.from(segmenter.segment(value)).map(function (segment) { return segment.segment; }); + } + return breakWords(value, styles); }; var breakText = function (value, styles) { - return styles.letterSpacing !== 0 ? toCodePoints(value).map(function (i) { return fromCodePoint(i); }) : breakWords(value, styles); + return styles.letterSpacing !== 0 ? segmentGraphemes(value) : segmentWords(value, styles); }; + // https://drafts.csswg.org/css-text/#word-separator + var wordSeparators = [0x0020, 0x00a0, 0x1361, 0x10100, 0x10101, 0x1039, 0x1091]; var breakWords = function (str, styles) { var breaker = LineBreaker(str, { lineBreak: styles.lineBreak, - wordBreak: styles.overflowWrap === OVERFLOW_WRAP.BREAK_WORD ? 'break-word' : styles.wordBreak + wordBreak: styles.overflowWrap === "break-word" /* BREAK_WORD */ ? 'break-word' : styles.wordBreak }); var words = []; var bk; - while (!(bk = breaker.next()).done) { + var _loop_1 = function () { if (bk.value) { - words.push(bk.value.slice()); + var value = bk.value.slice(); + var codePoints = toCodePoints$1(value); + var word_1 = ''; + codePoints.forEach(function (codePoint) { + if (wordSeparators.indexOf(codePoint) === -1) { + word_1 += fromCodePoint$1(codePoint); + } + else { + if (word_1.length) { + words.push(word_1); + } + words.push(fromCodePoint$1(codePoint)); + word_1 = ''; + } + }); + if (word_1.length) { + words.push(word_1); + } } + }; + while (!(bk = breaker.next()).done) { + _loop_1(); } return words; }; var TextContainer = /** @class */ (function () { - function TextContainer(node, styles) { - this.text = transform$1(node.data, styles.textTransform); - this.textBounds = parseTextBounds(this.text, styles, node); + function TextContainer(context, node, styles) { + this.text = transform(node.data, styles.textTransform); + this.textBounds = parseTextBounds(context, this.text, styles, node); } return TextContainer; }()); - var transform$1 = function (text, transform) { + var transform = function (text, transform) { switch (transform) { - case TEXT_TRANSFORM.LOWERCASE: + case 1 /* LOWERCASE */: return text.toLowerCase(); - case TEXT_TRANSFORM.CAPITALIZE: + case 3 /* CAPITALIZE */: return text.replace(CAPITALIZE, capitalize); - case TEXT_TRANSFORM.UPPERCASE: + case 2 /* UPPERCASE */: return text.toUpperCase(); default: return text; @@ -29962,12 +30234,12 @@ function unzipSync(data) { var ImageElementContainer = /** @class */ (function (_super) { __extends(ImageElementContainer, _super); - function ImageElementContainer(img) { - var _this = _super.call(this, img) || this; + function ImageElementContainer(context, img) { + var _this = _super.call(this, context, img) || this; _this.src = img.currentSrc || img.src; _this.intrinsicWidth = img.naturalWidth; _this.intrinsicHeight = img.naturalHeight; - CacheStorage.getInstance().addImage(_this.src); + _this.context.cache.addImage(_this.src); return _this; } return ImageElementContainer; @@ -29975,8 +30247,8 @@ function unzipSync(data) { var CanvasElementContainer = /** @class */ (function (_super) { __extends(CanvasElementContainer, _super); - function CanvasElementContainer(canvas) { - var _this = _super.call(this, canvas) || this; + function CanvasElementContainer(context, canvas) { + var _this = _super.call(this, context, canvas) || this; _this.canvas = canvas; _this.intrinsicWidth = canvas.width; _this.intrinsicHeight = canvas.height; @@ -29987,13 +30259,16 @@ function unzipSync(data) { var SVGElementContainer = /** @class */ (function (_super) { __extends(SVGElementContainer, _super); - function SVGElementContainer(img) { - var _this = _super.call(this, img) || this; + function SVGElementContainer(context, img) { + var _this = _super.call(this, context, img) || this; var s = new XMLSerializer(); + var bounds = parseBounds(context, img); + img.setAttribute('width', bounds.width + "px"); + img.setAttribute('height', bounds.height + "px"); _this.svg = "data:image/svg+xml," + encodeURIComponent(s.serializeToString(img)); _this.intrinsicWidth = img.width.baseVal.value; _this.intrinsicHeight = img.height.baseVal.value; - CacheStorage.getInstance().addImage(_this.svg); + _this.context.cache.addImage(_this.svg); return _this; } return SVGElementContainer; @@ -30001,8 +30276,8 @@ function unzipSync(data) { var LIElementContainer = /** @class */ (function (_super) { __extends(LIElementContainer, _super); - function LIElementContainer(element) { - var _this = _super.call(this, element) || this; + function LIElementContainer(context, element) { + var _this = _super.call(this, context, element) || this; _this.value = element.value; return _this; } @@ -30011,8 +30286,8 @@ function unzipSync(data) { var OLElementContainer = /** @class */ (function (_super) { __extends(OLElementContainer, _super); - function OLElementContainer(element) { - var _this = _super.call(this, element) || this; + function OLElementContainer(context, element) { + var _this = _super.call(this, context, element) || this; _this.start = element.start; _this.reversed = typeof element.reversed === 'boolean' && element.reversed === true; return _this; @@ -30022,7 +30297,7 @@ function unzipSync(data) { var CHECKBOX_BORDER_RADIUS = [ { - type: TokenType.DIMENSION_TOKEN, + type: 15 /* DIMENSION_TOKEN */, flags: 0, unit: 'px', number: 3 @@ -30030,7 +30305,7 @@ function unzipSync(data) { ]; var RADIO_BORDER_RADIUS = [ { - type: TokenType.PERCENTAGE_TOKEN, + type: 16 /* PERCENTAGE_TOKEN */, flags: 0, number: 50 } @@ -30054,27 +30329,46 @@ function unzipSync(data) { var INPUT_COLOR = 0x2a2a2aff; var InputElementContainer = /** @class */ (function (_super) { __extends(InputElementContainer, _super); - function InputElementContainer(input) { - var _this = _super.call(this, input) || this; + function InputElementContainer(context, input) { + var _this = _super.call(this, context, input) || this; _this.type = input.type.toLowerCase(); _this.checked = input.checked; _this.value = getInputValue(input); if (_this.type === CHECKBOX || _this.type === RADIO) { _this.styles.backgroundColor = 0xdededeff; - _this.styles.borderTopColor = _this.styles.borderRightColor = _this.styles.borderBottomColor = _this.styles.borderLeftColor = 0xa5a5a5ff; - _this.styles.borderTopWidth = _this.styles.borderRightWidth = _this.styles.borderBottomWidth = _this.styles.borderLeftWidth = 1; - _this.styles.borderTopStyle = _this.styles.borderRightStyle = _this.styles.borderBottomStyle = _this.styles.borderLeftStyle = - BORDER_STYLE.SOLID; - _this.styles.backgroundClip = [BACKGROUND_CLIP.BORDER_BOX]; + _this.styles.borderTopColor = + _this.styles.borderRightColor = + _this.styles.borderBottomColor = + _this.styles.borderLeftColor = + 0xa5a5a5ff; + _this.styles.borderTopWidth = + _this.styles.borderRightWidth = + _this.styles.borderBottomWidth = + _this.styles.borderLeftWidth = + 1; + _this.styles.borderTopStyle = + _this.styles.borderRightStyle = + _this.styles.borderBottomStyle = + _this.styles.borderLeftStyle = + 1 /* SOLID */; + _this.styles.backgroundClip = [0 /* BORDER_BOX */]; _this.styles.backgroundOrigin = [0 /* BORDER_BOX */]; _this.bounds = reformatInputBounds(_this.bounds); } switch (_this.type) { case CHECKBOX: - _this.styles.borderTopRightRadius = _this.styles.borderTopLeftRadius = _this.styles.borderBottomRightRadius = _this.styles.borderBottomLeftRadius = CHECKBOX_BORDER_RADIUS; + _this.styles.borderTopRightRadius = + _this.styles.borderTopLeftRadius = + _this.styles.borderBottomRightRadius = + _this.styles.borderBottomLeftRadius = + CHECKBOX_BORDER_RADIUS; break; case RADIO: - _this.styles.borderTopRightRadius = _this.styles.borderTopLeftRadius = _this.styles.borderBottomRightRadius = _this.styles.borderBottomLeftRadius = RADIO_BORDER_RADIUS; + _this.styles.borderTopRightRadius = + _this.styles.borderTopLeftRadius = + _this.styles.borderBottomRightRadius = + _this.styles.borderBottomLeftRadius = + RADIO_BORDER_RADIUS; break; } return _this; @@ -30084,8 +30378,8 @@ function unzipSync(data) { var SelectElementContainer = /** @class */ (function (_super) { __extends(SelectElementContainer, _super); - function SelectElementContainer(element) { - var _this = _super.call(this, element) || this; + function SelectElementContainer(context, element) { + var _this = _super.call(this, context, element) || this; var option = element.options[element.selectedIndex || 0]; _this.value = option ? option.text || '' : ''; return _this; @@ -30095,19 +30389,18 @@ function unzipSync(data) { var TextareaElementContainer = /** @class */ (function (_super) { __extends(TextareaElementContainer, _super); - function TextareaElementContainer(element) { - var _this = _super.call(this, element) || this; + function TextareaElementContainer(context, element) { + var _this = _super.call(this, context, element) || this; _this.value = element.value; return _this; } return TextareaElementContainer; }(ElementContainer)); - var parseColor = function (value) { return color.parse(Parser.create(value).parseComponentValue()); }; var IFrameElementContainer = /** @class */ (function (_super) { __extends(IFrameElementContainer, _super); - function IFrameElementContainer(iframe) { - var _this = _super.call(this, iframe) || this; + function IFrameElementContainer(context, iframe) { + var _this = _super.call(this, context, iframe) || this; _this.src = iframe.src; _this.width = parseInt(iframe.width, 10) || 0; _this.height = parseInt(iframe.height, 10) || 0; @@ -30116,14 +30409,13 @@ function unzipSync(data) { if (iframe.contentWindow && iframe.contentWindow.document && iframe.contentWindow.document.documentElement) { - _this.tree = parseTree(iframe.contentWindow.document.documentElement); + _this.tree = parseTree(context, iframe.contentWindow.document.documentElement); // http://www.w3.org/TR/css3-background/#special-backgrounds var documentBackgroundColor = iframe.contentWindow.document.documentElement - ? parseColor(getComputedStyle(iframe.contentWindow.document.documentElement) - .backgroundColor) + ? parseColor(context, getComputedStyle(iframe.contentWindow.document.documentElement).backgroundColor) : COLORS.TRANSPARENT; var bodyBackgroundColor = iframe.contentWindow.document.body - ? parseColor(getComputedStyle(iframe.contentWindow.document.body).backgroundColor) + ? parseColor(context, getComputedStyle(iframe.contentWindow.document.body).backgroundColor) : COLORS.TRANSPARENT; _this.backgroundColor = isTransparent(documentBackgroundColor) ? isTransparent(bodyBackgroundColor) @@ -30139,66 +30431,77 @@ function unzipSync(data) { }(ElementContainer)); var LIST_OWNERS = ['OL', 'UL', 'MENU']; - var parseNodeTree = function (node, parent, root) { + var parseNodeTree = function (context, node, parent, root) { for (var childNode = node.firstChild, nextNode = void 0; childNode; childNode = nextNode) { nextNode = childNode.nextSibling; if (isTextNode(childNode) && childNode.data.trim().length > 0) { - parent.textNodes.push(new TextContainer(childNode, parent.styles)); + parent.textNodes.push(new TextContainer(context, childNode, parent.styles)); } else if (isElementNode(childNode)) { - var container = createContainer(childNode); - if (container.styles.isVisible()) { - if (createsRealStackingContext(childNode, container, root)) { - container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */; - } - else if (createsStackingContext(container.styles)) { - container.flags |= 2 /* CREATES_STACKING_CONTEXT */; - } - if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) { - container.flags |= 8 /* IS_LIST_OWNER */; - } - parent.elements.push(container); - if (!isTextareaElement(childNode) && !isSVGElement(childNode) && !isSelectElement(childNode)) { - parseNodeTree(childNode, container, root); + if (isSlotElement(childNode) && childNode.assignedNodes) { + childNode.assignedNodes().forEach(function (childNode) { return parseNodeTree(context, childNode, parent, root); }); + } + else { + var container = createContainer(context, childNode); + if (container.styles.isVisible()) { + if (createsRealStackingContext(childNode, container, root)) { + container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */; + } + else if (createsStackingContext(container.styles)) { + container.flags |= 2 /* CREATES_STACKING_CONTEXT */; + } + if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) { + container.flags |= 8 /* IS_LIST_OWNER */; + } + parent.elements.push(container); + childNode.slot; + if (childNode.shadowRoot) { + parseNodeTree(context, childNode.shadowRoot, container, root); + } + else if (!isTextareaElement(childNode) && + !isSVGElement(childNode) && + !isSelectElement(childNode)) { + parseNodeTree(context, childNode, container, root); + } } } } } }; - var createContainer = function (element) { + var createContainer = function (context, element) { if (isImageElement(element)) { - return new ImageElementContainer(element); + return new ImageElementContainer(context, element); } if (isCanvasElement(element)) { - return new CanvasElementContainer(element); + return new CanvasElementContainer(context, element); } if (isSVGElement(element)) { - return new SVGElementContainer(element); + return new SVGElementContainer(context, element); } if (isLIElement(element)) { - return new LIElementContainer(element); + return new LIElementContainer(context, element); } if (isOLElement(element)) { - return new OLElementContainer(element); + return new OLElementContainer(context, element); } if (isInputElement(element)) { - return new InputElementContainer(element); + return new InputElementContainer(context, element); } if (isSelectElement(element)) { - return new SelectElementContainer(element); + return new SelectElementContainer(context, element); } if (isTextareaElement(element)) { - return new TextareaElementContainer(element); + return new TextareaElementContainer(context, element); } if (isIFrameElement(element)) { - return new IFrameElementContainer(element); + return new IFrameElementContainer(context, element); } - return new ElementContainer(element); + return new ElementContainer(context, element); }; - var parseTree = function (element) { - var container = createContainer(element); + var parseTree = function (context, element) { + var container = createContainer(context, element); container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */; - parseNodeTree(element, container, container); + parseNodeTree(context, element, container, container); return container; }; var createsRealStackingContext = function (node, container, root) { @@ -30223,12 +30526,16 @@ function unzipSync(data) { var isSVGElement = function (node) { return node.tagName === 'svg'; }; var isBodyElement = function (node) { return node.tagName === 'BODY'; }; var isCanvasElement = function (node) { return node.tagName === 'CANVAS'; }; + var isVideoElement = function (node) { return node.tagName === 'VIDEO'; }; var isImageElement = function (node) { return node.tagName === 'IMG'; }; var isIFrameElement = function (node) { return node.tagName === 'IFRAME'; }; var isStyleElement = function (node) { return node.tagName === 'STYLE'; }; var isScriptElement = function (node) { return node.tagName === 'SCRIPT'; }; var isTextareaElement = function (node) { return node.tagName === 'TEXTAREA'; }; var isSelectElement = function (node) { return node.tagName === 'SELECT'; }; + var isSlotElement = function (node) { return node.tagName === 'SLOT'; }; + // https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name + var isCustomElement = function (node) { return node.tagName.indexOf('-') > 0; }; var CounterState = /** @class */ (function () { function CounterState() { @@ -30259,6 +30566,9 @@ function unzipSync(data) { var counter = _this.counters[entry.counter]; if (counter && entry.increment !== 0) { canReset = false; + if (!counter.length) { + counter.push(1); + } counter[Math.max(0, counter.length - 1)] += entry.increment; } }); @@ -30284,42 +30594,8 @@ function unzipSync(data) { }; var ARMENIAN = { integers: [ - 9000, - 8000, - 7000, - 6000, - 5000, - 4000, - 3000, - 2000, - 1000, - 900, - 800, - 700, - 600, - 500, - 400, - 300, - 200, - 100, - 90, - 80, - 70, - 60, - 50, - 40, - 30, - 20, - 10, - 9, - 8, - 7, - 6, - 5, - 4, - 3, - 2, - 1 + 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90, 80, 70, + 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ], values: [ 'Ք', @@ -30362,43 +30638,8 @@ function unzipSync(data) { }; var HEBREW = { integers: [ - 10000, - 9000, - 8000, - 7000, - 6000, - 5000, - 4000, - 3000, - 2000, - 1000, - 400, - 300, - 200, - 100, - 90, - 80, - 70, - 60, - 50, - 40, - 30, - 20, - 19, - 18, - 17, - 16, - 15, - 10, - 9, - 8, - 7, - 6, - 5, - 4, - 3, - 2, - 1 + 10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20, + 19, 18, 17, 16, 15, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ], values: [ 'י׳', @@ -30442,43 +30683,8 @@ function unzipSync(data) { }; var GEORGIAN = { integers: [ - 10000, - 9000, - 8000, - 7000, - 6000, - 5000, - 4000, - 3000, - 2000, - 1000, - 900, - 800, - 700, - 600, - 500, - 400, - 300, - 200, - 100, - 90, - 80, - 70, - 60, - 50, - 40, - 30, - 20, - 10, - 9, - 8, - 7, - 6, - 5, - 4, - 3, - 2, - 1 + 10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90, + 80, 70, 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ], values: [ 'ჵ', @@ -30547,7 +30753,7 @@ function unzipSync(data) { var codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1; return ((value < 0 ? '-' : '') + (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, isNumeric, function (codePoint) { - return fromCodePoint(Math.floor(codePoint % codePointRangeLength) + codePointRangeStart); + return fromCodePoint$1(Math.floor(codePoint % codePointRangeLength) + codePointRangeStart); }) + suffix)); }; @@ -30562,7 +30768,7 @@ function unzipSync(data) { var CJK_HUNDRED_COEFFICIENTS = 1 << 3; var createCJKCounter = function (value, numbers, multipliers, negativeSign, suffix, flags) { if (value < -9999 || value > 9999) { - return createCounterText(value, LIST_STYLE_TYPE.CJK_DECIMAL, suffix.length > 0); + return createCounterText(value, 4 /* CJK_DECIMAL */, suffix.length > 0); } var tmp = Math.abs(value); var string = suffix; @@ -30598,101 +30804,101 @@ function unzipSync(data) { var koreanSuffix = appendSuffix ? ', ' : ''; var spaceSuffix = appendSuffix ? ' ' : ''; switch (type) { - case LIST_STYLE_TYPE.DISC: + case 0 /* DISC */: return '•' + spaceSuffix; - case LIST_STYLE_TYPE.CIRCLE: + case 1 /* CIRCLE */: return '◦' + spaceSuffix; - case LIST_STYLE_TYPE.SQUARE: + case 2 /* SQUARE */: return '◾' + spaceSuffix; - case LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO: + case 5 /* DECIMAL_LEADING_ZERO */: var string = createCounterStyleFromRange(value, 48, 57, true, defaultSuffix); return string.length < 4 ? "0" + string : string; - case LIST_STYLE_TYPE.CJK_DECIMAL: + case 4 /* CJK_DECIMAL */: return createCounterStyleFromSymbols(value, '〇一二三四五六七八九', cjkSuffix); - case LIST_STYLE_TYPE.LOWER_ROMAN: - return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, LIST_STYLE_TYPE.DECIMAL, defaultSuffix).toLowerCase(); - case LIST_STYLE_TYPE.UPPER_ROMAN: - return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, LIST_STYLE_TYPE.DECIMAL, defaultSuffix); - case LIST_STYLE_TYPE.LOWER_GREEK: + case 6 /* LOWER_ROMAN */: + return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, 3 /* DECIMAL */, defaultSuffix).toLowerCase(); + case 7 /* UPPER_ROMAN */: + return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, 3 /* DECIMAL */, defaultSuffix); + case 8 /* LOWER_GREEK */: return createCounterStyleFromRange(value, 945, 969, false, defaultSuffix); - case LIST_STYLE_TYPE.LOWER_ALPHA: + case 9 /* LOWER_ALPHA */: return createCounterStyleFromRange(value, 97, 122, false, defaultSuffix); - case LIST_STYLE_TYPE.UPPER_ALPHA: + case 10 /* UPPER_ALPHA */: return createCounterStyleFromRange(value, 65, 90, false, defaultSuffix); - case LIST_STYLE_TYPE.ARABIC_INDIC: + case 11 /* ARABIC_INDIC */: return createCounterStyleFromRange(value, 1632, 1641, true, defaultSuffix); - case LIST_STYLE_TYPE.ARMENIAN: - case LIST_STYLE_TYPE.UPPER_ARMENIAN: - return createAdditiveCounter(value, 1, 9999, ARMENIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix); - case LIST_STYLE_TYPE.LOWER_ARMENIAN: - return createAdditiveCounter(value, 1, 9999, ARMENIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix).toLowerCase(); - case LIST_STYLE_TYPE.BENGALI: + case 12 /* ARMENIAN */: + case 49 /* UPPER_ARMENIAN */: + return createAdditiveCounter(value, 1, 9999, ARMENIAN, 3 /* DECIMAL */, defaultSuffix); + case 35 /* LOWER_ARMENIAN */: + return createAdditiveCounter(value, 1, 9999, ARMENIAN, 3 /* DECIMAL */, defaultSuffix).toLowerCase(); + case 13 /* BENGALI */: return createCounterStyleFromRange(value, 2534, 2543, true, defaultSuffix); - case LIST_STYLE_TYPE.CAMBODIAN: - case LIST_STYLE_TYPE.KHMER: + case 14 /* CAMBODIAN */: + case 30 /* KHMER */: return createCounterStyleFromRange(value, 6112, 6121, true, defaultSuffix); - case LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH: + case 15 /* CJK_EARTHLY_BRANCH */: return createCounterStyleFromSymbols(value, '子丑寅卯辰巳午未申酉戌亥', cjkSuffix); - case LIST_STYLE_TYPE.CJK_HEAVENLY_STEM: + case 16 /* CJK_HEAVENLY_STEM */: return createCounterStyleFromSymbols(value, '甲乙丙丁戊己庚辛壬癸', cjkSuffix); - case LIST_STYLE_TYPE.CJK_IDEOGRAPHIC: - case LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL: + case 17 /* CJK_IDEOGRAPHIC */: + case 48 /* TRAD_CHINESE_INFORMAL */: return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS); - case LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL: + case 47 /* TRAD_CHINESE_FORMAL */: return createCJKCounter(value, '零壹貳參肆伍陸柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS); - case LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL: + case 42 /* SIMP_CHINESE_INFORMAL */: return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS); - case LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL: + case 41 /* SIMP_CHINESE_FORMAL */: return createCJKCounter(value, '零壹贰叁肆伍陆柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS); - case LIST_STYLE_TYPE.JAPANESE_INFORMAL: + case 26 /* JAPANESE_INFORMAL */: return createCJKCounter(value, '〇一二三四五六七八九', '十百千万', JAPANESE_NEGATIVE, cjkSuffix, 0); - case LIST_STYLE_TYPE.JAPANESE_FORMAL: + case 25 /* JAPANESE_FORMAL */: return createCJKCounter(value, '零壱弐参四伍六七八九', '拾百千万', JAPANESE_NEGATIVE, cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS); - case LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL: + case 31 /* KOREAN_HANGUL_FORMAL */: return createCJKCounter(value, '영일이삼사오육칠팔구', '십백천만', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS); - case LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL: + case 33 /* KOREAN_HANJA_INFORMAL */: return createCJKCounter(value, '零一二三四五六七八九', '十百千萬', KOREAN_NEGATIVE, koreanSuffix, 0); - case LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL: + case 32 /* KOREAN_HANJA_FORMAL */: return createCJKCounter(value, '零壹貳參四五六七八九', '拾百千', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS); - case LIST_STYLE_TYPE.DEVANAGARI: + case 18 /* DEVANAGARI */: return createCounterStyleFromRange(value, 0x966, 0x96f, true, defaultSuffix); - case LIST_STYLE_TYPE.GEORGIAN: - return createAdditiveCounter(value, 1, 19999, GEORGIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix); - case LIST_STYLE_TYPE.GUJARATI: + case 20 /* GEORGIAN */: + return createAdditiveCounter(value, 1, 19999, GEORGIAN, 3 /* DECIMAL */, defaultSuffix); + case 21 /* GUJARATI */: return createCounterStyleFromRange(value, 0xae6, 0xaef, true, defaultSuffix); - case LIST_STYLE_TYPE.GURMUKHI: + case 22 /* GURMUKHI */: return createCounterStyleFromRange(value, 0xa66, 0xa6f, true, defaultSuffix); - case LIST_STYLE_TYPE.HEBREW: - return createAdditiveCounter(value, 1, 10999, HEBREW, LIST_STYLE_TYPE.DECIMAL, defaultSuffix); - case LIST_STYLE_TYPE.HIRAGANA: + case 22 /* HEBREW */: + return createAdditiveCounter(value, 1, 10999, HEBREW, 3 /* DECIMAL */, defaultSuffix); + case 23 /* HIRAGANA */: return createCounterStyleFromSymbols(value, 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん'); - case LIST_STYLE_TYPE.HIRAGANA_IROHA: + case 24 /* HIRAGANA_IROHA */: return createCounterStyleFromSymbols(value, 'いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす'); - case LIST_STYLE_TYPE.KANNADA: + case 27 /* KANNADA */: return createCounterStyleFromRange(value, 0xce6, 0xcef, true, defaultSuffix); - case LIST_STYLE_TYPE.KATAKANA: + case 28 /* KATAKANA */: return createCounterStyleFromSymbols(value, 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン', cjkSuffix); - case LIST_STYLE_TYPE.KATAKANA_IROHA: + case 29 /* KATAKANA_IROHA */: return createCounterStyleFromSymbols(value, 'イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス', cjkSuffix); - case LIST_STYLE_TYPE.LAO: + case 34 /* LAO */: return createCounterStyleFromRange(value, 0xed0, 0xed9, true, defaultSuffix); - case LIST_STYLE_TYPE.MONGOLIAN: + case 37 /* MONGOLIAN */: return createCounterStyleFromRange(value, 0x1810, 0x1819, true, defaultSuffix); - case LIST_STYLE_TYPE.MYANMAR: + case 38 /* MYANMAR */: return createCounterStyleFromRange(value, 0x1040, 0x1049, true, defaultSuffix); - case LIST_STYLE_TYPE.ORIYA: + case 39 /* ORIYA */: return createCounterStyleFromRange(value, 0xb66, 0xb6f, true, defaultSuffix); - case LIST_STYLE_TYPE.PERSIAN: + case 40 /* PERSIAN */: return createCounterStyleFromRange(value, 0x6f0, 0x6f9, true, defaultSuffix); - case LIST_STYLE_TYPE.TAMIL: + case 43 /* TAMIL */: return createCounterStyleFromRange(value, 0xbe6, 0xbef, true, defaultSuffix); - case LIST_STYLE_TYPE.TELUGU: + case 44 /* TELUGU */: return createCounterStyleFromRange(value, 0xc66, 0xc6f, true, defaultSuffix); - case LIST_STYLE_TYPE.THAI: + case 45 /* THAI */: return createCounterStyleFromRange(value, 0xe50, 0xe59, true, defaultSuffix); - case LIST_STYLE_TYPE.TIBETAN: + case 46 /* TIBETAN */: return createCounterStyleFromRange(value, 0xf20, 0xf29, true, defaultSuffix); - case LIST_STYLE_TYPE.DECIMAL: + case 3 /* DECIMAL */: default: return createCounterStyleFromRange(value, 48, 57, true, defaultSuffix); } @@ -30700,7 +30906,8 @@ function unzipSync(data) { var IGNORE_ATTRIBUTE = 'data-html2canvas-ignore'; var DocumentCloner = /** @class */ (function () { - function DocumentCloner(element, options) { + function DocumentCloner(context, element, options) { + this.context = context; this.options = options; this.scrolledElements = []; this.referenceElement = element; @@ -30709,7 +30916,7 @@ function unzipSync(data) { if (!element.ownerDocument) { throw new Error('Cloned element does not have an owner document'); } - this.documentElement = this.cloneNode(element.ownerDocument.documentElement); + this.documentElement = this.cloneNode(element.ownerDocument.documentElement, false); } DocumentCloner.prototype.toIFrame = function (ownerDocument, windowSize) { var _this = this; @@ -30725,7 +30932,7 @@ function unzipSync(data) { if window url is about:blank, we can assign the url to current by writing onto the document */ var iframeLoad = iframeLoader(iframe).then(function () { return __awaiter(_this, void 0, void 0, function () { - var onclone; + var onclone, referenceElement; return __generator(this, function (_a) { switch (_a.label) { case 0: @@ -30734,13 +30941,13 @@ function unzipSync(data) { cloneWindow.scrollTo(windowSize.left, windowSize.top); if (/(iPad|iPhone|iPod)/g.test(navigator.userAgent) && (cloneWindow.scrollY !== windowSize.top || cloneWindow.scrollX !== windowSize.left)) { - documentClone.documentElement.style.top = -windowSize.top + 'px'; - documentClone.documentElement.style.left = -windowSize.left + 'px'; - documentClone.documentElement.style.position = 'absolute'; + this.context.logger.warn('Unable to restore scroll position for cloned document'); + this.context.windowBounds = this.context.windowBounds.add(cloneWindow.scrollX - windowSize.left, cloneWindow.scrollY - windowSize.top, 0, 0); } } onclone = this.options.onclone; - if (typeof this.clonedReferenceElement === 'undefined') { + referenceElement = this.clonedReferenceElement; + if (typeof referenceElement === 'undefined') { return [2 /*return*/, Promise.reject("Error finding the " + this.referenceElement.nodeName + " in the cloned document")]; } if (!(documentClone.fonts && documentClone.fonts.ready)) return [3 /*break*/, 2]; @@ -30749,9 +30956,15 @@ function unzipSync(data) { _a.sent(); _a.label = 2; case 2: + if (!/(AppleWebKit)/g.test(navigator.userAgent)) return [3 /*break*/, 4]; + return [4 /*yield*/, imagesReady(documentClone)]; + case 3: + _a.sent(); + _a.label = 4; + case 4: if (typeof onclone === 'function') { return [2 /*return*/, Promise.resolve() - .then(function () { return onclone(documentClone); }) + .then(function () { return onclone(documentClone, referenceElement); }) .then(function () { return iframe; })]; } return [2 /*return*/, iframe]; @@ -30767,25 +30980,38 @@ function unzipSync(data) { return iframeLoad; }; DocumentCloner.prototype.createElementClone = function (node) { + if (isDebugging(node, 2 /* CLONE */)) { + debugger; + } if (isCanvasElement(node)) { return this.createCanvasClone(node); } - /* - if (isIFrameElement(node)) { - return this.createIFrameClone(node); + if (isVideoElement(node)) { + return this.createVideoClone(node); } - */ if (isStyleElement(node)) { return this.createStyleClone(node); } var clone = node.cloneNode(false); - // @ts-ignore - if (isImageElement(clone) && clone.loading === 'lazy') { - // @ts-ignore - clone.loading = 'eager'; + if (isImageElement(clone)) { + if (isImageElement(node) && node.currentSrc && node.currentSrc !== node.src) { + clone.src = node.currentSrc; + clone.srcset = ''; + } + if (clone.loading === 'lazy') { + clone.loading = 'eager'; + } + } + if (isCustomElement(clone)) { + return this.createCustomElementClone(clone); } return clone; }; + DocumentCloner.prototype.createCustomElementClone = function (node) { + var clone = document.createElement('html2canvascustomelement'); + copyCSSStyles(node.style, clone); + return clone; + }; DocumentCloner.prototype.createStyleClone = function (node) { try { var sheet = node.sheet; @@ -30803,7 +31029,7 @@ function unzipSync(data) { } catch (e) { // accessing node.sheet.cssRules throws a DOMException - Logger.getInstance(this.options.id).error('Unable to access cssRules property', e); + this.context.logger.error('Unable to access cssRules property', e); if (e.name !== 'SecurityError') { throw e; } @@ -30811,6 +31037,7 @@ function unzipSync(data) { return node.cloneNode(false); }; DocumentCloner.prototype.createCanvasClone = function (canvas) { + var _a; if (this.options.inlineImages && canvas.ownerDocument) { var img = canvas.ownerDocument.createElement('img'); try { @@ -30818,7 +31045,7 @@ function unzipSync(data) { return img; } catch (e) { - Logger.getInstance(this.options.id).info("Unable to clone canvas contents, canvas is tainted"); + this.context.logger.info("Unable to inline canvas contents, canvas is tainted", canvas); } } var clonedCanvas = canvas.cloneNode(false); @@ -30828,80 +31055,74 @@ function unzipSync(data) { var ctx = canvas.getContext('2d'); var clonedCtx = clonedCanvas.getContext('2d'); if (clonedCtx) { - if (ctx) { + if (!this.options.allowTaint && ctx) { clonedCtx.putImageData(ctx.getImageData(0, 0, canvas.width, canvas.height), 0, 0); } else { + var gl = (_a = canvas.getContext('webgl2')) !== null && _a !== void 0 ? _a : canvas.getContext('webgl'); + if (gl) { + var attribs = gl.getContextAttributes(); + if ((attribs === null || attribs === void 0 ? void 0 : attribs.preserveDrawingBuffer) === false) { + this.context.logger.warn('Unable to clone WebGL context as it has preserveDrawingBuffer=false', canvas); + } + } clonedCtx.drawImage(canvas, 0, 0); } } return clonedCanvas; } - catch (e) { } + catch (e) { + this.context.logger.info("Unable to clone canvas as it is tainted", canvas); + } return clonedCanvas; }; - /* - createIFrameClone(iframe: HTMLIFrameElement) { - const tempIframe = iframe.cloneNode(false); - const iframeKey = generateIframeKey(); - tempIframe.setAttribute('data-html2canvas-internal-iframe-key', iframeKey); - - const {width, height} = parseBounds(iframe); - - this.resourceLoader.cache[iframeKey] = getIframeDocumentElement(iframe, this.options) - .then(documentElement => { - return this.renderer( - documentElement, - { - allowTaint: this.options.allowTaint, - backgroundColor: '#ffffff', - canvas: null, - imageTimeout: this.options.imageTimeout, - logging: this.options.logging, - proxy: this.options.proxy, - removeContainer: this.options.removeContainer, - scale: this.options.scale, - foreignObjectRendering: this.options.foreignObjectRendering, - useCORS: this.options.useCORS, - target: new CanvasRenderer(), - width, - height, - x: 0, - y: 0, - windowWidth: documentElement.ownerDocument.defaultView.innerWidth, - windowHeight: documentElement.ownerDocument.defaultView.innerHeight, - scrollX: documentElement.ownerDocument.defaultView.pageXOffset, - scrollY: documentElement.ownerDocument.defaultView.pageYOffset - }, - ); - }) - .then( - (canvas: HTMLCanvasElement) => - new Promise((resolve, reject) => { - const iframeCanvas = document.createElement('img'); - iframeCanvas.onload = () => resolve(canvas); - iframeCanvas.onerror = (event) => { - // Empty iframes may result in empty "data:," URLs, which are invalid from the 's point of view - // and instead of `onload` cause `onerror` and unhandled rejection warnings - // https://github.com/niklasvh/html2canvas/issues/1502 - iframeCanvas.src == 'data:,' ? resolve(canvas) : reject(event); - }; - iframeCanvas.src = canvas.toDataURL(); - if (tempIframe.parentNode && iframe.ownerDocument && iframe.ownerDocument.defaultView) { - tempIframe.parentNode.replaceChild( - copyCSSStyles( - iframe.ownerDocument.defaultView.getComputedStyle(iframe), - iframeCanvas - ), - tempIframe - ); - } - }) - ); - return tempIframe; - } - */ - DocumentCloner.prototype.cloneNode = function (node) { + DocumentCloner.prototype.createVideoClone = function (video) { + var canvas = video.ownerDocument.createElement('canvas'); + canvas.width = video.offsetWidth; + canvas.height = video.offsetHeight; + var ctx = canvas.getContext('2d'); + try { + if (ctx) { + ctx.drawImage(video, 0, 0, canvas.width, canvas.height); + if (!this.options.allowTaint) { + ctx.getImageData(0, 0, canvas.width, canvas.height); + } + } + return canvas; + } + catch (e) { + this.context.logger.info("Unable to clone video as it is tainted", video); + } + var blankCanvas = video.ownerDocument.createElement('canvas'); + blankCanvas.width = video.offsetWidth; + blankCanvas.height = video.offsetHeight; + return blankCanvas; + }; + DocumentCloner.prototype.appendChildNode = function (clone, child, copyStyles) { + if (!isElementNode(child) || + (!isScriptElement(child) && + !child.hasAttribute(IGNORE_ATTRIBUTE) && + (typeof this.options.ignoreElements !== 'function' || !this.options.ignoreElements(child)))) { + if (!this.options.copyStyles || !isElementNode(child) || !isStyleElement(child)) { + clone.appendChild(this.cloneNode(child, copyStyles)); + } + } + }; + DocumentCloner.prototype.cloneChildNodes = function (node, clone, copyStyles) { + var _this = this; + for (var child = node.shadowRoot ? node.shadowRoot.firstChild : node.firstChild; child; child = child.nextSibling) { + if (isElementNode(child) && isSlotElement(child) && typeof child.assignedNodes === 'function') { + var assignedNodes = child.assignedNodes(); + if (assignedNodes.length) { + assignedNodes.forEach(function (assignedNode) { return _this.appendChildNode(clone, assignedNode, copyStyles); }); + } + } + else { + this.appendChildNode(clone, child, copyStyles); + } + } + }; + DocumentCloner.prototype.cloneNode = function (node, copyStyles) { if (isTextNode(node)) { return document.createTextNode(node.data); } @@ -30911,6 +31132,7 @@ function unzipSync(data) { var window = node.ownerDocument.defaultView; if (window && isElementNode(node) && (isHTMLElementNode(node) || isSVGElementNode(node))) { var clone = this.createElementClone(node); + clone.style.transitionProperty = 'none'; var style = window.getComputedStyle(node); var styleBefore = window.getComputedStyle(node, ':before'); var styleAfter = window.getComputedStyle(node, ':after'); @@ -30920,17 +31142,13 @@ function unzipSync(data) { if (isBodyElement(clone)) { createPseudoHideStyles(clone); } - var counters = this.counters.parse(new CSSParsedCounterDeclaration(style)); + var counters = this.counters.parse(new CSSParsedCounterDeclaration(this.context, style)); var before = this.resolvePseudoContent(node, clone, styleBefore, PseudoElementType.BEFORE); - for (var child = node.firstChild; child; child = child.nextSibling) { - if (!isElementNode(child) || - (!isScriptElement(child) && - !child.hasAttribute(IGNORE_ATTRIBUTE) && - (typeof this.options.ignoreElements !== 'function' || !this.options.ignoreElements(child)))) { - if (!this.options.copyStyles || !isElementNode(child) || !isStyleElement(child)) { - clone.appendChild(this.cloneNode(child)); - } - } + if (isCustomElement(node)) { + copyStyles = true; + } + if (!isVideoElement(node)) { + this.cloneChildNodes(node, clone, copyStyles); } if (before) { clone.insertBefore(before, clone.firstChild); @@ -30940,10 +31158,10 @@ function unzipSync(data) { clone.appendChild(after); } this.counters.pop(counters); - if (style && (this.options.copyStyles || isSVGElementNode(node)) && !isIFrameElement(node)) { + if ((style && (this.options.copyStyles || isSVGElementNode(node)) && !isIFrameElement(node)) || + copyStyles) { copyCSSStyles(style, clone); } - //this.inlineAllImages(clone); if (node.scrollTop !== 0 || node.scrollLeft !== 0) { this.scrolledElements.push([clone, node.scrollLeft, node.scrollTop]); } @@ -30965,21 +31183,21 @@ function unzipSync(data) { if (!document || !value || value === 'none' || value === '-moz-alt-content' || style.display === 'none') { return; } - this.counters.parse(new CSSParsedCounterDeclaration(style)); - var declaration = new CSSParsedPseudoDeclaration(style); + this.counters.parse(new CSSParsedCounterDeclaration(this.context, style)); + var declaration = new CSSParsedPseudoDeclaration(this.context, style); var anonymousReplacedElement = document.createElement('html2canvaspseudoelement'); copyCSSStyles(style, anonymousReplacedElement); declaration.content.forEach(function (token) { - if (token.type === TokenType.STRING_TOKEN) { + if (token.type === 0 /* STRING_TOKEN */) { anonymousReplacedElement.appendChild(document.createTextNode(token.value)); } - else if (token.type === TokenType.URL_TOKEN) { + else if (token.type === 22 /* URL_TOKEN */) { var img = document.createElement('img'); img.src = token.value; img.style.opacity = '1'; anonymousReplacedElement.appendChild(img); } - else if (token.type === TokenType.FUNCTION) { + else if (token.type === 18 /* FUNCTION */) { if (token.name === 'attr') { var attr = token.values.filter(isIdentToken); if (attr.length) { @@ -30991,8 +31209,8 @@ function unzipSync(data) { if (counter && isIdentToken(counter)) { var counterState = _this.counters.getCounterValue(counter.value); var counterType = counterStyle && isIdentToken(counterStyle) - ? listStyleType.parse(counterStyle.value) - : LIST_STYLE_TYPE.DECIMAL; + ? listStyleType.parse(_this.context, counterStyle.value) + : 3 /* DECIMAL */; anonymousReplacedElement.appendChild(document.createTextNode(createCounterText(counterState, counterType, false))); } } @@ -31001,17 +31219,18 @@ function unzipSync(data) { if (counter && isIdentToken(counter)) { var counterStates = _this.counters.getCounterValues(counter.value); var counterType_1 = counterStyle && isIdentToken(counterStyle) - ? listStyleType.parse(counterStyle.value) - : LIST_STYLE_TYPE.DECIMAL; - var separator = delim && delim.type === TokenType.STRING_TOKEN ? delim.value : ''; + ? listStyleType.parse(_this.context, counterStyle.value) + : 3 /* DECIMAL */; + var separator = delim && delim.type === 0 /* STRING_TOKEN */ ? delim.value : ''; var text = counterStates .map(function (value) { return createCounterText(value, counterType_1, false); }) .join(separator); anonymousReplacedElement.appendChild(document.createTextNode(text)); } } + else ; } - else if (token.type === TokenType.IDENT_TOKEN) { + else if (token.type === 20 /* IDENT_TOKEN */) { switch (token.value) { case 'open-quote': anonymousReplacedElement.appendChild(document.createTextNode(getQuote(declaration.quotes, _this.quoteDepth++, true))); @@ -31066,6 +31285,23 @@ function unzipSync(data) { ownerDocument.body.appendChild(cloneIframeContainer); return cloneIframeContainer; }; + var imageReady = function (img) { + return new Promise(function (resolve) { + if (img.complete) { + resolve(); + return; + } + if (!img.src) { + resolve(); + return; + } + img.onload = resolve; + img.onerror = resolve; + }); + }; + var imagesReady = function (document) { + return Promise.all([].slice.call(document.images, 0).map(imageReady)); + }; var iframeLoader = function (iframe) { return new Promise(function (resolve, reject) { var cloneWindow = iframe.contentWindow; @@ -31073,8 +31309,8 @@ function unzipSync(data) { return reject("No window assigned for iframe"); } var documentClone = cloneWindow.document; - cloneWindow.onload = iframe.onload = documentClone.onreadystatechange = function () { - cloneWindow.onload = iframe.onload = documentClone.onreadystatechange = null; + cloneWindow.onload = iframe.onload = function () { + cloneWindow.onload = iframe.onload = null; var interval = setInterval(function () { if (documentClone.body.childNodes.length > 0 && documentClone.readyState === 'complete') { clearInterval(interval); @@ -31084,12 +31320,16 @@ function unzipSync(data) { }; }); }; + var ignoredStyleProperties = [ + 'all', + 'd', + 'content' // Safari shows pseudoelements if content is set + ]; var copyCSSStyles = function (style, target) { // Edge does not provide value for cssText for (var i = style.length - 1; i >= 0; i--) { var property = style.item(i); - // Safari shows pseudoelements if content is set - if (property !== 'content') { + if (ignoredStyleProperties.indexOf(property) === -1) { target.style.setProperty(property, style.getPropertyValue(property)); } } @@ -31144,36 +31384,165 @@ function unzipSync(data) { } }; - var PathType; - (function (PathType) { - PathType[PathType["VECTOR"] = 0] = "VECTOR"; - PathType[PathType["BEZIER_CURVE"] = 1] = "BEZIER_CURVE"; - })(PathType || (PathType = {})); - var equalPath = function (a, b) { - if (a.length === b.length) { - return a.some(function (v, i) { return v === b[i]; }); + var CacheStorage = /** @class */ (function () { + function CacheStorage() { } - return false; - }; - var transformPath = function (path, deltaX, deltaY, deltaW, deltaH) { - return path.map(function (point, index) { - switch (index) { - case 0: - return point.add(deltaX, deltaY); - case 1: - return point.add(deltaX + deltaW, deltaY); - case 2: - return point.add(deltaX + deltaW, deltaY + deltaH); - case 3: - return point.add(deltaX, deltaY + deltaH); + CacheStorage.getOrigin = function (url) { + var link = CacheStorage._link; + if (!link) { + return 'about:blank'; } - return point; - }); - }; + link.href = url; + link.href = link.href; // IE9, LOL! - http://jsfiddle.net/niklasvh/2e48b/ + return link.protocol + link.hostname + link.port; + }; + CacheStorage.isSameOrigin = function (src) { + return CacheStorage.getOrigin(src) === CacheStorage._origin; + }; + CacheStorage.setContext = function (window) { + CacheStorage._link = window.document.createElement('a'); + CacheStorage._origin = CacheStorage.getOrigin(window.location.href); + }; + CacheStorage._origin = 'about:blank'; + return CacheStorage; + }()); + var Cache = /** @class */ (function () { + function Cache(context, _options) { + this.context = context; + this._options = _options; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this._cache = {}; + } + Cache.prototype.addImage = function (src) { + var result = Promise.resolve(); + if (this.has(src)) { + return result; + } + if (isBlobImage(src) || isRenderable(src)) { + (this._cache[src] = this.loadImage(src)).catch(function () { + // prevent unhandled rejection + }); + return result; + } + return result; + }; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Cache.prototype.match = function (src) { + return this._cache[src]; + }; + Cache.prototype.loadImage = function (key) { + return __awaiter(this, void 0, void 0, function () { + var isSameOrigin, useCORS, useProxy, src; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + isSameOrigin = CacheStorage.isSameOrigin(key); + useCORS = !isInlineImage(key) && this._options.useCORS === true && FEATURES.SUPPORT_CORS_IMAGES && !isSameOrigin; + useProxy = !isInlineImage(key) && + !isSameOrigin && + !isBlobImage(key) && + typeof this._options.proxy === 'string' && + FEATURES.SUPPORT_CORS_XHR && + !useCORS; + if (!isSameOrigin && + this._options.allowTaint === false && + !isInlineImage(key) && + !isBlobImage(key) && + !useProxy && + !useCORS) { + return [2 /*return*/]; + } + src = key; + if (!useProxy) return [3 /*break*/, 2]; + return [4 /*yield*/, this.proxy(src)]; + case 1: + src = _a.sent(); + _a.label = 2; + case 2: + this.context.logger.debug("Added image " + key.substring(0, 256)); + return [4 /*yield*/, new Promise(function (resolve, reject) { + var img = new Image(); + img.onload = function () { return resolve(img); }; + img.onerror = reject; + //ios safari 10.3 taints canvas with data urls unless crossOrigin is set to anonymous + if (isInlineBase64Image(src) || useCORS) { + img.crossOrigin = 'anonymous'; + } + img.src = src; + if (img.complete === true) { + // Inline XML images may fail to parse, throwing an Error later on + setTimeout(function () { return resolve(img); }, 500); + } + if (_this._options.imageTimeout > 0) { + setTimeout(function () { return reject("Timed out (" + _this._options.imageTimeout + "ms) loading image"); }, _this._options.imageTimeout); + } + })]; + case 3: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + Cache.prototype.has = function (key) { + return typeof this._cache[key] !== 'undefined'; + }; + Cache.prototype.keys = function () { + return Promise.resolve(Object.keys(this._cache)); + }; + Cache.prototype.proxy = function (src) { + var _this = this; + var proxy = this._options.proxy; + if (!proxy) { + throw new Error('No proxy defined'); + } + var key = src.substring(0, 256); + return new Promise(function (resolve, reject) { + var responseType = FEATURES.SUPPORT_RESPONSE_TYPE ? 'blob' : 'text'; + var xhr = new XMLHttpRequest(); + xhr.onload = function () { + if (xhr.status === 200) { + if (responseType === 'text') { + resolve(xhr.response); + } + else { + var reader_1 = new FileReader(); + reader_1.addEventListener('load', function () { return resolve(reader_1.result); }, false); + reader_1.addEventListener('error', function (e) { return reject(e); }, false); + reader_1.readAsDataURL(xhr.response); + } + } + else { + reject("Failed to proxy resource " + key + " with status code " + xhr.status); + } + }; + xhr.onerror = reject; + var queryString = proxy.indexOf('?') > -1 ? '&' : '?'; + xhr.open('GET', "" + proxy + queryString + "url=" + encodeURIComponent(src) + "&responseType=" + responseType); + if (responseType !== 'text' && xhr instanceof XMLHttpRequest) { + xhr.responseType = responseType; + } + if (_this._options.imageTimeout) { + var timeout_1 = _this._options.imageTimeout; + xhr.timeout = timeout_1; + xhr.ontimeout = function () { return reject("Timed out (" + timeout_1 + "ms) proxying " + key); }; + } + xhr.send(); + }); + }; + return Cache; + }()); + var INLINE_SVG = /^data:image\/svg\+xml/i; + var INLINE_BASE64 = /^data:image\/.*;base64,/i; + var INLINE_IMG = /^data:image\/.*/i; + var isRenderable = function (src) { return FEATURES.SUPPORT_SVG_DRAWING || !isSVG(src); }; + var isInlineImage = function (src) { return INLINE_IMG.test(src); }; + var isInlineBase64Image = function (src) { return INLINE_BASE64.test(src); }; + var isBlobImage = function (src) { return src.substr(0, 4) === 'blob'; }; + var isSVG = function (src) { return src.substr(-3).toLowerCase() === 'svg' || INLINE_SVG.test(src); }; var Vector = /** @class */ (function () { function Vector(x, y) { - this.type = PathType.VECTOR; + this.type = 0 /* VECTOR */; this.x = x; this.y = y; } @@ -31188,7 +31557,7 @@ function unzipSync(data) { }; var BezierCurve = /** @class */ (function () { function BezierCurve(start, startControl, endControl, end) { - this.type = PathType.BEZIER_CURVE; + this.type = 1 /* BEZIER_CURVE */; this.start = start; this.startControl = startControl; this.endControl = endControl; @@ -31211,7 +31580,7 @@ function unzipSync(data) { }; return BezierCurve; }()); - var isBezierCurve = function (path) { return path.type === PathType.BEZIER_CURVE; }; + var isBezierCurve = function (path) { return path.type === 1 /* BEZIER_CURVE */; }; var BoundCurves = /** @class */ (function () { function BoundCurves(element) { @@ -31395,27 +31764,27 @@ function unzipSync(data) { var TransformEffect = /** @class */ (function () { function TransformEffect(offsetX, offsetY, matrix) { - this.type = 0 /* TRANSFORM */; - this.target = 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */; this.offsetX = offsetX; this.offsetY = offsetY; this.matrix = matrix; + this.type = 0 /* TRANSFORM */; + this.target = 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */; } return TransformEffect; }()); var ClipEffect = /** @class */ (function () { function ClipEffect(path, target) { - this.type = 1 /* CLIP */; - this.target = target; this.path = path; + this.target = target; + this.type = 1 /* CLIP */; } return ClipEffect; }()); var OpacityEffect = /** @class */ (function () { function OpacityEffect(opacity) { + this.opacity = opacity; this.type = 2 /* OPACITY */; this.target = 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */; - this.opacity = opacity; } return OpacityEffect; }()); @@ -31425,6 +31794,28 @@ function unzipSync(data) { var isClipEffect = function (effect) { return effect.type === 1 /* CLIP */; }; var isOpacityEffect = function (effect) { return effect.type === 2 /* OPACITY */; }; + var equalPath = function (a, b) { + if (a.length === b.length) { + return a.some(function (v, i) { return v === b[i]; }); + } + return false; + }; + var transformPath = function (path, deltaX, deltaY, deltaW, deltaH) { + return path.map(function (point, index) { + switch (index) { + case 0: + return point.add(deltaX, deltaY); + case 1: + return point.add(deltaX + deltaW, deltaY); + case 2: + return point.add(deltaX + deltaW, deltaY + deltaH); + case 3: + return point.add(deltaX, deltaY + deltaH); + } + return point; + }); + }; + var StackingContext = /** @class */ (function () { function StackingContext(container) { this.element = container; @@ -31439,20 +31830,21 @@ function unzipSync(data) { return StackingContext; }()); var ElementPaint = /** @class */ (function () { - function ElementPaint(element, parentStack) { - this.container = element; - this.effects = parentStack.slice(0); - this.curves = new BoundCurves(element); - if (element.styles.opacity < 1) { - this.effects.push(new OpacityEffect(element.styles.opacity)); - } - if (element.styles.transform !== null) { - var offsetX = element.bounds.left + element.styles.transformOrigin[0].number; - var offsetY = element.bounds.top + element.styles.transformOrigin[1].number; - var matrix = element.styles.transform; + function ElementPaint(container, parent) { + this.container = container; + this.parent = parent; + this.effects = []; + this.curves = new BoundCurves(this.container); + if (this.container.styles.opacity < 1) { + this.effects.push(new OpacityEffect(this.container.styles.opacity)); + } + if (this.container.styles.transform !== null) { + var offsetX = this.container.bounds.left + this.container.styles.transformOrigin[0].number; + var offsetY = this.container.bounds.top + this.container.styles.transformOrigin[1].number; + var matrix = this.container.styles.transform; this.effects.push(new TransformEffect(offsetX, offsetY, matrix)); } - if (element.styles.overflowX !== OVERFLOW.VISIBLE) { + if (this.container.styles.overflowX !== 0 /* VISIBLE */) { var borderBox = calculateBorderBoxPath(this.curves); var paddingBox = calculatePaddingBoxPath(this.curves); if (equalPath(borderBox, paddingBox)) { @@ -31464,16 +31856,29 @@ function unzipSync(data) { } } } - ElementPaint.prototype.getParentEffects = function () { + ElementPaint.prototype.getEffects = function (target) { + var inFlow = [2 /* ABSOLUTE */, 3 /* FIXED */].indexOf(this.container.styles.position) === -1; + var parent = this.parent; var effects = this.effects.slice(0); - if (this.container.styles.overflowX !== OVERFLOW.VISIBLE) { - var borderBox = calculateBorderBoxPath(this.curves); - var paddingBox = calculatePaddingBoxPath(this.curves); - if (!equalPath(borderBox, paddingBox)) { - effects.push(new ClipEffect(paddingBox, 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */)); + while (parent) { + var croplessEffects = parent.effects.filter(function (effect) { return !isClipEffect(effect); }); + if (inFlow || parent.container.styles.position !== 0 /* STATIC */ || !parent.parent) { + effects.unshift.apply(effects, croplessEffects); + inFlow = [2 /* ABSOLUTE */, 3 /* FIXED */].indexOf(parent.container.styles.position) === -1; + if (parent.container.styles.overflowX !== 0 /* VISIBLE */) { + var borderBox = calculateBorderBoxPath(parent.curves); + var paddingBox = calculatePaddingBoxPath(parent.curves); + if (!equalPath(borderBox, paddingBox)) { + effects.unshift(new ClipEffect(paddingBox, 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */)); + } + } } + else { + effects.unshift.apply(effects, croplessEffects); + } + parent = parent.parent; } - return effects; + return effects.filter(function (effect) { return contains(effect.target, target); }); }; return ElementPaint; }()); @@ -31481,7 +31886,7 @@ function unzipSync(data) { parent.container.elements.forEach(function (child) { var treatAsRealStackingContext = contains(child.flags, 4 /* CREATES_REAL_STACKING_CONTEXT */); var createsStackingContext = contains(child.flags, 2 /* CREATES_STACKING_CONTEXT */); - var paintContainer = new ElementPaint(child, parent.getParentEffects()); + var paintContainer = new ElementPaint(child, parent); if (contains(child.styles.display, 2048 /* LIST_ITEM */)) { listItems.push(paintContainer); } @@ -31562,7 +31967,7 @@ function unzipSync(data) { } }; var parseStackingContexts = function (container) { - var paintContainer = new ElementPaint(container, []); + var paintContainer = new ElementPaint(container, null); var root = new StackingContext(paintContainer); var listItems = []; parseStackTree(paintContainer, root, root, listItems); @@ -31692,10 +32097,10 @@ function unzipSync(data) { return paddingBox(element); }; var calculateBackgroundPaintingArea = function (backgroundClip, element) { - if (backgroundClip === BACKGROUND_CLIP.BORDER_BOX) { + if (backgroundClip === 0 /* BORDER_BOX */) { return element.bounds; } - if (backgroundClip === BACKGROUND_CLIP.CONTENT_BOX) { + if (backgroundClip === 2 /* CONTENT_BOX */) { return contentBox(element); } return paddingBox(element); @@ -31716,6 +32121,9 @@ function unzipSync(data) { var calculateBackgroundSize = function (size, _a, bounds) { var intrinsicWidth = _a[0], intrinsicHeight = _a[1], intrinsicProportion = _a[2]; var first = size[0], second = size[1]; + if (!first) { + return [0, 0]; + } if (isLengthPercentage(first) && second && isLengthPercentage(second)) { return [getAbsoluteValue(first, bounds.width), getAbsoluteValue(second, bounds.height)]; } @@ -31820,21 +32228,21 @@ function unzipSync(data) { var x = _a[0], y = _a[1]; var width = _b[0], height = _b[1]; switch (repeat) { - case BACKGROUND_REPEAT.REPEAT_X: + case 2 /* REPEAT_X */: return [ new Vector(Math.round(backgroundPositioningArea.left), Math.round(backgroundPositioningArea.top + y)), new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(backgroundPositioningArea.top + y)), new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(height + backgroundPositioningArea.top + y)), new Vector(Math.round(backgroundPositioningArea.left), Math.round(height + backgroundPositioningArea.top + y)) ]; - case BACKGROUND_REPEAT.REPEAT_Y: + case 3 /* REPEAT_Y */: return [ new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top)), new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top)), new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top)), new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top)) ]; - case BACKGROUND_REPEAT.NO_REPEAT: + case 1 /* NO_REPEAT */: return [ new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y)), new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y)), @@ -31869,6 +32277,7 @@ function unzipSync(data) { container.style.fontSize = fontSize; container.style.margin = '0'; container.style.padding = '0'; + container.style.whiteSpace = 'nowrap'; body.appendChild(container); img.src = SMALL_IMAGE; img.width = 1; @@ -31902,32 +32311,42 @@ function unzipSync(data) { return FontMetrics; }()); - var MASK_OFFSET = 10000; - var CanvasRenderer = /** @class */ (function () { - function CanvasRenderer(options) { - this._activeEffects = []; - this.canvas = options.canvas ? options.canvas : document.createElement('canvas'); - this.ctx = this.canvas.getContext('2d'); + var Renderer = /** @class */ (function () { + function Renderer(context, options) { + this.context = context; this.options = options; + } + return Renderer; + }()); + + var MASK_OFFSET = 10000; + var CanvasRenderer = /** @class */ (function (_super) { + __extends(CanvasRenderer, _super); + function CanvasRenderer(context, options) { + var _this = _super.call(this, context, options) || this; + _this._activeEffects = []; + _this.canvas = options.canvas ? options.canvas : document.createElement('canvas'); + _this.ctx = _this.canvas.getContext('2d'); if (!options.canvas) { - this.canvas.width = Math.floor(options.width * options.scale); - this.canvas.height = Math.floor(options.height * options.scale); - this.canvas.style.width = options.width + "px"; - this.canvas.style.height = options.height + "px"; - } - this.fontMetrics = new FontMetrics(document); - this.ctx.scale(this.options.scale, this.options.scale); - this.ctx.translate(-options.x + options.scrollX, -options.y + options.scrollY); - this.ctx.textBaseline = 'bottom'; - this._activeEffects = []; - Logger.getInstance(options.id).debug("Canvas renderer initialized (" + options.width + "x" + options.height + " at " + options.x + "," + options.y + ") with scale " + options.scale); - } - CanvasRenderer.prototype.applyEffects = function (effects, target) { + _this.canvas.width = Math.floor(options.width * options.scale); + _this.canvas.height = Math.floor(options.height * options.scale); + _this.canvas.style.width = options.width + "px"; + _this.canvas.style.height = options.height + "px"; + } + _this.fontMetrics = new FontMetrics(document); + _this.ctx.scale(_this.options.scale, _this.options.scale); + _this.ctx.translate(-options.x, -options.y); + _this.ctx.textBaseline = 'bottom'; + _this._activeEffects = []; + _this.context.logger.debug("Canvas renderer initialized (" + options.width + "x" + options.height + ") with scale " + options.scale); + return _this; + } + CanvasRenderer.prototype.applyEffects = function (effects) { var _this = this; while (this._activeEffects.length) { this.popEffect(); } - effects.filter(function (effect) { return contains(effect.target, target); }).forEach(function (effect) { return _this.applyEffect(effect); }); + effects.forEach(function (effect) { return _this.applyEffect(effect); }); }; CanvasRenderer.prototype.applyEffect = function (effect) { this.ctx.save(); @@ -31971,6 +32390,9 @@ function unzipSync(data) { return __generator(this, function (_a) { switch (_a.label) { case 0: + if (contains(paint.container.flags, 16 /* DEBUG_RENDER */)) { + debugger; + } if (!paint.container.styles.isVisible()) return [3 /*break*/, 3]; return [4 /*yield*/, this.renderNodeBackgroundAndBorders(paint)]; case 1: @@ -31984,15 +32406,15 @@ function unzipSync(data) { }); }); }; - CanvasRenderer.prototype.renderTextWithLetterSpacing = function (text, letterSpacing) { + CanvasRenderer.prototype.renderTextWithLetterSpacing = function (text, letterSpacing, baseline) { var _this = this; if (letterSpacing === 0) { - this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + text.bounds.height); + this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + baseline); } else { - var letters = toCodePoints(text.text).map(function (i) { return fromCodePoint(i); }); + var letters = segmentGraphemes(text.text); letters.reduce(function (left, letter) { - _this.ctx.fillText(letter, left, text.bounds.top + text.bounds.height); + _this.ctx.fillText(letter, left, text.bounds.top + baseline); return left + _this.ctx.measureText(letter).width; }, text.bounds.left); } @@ -32001,7 +32423,7 @@ function unzipSync(data) { var fontVariant = styles.fontVariant .filter(function (variant) { return variant === 'normal' || variant === 'small-caps'; }) .join(''); - var fontFamily = styles.fontFamily.join(', '); + var fontFamily = fixIOSSystemFonts(styles.fontFamily).join(', '); var fontSize = isDimensionToken(styles.fontSize) ? "" + styles.fontSize.number + styles.fontSize.unit : styles.fontSize.number + "px"; @@ -32013,145 +32435,236 @@ function unzipSync(data) { }; CanvasRenderer.prototype.renderTextNode = function (text, styles) { return __awaiter(this, void 0, void 0, function () { - var _a, font, fontFamily, fontSize; + var _a, font, fontFamily, fontSize, _b, baseline, middle, paintOrder; var _this = this; - return __generator(this, function (_b) { + return __generator(this, function (_c) { _a = this.createFontStyle(styles), font = _a[0], fontFamily = _a[1], fontSize = _a[2]; this.ctx.font = font; + this.ctx.direction = styles.direction === 1 /* RTL */ ? 'rtl' : 'ltr'; + this.ctx.textAlign = 'left'; + this.ctx.textBaseline = 'alphabetic'; + _b = this.fontMetrics.getMetrics(fontFamily, fontSize), baseline = _b.baseline, middle = _b.middle; + paintOrder = styles.paintOrder; text.textBounds.forEach(function (text) { - _this.ctx.fillStyle = asString(styles.color); - _this.renderTextWithLetterSpacing(text, styles.letterSpacing); - var textShadows = styles.textShadow; - if (textShadows.length && text.text.trim().length) { - textShadows - .slice(0) - .reverse() - .forEach(function (textShadow) { - _this.ctx.shadowColor = asString(textShadow.color); - _this.ctx.shadowOffsetX = textShadow.offsetX.number * _this.options.scale; - _this.ctx.shadowOffsetY = textShadow.offsetY.number * _this.options.scale; - _this.ctx.shadowBlur = textShadow.blur.number; - _this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + text.bounds.height); - }); - _this.ctx.shadowColor = ''; - _this.ctx.shadowOffsetX = 0; - _this.ctx.shadowOffsetY = 0; - _this.ctx.shadowBlur = 0; - } - if (styles.textDecorationLine.length) { - _this.ctx.fillStyle = asString(styles.textDecorationColor || styles.color); - styles.textDecorationLine.forEach(function (textDecorationLine) { - switch (textDecorationLine) { - case 1 /* UNDERLINE */: - // Draws a line at the baseline of the font - // TODO As some browsers display the line as more than 1px if the font-size is big, - // need to take that into account both in position and size - var baseline = _this.fontMetrics.getMetrics(fontFamily, fontSize).baseline; - _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top + baseline), text.bounds.width, 1); - break; - case 2 /* OVERLINE */: - _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top), text.bounds.width, 1); - break; - case 3 /* LINE_THROUGH */: - // TODO try and find exact position for line-through - var middle = _this.fontMetrics.getMetrics(fontFamily, fontSize).middle; - _this.ctx.fillRect(text.bounds.left, Math.ceil(text.bounds.top + middle), text.bounds.width, 1); - break; - } - }); - } + paintOrder.forEach(function (paintOrderLayer) { + switch (paintOrderLayer) { + case 0 /* FILL */: + _this.ctx.fillStyle = asString(styles.color); + _this.renderTextWithLetterSpacing(text, styles.letterSpacing, baseline); + var textShadows = styles.textShadow; + if (textShadows.length && text.text.trim().length) { + textShadows + .slice(0) + .reverse() + .forEach(function (textShadow) { + _this.ctx.shadowColor = asString(textShadow.color); + _this.ctx.shadowOffsetX = textShadow.offsetX.number * _this.options.scale; + _this.ctx.shadowOffsetY = textShadow.offsetY.number * _this.options.scale; + _this.ctx.shadowBlur = textShadow.blur.number; + _this.renderTextWithLetterSpacing(text, styles.letterSpacing, baseline); + }); + _this.ctx.shadowColor = ''; + _this.ctx.shadowOffsetX = 0; + _this.ctx.shadowOffsetY = 0; + _this.ctx.shadowBlur = 0; + } + if (styles.textDecorationLine.length) { + _this.ctx.fillStyle = asString(styles.textDecorationColor || styles.color); + styles.textDecorationLine.forEach(function (textDecorationLine) { + switch (textDecorationLine) { + case 1 /* UNDERLINE */: + // Draws a line at the baseline of the font + // TODO As some browsers display the line as more than 1px if the font-size is big, + // need to take that into account both in position and size + _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top + baseline), text.bounds.width, 1); + break; + case 2 /* OVERLINE */: + _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top), text.bounds.width, 1); + break; + case 3 /* LINE_THROUGH */: + // TODO try and find exact position for line-through + _this.ctx.fillRect(text.bounds.left, Math.ceil(text.bounds.top + middle), text.bounds.width, 1); + break; + } + }); + } + break; + case 1 /* STROKE */: + if (styles.webkitTextStrokeWidth && text.text.trim().length) { + _this.ctx.strokeStyle = asString(styles.webkitTextStrokeColor); + _this.ctx.lineWidth = styles.webkitTextStrokeWidth; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + _this.ctx.lineJoin = !!window.chrome ? 'miter' : 'round'; + _this.ctx.strokeText(text.text, text.bounds.left, text.bounds.top + baseline); + } + _this.ctx.strokeStyle = ''; + _this.ctx.lineWidth = 0; + _this.ctx.lineJoin = 'miter'; + break; + } + }); }); return [2 /*return*/]; }); }); }; CanvasRenderer.prototype.renderReplacedElement = function (container, curves, image) { - if (image && container.intrinsicWidth > 0 && container.intrinsicHeight > 0) { + var intrinsicWidth = image.naturalWidth || container.intrinsicWidth; + var intrinsicHeight = image.naturalHeight || container.intrinsicHeight; + if (image && intrinsicWidth > 0 && intrinsicHeight > 0) { var box = contentBox(container); var path = calculatePaddingBoxPath(curves); this.path(path); this.ctx.save(); this.ctx.clip(); - this.ctx.drawImage(image, 0, 0, container.intrinsicWidth, container.intrinsicHeight, box.left, box.top, box.width, box.height); + var sx = 0, sy = 0, sw = intrinsicWidth, sh = intrinsicHeight, dx = box.left, dy = box.top, dw = box.width, dh = box.height; + var objectFit = container.styles.objectFit; + var boxRatio = dw / dh; + var imgRatio = sw / sh; + if (objectFit === 2 /* CONTAIN */) { + if (imgRatio > boxRatio) { + dh = dw / imgRatio; + dy += (box.height - dh) / 2; + } + else { + dw = dh * imgRatio; + dx += (box.width - dw) / 2; + } + } + else if (objectFit === 4 /* COVER */) { + if (imgRatio > boxRatio) { + sw = sh * boxRatio; + sx += (intrinsicWidth - sw) / 2; + } + else { + sh = sw / boxRatio; + sy += (intrinsicHeight - sh) / 2; + } + } + else if (objectFit === 8 /* NONE */) { + if (sw > dw) { + sx += (sw - dw) / 2; + sw = dw; + } + else { + dx += (dw - sw) / 2; + dw = sw; + } + if (sh > dh) { + sy += (sh - dh) / 2; + sh = dh; + } + else { + dy += (dh - sh) / 2; + dh = sh; + } + } + else if (objectFit === 16 /* SCALE_DOWN */) { + var containW = imgRatio > boxRatio ? dw : dh * imgRatio; + var noneW = sw > dw ? sw : dw; + if (containW < noneW) { + if (imgRatio > boxRatio) { + dh = dw / imgRatio; + dy += (box.height - dh) / 2; + } + else { + dw = dh * imgRatio; + dx += (box.width - dw) / 2; + } + } + else { + if (sw > dw) { + sx += (sw - dw) / 2; + sw = dw; + } + else { + dx += (dw - sw) / 2; + dw = sw; + } + if (sh > dh) { + sy += (sh - dh) / 2; + sh = dh; + } + else { + dy += (dh - sh) / 2; + dh = sh; + } + } + } + this.ctx.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh); this.ctx.restore(); } }; CanvasRenderer.prototype.renderNodeContent = function (paint) { return __awaiter(this, void 0, void 0, function () { - var container, curves, styles, _i, _a, child, image, e_1, image, e_2, iframeRenderer, canvas, size, bounds, x, textBounds, img, image, url, e_3, bounds; - return __generator(this, function (_b) { - switch (_b.label) { + var container, curves, styles, _i, _a, child, image, image, iframeRenderer, canvas, size, _b, fontFamily, fontSize, baseline, bounds, x, textBounds, img, image, url, fontFamily, bounds; + return __generator(this, function (_c) { + switch (_c.label) { case 0: - this.applyEffects(paint.effects, 4 /* CONTENT */); + this.applyEffects(paint.getEffects(4 /* CONTENT */)); container = paint.container; curves = paint.curves; styles = container.styles; _i = 0, _a = container.textNodes; - _b.label = 1; + _c.label = 1; case 1: if (!(_i < _a.length)) return [3 /*break*/, 4]; child = _a[_i]; return [4 /*yield*/, this.renderTextNode(child, styles)]; case 2: - _b.sent(); - _b.label = 3; + _c.sent(); + _c.label = 3; case 3: _i++; return [3 /*break*/, 1]; case 4: if (!(container instanceof ImageElementContainer)) return [3 /*break*/, 8]; - _b.label = 5; + _c.label = 5; case 5: - _b.trys.push([5, 7, , 8]); - return [4 /*yield*/, this.options.cache.match(container.src)]; + _c.trys.push([5, 7, , 8]); + return [4 /*yield*/, this.context.cache.match(container.src)]; case 6: - image = _b.sent(); + image = _c.sent(); this.renderReplacedElement(container, curves, image); return [3 /*break*/, 8]; case 7: - e_1 = _b.sent(); - Logger.getInstance(this.options.id).error("Error loading image " + container.src); + _c.sent(); + this.context.logger.error("Error loading image " + container.src); return [3 /*break*/, 8]; case 8: if (container instanceof CanvasElementContainer) { this.renderReplacedElement(container, curves, container.canvas); } if (!(container instanceof SVGElementContainer)) return [3 /*break*/, 12]; - _b.label = 9; + _c.label = 9; case 9: - _b.trys.push([9, 11, , 12]); - return [4 /*yield*/, this.options.cache.match(container.svg)]; + _c.trys.push([9, 11, , 12]); + return [4 /*yield*/, this.context.cache.match(container.svg)]; case 10: - image = _b.sent(); + image = _c.sent(); this.renderReplacedElement(container, curves, image); return [3 /*break*/, 12]; case 11: - e_2 = _b.sent(); - Logger.getInstance(this.options.id).error("Error loading svg " + container.svg.substring(0, 255)); + _c.sent(); + this.context.logger.error("Error loading svg " + container.svg.substring(0, 255)); return [3 /*break*/, 12]; case 12: if (!(container instanceof IFrameElementContainer && container.tree)) return [3 /*break*/, 14]; - iframeRenderer = new CanvasRenderer({ - id: this.options.id, + iframeRenderer = new CanvasRenderer(this.context, { scale: this.options.scale, backgroundColor: container.backgroundColor, x: 0, y: 0, - scrollX: 0, - scrollY: 0, width: container.width, - height: container.height, - cache: this.options.cache, - windowWidth: container.width, - windowHeight: container.height + height: container.height }); return [4 /*yield*/, iframeRenderer.render(container.tree)]; case 13: - canvas = _b.sent(); + canvas = _c.sent(); if (container.width && container.height) { this.ctx.drawImage(canvas, 0, 0, container.width, container.height, container.bounds.left, container.bounds.top, container.bounds.width, container.bounds.height); } - _b.label = 14; + _c.label = 14; case 14: if (container instanceof InputElementContainer) { size = Math.min(container.bounds.width, container.bounds.height); @@ -32184,17 +32697,19 @@ function unzipSync(data) { } } if (isTextInputElement(container) && container.value.length) { - this.ctx.font = this.createFontStyle(styles)[0]; + _b = this.createFontStyle(styles), fontFamily = _b[0], fontSize = _b[1]; + baseline = this.fontMetrics.getMetrics(fontFamily, fontSize).baseline; + this.ctx.font = fontFamily; this.ctx.fillStyle = asString(styles.color); - this.ctx.textBaseline = 'middle'; + this.ctx.textBaseline = 'alphabetic'; this.ctx.textAlign = canvasTextAlign(container.styles.textAlign); bounds = contentBox(container); x = 0; switch (container.styles.textAlign) { - case TEXT_ALIGN.CENTER: + case 1 /* CENTER */: x += bounds.width / 2; break; - case TEXT_ALIGN.RIGHT: + case 2 /* RIGHT */: x += bounds.width; break; } @@ -32207,42 +32722,43 @@ function unzipSync(data) { new Vector(bounds.left, bounds.top + bounds.height) ]); this.ctx.clip(); - this.renderTextWithLetterSpacing(new TextBounds(container.value, textBounds), styles.letterSpacing); + this.renderTextWithLetterSpacing(new TextBounds(container.value, textBounds), styles.letterSpacing, baseline); this.ctx.restore(); - this.ctx.textBaseline = 'bottom'; + this.ctx.textBaseline = 'alphabetic'; this.ctx.textAlign = 'left'; } if (!contains(container.styles.display, 2048 /* LIST_ITEM */)) return [3 /*break*/, 20]; if (!(container.styles.listStyleImage !== null)) return [3 /*break*/, 19]; img = container.styles.listStyleImage; - if (!(img.type === CSSImageType.URL)) return [3 /*break*/, 18]; + if (!(img.type === 0 /* URL */)) return [3 /*break*/, 18]; image = void 0; url = img.url; - _b.label = 15; + _c.label = 15; case 15: - _b.trys.push([15, 17, , 18]); - return [4 /*yield*/, this.options.cache.match(url)]; + _c.trys.push([15, 17, , 18]); + return [4 /*yield*/, this.context.cache.match(url)]; case 16: - image = _b.sent(); + image = _c.sent(); this.ctx.drawImage(image, container.bounds.left - (image.width + 10), container.bounds.top); return [3 /*break*/, 18]; case 17: - e_3 = _b.sent(); - Logger.getInstance(this.options.id).error("Error loading list-style-image " + url); + _c.sent(); + this.context.logger.error("Error loading list-style-image " + url); return [3 /*break*/, 18]; case 18: return [3 /*break*/, 20]; case 19: - if (paint.listValue && container.styles.listStyleType !== LIST_STYLE_TYPE.NONE) { - this.ctx.font = this.createFontStyle(styles)[0]; + if (paint.listValue && container.styles.listStyleType !== -1 /* NONE */) { + fontFamily = this.createFontStyle(styles)[0]; + this.ctx.font = fontFamily; this.ctx.fillStyle = asString(styles.color); this.ctx.textBaseline = 'middle'; this.ctx.textAlign = 'right'; bounds = new Bounds(container.bounds.left, container.bounds.top + getAbsoluteValue(container.styles.paddingTop, container.bounds.width), container.bounds.width, computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 1); - this.renderTextWithLetterSpacing(new TextBounds(paint.listValue, bounds), styles.letterSpacing); + this.renderTextWithLetterSpacing(new TextBounds(paint.listValue, bounds), styles.letterSpacing, computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 2); this.ctx.textBaseline = 'bottom'; this.ctx.textAlign = 'left'; } - _b.label = 20; + _c.label = 20; case 20: return [2 /*return*/]; } }); @@ -32253,10 +32769,13 @@ function unzipSync(data) { var _i, _a, child, _b, _c, child, _d, _e, child, _f, _g, child, _h, _j, child, _k, _l, child, _m, _o, child; return __generator(this, function (_p) { switch (_p.label) { - case 0: - // https://www.w3.org/TR/css-position-3/#painting-order - // 1. the background and borders of the element forming the stacking context. - return [4 /*yield*/, this.renderNodeBackgroundAndBorders(stack.element)]; + case 0: + if (contains(stack.element.container.flags, 16 /* DEBUG_RENDER */)) { + debugger; + } + // https://www.w3.org/TR/css-position-3/#painting-order + // 1. the background and borders of the element forming the stacking context. + return [4 /*yield*/, this.renderNodeBackgroundAndBorders(stack.element)]; case 1: // https://www.w3.org/TR/css-position-3/#painting-order // 1. the background and borders of the element forming the stacking context. @@ -32399,12 +32918,14 @@ function unzipSync(data) { this.ctx.translate(-offsetX, -offsetY); }; CanvasRenderer.prototype.resizeImage = function (image, width, height) { + var _a; if (image.width === width && image.height === height) { return image; } - var canvas = this.canvas.ownerDocument.createElement('canvas'); - canvas.width = width; - canvas.height = height; + var ownerDocument = (_a = this.canvas.ownerDocument) !== null && _a !== void 0 ? _a : document; + var canvas = ownerDocument.createElement('canvas'); + canvas.width = Math.max(1, width); + canvas.height = Math.max(1, height); var ctx = canvas.getContext('2d'); ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, width, height); return canvas; @@ -32417,39 +32938,39 @@ function unzipSync(data) { case 0: index = container.styles.backgroundImage.length - 1; _loop_1 = function (backgroundImage) { - var image, url, e_4, _a, path, x, y, width, height, pattern, _b, path, x, y, width, height, _c, lineLength, x0, x1, y0, y1, canvas, ctx, gradient_1, pattern, _d, path, left, top_1, width, height, position, x, y, _e, rx, ry, radialGradient_1, midX, midY, f, invF; - return __generator(this, function (_f) { - switch (_f.label) { + var image, url, _c, path, x, y, width, height, pattern, _d, path, x, y, width, height, _e, lineLength, x0, x1, y0, y1, canvas, ctx, gradient_1, pattern, _f, path, left, top_1, width, height, position, x, y, _g, rx, ry, radialGradient_1, midX, midY, f, invF; + return __generator(this, function (_h) { + switch (_h.label) { case 0: - if (!(backgroundImage.type === CSSImageType.URL)) return [3 /*break*/, 5]; + if (!(backgroundImage.type === 0 /* URL */)) return [3 /*break*/, 5]; image = void 0; url = backgroundImage.url; - _f.label = 1; + _h.label = 1; case 1: - _f.trys.push([1, 3, , 4]); - return [4 /*yield*/, this_1.options.cache.match(url)]; + _h.trys.push([1, 3, , 4]); + return [4 /*yield*/, this_1.context.cache.match(url)]; case 2: - image = _f.sent(); + image = _h.sent(); return [3 /*break*/, 4]; case 3: - e_4 = _f.sent(); - Logger.getInstance(this_1.options.id).error("Error loading background-image " + url); + _h.sent(); + this_1.context.logger.error("Error loading background-image " + url); return [3 /*break*/, 4]; case 4: if (image) { - _a = calculateBackgroundRendering(container, index, [ + _c = calculateBackgroundRendering(container, index, [ image.width, image.height, image.width / image.height - ]), path = _a[0], x = _a[1], y = _a[2], width = _a[3], height = _a[4]; + ]), path = _c[0], x = _c[1], y = _c[2], width = _c[3], height = _c[4]; pattern = this_1.ctx.createPattern(this_1.resizeImage(image, width, height), 'repeat'); this_1.renderRepeat(path, pattern, x, y); } return [3 /*break*/, 6]; case 5: if (isLinearGradient(backgroundImage)) { - _b = calculateBackgroundRendering(container, index, [null, null, null]), path = _b[0], x = _b[1], y = _b[2], width = _b[3], height = _b[4]; - _c = calculateGradientDirection(backgroundImage.angle, width, height), lineLength = _c[0], x0 = _c[1], x1 = _c[2], y0 = _c[3], y1 = _c[4]; + _d = calculateBackgroundRendering(container, index, [null, null, null]), path = _d[0], x = _d[1], y = _d[2], width = _d[3], height = _d[4]; + _e = calculateGradientDirection(backgroundImage.angle, width, height), lineLength = _e[0], x0 = _e[1], x1 = _e[2], y0 = _e[3], y1 = _e[4]; canvas = document.createElement('canvas'); canvas.width = width; canvas.height = height; @@ -32466,16 +32987,16 @@ function unzipSync(data) { } } else if (isRadialGradient(backgroundImage)) { - _d = calculateBackgroundRendering(container, index, [ + _f = calculateBackgroundRendering(container, index, [ null, null, null - ]), path = _d[0], left = _d[1], top_1 = _d[2], width = _d[3], height = _d[4]; + ]), path = _f[0], left = _f[1], top_1 = _f[2], width = _f[3], height = _f[4]; position = backgroundImage.position.length === 0 ? [FIFTY_PERCENT] : backgroundImage.position; x = getAbsoluteValue(position[0], width); y = getAbsoluteValue(position[position.length - 1], height); - _e = calculateRadius(backgroundImage, x, y, width, height), rx = _e[0], ry = _e[1]; - if (rx > 0 && rx > 0) { + _g = calculateRadius(backgroundImage, x, y, width, height), rx = _g[0], ry = _g[1]; + if (rx > 0 && ry > 0) { radialGradient_1 = this_1.ctx.createRadialGradient(left + x, top_1 + y, 0, left + x, top_1 + y, rx); processColorStops(backgroundImage.stops, rx * 2).forEach(function (colorStop) { return radialGradient_1.addColorStop(colorStop.stop, asString(colorStop.color)); @@ -32499,7 +33020,7 @@ function unzipSync(data) { } } } - _f.label = 6; + _h.label = 6; case 6: index--; return [2 /*return*/]; @@ -32565,7 +33086,7 @@ function unzipSync(data) { return __generator(this, function (_a) { switch (_a.label) { case 0: - this.applyEffects(paint.effects, 2 /* BACKGROUND_BORDERS */); + this.applyEffects(paint.getEffects(2 /* BACKGROUND_BORDERS */)); styles = paint.container.styles; hasBackground = !isTransparent(styles.backgroundColor) || styles.backgroundImage.length; borders = [ @@ -32621,20 +33142,20 @@ function unzipSync(data) { case 3: if (!(_i < borders_1.length)) return [3 /*break*/, 13]; border = borders_1[_i]; - if (!(border.style !== BORDER_STYLE.NONE && !isTransparent(border.color) && border.width > 0)) return [3 /*break*/, 11]; - if (!(border.style === BORDER_STYLE.DASHED)) return [3 /*break*/, 5]; - return [4 /*yield*/, this.renderDashedDottedBorder(border.color, border.width, side, paint.curves, BORDER_STYLE.DASHED)]; + if (!(border.style !== 0 /* NONE */ && !isTransparent(border.color) && border.width > 0)) return [3 /*break*/, 11]; + if (!(border.style === 2 /* DASHED */)) return [3 /*break*/, 5]; + return [4 /*yield*/, this.renderDashedDottedBorder(border.color, border.width, side, paint.curves, 2 /* DASHED */)]; case 4: _a.sent(); return [3 /*break*/, 11]; case 5: - if (!(border.style === BORDER_STYLE.DOTTED)) return [3 /*break*/, 7]; - return [4 /*yield*/, this.renderDashedDottedBorder(border.color, border.width, side, paint.curves, BORDER_STYLE.DOTTED)]; + if (!(border.style === 3 /* DOTTED */)) return [3 /*break*/, 7]; + return [4 /*yield*/, this.renderDashedDottedBorder(border.color, border.width, side, paint.curves, 3 /* DOTTED */)]; case 6: _a.sent(); return [3 /*break*/, 11]; case 7: - if (!(border.style === BORDER_STYLE.DOUBLE)) return [3 /*break*/, 9]; + if (!(border.style === 4 /* DOUBLE */)) return [3 /*break*/, 9]; return [4 /*yield*/, this.renderDoubleBorder(border.color, border.width, side, paint.curves)]; case 8: _a.sent(); @@ -32661,7 +33182,7 @@ function unzipSync(data) { this.ctx.save(); strokePaths = parsePathForBorderStroke(curvePoints, side); boxPaths = parsePathForBorder(curvePoints, side); - if (style === BORDER_STYLE.DASHED) { + if (style === 2 /* DASHED */) { this.path(boxPaths); this.ctx.clip(); } @@ -32688,7 +33209,7 @@ function unzipSync(data) { length = Math.abs(startY - endY); } this.ctx.beginPath(); - if (style === BORDER_STYLE.DOTTED) { + if (style === 3 /* DOTTED */) { this.formatPath(strokePaths); } else { @@ -32696,7 +33217,7 @@ function unzipSync(data) { } dashLength = width < 3 ? width * 3 : width * 2; spaceLength = width < 3 ? width * 2 : width; - if (style === BORDER_STYLE.DOTTED) { + if (style === 3 /* DOTTED */) { dashLength = width; spaceLength = width; } @@ -32719,14 +33240,14 @@ function unzipSync(data) { : maxSpace; } if (useLineDash) { - if (style === BORDER_STYLE.DOTTED) { + if (style === 3 /* DOTTED */) { this.ctx.setLineDash([0, dashLength + spaceLength]); } else { this.ctx.setLineDash([dashLength, spaceLength]); } } - if (style === BORDER_STYLE.DOTTED) { + if (style === 3 /* DOTTED */) { this.ctx.lineCap = 'round'; this.ctx.lineWidth = width; } @@ -32737,7 +33258,7 @@ function unzipSync(data) { this.ctx.stroke(); this.ctx.setLineDash([]); // dashed round edge gap - if (style === BORDER_STYLE.DASHED) { + if (style === 2 /* DASHED */) { if (isBezierCurve(boxPaths[0])) { path1 = boxPaths[3]; path2 = boxPaths[0]; @@ -32766,20 +33287,20 @@ function unzipSync(data) { case 0: if (this.options.backgroundColor) { this.ctx.fillStyle = asString(this.options.backgroundColor); - this.ctx.fillRect(this.options.x - this.options.scrollX, this.options.y - this.options.scrollY, this.options.width, this.options.height); + this.ctx.fillRect(this.options.x, this.options.y, this.options.width, this.options.height); } stack = parseStackingContexts(element); return [4 /*yield*/, this.renderStack(stack)]; case 1: _a.sent(); - this.applyEffects([], 2 /* BACKGROUND_BORDERS */); + this.applyEffects([]); return [2 /*return*/, this.canvas]; } }); }); }; return CanvasRenderer; - }()); + }(Renderer)); var isTextInputElement = function (container) { if (container instanceof TextareaElementContainer) { return true; @@ -32794,39 +33315,49 @@ function unzipSync(data) { }; var calculateBackgroundCurvedPaintingArea = function (clip, curves) { switch (clip) { - case BACKGROUND_CLIP.BORDER_BOX: + case 0 /* BORDER_BOX */: return calculateBorderBoxPath(curves); - case BACKGROUND_CLIP.CONTENT_BOX: + case 2 /* CONTENT_BOX */: return calculateContentBoxPath(curves); - case BACKGROUND_CLIP.PADDING_BOX: + case 1 /* PADDING_BOX */: default: return calculatePaddingBoxPath(curves); } }; var canvasTextAlign = function (textAlign) { switch (textAlign) { - case TEXT_ALIGN.CENTER: + case 1 /* CENTER */: return 'center'; - case TEXT_ALIGN.RIGHT: + case 2 /* RIGHT */: return 'right'; - case TEXT_ALIGN.LEFT: + case 0 /* LEFT */: default: return 'left'; } }; - - var ForeignObjectRenderer = /** @class */ (function () { - function ForeignObjectRenderer(options) { - this.canvas = options.canvas ? options.canvas : document.createElement('canvas'); - this.ctx = this.canvas.getContext('2d'); - this.options = options; - this.canvas.width = Math.floor(options.width * options.scale); - this.canvas.height = Math.floor(options.height * options.scale); - this.canvas.style.width = options.width + "px"; - this.canvas.style.height = options.height + "px"; - this.ctx.scale(this.options.scale, this.options.scale); - this.ctx.translate(-options.x + options.scrollX, -options.y + options.scrollY); - Logger.getInstance(options.id).debug("EXPERIMENTAL ForeignObject renderer initialized (" + options.width + "x" + options.height + " at " + options.x + "," + options.y + ") with scale " + options.scale); + // see https://github.com/niklasvh/html2canvas/pull/2645 + var iOSBrokenFonts = ['-apple-system', 'system-ui']; + var fixIOSSystemFonts = function (fontFamilies) { + return /iPhone OS 15_(0|1)/.test(window.navigator.userAgent) + ? fontFamilies.filter(function (fontFamily) { return iOSBrokenFonts.indexOf(fontFamily) === -1; }) + : fontFamilies; + }; + + var ForeignObjectRenderer = /** @class */ (function (_super) { + __extends(ForeignObjectRenderer, _super); + function ForeignObjectRenderer(context, options) { + var _this = _super.call(this, context, options) || this; + _this.canvas = options.canvas ? options.canvas : document.createElement('canvas'); + _this.ctx = _this.canvas.getContext('2d'); + _this.options = options; + _this.canvas.width = Math.floor(options.width * options.scale); + _this.canvas.height = Math.floor(options.height * options.scale); + _this.canvas.style.width = options.width + "px"; + _this.canvas.style.height = options.height + "px"; + _this.ctx.scale(_this.options.scale, _this.options.scale); + _this.ctx.translate(-options.x, -options.y); + _this.context.logger.debug("EXPERIMENTAL ForeignObject renderer initialized (" + options.width + "x" + options.height + " at " + options.x + "," + options.y + ") with scale " + options.scale); + return _this; } ForeignObjectRenderer.prototype.render = function (element) { return __awaiter(this, void 0, void 0, function () { @@ -32834,8 +33365,8 @@ function unzipSync(data) { return __generator(this, function (_a) { switch (_a.label) { case 0: - svg = createForeignObjectSVG(Math.max(this.options.windowWidth, this.options.width) * this.options.scale, Math.max(this.options.windowHeight, this.options.height) * this.options.scale, this.options.scrollX * this.options.scale, this.options.scrollY * this.options.scale, element); - return [4 /*yield*/, loadSerializedSVG$1(svg)]; + svg = createForeignObjectSVG(this.options.width * this.options.scale, this.options.height * this.options.scale, this.options.scale, this.options.scale, element); + return [4 /*yield*/, loadSerializedSVG(svg)]; case 1: img = _a.sent(); if (this.options.backgroundColor) { @@ -32849,8 +33380,8 @@ function unzipSync(data) { }); }; return ForeignObjectRenderer; - }()); - var loadSerializedSVG$1 = function (svg) { + }(Renderer)); + var loadSerializedSVG = function (svg) { return new Promise(function (resolve, reject) { var img = new Image(); img.onload = function () { @@ -32861,8 +33392,97 @@ function unzipSync(data) { }); }; - var _this = undefined; - var parseColor$1 = function (value) { return color.parse(Parser.create(value).parseComponentValue()); }; + var Logger = /** @class */ (function () { + function Logger(_a) { + var id = _a.id, enabled = _a.enabled; + this.id = id; + this.enabled = enabled; + this.start = Date.now(); + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Logger.prototype.debug = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (this.enabled) { + // eslint-disable-next-line no-console + if (typeof window !== 'undefined' && window.console && typeof console.debug === 'function') { + // eslint-disable-next-line no-console + console.debug.apply(console, __spreadArray([this.id, this.getTime() + "ms"], args)); + } + else { + this.info.apply(this, args); + } + } + }; + Logger.prototype.getTime = function () { + return Date.now() - this.start; + }; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Logger.prototype.info = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (this.enabled) { + // eslint-disable-next-line no-console + if (typeof window !== 'undefined' && window.console && typeof console.info === 'function') { + // eslint-disable-next-line no-console + console.info.apply(console, __spreadArray([this.id, this.getTime() + "ms"], args)); + } + } + }; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Logger.prototype.warn = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (this.enabled) { + // eslint-disable-next-line no-console + if (typeof window !== 'undefined' && window.console && typeof console.warn === 'function') { + // eslint-disable-next-line no-console + console.warn.apply(console, __spreadArray([this.id, this.getTime() + "ms"], args)); + } + else { + this.info.apply(this, args); + } + } + }; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Logger.prototype.error = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (this.enabled) { + // eslint-disable-next-line no-console + if (typeof window !== 'undefined' && window.console && typeof console.error === 'function') { + // eslint-disable-next-line no-console + console.error.apply(console, __spreadArray([this.id, this.getTime() + "ms"], args)); + } + else { + this.info.apply(this, args); + } + } + }; + Logger.instances = {}; + return Logger; + }()); + + var Context = /** @class */ (function () { + function Context(options, windowBounds) { + var _a; + this.windowBounds = windowBounds; + this.instanceName = "#" + Context.instanceCount++; + this.logger = new Logger({ id: this.instanceName, enabled: options.logging }); + this.cache = (_a = options.cache) !== null && _a !== void 0 ? _a : new Cache(this, options); + } + Context.instanceCount = 1; + return Context; + }()); + var html2canvas = function (element, options) { if (options === void 0) { options = {}; } return renderElement(element, options); @@ -32870,11 +33490,15 @@ function unzipSync(data) { if (typeof window !== 'undefined') { CacheStorage.setContext(window); } - var renderElement = function (element, opts) { return __awaiter(_this, void 0, void 0, function () { - var ownerDocument, defaultView, instanceName, _a, width, height, left, top, defaultResourceOptions, resourceOptions, defaultOptions, options, windowBounds, documentCloner, clonedElement, container, documentBackgroundColor, bodyBackgroundColor, bgColor, defaultBackgroundColor, backgroundColor, renderOptions, canvas, renderer, root, renderer; - return __generator(this, function (_b) { - switch (_b.label) { + var renderElement = function (element, opts) { return __awaiter(void 0, void 0, void 0, function () { + var ownerDocument, defaultView, resourceOptions, contextOptions, windowOptions, windowBounds, context, foreignObjectRendering, cloneOptions, documentCloner, clonedElement, container, _a, width, height, left, top, backgroundColor, renderOptions, canvas, renderer, root, renderer; + var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t; + return __generator(this, function (_u) { + switch (_u.label) { case 0: + if (!element || typeof element !== 'object') { + return [2 /*return*/, Promise.reject('Invalid element provided as first argument')]; + } ownerDocument = element.ownerDocument; if (!ownerDocument) { throw new Error("Element is not attached to a Document"); @@ -32883,115 +33507,7452 @@ function unzipSync(data) { if (!defaultView) { throw new Error("Document is not attached to a Window"); } - instanceName = (Math.round(Math.random() * 1000) + Date.now()).toString(16); - _a = isBodyElement(element) || isHTMLElement(element) ? parseDocumentSize(ownerDocument) : parseBounds(element), width = _a.width, height = _a.height, left = _a.left, top = _a.top; - defaultResourceOptions = { - allowTaint: false, - imageTimeout: 15000, - proxy: undefined, - useCORS: false + resourceOptions = { + allowTaint: (_b = opts.allowTaint) !== null && _b !== void 0 ? _b : false, + imageTimeout: (_c = opts.imageTimeout) !== null && _c !== void 0 ? _c : 15000, + proxy: opts.proxy, + useCORS: (_d = opts.useCORS) !== null && _d !== void 0 ? _d : false }; - resourceOptions = __assign({}, defaultResourceOptions, opts); - defaultOptions = { - backgroundColor: '#ffffff', - cache: opts.cache ? opts.cache : CacheStorage.create(instanceName, resourceOptions), - logging: true, - removeContainer: true, - foreignObjectRendering: false, - scale: defaultView.devicePixelRatio || 1, - windowWidth: defaultView.innerWidth, - windowHeight: defaultView.innerHeight, - scrollX: defaultView.pageXOffset, - scrollY: defaultView.pageYOffset, - x: left, - y: top, - width: Math.ceil(width), - height: Math.ceil(height), - id: instanceName + contextOptions = __assign({ logging: (_e = opts.logging) !== null && _e !== void 0 ? _e : true, cache: opts.cache }, resourceOptions); + windowOptions = { + windowWidth: (_f = opts.windowWidth) !== null && _f !== void 0 ? _f : defaultView.innerWidth, + windowHeight: (_g = opts.windowHeight) !== null && _g !== void 0 ? _g : defaultView.innerHeight, + scrollX: (_h = opts.scrollX) !== null && _h !== void 0 ? _h : defaultView.pageXOffset, + scrollY: (_j = opts.scrollY) !== null && _j !== void 0 ? _j : defaultView.pageYOffset }; - options = __assign({}, defaultOptions, resourceOptions, opts); - windowBounds = new Bounds(options.scrollX, options.scrollY, options.windowWidth, options.windowHeight); - Logger.create({ id: instanceName, enabled: options.logging }); - Logger.getInstance(instanceName).debug("Starting document clone"); - documentCloner = new DocumentCloner(element, { - id: instanceName, - onclone: options.onclone, - ignoreElements: options.ignoreElements, - inlineImages: options.foreignObjectRendering, - copyStyles: options.foreignObjectRendering - }); + windowBounds = new Bounds(windowOptions.scrollX, windowOptions.scrollY, windowOptions.windowWidth, windowOptions.windowHeight); + context = new Context(contextOptions, windowBounds); + foreignObjectRendering = (_k = opts.foreignObjectRendering) !== null && _k !== void 0 ? _k : false; + cloneOptions = { + allowTaint: (_l = opts.allowTaint) !== null && _l !== void 0 ? _l : false, + onclone: opts.onclone, + ignoreElements: opts.ignoreElements, + inlineImages: foreignObjectRendering, + copyStyles: foreignObjectRendering + }; + context.logger.debug("Starting document clone with size " + windowBounds.width + "x" + windowBounds.height + " scrolled to " + -windowBounds.left + "," + -windowBounds.top); + documentCloner = new DocumentCloner(context, element, cloneOptions); clonedElement = documentCloner.clonedReferenceElement; if (!clonedElement) { return [2 /*return*/, Promise.reject("Unable to find element in cloned iframe")]; } return [4 /*yield*/, documentCloner.toIFrame(ownerDocument, windowBounds)]; case 1: - container = _b.sent(); - documentBackgroundColor = ownerDocument.documentElement - ? parseColor$1(getComputedStyle(ownerDocument.documentElement).backgroundColor) - : COLORS.TRANSPARENT; - bodyBackgroundColor = ownerDocument.body - ? parseColor$1(getComputedStyle(ownerDocument.body).backgroundColor) - : COLORS.TRANSPARENT; - bgColor = opts.backgroundColor; - defaultBackgroundColor = typeof bgColor === 'string' ? parseColor$1(bgColor) : bgColor === null ? COLORS.TRANSPARENT : 0xffffffff; - backgroundColor = element === ownerDocument.documentElement - ? isTransparent(documentBackgroundColor) - ? isTransparent(bodyBackgroundColor) - ? defaultBackgroundColor - : bodyBackgroundColor - : documentBackgroundColor - : defaultBackgroundColor; + container = _u.sent(); + _a = isBodyElement(clonedElement) || isHTMLElement(clonedElement) + ? parseDocumentSize(clonedElement.ownerDocument) + : parseBounds(context, clonedElement), width = _a.width, height = _a.height, left = _a.left, top = _a.top; + backgroundColor = parseBackgroundColor(context, clonedElement, opts.backgroundColor); renderOptions = { - id: instanceName, - cache: options.cache, - canvas: options.canvas, + canvas: opts.canvas, backgroundColor: backgroundColor, - scale: options.scale, - x: options.x, - y: options.y, - scrollX: options.scrollX, - scrollY: options.scrollY, - width: options.width, - height: options.height, - windowWidth: options.windowWidth, - windowHeight: options.windowHeight + scale: (_o = (_m = opts.scale) !== null && _m !== void 0 ? _m : defaultView.devicePixelRatio) !== null && _o !== void 0 ? _o : 1, + x: ((_p = opts.x) !== null && _p !== void 0 ? _p : 0) + left, + y: ((_q = opts.y) !== null && _q !== void 0 ? _q : 0) + top, + width: (_r = opts.width) !== null && _r !== void 0 ? _r : Math.ceil(width), + height: (_s = opts.height) !== null && _s !== void 0 ? _s : Math.ceil(height) }; - if (!options.foreignObjectRendering) return [3 /*break*/, 3]; - Logger.getInstance(instanceName).debug("Document cloned, using foreign object rendering"); - renderer = new ForeignObjectRenderer(renderOptions); + if (!foreignObjectRendering) return [3 /*break*/, 3]; + context.logger.debug("Document cloned, using foreign object rendering"); + renderer = new ForeignObjectRenderer(context, renderOptions); return [4 /*yield*/, renderer.render(clonedElement)]; case 2: - canvas = _b.sent(); + canvas = _u.sent(); return [3 /*break*/, 5]; case 3: - Logger.getInstance(instanceName).debug("Document cloned, using computed rendering"); - CacheStorage.attachInstance(options.cache); - Logger.getInstance(instanceName).debug("Starting DOM parsing"); - root = parseTree(clonedElement); - CacheStorage.detachInstance(); + context.logger.debug("Document cloned, element located at " + left + "," + top + " with size " + width + "x" + height + " using computed rendering"); + context.logger.debug("Starting DOM parsing"); + root = parseTree(context, clonedElement); if (backgroundColor === root.styles.backgroundColor) { root.styles.backgroundColor = COLORS.TRANSPARENT; } - Logger.getInstance(instanceName).debug("Starting renderer"); - renderer = new CanvasRenderer(renderOptions); + context.logger.debug("Starting renderer for element at " + renderOptions.x + "," + renderOptions.y + " with size " + renderOptions.width + "x" + renderOptions.height); + renderer = new CanvasRenderer(context, renderOptions); return [4 /*yield*/, renderer.render(root)]; case 4: - canvas = _b.sent(); - _b.label = 5; + canvas = _u.sent(); + _u.label = 5; case 5: - if (options.removeContainer === true) { + if ((_t = opts.removeContainer) !== null && _t !== void 0 ? _t : true) { if (!DocumentCloner.destroy(container)) { - Logger.getInstance(instanceName).error("Cannot detach cloned iframe as it is not in the DOM anymore"); + context.logger.error("Cannot detach cloned iframe as it is not in the DOM anymore"); } } - Logger.getInstance(instanceName).debug("Finished rendering"); - Logger.destroy(instanceName); - CacheStorage.destroy(instanceName); + context.logger.debug("Finished rendering"); return [2 /*return*/, canvas]; } }); }); }; + var parseBackgroundColor = function (context, element, backgroundColorOverride) { + var ownerDocument = element.ownerDocument; + // http://www.w3.org/TR/css3-background/#special-backgrounds + var documentBackgroundColor = ownerDocument.documentElement + ? parseColor(context, getComputedStyle(ownerDocument.documentElement).backgroundColor) + : COLORS.TRANSPARENT; + var bodyBackgroundColor = ownerDocument.body + ? parseColor(context, getComputedStyle(ownerDocument.body).backgroundColor) + : COLORS.TRANSPARENT; + var defaultBackgroundColor = typeof backgroundColorOverride === 'string' + ? parseColor(context, backgroundColorOverride) + : backgroundColorOverride === null + ? COLORS.TRANSPARENT + : 0xffffffff; + return element === ownerDocument.documentElement + ? isTransparent(documentBackgroundColor) + ? isTransparent(bodyBackgroundColor) + ? defaultBackgroundColor + : bodyBackgroundColor + : documentBackgroundColor + : defaultBackgroundColor; + }; + + return html2canvas; + +}))); +//# sourceMappingURL=html2canvas-pro.js.map + + +/***/ }), + +/***/ "./node_modules/html2canvas/dist/html2canvas.js": +/*!******************************************************!*\ + !*** ./node_modules/html2canvas/dist/html2canvas.js ***! + \******************************************************/ +/***/ (function(module) { + +/*! + * html2canvas 1.0.0 + * Copyright (c) 2021 Niklas von Hertzen + * Released under MIT License + */ +(function (global, factory) { + true ? module.exports = factory() : + 0; +}(this, function () { 'use strict'; + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + + function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + function __awaiter(thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + } + + function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + 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; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + } + + var Bounds = /** @class */ (function () { + function Bounds(x, y, w, h) { + this.left = x; + this.top = y; + this.width = w; + this.height = h; + } + Bounds.prototype.add = function (x, y, w, h) { + return new Bounds(this.left + x, this.top + y, this.width + w, this.height + h); + }; + Bounds.fromClientRect = function (clientRect) { + return new Bounds(clientRect.left, clientRect.top, clientRect.width, clientRect.height); + }; + return Bounds; + }()); + var parseBounds = function (node) { + return Bounds.fromClientRect(node.getBoundingClientRect()); + }; + var parseDocumentSize = function (document) { + var body = document.body; + var documentElement = document.documentElement; + if (!body || !documentElement) { + throw new Error("Unable to get document size"); + } + var width = Math.max(Math.max(body.scrollWidth, documentElement.scrollWidth), Math.max(body.offsetWidth, documentElement.offsetWidth), Math.max(body.clientWidth, documentElement.clientWidth)); + var height = Math.max(Math.max(body.scrollHeight, documentElement.scrollHeight), Math.max(body.offsetHeight, documentElement.offsetHeight), Math.max(body.clientHeight, documentElement.clientHeight)); + return new Bounds(0, 0, width, height); + }; + + /* + * css-line-break 1.1.1 + * Copyright (c) 2019 Niklas von Hertzen + * Released under MIT License + */ + var toCodePoints = function (str) { + var codePoints = []; + var i = 0; + var length = str.length; + while (i < length) { + var value = str.charCodeAt(i++); + if (value >= 0xd800 && value <= 0xdbff && i < length) { + var extra = str.charCodeAt(i++); + if ((extra & 0xfc00) === 0xdc00) { + codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000); + } + else { + codePoints.push(value); + i--; + } + } + else { + codePoints.push(value); + } + } + return codePoints; + }; + var fromCodePoint = function () { + var codePoints = []; + for (var _i = 0; _i < arguments.length; _i++) { + codePoints[_i] = arguments[_i]; + } + if (String.fromCodePoint) { + return String.fromCodePoint.apply(String, codePoints); + } + var length = codePoints.length; + if (!length) { + return ''; + } + var codeUnits = []; + var index = -1; + var result = ''; + while (++index < length) { + var codePoint = codePoints[index]; + if (codePoint <= 0xffff) { + codeUnits.push(codePoint); + } + else { + codePoint -= 0x10000; + codeUnits.push((codePoint >> 10) + 0xd800, codePoint % 0x400 + 0xdc00); + } + if (index + 1 === length || codeUnits.length > 0x4000) { + result += String.fromCharCode.apply(String, codeUnits); + codeUnits.length = 0; + } + } + return result; + }; + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + // Use a lookup table to find the index. + var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256); + for (var i = 0; i < chars.length; i++) { + lookup[chars.charCodeAt(i)] = i; + } + var decode = function (base64) { + var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4; + if (base64[base64.length - 1] === '=') { + bufferLength--; + if (base64[base64.length - 2] === '=') { + bufferLength--; + } + } + var buffer = typeof ArrayBuffer !== 'undefined' && + typeof Uint8Array !== 'undefined' && + typeof Uint8Array.prototype.slice !== 'undefined' + ? new ArrayBuffer(bufferLength) + : new Array(bufferLength); + var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer); + for (i = 0; i < len; i += 4) { + encoded1 = lookup[base64.charCodeAt(i)]; + encoded2 = lookup[base64.charCodeAt(i + 1)]; + encoded3 = lookup[base64.charCodeAt(i + 2)]; + encoded4 = lookup[base64.charCodeAt(i + 3)]; + bytes[p++] = (encoded1 << 2) | (encoded2 >> 4); + bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2); + bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63); + } + return buffer; + }; + var polyUint16Array = function (buffer) { + var length = buffer.length; + var bytes = []; + for (var i = 0; i < length; i += 2) { + bytes.push((buffer[i + 1] << 8) | buffer[i]); + } + return bytes; + }; + var polyUint32Array = function (buffer) { + var length = buffer.length; + var bytes = []; + for (var i = 0; i < length; i += 4) { + bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]); + } + return bytes; + }; + + /** Shift size for getting the index-2 table offset. */ + var UTRIE2_SHIFT_2 = 5; + /** Shift size for getting the index-1 table offset. */ + var UTRIE2_SHIFT_1 = 6 + 5; + /** + * Shift size for shifting left the index array values. + * Increases possible data size with 16-bit index values at the cost + * of compactability. + * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY. + */ + var UTRIE2_INDEX_SHIFT = 2; + /** + * Difference between the two shift sizes, + * for getting an index-1 offset from an index-2 offset. 6=11-5 + */ + var UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2; + /** + * The part of the index-2 table for U+D800..U+DBFF stores values for + * lead surrogate code _units_ not code _points_. + * Values for lead surrogate code _points_ are indexed with this portion of the table. + * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.) + */ + var UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2; + /** Number of entries in a data block. 32=0x20 */ + var UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2; + /** Mask for getting the lower bits for the in-data-block offset. */ + var UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1; + var UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2; + /** Count the lengths of both BMP pieces. 2080=0x820 */ + var UTRIE2_INDEX_2_BMP_LENGTH = UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH; + /** + * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820. + * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2. + */ + var UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH; + var UTRIE2_UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */ + /** + * The index-1 table, only used for supplementary code points, at offset 2112=0x840. + * Variable length, for code points up to highStart, where the last single-value range starts. + * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1. + * (For 0x100000 supplementary code points U+10000..U+10ffff.) + * + * The part of the index-2 table for supplementary code points starts + * after this index-1 table. + * + * Both the index-1 table and the following part of the index-2 table + * are omitted completely if there is only BMP data. + */ + var UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH; + /** + * Number of index-1 entries for the BMP. 32=0x20 + * This part of the index-1 table is omitted from the serialized form. + */ + var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1; + /** Number of entries in an index-2 block. 64=0x40 */ + var UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2; + /** Mask for getting the lower bits for the in-index-2-block offset. */ + var UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1; + var slice16 = function (view, start, end) { + if (view.slice) { + return view.slice(start, end); + } + return new Uint16Array(Array.prototype.slice.call(view, start, end)); + }; + var slice32 = function (view, start, end) { + if (view.slice) { + return view.slice(start, end); + } + return new Uint32Array(Array.prototype.slice.call(view, start, end)); + }; + var createTrieFromBase64 = function (base64) { + var buffer = decode(base64); + var view32 = Array.isArray(buffer) ? polyUint32Array(buffer) : new Uint32Array(buffer); + var view16 = Array.isArray(buffer) ? polyUint16Array(buffer) : new Uint16Array(buffer); + var headerLength = 24; + var index = slice16(view16, headerLength / 2, view32[4] / 2); + var data = view32[5] === 2 + ? slice16(view16, (headerLength + view32[4]) / 2) + : slice32(view32, Math.ceil((headerLength + view32[4]) / 4)); + return new Trie(view32[0], view32[1], view32[2], view32[3], index, data); + }; + var Trie = /** @class */ (function () { + function Trie(initialValue, errorValue, highStart, highValueIndex, index, data) { + this.initialValue = initialValue; + this.errorValue = errorValue; + this.highStart = highStart; + this.highValueIndex = highValueIndex; + this.index = index; + this.data = data; + } + /** + * Get the value for a code point as stored in the Trie. + * + * @param codePoint the code point + * @return the value + */ + Trie.prototype.get = function (codePoint) { + var ix; + if (codePoint >= 0) { + if (codePoint < 0x0d800 || (codePoint > 0x0dbff && codePoint <= 0x0ffff)) { + // Ordinary BMP code point, excluding leading surrogates. + // BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index. + // 16 bit data is stored in the index array itself. + ix = this.index[codePoint >> UTRIE2_SHIFT_2]; + ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK); + return this.data[ix]; + } + if (codePoint <= 0xffff) { + // Lead Surrogate Code Point. A Separate index section is stored for + // lead surrogate code units and code points. + // The main index has the code unit data. + // For this function, we need the code point data. + // Note: this expression could be refactored for slightly improved efficiency, but + // surrogate code points will be so rare in practice that it's not worth it. + ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2)]; + ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK); + return this.data[ix]; + } + if (codePoint < this.highStart) { + // Supplemental code point, use two-level lookup. + ix = UTRIE2_INDEX_1_OFFSET - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> UTRIE2_SHIFT_1); + ix = this.index[ix]; + ix += (codePoint >> UTRIE2_SHIFT_2) & UTRIE2_INDEX_2_MASK; + ix = this.index[ix]; + ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK); + return this.data[ix]; + } + if (codePoint <= 0x10ffff) { + return this.data[this.highValueIndex]; + } + } + // Fall through. The code point is outside of the legal range of 0..0x10ffff. + return this.errorValue; + }; + return Trie; + }()); + + var base64 = 'KwAAAAAAAAAACA4AIDoAAPAfAAACAAAAAAAIABAAGABAAEgAUABYAF4AZgBeAGYAYABoAHAAeABeAGYAfACEAIAAiACQAJgAoACoAK0AtQC9AMUAXgBmAF4AZgBeAGYAzQDVAF4AZgDRANkA3gDmAOwA9AD8AAQBDAEUARoBIgGAAIgAJwEvATcBPwFFAU0BTAFUAVwBZAFsAXMBewGDATAAiwGTAZsBogGkAawBtAG8AcIBygHSAdoB4AHoAfAB+AH+AQYCDgIWAv4BHgImAi4CNgI+AkUCTQJTAlsCYwJrAnECeQKBAk0CiQKRApkCoQKoArACuALAAsQCzAIwANQC3ALkAjAA7AL0AvwCAQMJAxADGAMwACADJgMuAzYDPgOAAEYDSgNSA1IDUgNaA1oDYANiA2IDgACAAGoDgAByA3YDfgOAAIQDgACKA5IDmgOAAIAAogOqA4AAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAK8DtwOAAIAAvwPHA88D1wPfAyAD5wPsA/QD/AOAAIAABAQMBBIEgAAWBB4EJgQuBDMEIAM7BEEEXgBJBCADUQRZBGEEaQQwADAAcQQ+AXkEgQSJBJEEgACYBIAAoASoBK8EtwQwAL8ExQSAAIAAgACAAIAAgACgAM0EXgBeAF4AXgBeAF4AXgBeANUEXgDZBOEEXgDpBPEE+QQBBQkFEQUZBSEFKQUxBTUFPQVFBUwFVAVcBV4AYwVeAGsFcwV7BYMFiwWSBV4AmgWgBacFXgBeAF4AXgBeAKsFXgCyBbEFugW7BcIFwgXIBcIFwgXQBdQF3AXkBesF8wX7BQMGCwYTBhsGIwYrBjMGOwZeAD8GRwZNBl4AVAZbBl4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAGMGXgBqBnEGXgBeAF4AXgBeAF4AXgBeAF4AXgB5BoAG4wSGBo4GkwaAAIADHgR5AF4AXgBeAJsGgABGA4AAowarBrMGswagALsGwwbLBjAA0wbaBtoG3QbaBtoG2gbaBtoG2gblBusG8wb7BgMHCwcTBxsHCwcjBysHMAc1BzUHOgdCB9oGSgdSB1oHYAfaBloHaAfaBlIH2gbaBtoG2gbaBtoG2gbaBjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHbQdeAF4ANQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQd1B30HNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B4MH2gaKB68EgACAAIAAgACAAIAAgACAAI8HlwdeAJ8HpweAAIAArwe3B14AXgC/B8UHygcwANAH2AfgB4AA6AfwBz4B+AcACFwBCAgPCBcIogEYAR8IJwiAAC8INwg/CCADRwhPCFcIXwhnCEoDGgSAAIAAgABvCHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIhAiLCI4IMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAANQc1BzUHNQc1BzUHNQc1BzUHNQc1B54INQc1B6II2gaqCLIIugiAAIAAvgjGCIAAgACAAIAAgACAAIAAgACAAIAAywiHAYAA0wiAANkI3QjlCO0I9Aj8CIAAgACAAAIJCgkSCRoJIgknCTYHLwk3CZYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiAAIAAAAFAAXgBeAGAAcABeAHwAQACQAKAArQC9AJ4AXgBeAE0A3gBRAN4A7AD8AMwBGgEAAKcBNwEFAUwBXAF4QkhCmEKnArcCgAHHAsABz4LAAcABwAHAAd+C6ABoAG+C/4LAAcABwAHAAc+DF4MAAcAB54M3gweDV4Nng3eDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEeDqABVg6WDqABoQ6gAaABoAHXDvcONw/3DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DncPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB7cPPwlGCU4JMACAAIAAgABWCV4JYQmAAGkJcAl4CXwJgAkwADAAMAAwAIgJgACLCZMJgACZCZ8JowmrCYAAswkwAF4AXgB8AIAAuwkABMMJyQmAAM4JgADVCTAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAqwYWBNkIMAAwADAAMADdCeAJ6AnuCR4E9gkwAP4JBQoNCjAAMACAABUK0wiAAB0KJAosCjQKgAAwADwKQwqAAEsKvQmdCVMKWwowADAAgACAALcEMACAAGMKgABrCjAAMAAwADAAMAAwADAAMAAwADAAMAAeBDAAMAAwADAAMAAwADAAMAAwADAAMAAwAIkEPQFzCnoKiQSCCooKkAqJBJgKoAqkCokEGAGsCrQKvArBCjAAMADJCtEKFQHZCuEK/gHpCvEKMAAwADAAMACAAIwE+QowAIAAPwEBCzAAMAAwADAAMACAAAkLEQswAIAAPwEZCyELgAAOCCkLMAAxCzkLMAAwADAAMAAwADAAXgBeAEELMAAwADAAMAAwADAAMAAwAEkLTQtVC4AAXAtkC4AAiQkwADAAMAAwADAAMAAwADAAbAtxC3kLgAuFC4sLMAAwAJMLlwufCzAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAApwswADAAMACAAIAAgACvC4AAgACAAIAAgACAALcLMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAvwuAAMcLgACAAIAAgACAAIAAyguAAIAAgACAAIAA0QswADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAANkLgACAAIAA4AswADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACJCR4E6AswADAAhwHwC4AA+AsADAgMEAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMACAAIAAGAwdDCUMMAAwAC0MNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQw1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHPQwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADUHNQc1BzUHNQc1BzUHNQc2BzAAMAA5DDUHNQc1BzUHNQc1BzUHNQc1BzUHNQdFDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAATQxSDFoMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAF4AXgBeAF4AXgBeAF4AYgxeAGoMXgBxDHkMfwxeAIUMXgBeAI0MMAAwADAAMAAwAF4AXgCVDJ0MMAAwADAAMABeAF4ApQxeAKsMswy7DF4Awgy9DMoMXgBeAF4AXgBeAF4AXgBeAF4AXgDRDNkMeQBqCeAM3Ax8AOYM7Az0DPgMXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgCgAAANoAAHDQ4NFg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAeDSYNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAC4NMABeAF4ANg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAD4NRg1ODVYNXg1mDTAAbQ0wADAAMAAwADAAMAAwADAA2gbaBtoG2gbaBtoG2gbaBnUNeg3CBYANwgWFDdoGjA3aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gaUDZwNpA2oDdoG2gawDbcNvw3HDdoG2gbPDdYN3A3fDeYN2gbsDfMN2gbaBvoN/g3aBgYODg7aBl4AXgBeABYOXgBeACUG2gYeDl4AJA5eACwO2w3aBtoGMQ45DtoG2gbaBtoGQQ7aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B1EO2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQdZDjUHNQc1BzUHNQc1B2EONQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHaA41BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B3AO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B2EO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBkkOeA6gAKAAoAAwADAAMAAwAKAAoACgAKAAoACgAKAAgA4wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAD//wQABAAEAAQABAAEAAQABAAEAA0AAwABAAEAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAKABMAFwAeABsAGgAeABcAFgASAB4AGwAYAA8AGAAcAEsASwBLAEsASwBLAEsASwBLAEsAGAAYAB4AHgAeABMAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAFgAbABIAHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYADQARAB4ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkAFgAaABsAGwAbAB4AHQAdAB4ATwAXAB4ADQAeAB4AGgAbAE8ATwAOAFAAHQAdAB0ATwBPABcATwBPAE8AFgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwArAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAAQABAANAA0ASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAUAArACsAKwArACsAKwArACsABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAGgAaAFAAUABQAFAAUABMAB4AGwBQAB4AKwArACsABAAEAAQAKwBQAFAAUABQAFAAUAArACsAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUAArAFAAUAArACsABAArAAQABAAEAAQABAArACsAKwArAAQABAArACsABAAEAAQAKwArACsABAArACsAKwArACsAKwArAFAAUABQAFAAKwBQACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwAEAAQAUABQAFAABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQAKwArAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeABsAKwArACsAKwArACsAKwBQAAQABAAEAAQABAAEACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAKwArACsAKwArACsAKwArAAQABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwAEAFAAKwBQAFAAUABQAFAAUAArACsAKwBQAFAAUAArAFAAUABQAFAAKwArACsAUABQACsAUAArAFAAUAArACsAKwBQAFAAKwArACsAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQAKwArACsABAAEAAQAKwAEAAQABAAEACsAKwBQACsAKwArACsAKwArAAQAKwArACsAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAB4AHgAeAB4AHgAeABsAHgArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArAFAAUABQACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAB4AUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArACsAKwArACsAKwArAFAAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwArAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAKwBcAFwAKwBcACsAKwBcACsAKwArACsAKwArAFwAXABcAFwAKwBcAFwAXABcAFwAXABcACsAXABcAFwAKwBcACsAXAArACsAXABcACsAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgArACoAKgBcACsAKwBcAFwAXABcAFwAKwBcACsAKgAqACoAKgAqACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAFwAXABcAFwAUAAOAA4ADgAOAB4ADgAOAAkADgAOAA0ACQATABMAEwATABMACQAeABMAHgAeAB4ABAAEAB4AHgAeAB4AHgAeAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUAANAAQAHgAEAB4ABAAWABEAFgARAAQABABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAAQABAAEAAQABAANAAQABABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsADQANAB4AHgAeAB4AHgAeAAQAHgAeAB4AHgAeAB4AKwAeAB4ADgAOAA0ADgAeAB4AHgAeAB4ACQAJACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgAeAB4AHgBcAFwAXABcAFwAXAAqACoAKgAqAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAKgAqACoAKgAqACoAKgBcAFwAXAAqACoAKgAqAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAXAAqAEsASwBLAEsASwBLAEsASwBLAEsAKgAqACoAKgAqACoAUABQAFAAUABQAFAAKwBQACsAKwArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQACsAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwAEAAQABAAeAA0AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAEQArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAADQANAA0AUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAA0ADQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoADQANABUAXAANAB4ADQAbAFwAKgArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAB4AHgATABMADQANAA4AHgATABMAHgAEAAQABAAJACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAUABQAFAAUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwAeACsAKwArABMAEwBLAEsASwBLAEsASwBLAEsASwBLAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwBcAFwAXABcAFwAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcACsAKwArACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwAeAB4AXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsABABLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKgAqACoAKgAqACoAKgBcACoAKgAqACoAKgAqACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAUABQAFAAUABQAFAAUAArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4ADQANAA0ADQAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAHgAeAB4AHgBQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwANAA0ADQANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwBQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsABAAEAAQAHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAABABQAFAAUABQAAQABAAEAFAAUAAEAAQABAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAKwBQACsAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAKwArAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAKwAeAB4AHgAeAB4AHgAeAA4AHgArAA0ADQANAA0ADQANAA0ACQANAA0ADQAIAAQACwAEAAQADQAJAA0ADQAMAB0AHQAeABcAFwAWABcAFwAXABYAFwAdAB0AHgAeABQAFAAUAA0AAQABAAQABAAEAAQABAAJABoAGgAaABoAGgAaABoAGgAeABcAFwAdABUAFQAeAB4AHgAeAB4AHgAYABYAEQAVABUAFQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgANAB4ADQANAA0ADQAeAA0ADQANAAcAHgAeAB4AHgArAAQABAAEAAQABAAEAAQABAAEAAQAUABQACsAKwBPAFAAUABQAFAAUAAeAB4AHgAWABEATwBQAE8ATwBPAE8AUABQAFAAUABQAB4AHgAeABYAEQArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGgAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgBQABoAHgAdAB4AUAAeABoAHgAeAB4AHgAeAB4AHgAeAB4ATwAeAFAAGwAeAB4AUABQAFAAUABQAB4AHgAeAB0AHQAeAFAAHgBQAB4AUAAeAFAATwBQAFAAHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AUABQAFAAUABPAE8AUABQAFAAUABQAE8AUABQAE8AUABPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAE8ATwBPAE8ATwBPAE8ATwBPAE8AUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAATwAeAB4AKwArACsAKwAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB0AHQAeAB4AHgAdAB0AHgAeAB0AHgAeAB4AHQAeAB0AGwAbAB4AHQAeAB4AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB0AHgAdAB4AHQAdAB0AHQAdAB0AHgAdAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAdAB0AHQAdAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAlACUAHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB0AHQAeAB4AHgAeAB0AHQAdAB4AHgAdAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB0AHQAeAB4AHQAeAB4AHgAeAB0AHQAeAB4AHgAeACUAJQAdAB0AJQAeACUAJQAlACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHQAdAB0AHgAdACUAHQAdAB4AHQAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHQAdAB0AHQAlAB4AJQAlACUAHQAlACUAHQAdAB0AJQAlAB0AHQAlAB0AHQAlACUAJQAeAB0AHgAeAB4AHgAdAB0AJQAdAB0AHQAdAB0AHQAlACUAJQAlACUAHQAlACUAIAAlAB0AHQAlACUAJQAlACUAJQAlACUAHgAeAB4AJQAlACAAIAAgACAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeABcAFwAXABcAFwAXAB4AEwATACUAHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACUAJQBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwArACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAE8ATwBPAE8ATwBPAE8ATwAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeACsAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUAArACsAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQBQAFAAUABQACsAKwArACsAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAABAAEAAQAKwAEAAQAKwArACsAKwArAAQABAAEAAQAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsABAAEAAQAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsADQANAA0ADQANAA0ADQANAB4AKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAUABQAFAAUABQAA0ADQANAA0ADQANABQAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwANAA0ADQANAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAeAAQABAAEAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLACsADQArAB4AKwArAAQABAAEAAQAUABQAB4AUAArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwAEAAQABAAEAAQABAAEAAQABAAOAA0ADQATABMAHgAeAB4ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0AUABQAFAAUAAEAAQAKwArAAQADQANAB4AUAArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXABcAA0ADQANACoASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUAArACsAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANACsADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEcARwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwAeAAQABAANAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAEAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUAArACsAUAArACsAUABQACsAKwBQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAeAB4ADQANAA0ADQAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAArAAQABAArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAEAAQABAAEAAQABAAEACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAFgAWAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAKwBQACsAKwArACsAKwArAFAAKwArACsAKwBQACsAUAArAFAAKwBQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQACsAUAArAFAAKwBQACsAUABQACsAUAArACsAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAUABQAFAAUAArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUAArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAlACUAJQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeACUAJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeACUAJQAlACUAJQAeACUAJQAlACUAJQAgACAAIAAlACUAIAAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIQAhACEAIQAhACUAJQAgACAAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAIAAlACUAJQAlACAAJQAgACAAIAAgACAAIAAgACAAIAAlACUAJQAgACUAJQAlACUAIAAgACAAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeACUAHgAlAB4AJQAlACUAJQAlACAAJQAlACUAJQAeACUAHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAIAAgACAAIAAgAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFwAXABcAFQAVABUAHgAeAB4AHgAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAlACAAIAAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsA'; + + /* @flow */ + var LETTER_NUMBER_MODIFIER = 50; + // Non-tailorable Line Breaking Classes + var BK = 1; // Cause a line break (after) + var CR = 2; // Cause a line break (after), except between CR and LF + var LF = 3; // Cause a line break (after) + var CM = 4; // Prohibit a line break between the character and the preceding character + var NL = 5; // Cause a line break (after) + var WJ = 7; // Prohibit line breaks before and after + var ZW = 8; // Provide a break opportunity + var GL = 9; // Prohibit line breaks before and after + var SP = 10; // Enable indirect line breaks + var ZWJ = 11; // Prohibit line breaks within joiner sequences + // Break Opportunities + var B2 = 12; // Provide a line break opportunity before and after the character + var BA = 13; // Generally provide a line break opportunity after the character + var BB = 14; // Generally provide a line break opportunity before the character + var HY = 15; // Provide a line break opportunity after the character, except in numeric context + var CB = 16; // Provide a line break opportunity contingent on additional information + // Characters Prohibiting Certain Breaks + var CL = 17; // Prohibit line breaks before + var CP = 18; // Prohibit line breaks before + var EX = 19; // Prohibit line breaks before + var IN = 20; // Allow only indirect line breaks between pairs + var NS = 21; // Allow only indirect line breaks before + var OP = 22; // Prohibit line breaks after + var QU = 23; // Act like they are both opening and closing + // Numeric Context + var IS = 24; // Prevent breaks after any and before numeric + var NU = 25; // Form numeric expressions for line breaking purposes + var PO = 26; // Do not break following a numeric expression + var PR = 27; // Do not break in front of a numeric expression + var SY = 28; // Prevent a break before; and allow a break after + // Other Characters + var AI = 29; // Act like AL when the resolvedEAW is N; otherwise; act as ID + var AL = 30; // Are alphabetic characters or symbols that are used with alphabetic characters + var CJ = 31; // Treat as NS or ID for strict or normal breaking. + var EB = 32; // Do not break from following Emoji Modifier + var EM = 33; // Do not break from preceding Emoji Base + var H2 = 34; // Form Korean syllable blocks + var H3 = 35; // Form Korean syllable blocks + var HL = 36; // Do not break around a following hyphen; otherwise act as Alphabetic + var ID = 37; // Break before or after; except in some numeric context + var JL = 38; // Form Korean syllable blocks + var JV = 39; // Form Korean syllable blocks + var JT = 40; // Form Korean syllable blocks + var RI = 41; // Keep pairs together. For pairs; break before and after other classes + var SA = 42; // Provide a line break opportunity contingent on additional, language-specific context analysis + var XX = 43; // Have as yet unknown line breaking behavior or unassigned code positions + var BREAK_MANDATORY = '!'; + var BREAK_NOT_ALLOWED = '×'; + var BREAK_ALLOWED = '÷'; + var UnicodeTrie = createTrieFromBase64(base64); + var ALPHABETICS = [AL, HL]; + var HARD_LINE_BREAKS = [BK, CR, LF, NL]; + var SPACE = [SP, ZW]; + var PREFIX_POSTFIX = [PR, PO]; + var LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE); + var KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3]; + var HYPHEN = [HY, BA]; + var codePointsToCharacterClasses = function (codePoints, lineBreak) { + if (lineBreak === void 0) { lineBreak = 'strict'; } + var types = []; + var indicies = []; + var categories = []; + codePoints.forEach(function (codePoint, index) { + var classType = UnicodeTrie.get(codePoint); + if (classType > LETTER_NUMBER_MODIFIER) { + categories.push(true); + classType -= LETTER_NUMBER_MODIFIER; + } + else { + categories.push(false); + } + if (['normal', 'auto', 'loose'].indexOf(lineBreak) !== -1) { + // U+2010, – U+2013, 〜 U+301C, ゠ U+30A0 + if ([0x2010, 0x2013, 0x301c, 0x30a0].indexOf(codePoint) !== -1) { + indicies.push(index); + return types.push(CB); + } + } + if (classType === CM || classType === ZWJ) { + // LB10 Treat any remaining combining mark or ZWJ as AL. + if (index === 0) { + indicies.push(index); + return types.push(AL); + } + // LB9 Do not break a combining character sequence; treat it as if it has the line breaking class of + // the base character in all of the following rules. Treat ZWJ as if it were CM. + var prev = types[index - 1]; + if (LINE_BREAKS.indexOf(prev) === -1) { + indicies.push(indicies[index - 1]); + return types.push(prev); + } + indicies.push(index); + return types.push(AL); + } + indicies.push(index); + if (classType === CJ) { + return types.push(lineBreak === 'strict' ? NS : ID); + } + if (classType === SA) { + return types.push(AL); + } + if (classType === AI) { + return types.push(AL); + } + // For supplementary characters, a useful default is to treat characters in the range 10000..1FFFD as AL + // and characters in the ranges 20000..2FFFD and 30000..3FFFD as ID, until the implementation can be revised + // to take into account the actual line breaking properties for these characters. + if (classType === XX) { + if ((codePoint >= 0x20000 && codePoint <= 0x2fffd) || (codePoint >= 0x30000 && codePoint <= 0x3fffd)) { + return types.push(ID); + } + else { + return types.push(AL); + } + } + types.push(classType); + }); + return [indicies, types, categories]; + }; + var isAdjacentWithSpaceIgnored = function (a, b, currentIndex, classTypes) { + var current = classTypes[currentIndex]; + if (Array.isArray(a) ? a.indexOf(current) !== -1 : a === current) { + var i = currentIndex; + while (i <= classTypes.length) { + i++; + var next = classTypes[i]; + if (next === b) { + return true; + } + if (next !== SP) { + break; + } + } + } + if (current === SP) { + var i = currentIndex; + while (i > 0) { + i--; + var prev = classTypes[i]; + if (Array.isArray(a) ? a.indexOf(prev) !== -1 : a === prev) { + var n = currentIndex; + while (n <= classTypes.length) { + n++; + var next = classTypes[n]; + if (next === b) { + return true; + } + if (next !== SP) { + break; + } + } + } + if (prev !== SP) { + break; + } + } + } + return false; + }; + var previousNonSpaceClassType = function (currentIndex, classTypes) { + var i = currentIndex; + while (i >= 0) { + var type = classTypes[i]; + if (type === SP) { + i--; + } + else { + return type; + } + } + return 0; + }; + var _lineBreakAtIndex = function (codePoints, classTypes, indicies, index, forbiddenBreaks) { + if (indicies[index] === 0) { + return BREAK_NOT_ALLOWED; + } + var currentIndex = index - 1; + if (Array.isArray(forbiddenBreaks) && forbiddenBreaks[currentIndex] === true) { + return BREAK_NOT_ALLOWED; + } + var beforeIndex = currentIndex - 1; + var afterIndex = currentIndex + 1; + var current = classTypes[currentIndex]; + // LB4 Always break after hard line breaks. + // LB5 Treat CR followed by LF, as well as CR, LF, and NL as hard line breaks. + var before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0; + var next = classTypes[afterIndex]; + if (current === CR && next === LF) { + return BREAK_NOT_ALLOWED; + } + if (HARD_LINE_BREAKS.indexOf(current) !== -1) { + return BREAK_MANDATORY; + } + // LB6 Do not break before hard line breaks. + if (HARD_LINE_BREAKS.indexOf(next) !== -1) { + return BREAK_NOT_ALLOWED; + } + // LB7 Do not break before spaces or zero width space. + if (SPACE.indexOf(next) !== -1) { + return BREAK_NOT_ALLOWED; + } + // LB8 Break before any character following a zero-width space, even if one or more spaces intervene. + if (previousNonSpaceClassType(currentIndex, classTypes) === ZW) { + return BREAK_ALLOWED; + } + // LB8a Do not break between a zero width joiner and an ideograph, emoji base or emoji modifier. + if (UnicodeTrie.get(codePoints[currentIndex]) === ZWJ && (next === ID || next === EB || next === EM)) { + return BREAK_NOT_ALLOWED; + } + // LB11 Do not break before or after Word joiner and related characters. + if (current === WJ || next === WJ) { + return BREAK_NOT_ALLOWED; + } + // LB12 Do not break after NBSP and related characters. + if (current === GL) { + return BREAK_NOT_ALLOWED; + } + // LB12a Do not break before NBSP and related characters, except after spaces and hyphens. + if ([SP, BA, HY].indexOf(current) === -1 && next === GL) { + return BREAK_NOT_ALLOWED; + } + // LB13 Do not break before ‘]’ or ‘!’ or ‘;’ or ‘/’, even after spaces. + if ([CL, CP, EX, IS, SY].indexOf(next) !== -1) { + return BREAK_NOT_ALLOWED; + } + // LB14 Do not break after ‘[’, even after spaces. + if (previousNonSpaceClassType(currentIndex, classTypes) === OP) { + return BREAK_NOT_ALLOWED; + } + // LB15 Do not break within ‘”[’, even with intervening spaces. + if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) { + return BREAK_NOT_ALLOWED; + } + // LB16 Do not break between closing punctuation and a nonstarter (lb=NS), even with intervening spaces. + if (isAdjacentWithSpaceIgnored([CL, CP], NS, currentIndex, classTypes)) { + return BREAK_NOT_ALLOWED; + } + // LB17 Do not break within ‘——’, even with intervening spaces. + if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) { + return BREAK_NOT_ALLOWED; + } + // LB18 Break after spaces. + if (current === SP) { + return BREAK_ALLOWED; + } + // LB19 Do not break before or after quotation marks, such as ‘ ” ’. + if (current === QU || next === QU) { + return BREAK_NOT_ALLOWED; + } + // LB20 Break before and after unresolved CB. + if (next === CB || current === CB) { + return BREAK_ALLOWED; + } + // LB21 Do not break before hyphen-minus, other hyphens, fixed-width spaces, small kana, and other non-starters, or after acute accents. + if ([BA, HY, NS].indexOf(next) !== -1 || current === BB) { + return BREAK_NOT_ALLOWED; + } + // LB21a Don't break after Hebrew + Hyphen. + if (before === HL && HYPHEN.indexOf(current) !== -1) { + return BREAK_NOT_ALLOWED; + } + // LB21b Don’t break between Solidus and Hebrew letters. + if (current === SY && next === HL) { + return BREAK_NOT_ALLOWED; + } + // LB22 Do not break between two ellipses, or between letters, numbers or exclamations and ellipsis. + if (next === IN && ALPHABETICS.concat(IN, EX, NU, ID, EB, EM).indexOf(current) !== -1) { + return BREAK_NOT_ALLOWED; + } + // LB23 Do not break between digits and letters. + if ((ALPHABETICS.indexOf(next) !== -1 && current === NU) || (ALPHABETICS.indexOf(current) !== -1 && next === NU)) { + return BREAK_NOT_ALLOWED; + } + // LB23a Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes. + if ((current === PR && [ID, EB, EM].indexOf(next) !== -1) || + ([ID, EB, EM].indexOf(current) !== -1 && next === PO)) { + return BREAK_NOT_ALLOWED; + } + // LB24 Do not break between numeric prefix/postfix and letters, or between letters and prefix/postfix. + if ((ALPHABETICS.indexOf(current) !== -1 && PREFIX_POSTFIX.indexOf(next) !== -1) || + (PREFIX_POSTFIX.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1)) { + return BREAK_NOT_ALLOWED; + } + // LB25 Do not break between the following pairs of classes relevant to numbers: + if ( + // (PR | PO) × ( OP | HY )? NU + ([PR, PO].indexOf(current) !== -1 && + (next === NU || ([OP, HY].indexOf(next) !== -1 && classTypes[afterIndex + 1] === NU))) || + // ( OP | HY ) × NU + ([OP, HY].indexOf(current) !== -1 && next === NU) || + // NU × (NU | SY | IS) + (current === NU && [NU, SY, IS].indexOf(next) !== -1)) { + return BREAK_NOT_ALLOWED; + } + // NU (NU | SY | IS)* × (NU | SY | IS | CL | CP) + if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) { + var prevIndex = currentIndex; + while (prevIndex >= 0) { + var type = classTypes[prevIndex]; + if (type === NU) { + return BREAK_NOT_ALLOWED; + } + else if ([SY, IS].indexOf(type) !== -1) { + prevIndex--; + } + else { + break; + } + } + } + // NU (NU | SY | IS)* (CL | CP)? × (PO | PR)) + if ([PR, PO].indexOf(next) !== -1) { + var prevIndex = [CL, CP].indexOf(current) !== -1 ? beforeIndex : currentIndex; + while (prevIndex >= 0) { + var type = classTypes[prevIndex]; + if (type === NU) { + return BREAK_NOT_ALLOWED; + } + else if ([SY, IS].indexOf(type) !== -1) { + prevIndex--; + } + else { + break; + } + } + } + // LB26 Do not break a Korean syllable. + if ((JL === current && [JL, JV, H2, H3].indexOf(next) !== -1) || + ([JV, H2].indexOf(current) !== -1 && [JV, JT].indexOf(next) !== -1) || + ([JT, H3].indexOf(current) !== -1 && next === JT)) { + return BREAK_NOT_ALLOWED; + } + // LB27 Treat a Korean Syllable Block the same as ID. + if ((KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 && [IN, PO].indexOf(next) !== -1) || + (KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR)) { + return BREAK_NOT_ALLOWED; + } + // LB28 Do not break between alphabetics (“at”). + if (ALPHABETICS.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) { + return BREAK_NOT_ALLOWED; + } + // LB29 Do not break between numeric punctuation and alphabetics (“e.g.”). + if (current === IS && ALPHABETICS.indexOf(next) !== -1) { + return BREAK_NOT_ALLOWED; + } + // LB30 Do not break between letters, numbers, or ordinary symbols and opening or closing parentheses. + if ((ALPHABETICS.concat(NU).indexOf(current) !== -1 && next === OP) || + (ALPHABETICS.concat(NU).indexOf(next) !== -1 && current === CP)) { + return BREAK_NOT_ALLOWED; + } + // LB30a Break between two regional indicator symbols if and only if there are an even number of regional + // indicators preceding the position of the break. + if (current === RI && next === RI) { + var i = indicies[currentIndex]; + var count = 1; + while (i > 0) { + i--; + if (classTypes[i] === RI) { + count++; + } + else { + break; + } + } + if (count % 2 !== 0) { + return BREAK_NOT_ALLOWED; + } + } + // LB30b Do not break between an emoji base and an emoji modifier. + if (current === EB && next === EM) { + return BREAK_NOT_ALLOWED; + } + return BREAK_ALLOWED; + }; + var cssFormattedClasses = function (codePoints, options) { + if (!options) { + options = { lineBreak: 'normal', wordBreak: 'normal' }; + } + var _a = codePointsToCharacterClasses(codePoints, options.lineBreak), indicies = _a[0], classTypes = _a[1], isLetterNumber = _a[2]; + if (options.wordBreak === 'break-all' || options.wordBreak === 'break-word') { + classTypes = classTypes.map(function (type) { return ([NU, AL, SA].indexOf(type) !== -1 ? ID : type); }); + } + var forbiddenBreakpoints = options.wordBreak === 'keep-all' + ? isLetterNumber.map(function (letterNumber, i) { + return letterNumber && codePoints[i] >= 0x4e00 && codePoints[i] <= 0x9fff; + }) + : undefined; + return [indicies, classTypes, forbiddenBreakpoints]; + }; + var Break = /** @class */ (function () { + function Break(codePoints, lineBreak, start, end) { + this.codePoints = codePoints; + this.required = lineBreak === BREAK_MANDATORY; + this.start = start; + this.end = end; + } + Break.prototype.slice = function () { + return fromCodePoint.apply(void 0, this.codePoints.slice(this.start, this.end)); + }; + return Break; + }()); + var LineBreaker = function (str, options) { + var codePoints = toCodePoints(str); + var _a = cssFormattedClasses(codePoints, options), indicies = _a[0], classTypes = _a[1], forbiddenBreakpoints = _a[2]; + var length = codePoints.length; + var lastEnd = 0; + var nextIndex = 0; + return { + next: function () { + if (nextIndex >= length) { + return { done: true, value: null }; + } + var lineBreak = BREAK_NOT_ALLOWED; + while (nextIndex < length && + (lineBreak = _lineBreakAtIndex(codePoints, classTypes, indicies, ++nextIndex, forbiddenBreakpoints)) === + BREAK_NOT_ALLOWED) { } + if (lineBreak !== BREAK_NOT_ALLOWED || nextIndex === length) { + var value = new Break(codePoints, lineBreak, lastEnd, nextIndex); + lastEnd = nextIndex; + return { value: value, done: false }; + } + return { done: true, value: null }; + }, + }; + }; + + // https://www.w3.org/TR/css-syntax-3 + var TokenType; + (function (TokenType) { + TokenType[TokenType["STRING_TOKEN"] = 0] = "STRING_TOKEN"; + TokenType[TokenType["BAD_STRING_TOKEN"] = 1] = "BAD_STRING_TOKEN"; + TokenType[TokenType["LEFT_PARENTHESIS_TOKEN"] = 2] = "LEFT_PARENTHESIS_TOKEN"; + TokenType[TokenType["RIGHT_PARENTHESIS_TOKEN"] = 3] = "RIGHT_PARENTHESIS_TOKEN"; + TokenType[TokenType["COMMA_TOKEN"] = 4] = "COMMA_TOKEN"; + TokenType[TokenType["HASH_TOKEN"] = 5] = "HASH_TOKEN"; + TokenType[TokenType["DELIM_TOKEN"] = 6] = "DELIM_TOKEN"; + TokenType[TokenType["AT_KEYWORD_TOKEN"] = 7] = "AT_KEYWORD_TOKEN"; + TokenType[TokenType["PREFIX_MATCH_TOKEN"] = 8] = "PREFIX_MATCH_TOKEN"; + TokenType[TokenType["DASH_MATCH_TOKEN"] = 9] = "DASH_MATCH_TOKEN"; + TokenType[TokenType["INCLUDE_MATCH_TOKEN"] = 10] = "INCLUDE_MATCH_TOKEN"; + TokenType[TokenType["LEFT_CURLY_BRACKET_TOKEN"] = 11] = "LEFT_CURLY_BRACKET_TOKEN"; + TokenType[TokenType["RIGHT_CURLY_BRACKET_TOKEN"] = 12] = "RIGHT_CURLY_BRACKET_TOKEN"; + TokenType[TokenType["SUFFIX_MATCH_TOKEN"] = 13] = "SUFFIX_MATCH_TOKEN"; + TokenType[TokenType["SUBSTRING_MATCH_TOKEN"] = 14] = "SUBSTRING_MATCH_TOKEN"; + TokenType[TokenType["DIMENSION_TOKEN"] = 15] = "DIMENSION_TOKEN"; + TokenType[TokenType["PERCENTAGE_TOKEN"] = 16] = "PERCENTAGE_TOKEN"; + TokenType[TokenType["NUMBER_TOKEN"] = 17] = "NUMBER_TOKEN"; + TokenType[TokenType["FUNCTION"] = 18] = "FUNCTION"; + TokenType[TokenType["FUNCTION_TOKEN"] = 19] = "FUNCTION_TOKEN"; + TokenType[TokenType["IDENT_TOKEN"] = 20] = "IDENT_TOKEN"; + TokenType[TokenType["COLUMN_TOKEN"] = 21] = "COLUMN_TOKEN"; + TokenType[TokenType["URL_TOKEN"] = 22] = "URL_TOKEN"; + TokenType[TokenType["BAD_URL_TOKEN"] = 23] = "BAD_URL_TOKEN"; + TokenType[TokenType["CDC_TOKEN"] = 24] = "CDC_TOKEN"; + TokenType[TokenType["CDO_TOKEN"] = 25] = "CDO_TOKEN"; + TokenType[TokenType["COLON_TOKEN"] = 26] = "COLON_TOKEN"; + TokenType[TokenType["SEMICOLON_TOKEN"] = 27] = "SEMICOLON_TOKEN"; + TokenType[TokenType["LEFT_SQUARE_BRACKET_TOKEN"] = 28] = "LEFT_SQUARE_BRACKET_TOKEN"; + TokenType[TokenType["RIGHT_SQUARE_BRACKET_TOKEN"] = 29] = "RIGHT_SQUARE_BRACKET_TOKEN"; + TokenType[TokenType["UNICODE_RANGE_TOKEN"] = 30] = "UNICODE_RANGE_TOKEN"; + TokenType[TokenType["WHITESPACE_TOKEN"] = 31] = "WHITESPACE_TOKEN"; + TokenType[TokenType["EOF_TOKEN"] = 32] = "EOF_TOKEN"; + })(TokenType || (TokenType = {})); + var FLAG_UNRESTRICTED = 1 << 0; + var FLAG_ID = 1 << 1; + var FLAG_INTEGER = 1 << 2; + var FLAG_NUMBER = 1 << 3; + var LINE_FEED = 0x000a; + var SOLIDUS = 0x002f; + var REVERSE_SOLIDUS = 0x005c; + var CHARACTER_TABULATION = 0x0009; + var SPACE$1 = 0x0020; + var QUOTATION_MARK = 0x0022; + var EQUALS_SIGN = 0x003d; + var NUMBER_SIGN = 0x0023; + var DOLLAR_SIGN = 0x0024; + var PERCENTAGE_SIGN = 0x0025; + var APOSTROPHE = 0x0027; + var LEFT_PARENTHESIS = 0x0028; + var RIGHT_PARENTHESIS = 0x0029; + var LOW_LINE = 0x005f; + var HYPHEN_MINUS = 0x002d; + var EXCLAMATION_MARK = 0x0021; + var LESS_THAN_SIGN = 0x003c; + var GREATER_THAN_SIGN = 0x003e; + var COMMERCIAL_AT = 0x0040; + var LEFT_SQUARE_BRACKET = 0x005b; + var RIGHT_SQUARE_BRACKET = 0x005d; + var CIRCUMFLEX_ACCENT = 0x003d; + var LEFT_CURLY_BRACKET = 0x007b; + var QUESTION_MARK = 0x003f; + var RIGHT_CURLY_BRACKET = 0x007d; + var VERTICAL_LINE = 0x007c; + var TILDE = 0x007e; + var CONTROL = 0x0080; + var REPLACEMENT_CHARACTER = 0xfffd; + var ASTERISK = 0x002a; + var PLUS_SIGN = 0x002b; + var COMMA = 0x002c; + var COLON = 0x003a; + var SEMICOLON = 0x003b; + var FULL_STOP = 0x002e; + var NULL = 0x0000; + var BACKSPACE = 0x0008; + var LINE_TABULATION = 0x000b; + var SHIFT_OUT = 0x000e; + var INFORMATION_SEPARATOR_ONE = 0x001f; + var DELETE = 0x007f; + var EOF = -1; + var ZERO = 0x0030; + var a = 0x0061; + var e = 0x0065; + var f = 0x0066; + var u = 0x0075; + var z = 0x007a; + var A = 0x0041; + var E = 0x0045; + var F = 0x0046; + var U = 0x0055; + var Z = 0x005a; + var isDigit = function (codePoint) { return codePoint >= ZERO && codePoint <= 0x0039; }; + var isSurrogateCodePoint = function (codePoint) { return codePoint >= 0xd800 && codePoint <= 0xdfff; }; + var isHex = function (codePoint) { + return isDigit(codePoint) || (codePoint >= A && codePoint <= F) || (codePoint >= a && codePoint <= f); + }; + var isLowerCaseLetter = function (codePoint) { return codePoint >= a && codePoint <= z; }; + var isUpperCaseLetter = function (codePoint) { return codePoint >= A && codePoint <= Z; }; + var isLetter = function (codePoint) { return isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint); }; + var isNonASCIICodePoint = function (codePoint) { return codePoint >= CONTROL; }; + var isWhiteSpace = function (codePoint) { + return codePoint === LINE_FEED || codePoint === CHARACTER_TABULATION || codePoint === SPACE$1; + }; + var isNameStartCodePoint = function (codePoint) { + return isLetter(codePoint) || isNonASCIICodePoint(codePoint) || codePoint === LOW_LINE; + }; + var isNameCodePoint = function (codePoint) { + return isNameStartCodePoint(codePoint) || isDigit(codePoint) || codePoint === HYPHEN_MINUS; + }; + var isNonPrintableCodePoint = function (codePoint) { + return ((codePoint >= NULL && codePoint <= BACKSPACE) || + codePoint === LINE_TABULATION || + (codePoint >= SHIFT_OUT && codePoint <= INFORMATION_SEPARATOR_ONE) || + codePoint === DELETE); + }; + var isValidEscape = function (c1, c2) { + if (c1 !== REVERSE_SOLIDUS) { + return false; + } + return c2 !== LINE_FEED; + }; + var isIdentifierStart = function (c1, c2, c3) { + if (c1 === HYPHEN_MINUS) { + return isNameStartCodePoint(c2) || isValidEscape(c2, c3); + } + else if (isNameStartCodePoint(c1)) { + return true; + } + else if (c1 === REVERSE_SOLIDUS && isValidEscape(c1, c2)) { + return true; + } + return false; + }; + var isNumberStart = function (c1, c2, c3) { + if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) { + if (isDigit(c2)) { + return true; + } + return c2 === FULL_STOP && isDigit(c3); + } + if (c1 === FULL_STOP) { + return isDigit(c2); + } + return isDigit(c1); + }; + var stringToNumber = function (codePoints) { + var c = 0; + var sign = 1; + if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) { + if (codePoints[c] === HYPHEN_MINUS) { + sign = -1; + } + c++; + } + var integers = []; + while (isDigit(codePoints[c])) { + integers.push(codePoints[c++]); + } + var int = integers.length ? parseInt(fromCodePoint.apply(void 0, integers), 10) : 0; + if (codePoints[c] === FULL_STOP) { + c++; + } + var fraction = []; + while (isDigit(codePoints[c])) { + fraction.push(codePoints[c++]); + } + var fracd = fraction.length; + var frac = fracd ? parseInt(fromCodePoint.apply(void 0, fraction), 10) : 0; + if (codePoints[c] === E || codePoints[c] === e) { + c++; + } + var expsign = 1; + if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) { + if (codePoints[c] === HYPHEN_MINUS) { + expsign = -1; + } + c++; + } + var exponent = []; + while (isDigit(codePoints[c])) { + exponent.push(codePoints[c++]); + } + var exp = exponent.length ? parseInt(fromCodePoint.apply(void 0, exponent), 10) : 0; + return sign * (int + frac * Math.pow(10, -fracd)) * Math.pow(10, expsign * exp); + }; + var LEFT_PARENTHESIS_TOKEN = { + type: TokenType.LEFT_PARENTHESIS_TOKEN + }; + var RIGHT_PARENTHESIS_TOKEN = { + type: TokenType.RIGHT_PARENTHESIS_TOKEN + }; + var COMMA_TOKEN = { type: TokenType.COMMA_TOKEN }; + var SUFFIX_MATCH_TOKEN = { type: TokenType.SUFFIX_MATCH_TOKEN }; + var PREFIX_MATCH_TOKEN = { type: TokenType.PREFIX_MATCH_TOKEN }; + var COLUMN_TOKEN = { type: TokenType.COLUMN_TOKEN }; + var DASH_MATCH_TOKEN = { type: TokenType.DASH_MATCH_TOKEN }; + var INCLUDE_MATCH_TOKEN = { type: TokenType.INCLUDE_MATCH_TOKEN }; + var LEFT_CURLY_BRACKET_TOKEN = { + type: TokenType.LEFT_CURLY_BRACKET_TOKEN + }; + var RIGHT_CURLY_BRACKET_TOKEN = { + type: TokenType.RIGHT_CURLY_BRACKET_TOKEN + }; + var SUBSTRING_MATCH_TOKEN = { type: TokenType.SUBSTRING_MATCH_TOKEN }; + var BAD_URL_TOKEN = { type: TokenType.BAD_URL_TOKEN }; + var BAD_STRING_TOKEN = { type: TokenType.BAD_STRING_TOKEN }; + var CDO_TOKEN = { type: TokenType.CDO_TOKEN }; + var CDC_TOKEN = { type: TokenType.CDC_TOKEN }; + var COLON_TOKEN = { type: TokenType.COLON_TOKEN }; + var SEMICOLON_TOKEN = { type: TokenType.SEMICOLON_TOKEN }; + var LEFT_SQUARE_BRACKET_TOKEN = { + type: TokenType.LEFT_SQUARE_BRACKET_TOKEN + }; + var RIGHT_SQUARE_BRACKET_TOKEN = { + type: TokenType.RIGHT_SQUARE_BRACKET_TOKEN + }; + var WHITESPACE_TOKEN = { type: TokenType.WHITESPACE_TOKEN }; + var EOF_TOKEN = { type: TokenType.EOF_TOKEN }; + var Tokenizer = /** @class */ (function () { + function Tokenizer() { + this._value = []; + } + Tokenizer.prototype.write = function (chunk) { + this._value = this._value.concat(toCodePoints(chunk)); + }; + Tokenizer.prototype.read = function () { + var tokens = []; + var token = this.consumeToken(); + while (token !== EOF_TOKEN) { + tokens.push(token); + token = this.consumeToken(); + } + return tokens; + }; + Tokenizer.prototype.consumeToken = function () { + var codePoint = this.consumeCodePoint(); + switch (codePoint) { + case QUOTATION_MARK: + return this.consumeStringToken(QUOTATION_MARK); + case NUMBER_SIGN: + var c1 = this.peekCodePoint(0); + var c2 = this.peekCodePoint(1); + var c3 = this.peekCodePoint(2); + if (isNameCodePoint(c1) || isValidEscape(c2, c3)) { + var flags = isIdentifierStart(c1, c2, c3) ? FLAG_ID : FLAG_UNRESTRICTED; + var value = this.consumeName(); + return { type: TokenType.HASH_TOKEN, value: value, flags: flags }; + } + break; + case DOLLAR_SIGN: + if (this.peekCodePoint(0) === EQUALS_SIGN) { + this.consumeCodePoint(); + return SUFFIX_MATCH_TOKEN; + } + break; + case APOSTROPHE: + return this.consumeStringToken(APOSTROPHE); + case LEFT_PARENTHESIS: + return LEFT_PARENTHESIS_TOKEN; + case RIGHT_PARENTHESIS: + return RIGHT_PARENTHESIS_TOKEN; + case ASTERISK: + if (this.peekCodePoint(0) === EQUALS_SIGN) { + this.consumeCodePoint(); + return SUBSTRING_MATCH_TOKEN; + } + break; + case PLUS_SIGN: + if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) { + this.reconsumeCodePoint(codePoint); + return this.consumeNumericToken(); + } + break; + case COMMA: + return COMMA_TOKEN; + case HYPHEN_MINUS: + var e1 = codePoint; + var e2 = this.peekCodePoint(0); + var e3 = this.peekCodePoint(1); + if (isNumberStart(e1, e2, e3)) { + this.reconsumeCodePoint(codePoint); + return this.consumeNumericToken(); + } + if (isIdentifierStart(e1, e2, e3)) { + this.reconsumeCodePoint(codePoint); + return this.consumeIdentLikeToken(); + } + if (e2 === HYPHEN_MINUS && e3 === GREATER_THAN_SIGN) { + this.consumeCodePoint(); + this.consumeCodePoint(); + return CDC_TOKEN; + } + break; + case FULL_STOP: + if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) { + this.reconsumeCodePoint(codePoint); + return this.consumeNumericToken(); + } + break; + case SOLIDUS: + if (this.peekCodePoint(0) === ASTERISK) { + this.consumeCodePoint(); + while (true) { + var c = this.consumeCodePoint(); + if (c === ASTERISK) { + c = this.consumeCodePoint(); + if (c === SOLIDUS) { + return this.consumeToken(); + } + } + if (c === EOF) { + return this.consumeToken(); + } + } + } + break; + case COLON: + return COLON_TOKEN; + case SEMICOLON: + return SEMICOLON_TOKEN; + case LESS_THAN_SIGN: + if (this.peekCodePoint(0) === EXCLAMATION_MARK && + this.peekCodePoint(1) === HYPHEN_MINUS && + this.peekCodePoint(2) === HYPHEN_MINUS) { + this.consumeCodePoint(); + this.consumeCodePoint(); + return CDO_TOKEN; + } + break; + case COMMERCIAL_AT: + var a1 = this.peekCodePoint(0); + var a2 = this.peekCodePoint(1); + var a3 = this.peekCodePoint(2); + if (isIdentifierStart(a1, a2, a3)) { + var value = this.consumeName(); + return { type: TokenType.AT_KEYWORD_TOKEN, value: value }; + } + break; + case LEFT_SQUARE_BRACKET: + return LEFT_SQUARE_BRACKET_TOKEN; + case REVERSE_SOLIDUS: + if (isValidEscape(codePoint, this.peekCodePoint(0))) { + this.reconsumeCodePoint(codePoint); + return this.consumeIdentLikeToken(); + } + break; + case RIGHT_SQUARE_BRACKET: + return RIGHT_SQUARE_BRACKET_TOKEN; + case CIRCUMFLEX_ACCENT: + if (this.peekCodePoint(0) === EQUALS_SIGN) { + this.consumeCodePoint(); + return PREFIX_MATCH_TOKEN; + } + break; + case LEFT_CURLY_BRACKET: + return LEFT_CURLY_BRACKET_TOKEN; + case RIGHT_CURLY_BRACKET: + return RIGHT_CURLY_BRACKET_TOKEN; + case u: + case U: + var u1 = this.peekCodePoint(0); + var u2 = this.peekCodePoint(1); + if (u1 === PLUS_SIGN && (isHex(u2) || u2 === QUESTION_MARK)) { + this.consumeCodePoint(); + this.consumeUnicodeRangeToken(); + } + this.reconsumeCodePoint(codePoint); + return this.consumeIdentLikeToken(); + case VERTICAL_LINE: + if (this.peekCodePoint(0) === EQUALS_SIGN) { + this.consumeCodePoint(); + return DASH_MATCH_TOKEN; + } + if (this.peekCodePoint(0) === VERTICAL_LINE) { + this.consumeCodePoint(); + return COLUMN_TOKEN; + } + break; + case TILDE: + if (this.peekCodePoint(0) === EQUALS_SIGN) { + this.consumeCodePoint(); + return INCLUDE_MATCH_TOKEN; + } + break; + case EOF: + return EOF_TOKEN; + } + if (isWhiteSpace(codePoint)) { + this.consumeWhiteSpace(); + return WHITESPACE_TOKEN; + } + if (isDigit(codePoint)) { + this.reconsumeCodePoint(codePoint); + return this.consumeNumericToken(); + } + if (isNameStartCodePoint(codePoint)) { + this.reconsumeCodePoint(codePoint); + return this.consumeIdentLikeToken(); + } + return { type: TokenType.DELIM_TOKEN, value: fromCodePoint(codePoint) }; + }; + Tokenizer.prototype.consumeCodePoint = function () { + var value = this._value.shift(); + return typeof value === 'undefined' ? -1 : value; + }; + Tokenizer.prototype.reconsumeCodePoint = function (codePoint) { + this._value.unshift(codePoint); + }; + Tokenizer.prototype.peekCodePoint = function (delta) { + if (delta >= this._value.length) { + return -1; + } + return this._value[delta]; + }; + Tokenizer.prototype.consumeUnicodeRangeToken = function () { + var digits = []; + var codePoint = this.consumeCodePoint(); + while (isHex(codePoint) && digits.length < 6) { + digits.push(codePoint); + codePoint = this.consumeCodePoint(); + } + var questionMarks = false; + while (codePoint === QUESTION_MARK && digits.length < 6) { + digits.push(codePoint); + codePoint = this.consumeCodePoint(); + questionMarks = true; + } + if (questionMarks) { + var start_1 = parseInt(fromCodePoint.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? ZERO : digit); })), 16); + var end = parseInt(fromCodePoint.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? F : digit); })), 16); + return { type: TokenType.UNICODE_RANGE_TOKEN, start: start_1, end: end }; + } + var start = parseInt(fromCodePoint.apply(void 0, digits), 16); + if (this.peekCodePoint(0) === HYPHEN_MINUS && isHex(this.peekCodePoint(1))) { + this.consumeCodePoint(); + codePoint = this.consumeCodePoint(); + var endDigits = []; + while (isHex(codePoint) && endDigits.length < 6) { + endDigits.push(codePoint); + codePoint = this.consumeCodePoint(); + } + var end = parseInt(fromCodePoint.apply(void 0, endDigits), 16); + return { type: TokenType.UNICODE_RANGE_TOKEN, start: start, end: end }; + } + else { + return { type: TokenType.UNICODE_RANGE_TOKEN, start: start, end: start }; + } + }; + Tokenizer.prototype.consumeIdentLikeToken = function () { + var value = this.consumeName(); + if (value.toLowerCase() === 'url' && this.peekCodePoint(0) === LEFT_PARENTHESIS) { + this.consumeCodePoint(); + return this.consumeUrlToken(); + } + else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) { + this.consumeCodePoint(); + return { type: TokenType.FUNCTION_TOKEN, value: value }; + } + return { type: TokenType.IDENT_TOKEN, value: value }; + }; + Tokenizer.prototype.consumeUrlToken = function () { + var value = []; + this.consumeWhiteSpace(); + if (this.peekCodePoint(0) === EOF) { + return { type: TokenType.URL_TOKEN, value: '' }; + } + var next = this.peekCodePoint(0); + if (next === APOSTROPHE || next === QUOTATION_MARK) { + var stringToken = this.consumeStringToken(this.consumeCodePoint()); + if (stringToken.type === TokenType.STRING_TOKEN) { + this.consumeWhiteSpace(); + if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) { + this.consumeCodePoint(); + return { type: TokenType.URL_TOKEN, value: stringToken.value }; + } + } + this.consumeBadUrlRemnants(); + return BAD_URL_TOKEN; + } + while (true) { + var codePoint = this.consumeCodePoint(); + if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) { + return { type: TokenType.URL_TOKEN, value: fromCodePoint.apply(void 0, value) }; + } + else if (isWhiteSpace(codePoint)) { + this.consumeWhiteSpace(); + if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) { + this.consumeCodePoint(); + return { type: TokenType.URL_TOKEN, value: fromCodePoint.apply(void 0, value) }; + } + this.consumeBadUrlRemnants(); + return BAD_URL_TOKEN; + } + else if (codePoint === QUOTATION_MARK || + codePoint === APOSTROPHE || + codePoint === LEFT_PARENTHESIS || + isNonPrintableCodePoint(codePoint)) { + this.consumeBadUrlRemnants(); + return BAD_URL_TOKEN; + } + else if (codePoint === REVERSE_SOLIDUS) { + if (isValidEscape(codePoint, this.peekCodePoint(0))) { + value.push(this.consumeEscapedCodePoint()); + } + else { + this.consumeBadUrlRemnants(); + return BAD_URL_TOKEN; + } + } + else { + value.push(codePoint); + } + } + }; + Tokenizer.prototype.consumeWhiteSpace = function () { + while (isWhiteSpace(this.peekCodePoint(0))) { + this.consumeCodePoint(); + } + }; + Tokenizer.prototype.consumeBadUrlRemnants = function () { + while (true) { + var codePoint = this.consumeCodePoint(); + if (codePoint === RIGHT_PARENTHESIS || codePoint === EOF) { + return; + } + if (isValidEscape(codePoint, this.peekCodePoint(0))) { + this.consumeEscapedCodePoint(); + } + } + }; + Tokenizer.prototype.consumeStringSlice = function (count) { + var SLICE_STACK_SIZE = 60000; + var value = ''; + while (count > 0) { + var amount = Math.min(SLICE_STACK_SIZE, count); + value += fromCodePoint.apply(void 0, this._value.splice(0, amount)); + count -= amount; + } + this._value.shift(); + return value; + }; + Tokenizer.prototype.consumeStringToken = function (endingCodePoint) { + var value = ''; + var i = 0; + do { + var codePoint = this._value[i]; + if (codePoint === EOF || codePoint === undefined || codePoint === endingCodePoint) { + value += this.consumeStringSlice(i); + return { type: TokenType.STRING_TOKEN, value: value }; + } + if (codePoint === LINE_FEED) { + this._value.splice(0, i); + return BAD_STRING_TOKEN; + } + if (codePoint === REVERSE_SOLIDUS) { + var next = this._value[i + 1]; + if (next !== EOF && next !== undefined) { + if (next === LINE_FEED) { + value += this.consumeStringSlice(i); + i = -1; + this._value.shift(); + } + else if (isValidEscape(codePoint, next)) { + value += this.consumeStringSlice(i); + value += fromCodePoint(this.consumeEscapedCodePoint()); + i = -1; + } + } + } + i++; + } while (true); + }; + Tokenizer.prototype.consumeNumber = function () { + var repr = []; + var type = FLAG_INTEGER; + var c1 = this.peekCodePoint(0); + if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) { + repr.push(this.consumeCodePoint()); + } + while (isDigit(this.peekCodePoint(0))) { + repr.push(this.consumeCodePoint()); + } + c1 = this.peekCodePoint(0); + var c2 = this.peekCodePoint(1); + if (c1 === FULL_STOP && isDigit(c2)) { + repr.push(this.consumeCodePoint(), this.consumeCodePoint()); + type = FLAG_NUMBER; + while (isDigit(this.peekCodePoint(0))) { + repr.push(this.consumeCodePoint()); + } + } + c1 = this.peekCodePoint(0); + c2 = this.peekCodePoint(1); + var c3 = this.peekCodePoint(2); + if ((c1 === E || c1 === e) && (((c2 === PLUS_SIGN || c2 === HYPHEN_MINUS) && isDigit(c3)) || isDigit(c2))) { + repr.push(this.consumeCodePoint(), this.consumeCodePoint()); + type = FLAG_NUMBER; + while (isDigit(this.peekCodePoint(0))) { + repr.push(this.consumeCodePoint()); + } + } + return [stringToNumber(repr), type]; + }; + Tokenizer.prototype.consumeNumericToken = function () { + var _a = this.consumeNumber(), number = _a[0], flags = _a[1]; + var c1 = this.peekCodePoint(0); + var c2 = this.peekCodePoint(1); + var c3 = this.peekCodePoint(2); + if (isIdentifierStart(c1, c2, c3)) { + var unit = this.consumeName(); + return { type: TokenType.DIMENSION_TOKEN, number: number, flags: flags, unit: unit }; + } + if (c1 === PERCENTAGE_SIGN) { + this.consumeCodePoint(); + return { type: TokenType.PERCENTAGE_TOKEN, number: number, flags: flags }; + } + return { type: TokenType.NUMBER_TOKEN, number: number, flags: flags }; + }; + Tokenizer.prototype.consumeEscapedCodePoint = function () { + var codePoint = this.consumeCodePoint(); + if (isHex(codePoint)) { + var hex = fromCodePoint(codePoint); + while (isHex(this.peekCodePoint(0)) && hex.length < 6) { + hex += fromCodePoint(this.consumeCodePoint()); + } + if (isWhiteSpace(this.peekCodePoint(0))) { + this.consumeCodePoint(); + } + var hexCodePoint = parseInt(hex, 16); + if (hexCodePoint === 0 || isSurrogateCodePoint(hexCodePoint) || hexCodePoint > 0x10ffff) { + return REPLACEMENT_CHARACTER; + } + return hexCodePoint; + } + if (codePoint === EOF) { + return REPLACEMENT_CHARACTER; + } + return codePoint; + }; + Tokenizer.prototype.consumeName = function () { + var result = ''; + while (true) { + var codePoint = this.consumeCodePoint(); + if (isNameCodePoint(codePoint)) { + result += fromCodePoint(codePoint); + } + else if (isValidEscape(codePoint, this.peekCodePoint(0))) { + result += fromCodePoint(this.consumeEscapedCodePoint()); + } + else { + this.reconsumeCodePoint(codePoint); + return result; + } + } + }; + return Tokenizer; + }()); + + var Parser = /** @class */ (function () { + function Parser(tokens) { + this._tokens = tokens; + } + Parser.create = function (value) { + var tokenizer = new Tokenizer(); + tokenizer.write(value); + return new Parser(tokenizer.read()); + }; + Parser.parseValue = function (value) { + return Parser.create(value).parseComponentValue(); + }; + Parser.parseValues = function (value) { + return Parser.create(value).parseComponentValues(); + }; + Parser.prototype.parseComponentValue = function () { + var token = this.consumeToken(); + while (token.type === TokenType.WHITESPACE_TOKEN) { + token = this.consumeToken(); + } + if (token.type === TokenType.EOF_TOKEN) { + throw new SyntaxError("Error parsing CSS component value, unexpected EOF"); + } + this.reconsumeToken(token); + var value = this.consumeComponentValue(); + do { + token = this.consumeToken(); + } while (token.type === TokenType.WHITESPACE_TOKEN); + if (token.type === TokenType.EOF_TOKEN) { + return value; + } + throw new SyntaxError("Error parsing CSS component value, multiple values found when expecting only one"); + }; + Parser.prototype.parseComponentValues = function () { + var values = []; + while (true) { + var value = this.consumeComponentValue(); + if (value.type === TokenType.EOF_TOKEN) { + return values; + } + values.push(value); + values.push(); + } + }; + Parser.prototype.consumeComponentValue = function () { + var token = this.consumeToken(); + switch (token.type) { + case TokenType.LEFT_CURLY_BRACKET_TOKEN: + case TokenType.LEFT_SQUARE_BRACKET_TOKEN: + case TokenType.LEFT_PARENTHESIS_TOKEN: + return this.consumeSimpleBlock(token.type); + case TokenType.FUNCTION_TOKEN: + return this.consumeFunction(token); + } + return token; + }; + Parser.prototype.consumeSimpleBlock = function (type) { + var block = { type: type, values: [] }; + var token = this.consumeToken(); + while (true) { + if (token.type === TokenType.EOF_TOKEN || isEndingTokenFor(token, type)) { + return block; + } + this.reconsumeToken(token); + block.values.push(this.consumeComponentValue()); + token = this.consumeToken(); + } + }; + Parser.prototype.consumeFunction = function (functionToken) { + var cssFunction = { + name: functionToken.value, + values: [], + type: TokenType.FUNCTION + }; + while (true) { + var token = this.consumeToken(); + if (token.type === TokenType.EOF_TOKEN || token.type === TokenType.RIGHT_PARENTHESIS_TOKEN) { + return cssFunction; + } + this.reconsumeToken(token); + cssFunction.values.push(this.consumeComponentValue()); + } + }; + Parser.prototype.consumeToken = function () { + var token = this._tokens.shift(); + return typeof token === 'undefined' ? EOF_TOKEN : token; + }; + Parser.prototype.reconsumeToken = function (token) { + this._tokens.unshift(token); + }; + return Parser; + }()); + var isDimensionToken = function (token) { return token.type === TokenType.DIMENSION_TOKEN; }; + var isNumberToken = function (token) { return token.type === TokenType.NUMBER_TOKEN; }; + var isIdentToken = function (token) { return token.type === TokenType.IDENT_TOKEN; }; + var isStringToken = function (token) { return token.type === TokenType.STRING_TOKEN; }; + var isIdentWithValue = function (token, value) { + return isIdentToken(token) && token.value === value; + }; + var nonWhiteSpace = function (token) { return token.type !== TokenType.WHITESPACE_TOKEN; }; + var nonFunctionArgSeparator = function (token) { + return token.type !== TokenType.WHITESPACE_TOKEN && token.type !== TokenType.COMMA_TOKEN; + }; + var parseFunctionArgs = function (tokens) { + var args = []; + var arg = []; + tokens.forEach(function (token) { + if (token.type === TokenType.COMMA_TOKEN) { + if (arg.length === 0) { + throw new Error("Error parsing function args, zero tokens for arg"); + } + args.push(arg); + arg = []; + return; + } + if (token.type !== TokenType.WHITESPACE_TOKEN) { + arg.push(token); + } + }); + if (arg.length) { + args.push(arg); + } + return args; + }; + var isEndingTokenFor = function (token, type) { + if (type === TokenType.LEFT_CURLY_BRACKET_TOKEN && token.type === TokenType.RIGHT_CURLY_BRACKET_TOKEN) { + return true; + } + if (type === TokenType.LEFT_SQUARE_BRACKET_TOKEN && token.type === TokenType.RIGHT_SQUARE_BRACKET_TOKEN) { + return true; + } + return type === TokenType.LEFT_PARENTHESIS_TOKEN && token.type === TokenType.RIGHT_PARENTHESIS_TOKEN; + }; + + var isLength = function (token) { + return token.type === TokenType.NUMBER_TOKEN || token.type === TokenType.DIMENSION_TOKEN; + }; + + var isLengthPercentage = function (token) { + return token.type === TokenType.PERCENTAGE_TOKEN || isLength(token); + }; + var parseLengthPercentageTuple = function (tokens) { + return tokens.length > 1 ? [tokens[0], tokens[1]] : [tokens[0]]; + }; + var ZERO_LENGTH = { + type: TokenType.NUMBER_TOKEN, + number: 0, + flags: FLAG_INTEGER + }; + var FIFTY_PERCENT = { + type: TokenType.PERCENTAGE_TOKEN, + number: 50, + flags: FLAG_INTEGER + }; + var HUNDRED_PERCENT = { + type: TokenType.PERCENTAGE_TOKEN, + number: 100, + flags: FLAG_INTEGER + }; + var getAbsoluteValueForTuple = function (tuple, width, height) { + var x = tuple[0], y = tuple[1]; + return [getAbsoluteValue(x, width), getAbsoluteValue(typeof y !== 'undefined' ? y : x, height)]; + }; + var getAbsoluteValue = function (token, parent) { + if (token.type === TokenType.PERCENTAGE_TOKEN) { + return (token.number / 100) * parent; + } + if (isDimensionToken(token)) { + switch (token.unit) { + case 'rem': + case 'em': + return 16 * token.number; // TODO use correct font-size + case 'px': + default: + return token.number; + } + } + return token.number; + }; + + var DEG = 'deg'; + var GRAD = 'grad'; + var RAD = 'rad'; + var TURN = 'turn'; + var angle = { + name: 'angle', + parse: function (value) { + if (value.type === TokenType.DIMENSION_TOKEN) { + switch (value.unit) { + case DEG: + return (Math.PI * value.number) / 180; + case GRAD: + return (Math.PI / 200) * value.number; + case RAD: + return value.number; + case TURN: + return Math.PI * 2 * value.number; + } + } + throw new Error("Unsupported angle type"); + } + }; + var isAngle = function (value) { + if (value.type === TokenType.DIMENSION_TOKEN) { + if (value.unit === DEG || value.unit === GRAD || value.unit === RAD || value.unit === TURN) { + return true; + } + } + return false; + }; + var parseNamedSide = function (tokens) { + var sideOrCorner = tokens + .filter(isIdentToken) + .map(function (ident) { return ident.value; }) + .join(' '); + switch (sideOrCorner) { + case 'to bottom right': + case 'to right bottom': + case 'left top': + case 'top left': + return [ZERO_LENGTH, ZERO_LENGTH]; + case 'to top': + case 'bottom': + return deg(0); + case 'to bottom left': + case 'to left bottom': + case 'right top': + case 'top right': + return [ZERO_LENGTH, HUNDRED_PERCENT]; + case 'to right': + case 'left': + return deg(90); + case 'to top left': + case 'to left top': + case 'right bottom': + case 'bottom right': + return [HUNDRED_PERCENT, HUNDRED_PERCENT]; + case 'to bottom': + case 'top': + return deg(180); + case 'to top right': + case 'to right top': + case 'left bottom': + case 'bottom left': + return [HUNDRED_PERCENT, ZERO_LENGTH]; + case 'to left': + case 'right': + return deg(270); + } + return 0; + }; + var deg = function (deg) { return (Math.PI * deg) / 180; }; + + var color = { + name: 'color', + parse: function (value) { + if (value.type === TokenType.FUNCTION) { + var colorFunction = SUPPORTED_COLOR_FUNCTIONS[value.name]; + if (typeof colorFunction === 'undefined') { + throw new Error("Attempting to parse an unsupported color function \"" + value.name + "\""); + } + return colorFunction(value.values); + } + if (value.type === TokenType.HASH_TOKEN) { + if (value.value.length === 3) { + var r = value.value.substring(0, 1); + var g = value.value.substring(1, 2); + var b = value.value.substring(2, 3); + return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), 1); + } + if (value.value.length === 4) { + var r = value.value.substring(0, 1); + var g = value.value.substring(1, 2); + var b = value.value.substring(2, 3); + var a = value.value.substring(3, 4); + return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), parseInt(a + a, 16) / 255); + } + if (value.value.length === 6) { + var r = value.value.substring(0, 2); + var g = value.value.substring(2, 4); + var b = value.value.substring(4, 6); + return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), 1); + } + if (value.value.length === 8) { + var r = value.value.substring(0, 2); + var g = value.value.substring(2, 4); + var b = value.value.substring(4, 6); + var a = value.value.substring(6, 8); + return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), parseInt(a, 16) / 255); + } + } + if (value.type === TokenType.IDENT_TOKEN) { + var namedColor = COLORS[value.value.toUpperCase()]; + if (typeof namedColor !== 'undefined') { + return namedColor; + } + } + return COLORS.TRANSPARENT; + } + }; + var isTransparent = function (color) { return (0xff & color) === 0; }; + var asString = function (color) { + var alpha = 0xff & color; + var blue = 0xff & (color >> 8); + var green = 0xff & (color >> 16); + var red = 0xff & (color >> 24); + return alpha < 255 ? "rgba(" + red + "," + green + "," + blue + "," + alpha / 255 + ")" : "rgb(" + red + "," + green + "," + blue + ")"; + }; + var pack = function (r, g, b, a) { + return ((r << 24) | (g << 16) | (b << 8) | (Math.round(a * 255) << 0)) >>> 0; + }; + var getTokenColorValue = function (token, i) { + if (token.type === TokenType.NUMBER_TOKEN) { + return token.number; + } + if (token.type === TokenType.PERCENTAGE_TOKEN) { + var max = i === 3 ? 1 : 255; + return i === 3 ? (token.number / 100) * max : Math.round((token.number / 100) * max); + } + return 0; + }; + var rgb = function (args) { + var tokens = args.filter(nonFunctionArgSeparator); + if (tokens.length === 3) { + var _a = tokens.map(getTokenColorValue), r = _a[0], g = _a[1], b = _a[2]; + return pack(r, g, b, 1); + } + if (tokens.length === 4) { + var _b = tokens.map(getTokenColorValue), r = _b[0], g = _b[1], b = _b[2], a = _b[3]; + return pack(r, g, b, a); + } + return 0; + }; + function hue2rgb(t1, t2, hue) { + if (hue < 0) { + hue += 1; + } + if (hue >= 1) { + hue -= 1; + } + if (hue < 1 / 6) { + return (t2 - t1) * hue * 6 + t1; + } + else if (hue < 1 / 2) { + return t2; + } + else if (hue < 2 / 3) { + return (t2 - t1) * 6 * (2 / 3 - hue) + t1; + } + else { + return t1; + } + } + var hsl = function (args) { + var tokens = args.filter(nonFunctionArgSeparator); + var hue = tokens[0], saturation = tokens[1], lightness = tokens[2], alpha = tokens[3]; + var h = (hue.type === TokenType.NUMBER_TOKEN ? deg(hue.number) : angle.parse(hue)) / (Math.PI * 2); + var s = isLengthPercentage(saturation) ? saturation.number / 100 : 0; + var l = isLengthPercentage(lightness) ? lightness.number / 100 : 0; + var a = typeof alpha !== 'undefined' && isLengthPercentage(alpha) ? getAbsoluteValue(alpha, 1) : 1; + if (s === 0) { + return pack(l * 255, l * 255, l * 255, 1); + } + var t2 = l <= 0.5 ? l * (s + 1) : l + s - l * s; + var t1 = l * 2 - t2; + var r = hue2rgb(t1, t2, h + 1 / 3); + var g = hue2rgb(t1, t2, h); + var b = hue2rgb(t1, t2, h - 1 / 3); + return pack(r * 255, g * 255, b * 255, a); + }; + var SUPPORTED_COLOR_FUNCTIONS = { + hsl: hsl, + hsla: hsl, + rgb: rgb, + rgba: rgb + }; + var COLORS = { + ALICEBLUE: 0xf0f8ffff, + ANTIQUEWHITE: 0xfaebd7ff, + AQUA: 0x00ffffff, + AQUAMARINE: 0x7fffd4ff, + AZURE: 0xf0ffffff, + BEIGE: 0xf5f5dcff, + BISQUE: 0xffe4c4ff, + BLACK: 0x000000ff, + BLANCHEDALMOND: 0xffebcdff, + BLUE: 0x0000ffff, + BLUEVIOLET: 0x8a2be2ff, + BROWN: 0xa52a2aff, + BURLYWOOD: 0xdeb887ff, + CADETBLUE: 0x5f9ea0ff, + CHARTREUSE: 0x7fff00ff, + CHOCOLATE: 0xd2691eff, + CORAL: 0xff7f50ff, + CORNFLOWERBLUE: 0x6495edff, + CORNSILK: 0xfff8dcff, + CRIMSON: 0xdc143cff, + CYAN: 0x00ffffff, + DARKBLUE: 0x00008bff, + DARKCYAN: 0x008b8bff, + DARKGOLDENROD: 0xb886bbff, + DARKGRAY: 0xa9a9a9ff, + DARKGREEN: 0x006400ff, + DARKGREY: 0xa9a9a9ff, + DARKKHAKI: 0xbdb76bff, + DARKMAGENTA: 0x8b008bff, + DARKOLIVEGREEN: 0x556b2fff, + DARKORANGE: 0xff8c00ff, + DARKORCHID: 0x9932ccff, + DARKRED: 0x8b0000ff, + DARKSALMON: 0xe9967aff, + DARKSEAGREEN: 0x8fbc8fff, + DARKSLATEBLUE: 0x483d8bff, + DARKSLATEGRAY: 0x2f4f4fff, + DARKSLATEGREY: 0x2f4f4fff, + DARKTURQUOISE: 0x00ced1ff, + DARKVIOLET: 0x9400d3ff, + DEEPPINK: 0xff1493ff, + DEEPSKYBLUE: 0x00bfffff, + DIMGRAY: 0x696969ff, + DIMGREY: 0x696969ff, + DODGERBLUE: 0x1e90ffff, + FIREBRICK: 0xb22222ff, + FLORALWHITE: 0xfffaf0ff, + FORESTGREEN: 0x228b22ff, + FUCHSIA: 0xff00ffff, + GAINSBORO: 0xdcdcdcff, + GHOSTWHITE: 0xf8f8ffff, + GOLD: 0xffd700ff, + GOLDENROD: 0xdaa520ff, + GRAY: 0x808080ff, + GREEN: 0x008000ff, + GREENYELLOW: 0xadff2fff, + GREY: 0x808080ff, + HONEYDEW: 0xf0fff0ff, + HOTPINK: 0xff69b4ff, + INDIANRED: 0xcd5c5cff, + INDIGO: 0x4b0082ff, + IVORY: 0xfffff0ff, + KHAKI: 0xf0e68cff, + LAVENDER: 0xe6e6faff, + LAVENDERBLUSH: 0xfff0f5ff, + LAWNGREEN: 0x7cfc00ff, + LEMONCHIFFON: 0xfffacdff, + LIGHTBLUE: 0xadd8e6ff, + LIGHTCORAL: 0xf08080ff, + LIGHTCYAN: 0xe0ffffff, + LIGHTGOLDENRODYELLOW: 0xfafad2ff, + LIGHTGRAY: 0xd3d3d3ff, + LIGHTGREEN: 0x90ee90ff, + LIGHTGREY: 0xd3d3d3ff, + LIGHTPINK: 0xffb6c1ff, + LIGHTSALMON: 0xffa07aff, + LIGHTSEAGREEN: 0x20b2aaff, + LIGHTSKYBLUE: 0x87cefaff, + LIGHTSLATEGRAY: 0x778899ff, + LIGHTSLATEGREY: 0x778899ff, + LIGHTSTEELBLUE: 0xb0c4deff, + LIGHTYELLOW: 0xffffe0ff, + LIME: 0x00ff00ff, + LIMEGREEN: 0x32cd32ff, + LINEN: 0xfaf0e6ff, + MAGENTA: 0xff00ffff, + MAROON: 0x800000ff, + MEDIUMAQUAMARINE: 0x66cdaaff, + MEDIUMBLUE: 0x0000cdff, + MEDIUMORCHID: 0xba55d3ff, + MEDIUMPURPLE: 0x9370dbff, + MEDIUMSEAGREEN: 0x3cb371ff, + MEDIUMSLATEBLUE: 0x7b68eeff, + MEDIUMSPRINGGREEN: 0x00fa9aff, + MEDIUMTURQUOISE: 0x48d1ccff, + MEDIUMVIOLETRED: 0xc71585ff, + MIDNIGHTBLUE: 0x191970ff, + MINTCREAM: 0xf5fffaff, + MISTYROSE: 0xffe4e1ff, + MOCCASIN: 0xffe4b5ff, + NAVAJOWHITE: 0xffdeadff, + NAVY: 0x000080ff, + OLDLACE: 0xfdf5e6ff, + OLIVE: 0x808000ff, + OLIVEDRAB: 0x6b8e23ff, + ORANGE: 0xffa500ff, + ORANGERED: 0xff4500ff, + ORCHID: 0xda70d6ff, + PALEGOLDENROD: 0xeee8aaff, + PALEGREEN: 0x98fb98ff, + PALETURQUOISE: 0xafeeeeff, + PALEVIOLETRED: 0xdb7093ff, + PAPAYAWHIP: 0xffefd5ff, + PEACHPUFF: 0xffdab9ff, + PERU: 0xcd853fff, + PINK: 0xffc0cbff, + PLUM: 0xdda0ddff, + POWDERBLUE: 0xb0e0e6ff, + PURPLE: 0x800080ff, + REBECCAPURPLE: 0x663399ff, + RED: 0xff0000ff, + ROSYBROWN: 0xbc8f8fff, + ROYALBLUE: 0x4169e1ff, + SADDLEBROWN: 0x8b4513ff, + SALMON: 0xfa8072ff, + SANDYBROWN: 0xf4a460ff, + SEAGREEN: 0x2e8b57ff, + SEASHELL: 0xfff5eeff, + SIENNA: 0xa0522dff, + SILVER: 0xc0c0c0ff, + SKYBLUE: 0x87ceebff, + SLATEBLUE: 0x6a5acdff, + SLATEGRAY: 0x708090ff, + SLATEGREY: 0x708090ff, + SNOW: 0xfffafaff, + SPRINGGREEN: 0x00ff7fff, + STEELBLUE: 0x4682b4ff, + TAN: 0xd2b48cff, + TEAL: 0x008080ff, + THISTLE: 0xd8bfd8ff, + TOMATO: 0xff6347ff, + TRANSPARENT: 0x00000000, + TURQUOISE: 0x40e0d0ff, + VIOLET: 0xee82eeff, + WHEAT: 0xf5deb3ff, + WHITE: 0xffffffff, + WHITESMOKE: 0xf5f5f5ff, + YELLOW: 0xffff00ff, + YELLOWGREEN: 0x9acd32ff + }; + + var PropertyDescriptorParsingType; + (function (PropertyDescriptorParsingType) { + PropertyDescriptorParsingType[PropertyDescriptorParsingType["VALUE"] = 0] = "VALUE"; + PropertyDescriptorParsingType[PropertyDescriptorParsingType["LIST"] = 1] = "LIST"; + PropertyDescriptorParsingType[PropertyDescriptorParsingType["IDENT_VALUE"] = 2] = "IDENT_VALUE"; + PropertyDescriptorParsingType[PropertyDescriptorParsingType["TYPE_VALUE"] = 3] = "TYPE_VALUE"; + PropertyDescriptorParsingType[PropertyDescriptorParsingType["TOKEN_VALUE"] = 4] = "TOKEN_VALUE"; + })(PropertyDescriptorParsingType || (PropertyDescriptorParsingType = {})); + + var BACKGROUND_CLIP; + (function (BACKGROUND_CLIP) { + BACKGROUND_CLIP[BACKGROUND_CLIP["BORDER_BOX"] = 0] = "BORDER_BOX"; + BACKGROUND_CLIP[BACKGROUND_CLIP["PADDING_BOX"] = 1] = "PADDING_BOX"; + BACKGROUND_CLIP[BACKGROUND_CLIP["CONTENT_BOX"] = 2] = "CONTENT_BOX"; + })(BACKGROUND_CLIP || (BACKGROUND_CLIP = {})); + var backgroundClip = { + name: 'background-clip', + initialValue: 'border-box', + prefix: false, + type: PropertyDescriptorParsingType.LIST, + parse: function (tokens) { + return tokens.map(function (token) { + if (isIdentToken(token)) { + switch (token.value) { + case 'padding-box': + return BACKGROUND_CLIP.PADDING_BOX; + case 'content-box': + return BACKGROUND_CLIP.CONTENT_BOX; + } + } + return BACKGROUND_CLIP.BORDER_BOX; + }); + } + }; + + var backgroundColor = { + name: "background-color", + initialValue: 'transparent', + prefix: false, + type: PropertyDescriptorParsingType.TYPE_VALUE, + format: 'color' + }; + + var parseColorStop = function (args) { + var color$1 = color.parse(args[0]); + var stop = args[1]; + return stop && isLengthPercentage(stop) ? { color: color$1, stop: stop } : { color: color$1, stop: null }; + }; + var processColorStops = function (stops, lineLength) { + var first = stops[0]; + var last = stops[stops.length - 1]; + if (first.stop === null) { + first.stop = ZERO_LENGTH; + } + if (last.stop === null) { + last.stop = HUNDRED_PERCENT; + } + var processStops = []; + var previous = 0; + for (var i = 0; i < stops.length; i++) { + var stop_1 = stops[i].stop; + if (stop_1 !== null) { + var absoluteValue = getAbsoluteValue(stop_1, lineLength); + if (absoluteValue > previous) { + processStops.push(absoluteValue); + } + else { + processStops.push(previous); + } + previous = absoluteValue; + } + else { + processStops.push(null); + } + } + var gapBegin = null; + for (var i = 0; i < processStops.length; i++) { + var stop_2 = processStops[i]; + if (stop_2 === null) { + if (gapBegin === null) { + gapBegin = i; + } + } + else if (gapBegin !== null) { + var gapLength = i - gapBegin; + var beforeGap = processStops[gapBegin - 1]; + var gapValue = (stop_2 - beforeGap) / (gapLength + 1); + for (var g = 1; g <= gapLength; g++) { + processStops[gapBegin + g - 1] = gapValue * g; + } + gapBegin = null; + } + } + return stops.map(function (_a, i) { + var color = _a.color; + return { color: color, stop: Math.max(Math.min(1, processStops[i] / lineLength), 0) }; + }); + }; + var getAngleFromCorner = function (corner, width, height) { + var centerX = width / 2; + var centerY = height / 2; + var x = getAbsoluteValue(corner[0], width) - centerX; + var y = centerY - getAbsoluteValue(corner[1], height); + return (Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2); + }; + var calculateGradientDirection = function (angle, width, height) { + var radian = typeof angle === 'number' ? angle : getAngleFromCorner(angle, width, height); + var lineLength = Math.abs(width * Math.sin(radian)) + Math.abs(height * Math.cos(radian)); + var halfWidth = width / 2; + var halfHeight = height / 2; + var halfLineLength = lineLength / 2; + var yDiff = Math.sin(radian - Math.PI / 2) * halfLineLength; + var xDiff = Math.cos(radian - Math.PI / 2) * halfLineLength; + return [lineLength, halfWidth - xDiff, halfWidth + xDiff, halfHeight - yDiff, halfHeight + yDiff]; + }; + var distance = function (a, b) { return Math.sqrt(a * a + b * b); }; + var findCorner = function (width, height, x, y, closest) { + var corners = [[0, 0], [0, height], [width, 0], [width, height]]; + return corners.reduce(function (stat, corner) { + var cx = corner[0], cy = corner[1]; + var d = distance(x - cx, y - cy); + if (closest ? d < stat.optimumDistance : d > stat.optimumDistance) { + return { + optimumCorner: corner, + optimumDistance: d + }; + } + return stat; + }, { + optimumDistance: closest ? Infinity : -Infinity, + optimumCorner: null + }).optimumCorner; + }; + var calculateRadius = function (gradient, x, y, width, height) { + var rx = 0; + var ry = 0; + switch (gradient.size) { + case CSSRadialExtent.CLOSEST_SIDE: + // The ending shape is sized so that that it exactly meets the side of the gradient box closest to the gradient’s center. + // If the shape is an ellipse, it exactly meets the closest side in each dimension. + if (gradient.shape === CSSRadialShape.CIRCLE) { + rx = ry = Math.min(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height)); + } + else if (gradient.shape === CSSRadialShape.ELLIPSE) { + rx = Math.min(Math.abs(x), Math.abs(x - width)); + ry = Math.min(Math.abs(y), Math.abs(y - height)); + } + break; + case CSSRadialExtent.CLOSEST_CORNER: + // The ending shape is sized so that that it passes through the corner of the gradient box closest to the gradient’s center. + // If the shape is an ellipse, the ending shape is given the same aspect-ratio it would have if closest-side were specified. + if (gradient.shape === CSSRadialShape.CIRCLE) { + rx = ry = Math.min(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height)); + } + else if (gradient.shape === CSSRadialShape.ELLIPSE) { + // Compute the ratio ry/rx (which is to be the same as for "closest-side") + var c = Math.min(Math.abs(y), Math.abs(y - height)) / Math.min(Math.abs(x), Math.abs(x - width)); + var _a = findCorner(width, height, x, y, true), cx = _a[0], cy = _a[1]; + rx = distance(cx - x, (cy - y) / c); + ry = c * rx; + } + break; + case CSSRadialExtent.FARTHEST_SIDE: + // Same as closest-side, except the ending shape is sized based on the farthest side(s) + if (gradient.shape === CSSRadialShape.CIRCLE) { + rx = ry = Math.max(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height)); + } + else if (gradient.shape === CSSRadialShape.ELLIPSE) { + rx = Math.max(Math.abs(x), Math.abs(x - width)); + ry = Math.max(Math.abs(y), Math.abs(y - height)); + } + break; + case CSSRadialExtent.FARTHEST_CORNER: + // Same as closest-corner, except the ending shape is sized based on the farthest corner. + // If the shape is an ellipse, the ending shape is given the same aspect ratio it would have if farthest-side were specified. + if (gradient.shape === CSSRadialShape.CIRCLE) { + rx = ry = Math.max(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height)); + } + else if (gradient.shape === CSSRadialShape.ELLIPSE) { + // Compute the ratio ry/rx (which is to be the same as for "farthest-side") + var c = Math.max(Math.abs(y), Math.abs(y - height)) / Math.max(Math.abs(x), Math.abs(x - width)); + var _b = findCorner(width, height, x, y, false), cx = _b[0], cy = _b[1]; + rx = distance(cx - x, (cy - y) / c); + ry = c * rx; + } + break; + } + if (Array.isArray(gradient.size)) { + rx = getAbsoluteValue(gradient.size[0], width); + ry = gradient.size.length === 2 ? getAbsoluteValue(gradient.size[1], height) : rx; + } + return [rx, ry]; + }; + + var linearGradient = function (tokens) { + var angle$1 = deg(180); + var stops = []; + parseFunctionArgs(tokens).forEach(function (arg, i) { + if (i === 0) { + var firstToken = arg[0]; + if (firstToken.type === TokenType.IDENT_TOKEN && firstToken.value === 'to') { + angle$1 = parseNamedSide(arg); + return; + } + else if (isAngle(firstToken)) { + angle$1 = angle.parse(firstToken); + return; + } + } + var colorStop = parseColorStop(arg); + stops.push(colorStop); + }); + return { angle: angle$1, stops: stops, type: CSSImageType.LINEAR_GRADIENT }; + }; + + var prefixLinearGradient = function (tokens) { + var angle$1 = deg(180); + var stops = []; + parseFunctionArgs(tokens).forEach(function (arg, i) { + if (i === 0) { + var firstToken = arg[0]; + if (firstToken.type === TokenType.IDENT_TOKEN && + ['top', 'left', 'right', 'bottom'].indexOf(firstToken.value) !== -1) { + angle$1 = parseNamedSide(arg); + return; + } + else if (isAngle(firstToken)) { + angle$1 = (angle.parse(firstToken) + deg(270)) % deg(360); + return; + } + } + var colorStop = parseColorStop(arg); + stops.push(colorStop); + }); + return { + angle: angle$1, + stops: stops, + type: CSSImageType.LINEAR_GRADIENT + }; + }; + + var testRangeBounds = function (document) { + var TEST_HEIGHT = 123; + if (document.createRange) { + var range = document.createRange(); + if (range.getBoundingClientRect) { + var testElement = document.createElement('boundtest'); + testElement.style.height = TEST_HEIGHT + "px"; + testElement.style.display = 'block'; + document.body.appendChild(testElement); + range.selectNode(testElement); + var rangeBounds = range.getBoundingClientRect(); + var rangeHeight = Math.round(rangeBounds.height); + document.body.removeChild(testElement); + if (rangeHeight === TEST_HEIGHT) { + return true; + } + } + } + return false; + }; + var testCORS = function () { return typeof new Image().crossOrigin !== 'undefined'; }; + var testResponseType = function () { return typeof new XMLHttpRequest().responseType === 'string'; }; + var testSVG = function (document) { + var img = new Image(); + var canvas = document.createElement('canvas'); + var ctx = canvas.getContext('2d'); + if (!ctx) { + return false; + } + img.src = "data:image/svg+xml,"; + try { + ctx.drawImage(img, 0, 0); + canvas.toDataURL(); + } + catch (e) { + return false; + } + return true; + }; + var isGreenPixel = function (data) { + return data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255; + }; + var testForeignObject = function (document) { + var canvas = document.createElement('canvas'); + var size = 100; + canvas.width = size; + canvas.height = size; + var ctx = canvas.getContext('2d'); + if (!ctx) { + return Promise.reject(false); + } + ctx.fillStyle = 'rgb(0, 255, 0)'; + ctx.fillRect(0, 0, size, size); + var img = new Image(); + var greenImageSrc = canvas.toDataURL(); + img.src = greenImageSrc; + var svg = createForeignObjectSVG(size, size, 0, 0, img); + ctx.fillStyle = 'red'; + ctx.fillRect(0, 0, size, size); + return loadSerializedSVG(svg) + .then(function (img) { + ctx.drawImage(img, 0, 0); + var data = ctx.getImageData(0, 0, size, size).data; + ctx.fillStyle = 'red'; + ctx.fillRect(0, 0, size, size); + var node = document.createElement('div'); + node.style.backgroundImage = "url(" + greenImageSrc + ")"; + node.style.height = size + "px"; + // Firefox 55 does not render inline tags + return isGreenPixel(data) + ? loadSerializedSVG(createForeignObjectSVG(size, size, 0, 0, node)) + : Promise.reject(false); + }) + .then(function (img) { + ctx.drawImage(img, 0, 0); + // Edge does not render background-images + return isGreenPixel(ctx.getImageData(0, 0, size, size).data); + }) + .catch(function () { return false; }); + }; + var createForeignObjectSVG = function (width, height, x, y, node) { + var xmlns = 'http://www.w3.org/2000/svg'; + var svg = document.createElementNS(xmlns, 'svg'); + var foreignObject = document.createElementNS(xmlns, 'foreignObject'); + svg.setAttributeNS(null, 'width', width.toString()); + svg.setAttributeNS(null, 'height', height.toString()); + foreignObject.setAttributeNS(null, 'width', '100%'); + foreignObject.setAttributeNS(null, 'height', '100%'); + foreignObject.setAttributeNS(null, 'x', x.toString()); + foreignObject.setAttributeNS(null, 'y', y.toString()); + foreignObject.setAttributeNS(null, 'externalResourcesRequired', 'true'); + svg.appendChild(foreignObject); + foreignObject.appendChild(node); + return svg; + }; + var loadSerializedSVG = function (svg) { + return new Promise(function (resolve, reject) { + var img = new Image(); + img.onload = function () { return resolve(img); }; + img.onerror = reject; + img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(new XMLSerializer().serializeToString(svg)); + }); + }; + var FEATURES = { + get SUPPORT_RANGE_BOUNDS() { + var value = testRangeBounds(document); + Object.defineProperty(FEATURES, 'SUPPORT_RANGE_BOUNDS', { value: value }); + return value; + }, + get SUPPORT_SVG_DRAWING() { + var value = testSVG(document); + Object.defineProperty(FEATURES, 'SUPPORT_SVG_DRAWING', { value: value }); + return value; + }, + get SUPPORT_FOREIGNOBJECT_DRAWING() { + var value = typeof Array.from === 'function' && typeof window.fetch === 'function' + ? testForeignObject(document) + : Promise.resolve(false); + Object.defineProperty(FEATURES, 'SUPPORT_FOREIGNOBJECT_DRAWING', { value: value }); + return value; + }, + get SUPPORT_CORS_IMAGES() { + var value = testCORS(); + Object.defineProperty(FEATURES, 'SUPPORT_CORS_IMAGES', { value: value }); + return value; + }, + get SUPPORT_RESPONSE_TYPE() { + var value = testResponseType(); + Object.defineProperty(FEATURES, 'SUPPORT_RESPONSE_TYPE', { value: value }); + return value; + }, + get SUPPORT_CORS_XHR() { + var value = 'withCredentials' in new XMLHttpRequest(); + Object.defineProperty(FEATURES, 'SUPPORT_CORS_XHR', { value: value }); + return value; + } + }; + + var Logger = /** @class */ (function () { + function Logger(_a) { + var id = _a.id, enabled = _a.enabled; + this.id = id; + this.enabled = enabled; + this.start = Date.now(); + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Logger.prototype.debug = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (this.enabled) { + // eslint-disable-next-line no-console + if (typeof window !== 'undefined' && window.console && typeof console.debug === 'function') { + // eslint-disable-next-line no-console + console.debug.apply(console, [this.id, this.getTime() + "ms"].concat(args)); + } + else { + this.info.apply(this, args); + } + } + }; + Logger.prototype.getTime = function () { + return Date.now() - this.start; + }; + Logger.create = function (options) { + Logger.instances[options.id] = new Logger(options); + }; + Logger.destroy = function (id) { + delete Logger.instances[id]; + }; + Logger.getInstance = function (id) { + var instance = Logger.instances[id]; + if (typeof instance === 'undefined') { + throw new Error("No logger instance found with id " + id); + } + return instance; + }; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Logger.prototype.info = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (this.enabled) { + // eslint-disable-next-line no-console + if (typeof window !== 'undefined' && window.console && typeof console.info === 'function') { + // eslint-disable-next-line no-console + console.info.apply(console, [this.id, this.getTime() + "ms"].concat(args)); + } + } + }; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Logger.prototype.error = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (this.enabled) { + // eslint-disable-next-line no-console + if (typeof window !== 'undefined' && window.console && typeof console.error === 'function') { + // eslint-disable-next-line no-console + console.error.apply(console, [this.id, this.getTime() + "ms"].concat(args)); + } + else { + this.info.apply(this, args); + } + } + }; + Logger.instances = {}; + return Logger; + }()); + + var CacheStorage = /** @class */ (function () { + function CacheStorage() { + } + CacheStorage.create = function (name, options) { + return (CacheStorage._caches[name] = new Cache(name, options)); + }; + CacheStorage.destroy = function (name) { + delete CacheStorage._caches[name]; + }; + CacheStorage.open = function (name) { + var cache = CacheStorage._caches[name]; + if (typeof cache !== 'undefined') { + return cache; + } + throw new Error("Cache with key \"" + name + "\" not found"); + }; + CacheStorage.getOrigin = function (url) { + var link = CacheStorage._link; + if (!link) { + return 'about:blank'; + } + link.href = url; + link.href = link.href; // IE9, LOL! - http://jsfiddle.net/niklasvh/2e48b/ + return link.protocol + link.hostname + link.port; + }; + CacheStorage.isSameOrigin = function (src) { + return CacheStorage.getOrigin(src) === CacheStorage._origin; + }; + CacheStorage.setContext = function (window) { + CacheStorage._link = window.document.createElement('a'); + CacheStorage._origin = CacheStorage.getOrigin(window.location.href); + }; + CacheStorage.getInstance = function () { + var current = CacheStorage._current; + if (current === null) { + throw new Error("No cache instance attached"); + } + return current; + }; + CacheStorage.attachInstance = function (cache) { + CacheStorage._current = cache; + }; + CacheStorage.detachInstance = function () { + CacheStorage._current = null; + }; + CacheStorage._caches = {}; + CacheStorage._origin = 'about:blank'; + CacheStorage._current = null; + return CacheStorage; + }()); + var Cache = /** @class */ (function () { + function Cache(id, options) { + this.id = id; + this._options = options; + this._cache = {}; + } + Cache.prototype.addImage = function (src) { + var result = Promise.resolve(); + if (this.has(src)) { + return result; + } + if (isBlobImage(src) || isRenderable(src)) { + this._cache[src] = this.loadImage(src); + return result; + } + return result; + }; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Cache.prototype.match = function (src) { + return this._cache[src]; + }; + Cache.prototype.loadImage = function (key) { + return __awaiter(this, void 0, void 0, function () { + var isSameOrigin, useCORS, useProxy, src; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + isSameOrigin = CacheStorage.isSameOrigin(key); + useCORS = !isInlineImage(key) && this._options.useCORS === true && FEATURES.SUPPORT_CORS_IMAGES && !isSameOrigin; + useProxy = !isInlineImage(key) && + !isSameOrigin && + typeof this._options.proxy === 'string' && + FEATURES.SUPPORT_CORS_XHR && + !useCORS; + if (!isSameOrigin && this._options.allowTaint === false && !isInlineImage(key) && !useProxy && !useCORS) { + return [2 /*return*/]; + } + src = key; + if (!useProxy) return [3 /*break*/, 2]; + return [4 /*yield*/, this.proxy(src)]; + case 1: + src = _a.sent(); + _a.label = 2; + case 2: + Logger.getInstance(this.id).debug("Added image " + key.substring(0, 256)); + return [4 /*yield*/, new Promise(function (resolve, reject) { + var img = new Image(); + img.onload = function () { return resolve(img); }; + img.onerror = reject; + //ios safari 10.3 taints canvas with data urls unless crossOrigin is set to anonymous + if (isInlineBase64Image(src) || useCORS) { + img.crossOrigin = 'anonymous'; + } + img.src = src; + if (img.complete === true) { + // Inline XML images may fail to parse, throwing an Error later on + setTimeout(function () { return resolve(img); }, 500); + } + if (_this._options.imageTimeout > 0) { + setTimeout(function () { return reject("Timed out (" + _this._options.imageTimeout + "ms) loading image"); }, _this._options.imageTimeout); + } + })]; + case 3: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + Cache.prototype.has = function (key) { + return typeof this._cache[key] !== 'undefined'; + }; + Cache.prototype.keys = function () { + return Promise.resolve(Object.keys(this._cache)); + }; + Cache.prototype.proxy = function (src) { + var _this = this; + var proxy = this._options.proxy; + if (!proxy) { + throw new Error('No proxy defined'); + } + var key = src.substring(0, 256); + return new Promise(function (resolve, reject) { + var responseType = FEATURES.SUPPORT_RESPONSE_TYPE ? 'blob' : 'text'; + var xhr = new XMLHttpRequest(); + xhr.onload = function () { + if (xhr.status === 200) { + if (responseType === 'text') { + resolve(xhr.response); + } + else { + var reader_1 = new FileReader(); + reader_1.addEventListener('load', function () { return resolve(reader_1.result); }, false); + reader_1.addEventListener('error', function (e) { return reject(e); }, false); + reader_1.readAsDataURL(xhr.response); + } + } + else { + reject("Failed to proxy resource " + key + " with status code " + xhr.status); + } + }; + xhr.onerror = reject; + xhr.open('GET', proxy + "?url=" + encodeURIComponent(src) + "&responseType=" + responseType); + if (responseType !== 'text' && xhr instanceof XMLHttpRequest) { + xhr.responseType = responseType; + } + if (_this._options.imageTimeout) { + var timeout_1 = _this._options.imageTimeout; + xhr.timeout = timeout_1; + xhr.ontimeout = function () { return reject("Timed out (" + timeout_1 + "ms) proxying " + key); }; + } + xhr.send(); + }); + }; + return Cache; + }()); + var INLINE_SVG = /^data:image\/svg\+xml/i; + var INLINE_BASE64 = /^data:image\/.*;base64,/i; + var INLINE_IMG = /^data:image\/.*/i; + var isRenderable = function (src) { return FEATURES.SUPPORT_SVG_DRAWING || !isSVG(src); }; + var isInlineImage = function (src) { return INLINE_IMG.test(src); }; + var isInlineBase64Image = function (src) { return INLINE_BASE64.test(src); }; + var isBlobImage = function (src) { return src.substr(0, 4) === 'blob'; }; + var isSVG = function (src) { return src.substr(-3).toLowerCase() === 'svg' || INLINE_SVG.test(src); }; + + var webkitGradient = function (tokens) { + var angle = deg(180); + var stops = []; + var type = CSSImageType.LINEAR_GRADIENT; + var shape = CSSRadialShape.CIRCLE; + var size = CSSRadialExtent.FARTHEST_CORNER; + var position = []; + parseFunctionArgs(tokens).forEach(function (arg, i) { + var firstToken = arg[0]; + if (i === 0) { + if (isIdentToken(firstToken) && firstToken.value === 'linear') { + type = CSSImageType.LINEAR_GRADIENT; + return; + } + else if (isIdentToken(firstToken) && firstToken.value === 'radial') { + type = CSSImageType.RADIAL_GRADIENT; + return; + } + } + if (firstToken.type === TokenType.FUNCTION) { + if (firstToken.name === 'from') { + var color$1 = color.parse(firstToken.values[0]); + stops.push({ stop: ZERO_LENGTH, color: color$1 }); + } + else if (firstToken.name === 'to') { + var color$1 = color.parse(firstToken.values[0]); + stops.push({ stop: HUNDRED_PERCENT, color: color$1 }); + } + else if (firstToken.name === 'color-stop') { + var values = firstToken.values.filter(nonFunctionArgSeparator); + if (values.length === 2) { + var color$1 = color.parse(values[1]); + var stop_1 = values[0]; + if (isNumberToken(stop_1)) { + stops.push({ + stop: { type: TokenType.PERCENTAGE_TOKEN, number: stop_1.number * 100, flags: stop_1.flags }, + color: color$1 + }); + } + } + } + } + }); + return type === CSSImageType.LINEAR_GRADIENT + ? { + angle: (angle + deg(180)) % deg(360), + stops: stops, + type: type + } + : { size: size, shape: shape, stops: stops, position: position, type: type }; + }; + + var CLOSEST_SIDE = 'closest-side'; + var FARTHEST_SIDE = 'farthest-side'; + var CLOSEST_CORNER = 'closest-corner'; + var FARTHEST_CORNER = 'farthest-corner'; + var CIRCLE = 'circle'; + var ELLIPSE = 'ellipse'; + var COVER = 'cover'; + var CONTAIN = 'contain'; + var radialGradient = function (tokens) { + var shape = CSSRadialShape.CIRCLE; + var size = CSSRadialExtent.FARTHEST_CORNER; + var stops = []; + var position = []; + parseFunctionArgs(tokens).forEach(function (arg, i) { + var isColorStop = true; + if (i === 0) { + var isAtPosition_1 = false; + isColorStop = arg.reduce(function (acc, token) { + if (isAtPosition_1) { + if (isIdentToken(token)) { + switch (token.value) { + case 'center': + position.push(FIFTY_PERCENT); + return acc; + case 'top': + case 'left': + position.push(ZERO_LENGTH); + return acc; + case 'right': + case 'bottom': + position.push(HUNDRED_PERCENT); + return acc; + } + } + else if (isLengthPercentage(token) || isLength(token)) { + position.push(token); + } + } + else if (isIdentToken(token)) { + switch (token.value) { + case CIRCLE: + shape = CSSRadialShape.CIRCLE; + return false; + case ELLIPSE: + shape = CSSRadialShape.ELLIPSE; + return false; + case 'at': + isAtPosition_1 = true; + return false; + case CLOSEST_SIDE: + size = CSSRadialExtent.CLOSEST_SIDE; + return false; + case COVER: + case FARTHEST_SIDE: + size = CSSRadialExtent.FARTHEST_SIDE; + return false; + case CONTAIN: + case CLOSEST_CORNER: + size = CSSRadialExtent.CLOSEST_CORNER; + return false; + case FARTHEST_CORNER: + size = CSSRadialExtent.FARTHEST_CORNER; + return false; + } + } + else if (isLength(token) || isLengthPercentage(token)) { + if (!Array.isArray(size)) { + size = []; + } + size.push(token); + return false; + } + return acc; + }, isColorStop); + } + if (isColorStop) { + var colorStop = parseColorStop(arg); + stops.push(colorStop); + } + }); + return { size: size, shape: shape, stops: stops, position: position, type: CSSImageType.RADIAL_GRADIENT }; + }; + + var prefixRadialGradient = function (tokens) { + var shape = CSSRadialShape.CIRCLE; + var size = CSSRadialExtent.FARTHEST_CORNER; + var stops = []; + var position = []; + parseFunctionArgs(tokens).forEach(function (arg, i) { + var isColorStop = true; + if (i === 0) { + isColorStop = arg.reduce(function (acc, token) { + if (isIdentToken(token)) { + switch (token.value) { + case 'center': + position.push(FIFTY_PERCENT); + return false; + case 'top': + case 'left': + position.push(ZERO_LENGTH); + return false; + case 'right': + case 'bottom': + position.push(HUNDRED_PERCENT); + return false; + } + } + else if (isLengthPercentage(token) || isLength(token)) { + position.push(token); + return false; + } + return acc; + }, isColorStop); + } + else if (i === 1) { + isColorStop = arg.reduce(function (acc, token) { + if (isIdentToken(token)) { + switch (token.value) { + case CIRCLE: + shape = CSSRadialShape.CIRCLE; + return false; + case ELLIPSE: + shape = CSSRadialShape.ELLIPSE; + return false; + case CONTAIN: + case CLOSEST_SIDE: + size = CSSRadialExtent.CLOSEST_SIDE; + return false; + case FARTHEST_SIDE: + size = CSSRadialExtent.FARTHEST_SIDE; + return false; + case CLOSEST_CORNER: + size = CSSRadialExtent.CLOSEST_CORNER; + return false; + case COVER: + case FARTHEST_CORNER: + size = CSSRadialExtent.FARTHEST_CORNER; + return false; + } + } + else if (isLength(token) || isLengthPercentage(token)) { + if (!Array.isArray(size)) { + size = []; + } + size.push(token); + return false; + } + return acc; + }, isColorStop); + } + if (isColorStop) { + var colorStop = parseColorStop(arg); + stops.push(colorStop); + } + }); + return { size: size, shape: shape, stops: stops, position: position, type: CSSImageType.RADIAL_GRADIENT }; + }; + + var CSSImageType; + (function (CSSImageType) { + CSSImageType[CSSImageType["URL"] = 0] = "URL"; + CSSImageType[CSSImageType["LINEAR_GRADIENT"] = 1] = "LINEAR_GRADIENT"; + CSSImageType[CSSImageType["RADIAL_GRADIENT"] = 2] = "RADIAL_GRADIENT"; + })(CSSImageType || (CSSImageType = {})); + var isLinearGradient = function (background) { + return background.type === CSSImageType.LINEAR_GRADIENT; + }; + var isRadialGradient = function (background) { + return background.type === CSSImageType.RADIAL_GRADIENT; + }; + var CSSRadialShape; + (function (CSSRadialShape) { + CSSRadialShape[CSSRadialShape["CIRCLE"] = 0] = "CIRCLE"; + CSSRadialShape[CSSRadialShape["ELLIPSE"] = 1] = "ELLIPSE"; + })(CSSRadialShape || (CSSRadialShape = {})); + var CSSRadialExtent; + (function (CSSRadialExtent) { + CSSRadialExtent[CSSRadialExtent["CLOSEST_SIDE"] = 0] = "CLOSEST_SIDE"; + CSSRadialExtent[CSSRadialExtent["FARTHEST_SIDE"] = 1] = "FARTHEST_SIDE"; + CSSRadialExtent[CSSRadialExtent["CLOSEST_CORNER"] = 2] = "CLOSEST_CORNER"; + CSSRadialExtent[CSSRadialExtent["FARTHEST_CORNER"] = 3] = "FARTHEST_CORNER"; + })(CSSRadialExtent || (CSSRadialExtent = {})); + var image = { + name: 'image', + parse: function (value) { + if (value.type === TokenType.URL_TOKEN) { + var image_1 = { url: value.value, type: CSSImageType.URL }; + CacheStorage.getInstance().addImage(value.value); + return image_1; + } + if (value.type === TokenType.FUNCTION) { + var imageFunction = SUPPORTED_IMAGE_FUNCTIONS[value.name]; + if (typeof imageFunction === 'undefined') { + throw new Error("Attempting to parse an unsupported image function \"" + value.name + "\""); + } + return imageFunction(value.values); + } + throw new Error("Unsupported image type"); + } + }; + function isSupportedImage(value) { + return value.type !== TokenType.FUNCTION || SUPPORTED_IMAGE_FUNCTIONS[value.name]; + } + var SUPPORTED_IMAGE_FUNCTIONS = { + 'linear-gradient': linearGradient, + '-moz-linear-gradient': prefixLinearGradient, + '-ms-linear-gradient': prefixLinearGradient, + '-o-linear-gradient': prefixLinearGradient, + '-webkit-linear-gradient': prefixLinearGradient, + 'radial-gradient': radialGradient, + '-moz-radial-gradient': prefixRadialGradient, + '-ms-radial-gradient': prefixRadialGradient, + '-o-radial-gradient': prefixRadialGradient, + '-webkit-radial-gradient': prefixRadialGradient, + '-webkit-gradient': webkitGradient + }; + + var backgroundImage = { + name: 'background-image', + initialValue: 'none', + type: PropertyDescriptorParsingType.LIST, + prefix: false, + parse: function (tokens) { + if (tokens.length === 0) { + return []; + } + var first = tokens[0]; + if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') { + return []; + } + return tokens.filter(function (value) { return nonFunctionArgSeparator(value) && isSupportedImage(value); }).map(image.parse); + } + }; + + var backgroundOrigin = { + name: 'background-origin', + initialValue: 'border-box', + prefix: false, + type: PropertyDescriptorParsingType.LIST, + parse: function (tokens) { + return tokens.map(function (token) { + if (isIdentToken(token)) { + switch (token.value) { + case 'padding-box': + return 1 /* PADDING_BOX */; + case 'content-box': + return 2 /* CONTENT_BOX */; + } + } + return 0 /* BORDER_BOX */; + }); + } + }; + + var backgroundPosition = { + name: 'background-position', + initialValue: '0% 0%', + type: PropertyDescriptorParsingType.LIST, + prefix: false, + parse: function (tokens) { + return parseFunctionArgs(tokens) + .map(function (values) { return values.filter(isLengthPercentage); }) + .map(parseLengthPercentageTuple); + } + }; + + var BACKGROUND_REPEAT; + (function (BACKGROUND_REPEAT) { + BACKGROUND_REPEAT[BACKGROUND_REPEAT["REPEAT"] = 0] = "REPEAT"; + BACKGROUND_REPEAT[BACKGROUND_REPEAT["NO_REPEAT"] = 1] = "NO_REPEAT"; + BACKGROUND_REPEAT[BACKGROUND_REPEAT["REPEAT_X"] = 2] = "REPEAT_X"; + BACKGROUND_REPEAT[BACKGROUND_REPEAT["REPEAT_Y"] = 3] = "REPEAT_Y"; + })(BACKGROUND_REPEAT || (BACKGROUND_REPEAT = {})); + var backgroundRepeat = { + name: 'background-repeat', + initialValue: 'repeat', + prefix: false, + type: PropertyDescriptorParsingType.LIST, + parse: function (tokens) { + return parseFunctionArgs(tokens) + .map(function (values) { + return values + .filter(isIdentToken) + .map(function (token) { return token.value; }) + .join(' '); + }) + .map(parseBackgroundRepeat); + } + }; + var parseBackgroundRepeat = function (value) { + switch (value) { + case 'no-repeat': + return BACKGROUND_REPEAT.NO_REPEAT; + case 'repeat-x': + case 'repeat no-repeat': + return BACKGROUND_REPEAT.REPEAT_X; + case 'repeat-y': + case 'no-repeat repeat': + return BACKGROUND_REPEAT.REPEAT_Y; + case 'repeat': + default: + return BACKGROUND_REPEAT.REPEAT; + } + }; + + var BACKGROUND_SIZE; + (function (BACKGROUND_SIZE) { + BACKGROUND_SIZE["AUTO"] = "auto"; + BACKGROUND_SIZE["CONTAIN"] = "contain"; + BACKGROUND_SIZE["COVER"] = "cover"; + })(BACKGROUND_SIZE || (BACKGROUND_SIZE = {})); + var backgroundSize = { + name: 'background-size', + initialValue: '0', + prefix: false, + type: PropertyDescriptorParsingType.LIST, + parse: function (tokens) { + return parseFunctionArgs(tokens).map(function (values) { return values.filter(isBackgroundSizeInfoToken); }); + } + }; + var isBackgroundSizeInfoToken = function (value) { + return isIdentToken(value) || isLengthPercentage(value); + }; + + var borderColorForSide = function (side) { return ({ + name: "border-" + side + "-color", + initialValue: 'transparent', + prefix: false, + type: PropertyDescriptorParsingType.TYPE_VALUE, + format: 'color' + }); }; + var borderTopColor = borderColorForSide('top'); + var borderRightColor = borderColorForSide('right'); + var borderBottomColor = borderColorForSide('bottom'); + var borderLeftColor = borderColorForSide('left'); + + var borderRadiusForSide = function (side) { return ({ + name: "border-radius-" + side, + initialValue: '0 0', + prefix: false, + type: PropertyDescriptorParsingType.LIST, + parse: function (tokens) { return parseLengthPercentageTuple(tokens.filter(isLengthPercentage)); } + }); }; + var borderTopLeftRadius = borderRadiusForSide('top-left'); + var borderTopRightRadius = borderRadiusForSide('top-right'); + var borderBottomRightRadius = borderRadiusForSide('bottom-right'); + var borderBottomLeftRadius = borderRadiusForSide('bottom-left'); + + var BORDER_STYLE; + (function (BORDER_STYLE) { + BORDER_STYLE[BORDER_STYLE["NONE"] = 0] = "NONE"; + BORDER_STYLE[BORDER_STYLE["SOLID"] = 1] = "SOLID"; + BORDER_STYLE[BORDER_STYLE["DASHED"] = 2] = "DASHED"; + BORDER_STYLE[BORDER_STYLE["DOTTED"] = 3] = "DOTTED"; + BORDER_STYLE[BORDER_STYLE["DOUBLE"] = 4] = "DOUBLE"; + })(BORDER_STYLE || (BORDER_STYLE = {})); + var borderStyleForSide = function (side) { return ({ + name: "border-" + side + "-style", + initialValue: 'solid', + prefix: false, + type: PropertyDescriptorParsingType.IDENT_VALUE, + parse: function (style) { + switch (style) { + case 'none': + return BORDER_STYLE.NONE; + case 'dashed': + return BORDER_STYLE.DASHED; + case 'dotted': + return BORDER_STYLE.DOTTED; + case 'double': + return BORDER_STYLE.DOUBLE; + } + return BORDER_STYLE.SOLID; + } + }); }; + var borderTopStyle = borderStyleForSide('top'); + var borderRightStyle = borderStyleForSide('right'); + var borderBottomStyle = borderStyleForSide('bottom'); + var borderLeftStyle = borderStyleForSide('left'); + + var borderWidthForSide = function (side) { return ({ + name: "border-" + side + "-width", + initialValue: '0', + type: PropertyDescriptorParsingType.VALUE, + prefix: false, + parse: function (token) { + if (isDimensionToken(token)) { + return token.number; + } + return 0; + } + }); }; + var borderTopWidth = borderWidthForSide('top'); + var borderRightWidth = borderWidthForSide('right'); + var borderBottomWidth = borderWidthForSide('bottom'); + var borderLeftWidth = borderWidthForSide('left'); + + var color$1 = { + name: "color", + initialValue: 'transparent', + prefix: false, + type: PropertyDescriptorParsingType.TYPE_VALUE, + format: 'color' + }; + + var display = { + name: 'display', + initialValue: 'inline-block', + prefix: false, + type: PropertyDescriptorParsingType.LIST, + parse: function (tokens) { + return tokens.filter(isIdentToken).reduce(function (bit, token) { + return bit | parseDisplayValue(token.value); + }, 0 /* NONE */); + } + }; + var parseDisplayValue = function (display) { + switch (display) { + case 'block': + case '-webkit-box': + return 2 /* BLOCK */; + case 'inline': + return 4 /* INLINE */; + case 'run-in': + return 8 /* RUN_IN */; + case 'flow': + return 16 /* FLOW */; + case 'flow-root': + return 32 /* FLOW_ROOT */; + case 'table': + return 64 /* TABLE */; + case 'flex': + case '-webkit-flex': + return 128 /* FLEX */; + case 'grid': + case '-ms-grid': + return 256 /* GRID */; + case 'ruby': + return 512 /* RUBY */; + case 'subgrid': + return 1024 /* SUBGRID */; + case 'list-item': + return 2048 /* LIST_ITEM */; + case 'table-row-group': + return 4096 /* TABLE_ROW_GROUP */; + case 'table-header-group': + return 8192 /* TABLE_HEADER_GROUP */; + case 'table-footer-group': + return 16384 /* TABLE_FOOTER_GROUP */; + case 'table-row': + return 32768 /* TABLE_ROW */; + case 'table-cell': + return 65536 /* TABLE_CELL */; + case 'table-column-group': + return 131072 /* TABLE_COLUMN_GROUP */; + case 'table-column': + return 262144 /* TABLE_COLUMN */; + case 'table-caption': + return 524288 /* TABLE_CAPTION */; + case 'ruby-base': + return 1048576 /* RUBY_BASE */; + case 'ruby-text': + return 2097152 /* RUBY_TEXT */; + case 'ruby-base-container': + return 4194304 /* RUBY_BASE_CONTAINER */; + case 'ruby-text-container': + return 8388608 /* RUBY_TEXT_CONTAINER */; + case 'contents': + return 16777216 /* CONTENTS */; + case 'inline-block': + return 33554432 /* INLINE_BLOCK */; + case 'inline-list-item': + return 67108864 /* INLINE_LIST_ITEM */; + case 'inline-table': + return 134217728 /* INLINE_TABLE */; + case 'inline-flex': + return 268435456 /* INLINE_FLEX */; + case 'inline-grid': + return 536870912 /* INLINE_GRID */; + } + return 0 /* NONE */; + }; + + var FLOAT; + (function (FLOAT) { + FLOAT[FLOAT["NONE"] = 0] = "NONE"; + FLOAT[FLOAT["LEFT"] = 1] = "LEFT"; + FLOAT[FLOAT["RIGHT"] = 2] = "RIGHT"; + FLOAT[FLOAT["INLINE_START"] = 3] = "INLINE_START"; + FLOAT[FLOAT["INLINE_END"] = 4] = "INLINE_END"; + })(FLOAT || (FLOAT = {})); + var float = { + name: 'float', + initialValue: 'none', + prefix: false, + type: PropertyDescriptorParsingType.IDENT_VALUE, + parse: function (float) { + switch (float) { + case 'left': + return FLOAT.LEFT; + case 'right': + return FLOAT.RIGHT; + case 'inline-start': + return FLOAT.INLINE_START; + case 'inline-end': + return FLOAT.INLINE_END; + } + return FLOAT.NONE; + } + }; + + var letterSpacing = { + name: 'letter-spacing', + initialValue: '0', + prefix: false, + type: PropertyDescriptorParsingType.VALUE, + parse: function (token) { + if (token.type === TokenType.IDENT_TOKEN && token.value === 'normal') { + return 0; + } + if (token.type === TokenType.NUMBER_TOKEN) { + return token.number; + } + if (token.type === TokenType.DIMENSION_TOKEN) { + return token.number; + } + return 0; + } + }; + + var LINE_BREAK; + (function (LINE_BREAK) { + LINE_BREAK["NORMAL"] = "normal"; + LINE_BREAK["STRICT"] = "strict"; + })(LINE_BREAK || (LINE_BREAK = {})); + var lineBreak = { + name: 'line-break', + initialValue: 'normal', + prefix: false, + type: PropertyDescriptorParsingType.IDENT_VALUE, + parse: function (lineBreak) { + switch (lineBreak) { + case 'strict': + return LINE_BREAK.STRICT; + case 'normal': + default: + return LINE_BREAK.NORMAL; + } + } + }; + + var lineHeight = { + name: 'line-height', + initialValue: 'normal', + prefix: false, + type: PropertyDescriptorParsingType.TOKEN_VALUE + }; + var computeLineHeight = function (token, fontSize) { + if (isIdentToken(token) && token.value === 'normal') { + return 1.2 * fontSize; + } + else if (token.type === TokenType.NUMBER_TOKEN) { + return fontSize * token.number; + } + else if (isLengthPercentage(token)) { + return getAbsoluteValue(token, fontSize); + } + return fontSize; + }; + + var listStyleImage = { + name: 'list-style-image', + initialValue: 'none', + type: PropertyDescriptorParsingType.VALUE, + prefix: false, + parse: function (token) { + if (token.type === TokenType.IDENT_TOKEN && token.value === 'none') { + return null; + } + return image.parse(token); + } + }; + + var LIST_STYLE_POSITION; + (function (LIST_STYLE_POSITION) { + LIST_STYLE_POSITION[LIST_STYLE_POSITION["INSIDE"] = 0] = "INSIDE"; + LIST_STYLE_POSITION[LIST_STYLE_POSITION["OUTSIDE"] = 1] = "OUTSIDE"; + })(LIST_STYLE_POSITION || (LIST_STYLE_POSITION = {})); + var listStylePosition = { + name: 'list-style-position', + initialValue: 'outside', + prefix: false, + type: PropertyDescriptorParsingType.IDENT_VALUE, + parse: function (position) { + switch (position) { + case 'inside': + return LIST_STYLE_POSITION.INSIDE; + case 'outside': + default: + return LIST_STYLE_POSITION.OUTSIDE; + } + } + }; + + var LIST_STYLE_TYPE; + (function (LIST_STYLE_TYPE) { + LIST_STYLE_TYPE[LIST_STYLE_TYPE["NONE"] = -1] = "NONE"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["DISC"] = 0] = "DISC"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["CIRCLE"] = 1] = "CIRCLE"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["SQUARE"] = 2] = "SQUARE"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["DECIMAL"] = 3] = "DECIMAL"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["CJK_DECIMAL"] = 4] = "CJK_DECIMAL"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["DECIMAL_LEADING_ZERO"] = 5] = "DECIMAL_LEADING_ZERO"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["LOWER_ROMAN"] = 6] = "LOWER_ROMAN"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["UPPER_ROMAN"] = 7] = "UPPER_ROMAN"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["LOWER_GREEK"] = 8] = "LOWER_GREEK"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["LOWER_ALPHA"] = 9] = "LOWER_ALPHA"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["UPPER_ALPHA"] = 10] = "UPPER_ALPHA"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["ARABIC_INDIC"] = 11] = "ARABIC_INDIC"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["ARMENIAN"] = 12] = "ARMENIAN"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["BENGALI"] = 13] = "BENGALI"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["CAMBODIAN"] = 14] = "CAMBODIAN"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["CJK_EARTHLY_BRANCH"] = 15] = "CJK_EARTHLY_BRANCH"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["CJK_HEAVENLY_STEM"] = 16] = "CJK_HEAVENLY_STEM"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["CJK_IDEOGRAPHIC"] = 17] = "CJK_IDEOGRAPHIC"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["DEVANAGARI"] = 18] = "DEVANAGARI"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["ETHIOPIC_NUMERIC"] = 19] = "ETHIOPIC_NUMERIC"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["GEORGIAN"] = 20] = "GEORGIAN"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["GUJARATI"] = 21] = "GUJARATI"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["GURMUKHI"] = 22] = "GURMUKHI"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["HEBREW"] = 22] = "HEBREW"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["HIRAGANA"] = 23] = "HIRAGANA"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["HIRAGANA_IROHA"] = 24] = "HIRAGANA_IROHA"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["JAPANESE_FORMAL"] = 25] = "JAPANESE_FORMAL"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["JAPANESE_INFORMAL"] = 26] = "JAPANESE_INFORMAL"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["KANNADA"] = 27] = "KANNADA"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["KATAKANA"] = 28] = "KATAKANA"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["KATAKANA_IROHA"] = 29] = "KATAKANA_IROHA"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["KHMER"] = 30] = "KHMER"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["KOREAN_HANGUL_FORMAL"] = 31] = "KOREAN_HANGUL_FORMAL"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["KOREAN_HANJA_FORMAL"] = 32] = "KOREAN_HANJA_FORMAL"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["KOREAN_HANJA_INFORMAL"] = 33] = "KOREAN_HANJA_INFORMAL"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["LAO"] = 34] = "LAO"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["LOWER_ARMENIAN"] = 35] = "LOWER_ARMENIAN"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["MALAYALAM"] = 36] = "MALAYALAM"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["MONGOLIAN"] = 37] = "MONGOLIAN"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["MYANMAR"] = 38] = "MYANMAR"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["ORIYA"] = 39] = "ORIYA"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["PERSIAN"] = 40] = "PERSIAN"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["SIMP_CHINESE_FORMAL"] = 41] = "SIMP_CHINESE_FORMAL"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["SIMP_CHINESE_INFORMAL"] = 42] = "SIMP_CHINESE_INFORMAL"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["TAMIL"] = 43] = "TAMIL"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["TELUGU"] = 44] = "TELUGU"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["THAI"] = 45] = "THAI"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["TIBETAN"] = 46] = "TIBETAN"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["TRAD_CHINESE_FORMAL"] = 47] = "TRAD_CHINESE_FORMAL"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["TRAD_CHINESE_INFORMAL"] = 48] = "TRAD_CHINESE_INFORMAL"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["UPPER_ARMENIAN"] = 49] = "UPPER_ARMENIAN"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["DISCLOSURE_OPEN"] = 50] = "DISCLOSURE_OPEN"; + LIST_STYLE_TYPE[LIST_STYLE_TYPE["DISCLOSURE_CLOSED"] = 51] = "DISCLOSURE_CLOSED"; + })(LIST_STYLE_TYPE || (LIST_STYLE_TYPE = {})); + var listStyleType = { + name: 'list-style-type', + initialValue: 'none', + prefix: false, + type: PropertyDescriptorParsingType.IDENT_VALUE, + parse: function (type) { + switch (type) { + case 'disc': + return LIST_STYLE_TYPE.DISC; + case 'circle': + return LIST_STYLE_TYPE.CIRCLE; + case 'square': + return LIST_STYLE_TYPE.SQUARE; + case 'decimal': + return LIST_STYLE_TYPE.DECIMAL; + case 'cjk-decimal': + return LIST_STYLE_TYPE.CJK_DECIMAL; + case 'decimal-leading-zero': + return LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO; + case 'lower-roman': + return LIST_STYLE_TYPE.LOWER_ROMAN; + case 'upper-roman': + return LIST_STYLE_TYPE.UPPER_ROMAN; + case 'lower-greek': + return LIST_STYLE_TYPE.LOWER_GREEK; + case 'lower-alpha': + return LIST_STYLE_TYPE.LOWER_ALPHA; + case 'upper-alpha': + return LIST_STYLE_TYPE.UPPER_ALPHA; + case 'arabic-indic': + return LIST_STYLE_TYPE.ARABIC_INDIC; + case 'armenian': + return LIST_STYLE_TYPE.ARMENIAN; + case 'bengali': + return LIST_STYLE_TYPE.BENGALI; + case 'cambodian': + return LIST_STYLE_TYPE.CAMBODIAN; + case 'cjk-earthly-branch': + return LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH; + case 'cjk-heavenly-stem': + return LIST_STYLE_TYPE.CJK_HEAVENLY_STEM; + case 'cjk-ideographic': + return LIST_STYLE_TYPE.CJK_IDEOGRAPHIC; + case 'devanagari': + return LIST_STYLE_TYPE.DEVANAGARI; + case 'ethiopic-numeric': + return LIST_STYLE_TYPE.ETHIOPIC_NUMERIC; + case 'georgian': + return LIST_STYLE_TYPE.GEORGIAN; + case 'gujarati': + return LIST_STYLE_TYPE.GUJARATI; + case 'gurmukhi': + return LIST_STYLE_TYPE.GURMUKHI; + case 'hebrew': + return LIST_STYLE_TYPE.HEBREW; + case 'hiragana': + return LIST_STYLE_TYPE.HIRAGANA; + case 'hiragana-iroha': + return LIST_STYLE_TYPE.HIRAGANA_IROHA; + case 'japanese-formal': + return LIST_STYLE_TYPE.JAPANESE_FORMAL; + case 'japanese-informal': + return LIST_STYLE_TYPE.JAPANESE_INFORMAL; + case 'kannada': + return LIST_STYLE_TYPE.KANNADA; + case 'katakana': + return LIST_STYLE_TYPE.KATAKANA; + case 'katakana-iroha': + return LIST_STYLE_TYPE.KATAKANA_IROHA; + case 'khmer': + return LIST_STYLE_TYPE.KHMER; + case 'korean-hangul-formal': + return LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL; + case 'korean-hanja-formal': + return LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL; + case 'korean-hanja-informal': + return LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL; + case 'lao': + return LIST_STYLE_TYPE.LAO; + case 'lower-armenian': + return LIST_STYLE_TYPE.LOWER_ARMENIAN; + case 'malayalam': + return LIST_STYLE_TYPE.MALAYALAM; + case 'mongolian': + return LIST_STYLE_TYPE.MONGOLIAN; + case 'myanmar': + return LIST_STYLE_TYPE.MYANMAR; + case 'oriya': + return LIST_STYLE_TYPE.ORIYA; + case 'persian': + return LIST_STYLE_TYPE.PERSIAN; + case 'simp-chinese-formal': + return LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL; + case 'simp-chinese-informal': + return LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL; + case 'tamil': + return LIST_STYLE_TYPE.TAMIL; + case 'telugu': + return LIST_STYLE_TYPE.TELUGU; + case 'thai': + return LIST_STYLE_TYPE.THAI; + case 'tibetan': + return LIST_STYLE_TYPE.TIBETAN; + case 'trad-chinese-formal': + return LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL; + case 'trad-chinese-informal': + return LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL; + case 'upper-armenian': + return LIST_STYLE_TYPE.UPPER_ARMENIAN; + case 'disclosure-open': + return LIST_STYLE_TYPE.DISCLOSURE_OPEN; + case 'disclosure-closed': + return LIST_STYLE_TYPE.DISCLOSURE_CLOSED; + case 'none': + default: + return LIST_STYLE_TYPE.NONE; + } + } + }; + + var marginForSide = function (side) { return ({ + name: "margin-" + side, + initialValue: '0', + prefix: false, + type: PropertyDescriptorParsingType.TOKEN_VALUE + }); }; + var marginTop = marginForSide('top'); + var marginRight = marginForSide('right'); + var marginBottom = marginForSide('bottom'); + var marginLeft = marginForSide('left'); + + var OVERFLOW; + (function (OVERFLOW) { + OVERFLOW[OVERFLOW["VISIBLE"] = 0] = "VISIBLE"; + OVERFLOW[OVERFLOW["HIDDEN"] = 1] = "HIDDEN"; + OVERFLOW[OVERFLOW["SCROLL"] = 2] = "SCROLL"; + OVERFLOW[OVERFLOW["AUTO"] = 3] = "AUTO"; + })(OVERFLOW || (OVERFLOW = {})); + var overflow = { + name: 'overflow', + initialValue: 'visible', + prefix: false, + type: PropertyDescriptorParsingType.LIST, + parse: function (tokens) { + return tokens.filter(isIdentToken).map(function (overflow) { + switch (overflow.value) { + case 'hidden': + return OVERFLOW.HIDDEN; + case 'scroll': + return OVERFLOW.SCROLL; + case 'auto': + return OVERFLOW.AUTO; + case 'visible': + default: + return OVERFLOW.VISIBLE; + } + }); + } + }; + + var OVERFLOW_WRAP; + (function (OVERFLOW_WRAP) { + OVERFLOW_WRAP["NORMAL"] = "normal"; + OVERFLOW_WRAP["BREAK_WORD"] = "break-word"; + })(OVERFLOW_WRAP || (OVERFLOW_WRAP = {})); + var overflowWrap = { + name: 'overflow-wrap', + initialValue: 'normal', + prefix: false, + type: PropertyDescriptorParsingType.IDENT_VALUE, + parse: function (overflow) { + switch (overflow) { + case 'break-word': + return OVERFLOW_WRAP.BREAK_WORD; + case 'normal': + default: + return OVERFLOW_WRAP.NORMAL; + } + } + }; + + var paddingForSide = function (side) { return ({ + name: "padding-" + side, + initialValue: '0', + prefix: false, + type: PropertyDescriptorParsingType.TYPE_VALUE, + format: 'length-percentage' + }); }; + var paddingTop = paddingForSide('top'); + var paddingRight = paddingForSide('right'); + var paddingBottom = paddingForSide('bottom'); + var paddingLeft = paddingForSide('left'); + + var TEXT_ALIGN; + (function (TEXT_ALIGN) { + TEXT_ALIGN[TEXT_ALIGN["LEFT"] = 0] = "LEFT"; + TEXT_ALIGN[TEXT_ALIGN["CENTER"] = 1] = "CENTER"; + TEXT_ALIGN[TEXT_ALIGN["RIGHT"] = 2] = "RIGHT"; + })(TEXT_ALIGN || (TEXT_ALIGN = {})); + var textAlign = { + name: 'text-align', + initialValue: 'left', + prefix: false, + type: PropertyDescriptorParsingType.IDENT_VALUE, + parse: function (textAlign) { + switch (textAlign) { + case 'right': + return TEXT_ALIGN.RIGHT; + case 'center': + case 'justify': + return TEXT_ALIGN.CENTER; + case 'left': + default: + return TEXT_ALIGN.LEFT; + } + } + }; + + var POSITION; + (function (POSITION) { + POSITION[POSITION["STATIC"] = 0] = "STATIC"; + POSITION[POSITION["RELATIVE"] = 1] = "RELATIVE"; + POSITION[POSITION["ABSOLUTE"] = 2] = "ABSOLUTE"; + POSITION[POSITION["FIXED"] = 3] = "FIXED"; + POSITION[POSITION["STICKY"] = 4] = "STICKY"; + })(POSITION || (POSITION = {})); + var position = { + name: 'position', + initialValue: 'static', + prefix: false, + type: PropertyDescriptorParsingType.IDENT_VALUE, + parse: function (position) { + switch (position) { + case 'relative': + return POSITION.RELATIVE; + case 'absolute': + return POSITION.ABSOLUTE; + case 'fixed': + return POSITION.FIXED; + case 'sticky': + return POSITION.STICKY; + } + return POSITION.STATIC; + } + }; + + var textShadow = { + name: 'text-shadow', + initialValue: 'none', + type: PropertyDescriptorParsingType.LIST, + prefix: false, + parse: function (tokens) { + if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) { + return []; + } + return parseFunctionArgs(tokens).map(function (values) { + var shadow = { + color: COLORS.TRANSPARENT, + offsetX: ZERO_LENGTH, + offsetY: ZERO_LENGTH, + blur: ZERO_LENGTH + }; + var c = 0; + for (var i = 0; i < values.length; i++) { + var token = values[i]; + if (isLength(token)) { + if (c === 0) { + shadow.offsetX = token; + } + else if (c === 1) { + shadow.offsetY = token; + } + else { + shadow.blur = token; + } + c++; + } + else { + shadow.color = color.parse(token); + } + } + return shadow; + }); + } + }; + + var TEXT_TRANSFORM; + (function (TEXT_TRANSFORM) { + TEXT_TRANSFORM[TEXT_TRANSFORM["NONE"] = 0] = "NONE"; + TEXT_TRANSFORM[TEXT_TRANSFORM["LOWERCASE"] = 1] = "LOWERCASE"; + TEXT_TRANSFORM[TEXT_TRANSFORM["UPPERCASE"] = 2] = "UPPERCASE"; + TEXT_TRANSFORM[TEXT_TRANSFORM["CAPITALIZE"] = 3] = "CAPITALIZE"; + })(TEXT_TRANSFORM || (TEXT_TRANSFORM = {})); + var textTransform = { + name: 'text-transform', + initialValue: 'none', + prefix: false, + type: PropertyDescriptorParsingType.IDENT_VALUE, + parse: function (textTransform) { + switch (textTransform) { + case 'uppercase': + return TEXT_TRANSFORM.UPPERCASE; + case 'lowercase': + return TEXT_TRANSFORM.LOWERCASE; + case 'capitalize': + return TEXT_TRANSFORM.CAPITALIZE; + } + return TEXT_TRANSFORM.NONE; + } + }; + + var transform = { + name: 'transform', + initialValue: 'none', + prefix: true, + type: PropertyDescriptorParsingType.VALUE, + parse: function (token) { + if (token.type === TokenType.IDENT_TOKEN && token.value === 'none') { + return null; + } + if (token.type === TokenType.FUNCTION) { + var transformFunction = SUPPORTED_TRANSFORM_FUNCTIONS[token.name]; + if (typeof transformFunction === 'undefined') { + throw new Error("Attempting to parse an unsupported transform function \"" + token.name + "\""); + } + return transformFunction(token.values); + } + return null; + } + }; + var matrix = function (args) { + var values = args.filter(function (arg) { return arg.type === TokenType.NUMBER_TOKEN; }).map(function (arg) { return arg.number; }); + return values.length === 6 ? values : null; + }; + // doesn't support 3D transforms at the moment + var matrix3d = function (args) { + var values = args.filter(function (arg) { return arg.type === TokenType.NUMBER_TOKEN; }).map(function (arg) { return arg.number; }); + var a1 = values[0], b1 = values[1], _a = values[2], _b = values[3], a2 = values[4], b2 = values[5], _c = values[6], _d = values[7], _e = values[8], _f = values[9], _g = values[10], _h = values[11], a4 = values[12], b4 = values[13], _j = values[14], _k = values[15]; + return values.length === 16 ? [a1, b1, a2, b2, a4, b4] : null; + }; + var SUPPORTED_TRANSFORM_FUNCTIONS = { + matrix: matrix, + matrix3d: matrix3d + }; + + var DEFAULT_VALUE = { + type: TokenType.PERCENTAGE_TOKEN, + number: 50, + flags: FLAG_INTEGER + }; + var DEFAULT = [DEFAULT_VALUE, DEFAULT_VALUE]; + var transformOrigin = { + name: 'transform-origin', + initialValue: '50% 50%', + prefix: true, + type: PropertyDescriptorParsingType.LIST, + parse: function (tokens) { + var origins = tokens.filter(isLengthPercentage); + if (origins.length !== 2) { + return DEFAULT; + } + return [origins[0], origins[1]]; + } + }; + + var VISIBILITY; + (function (VISIBILITY) { + VISIBILITY[VISIBILITY["VISIBLE"] = 0] = "VISIBLE"; + VISIBILITY[VISIBILITY["HIDDEN"] = 1] = "HIDDEN"; + VISIBILITY[VISIBILITY["COLLAPSE"] = 2] = "COLLAPSE"; + })(VISIBILITY || (VISIBILITY = {})); + var visibility = { + name: 'visible', + initialValue: 'none', + prefix: false, + type: PropertyDescriptorParsingType.IDENT_VALUE, + parse: function (visibility) { + switch (visibility) { + case 'hidden': + return VISIBILITY.HIDDEN; + case 'collapse': + return VISIBILITY.COLLAPSE; + case 'visible': + default: + return VISIBILITY.VISIBLE; + } + } + }; + + var WORD_BREAK; + (function (WORD_BREAK) { + WORD_BREAK["NORMAL"] = "normal"; + WORD_BREAK["BREAK_ALL"] = "break-all"; + WORD_BREAK["KEEP_ALL"] = "keep-all"; + })(WORD_BREAK || (WORD_BREAK = {})); + var wordBreak = { + name: 'word-break', + initialValue: 'normal', + prefix: false, + type: PropertyDescriptorParsingType.IDENT_VALUE, + parse: function (wordBreak) { + switch (wordBreak) { + case 'break-all': + return WORD_BREAK.BREAK_ALL; + case 'keep-all': + return WORD_BREAK.KEEP_ALL; + case 'normal': + default: + return WORD_BREAK.NORMAL; + } + } + }; + + var zIndex = { + name: 'z-index', + initialValue: 'auto', + prefix: false, + type: PropertyDescriptorParsingType.VALUE, + parse: function (token) { + if (token.type === TokenType.IDENT_TOKEN) { + return { auto: true, order: 0 }; + } + if (isNumberToken(token)) { + return { auto: false, order: token.number }; + } + throw new Error("Invalid z-index number parsed"); + } + }; + + var opacity = { + name: 'opacity', + initialValue: '1', + type: PropertyDescriptorParsingType.VALUE, + prefix: false, + parse: function (token) { + if (isNumberToken(token)) { + return token.number; + } + return 1; + } + }; + + var textDecorationColor = { + name: "text-decoration-color", + initialValue: 'transparent', + prefix: false, + type: PropertyDescriptorParsingType.TYPE_VALUE, + format: 'color' + }; + + var textDecorationLine = { + name: 'text-decoration-line', + initialValue: 'none', + prefix: false, + type: PropertyDescriptorParsingType.LIST, + parse: function (tokens) { + return tokens + .filter(isIdentToken) + .map(function (token) { + switch (token.value) { + case 'underline': + return 1 /* UNDERLINE */; + case 'overline': + return 2 /* OVERLINE */; + case 'line-through': + return 3 /* LINE_THROUGH */; + case 'none': + return 4 /* BLINK */; + } + return 0 /* NONE */; + }) + .filter(function (line) { return line !== 0 /* NONE */; }); + } + }; + + var fontFamily = { + name: "font-family", + initialValue: '', + prefix: false, + type: PropertyDescriptorParsingType.LIST, + parse: function (tokens) { + var accumulator = []; + var results = []; + tokens.forEach(function (token) { + switch (token.type) { + case TokenType.IDENT_TOKEN: + case TokenType.STRING_TOKEN: + accumulator.push(token.value); + break; + case TokenType.NUMBER_TOKEN: + accumulator.push(token.number.toString()); + break; + case TokenType.COMMA_TOKEN: + results.push(accumulator.join(' ')); + accumulator.length = 0; + break; + } + }); + if (accumulator.length) { + results.push(accumulator.join(' ')); + } + return results.map(function (result) { return (result.indexOf(' ') === -1 ? result : "'" + result + "'"); }); + } + }; + + var fontSize = { + name: "font-size", + initialValue: '0', + prefix: false, + type: PropertyDescriptorParsingType.TYPE_VALUE, + format: 'length' + }; + + var fontWeight = { + name: 'font-weight', + initialValue: 'normal', + type: PropertyDescriptorParsingType.VALUE, + prefix: false, + parse: function (token) { + if (isNumberToken(token)) { + return token.number; + } + if (isIdentToken(token)) { + switch (token.value) { + case 'bold': + return 700; + case 'normal': + default: + return 400; + } + } + return 400; + } + }; + + var fontVariant = { + name: 'font-variant', + initialValue: 'none', + type: PropertyDescriptorParsingType.LIST, + prefix: false, + parse: function (tokens) { + return tokens.filter(isIdentToken).map(function (token) { return token.value; }); + } + }; + + var FONT_STYLE; + (function (FONT_STYLE) { + FONT_STYLE["NORMAL"] = "normal"; + FONT_STYLE["ITALIC"] = "italic"; + FONT_STYLE["OBLIQUE"] = "oblique"; + })(FONT_STYLE || (FONT_STYLE = {})); + var fontStyle = { + name: 'font-style', + initialValue: 'normal', + prefix: false, + type: PropertyDescriptorParsingType.IDENT_VALUE, + parse: function (overflow) { + switch (overflow) { + case 'oblique': + return FONT_STYLE.OBLIQUE; + case 'italic': + return FONT_STYLE.ITALIC; + case 'normal': + default: + return FONT_STYLE.NORMAL; + } + } + }; + + var contains = function (bit, value) { return (bit & value) !== 0; }; + + var content = { + name: 'content', + initialValue: 'none', + type: PropertyDescriptorParsingType.LIST, + prefix: false, + parse: function (tokens) { + if (tokens.length === 0) { + return []; + } + var first = tokens[0]; + if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') { + return []; + } + return tokens; + } + }; + + var counterIncrement = { + name: 'counter-increment', + initialValue: 'none', + prefix: true, + type: PropertyDescriptorParsingType.LIST, + parse: function (tokens) { + if (tokens.length === 0) { + return null; + } + var first = tokens[0]; + if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') { + return null; + } + var increments = []; + var filtered = tokens.filter(nonWhiteSpace); + for (var i = 0; i < filtered.length; i++) { + var counter = filtered[i]; + var next = filtered[i + 1]; + if (counter.type === TokenType.IDENT_TOKEN) { + var increment = next && isNumberToken(next) ? next.number : 1; + increments.push({ counter: counter.value, increment: increment }); + } + } + return increments; + } + }; + + var counterReset = { + name: 'counter-reset', + initialValue: 'none', + prefix: true, + type: PropertyDescriptorParsingType.LIST, + parse: function (tokens) { + if (tokens.length === 0) { + return []; + } + var resets = []; + var filtered = tokens.filter(nonWhiteSpace); + for (var i = 0; i < filtered.length; i++) { + var counter = filtered[i]; + var next = filtered[i + 1]; + if (isIdentToken(counter) && counter.value !== 'none') { + var reset = next && isNumberToken(next) ? next.number : 0; + resets.push({ counter: counter.value, reset: reset }); + } + } + return resets; + } + }; + + var quotes = { + name: 'quotes', + initialValue: 'none', + prefix: true, + type: PropertyDescriptorParsingType.LIST, + parse: function (tokens) { + if (tokens.length === 0) { + return null; + } + var first = tokens[0]; + if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') { + return null; + } + var quotes = []; + var filtered = tokens.filter(isStringToken); + if (filtered.length % 2 !== 0) { + return null; + } + for (var i = 0; i < filtered.length; i += 2) { + var open_1 = filtered[i].value; + var close_1 = filtered[i + 1].value; + quotes.push({ open: open_1, close: close_1 }); + } + return quotes; + } + }; + var getQuote = function (quotes, depth, open) { + if (!quotes) { + return ''; + } + var quote = quotes[Math.min(depth, quotes.length - 1)]; + if (!quote) { + return ''; + } + return open ? quote.open : quote.close; + }; + + var boxShadow = { + name: 'box-shadow', + initialValue: 'none', + type: PropertyDescriptorParsingType.LIST, + prefix: false, + parse: function (tokens) { + if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) { + return []; + } + return parseFunctionArgs(tokens).map(function (values) { + var shadow = { + color: 0x000000ff, + offsetX: ZERO_LENGTH, + offsetY: ZERO_LENGTH, + blur: ZERO_LENGTH, + spread: ZERO_LENGTH, + inset: false + }; + var c = 0; + for (var i = 0; i < values.length; i++) { + var token = values[i]; + if (isIdentWithValue(token, 'inset')) { + shadow.inset = true; + } + else if (isLength(token)) { + if (c === 0) { + shadow.offsetX = token; + } + else if (c === 1) { + shadow.offsetY = token; + } + else if (c === 2) { + shadow.blur = token; + } + else { + shadow.spread = token; + } + c++; + } + else { + shadow.color = color.parse(token); + } + } + return shadow; + }); + } + }; + + var CSSParsedDeclaration = /** @class */ (function () { + function CSSParsedDeclaration(declaration) { + this.backgroundClip = parse(backgroundClip, declaration.backgroundClip); + this.backgroundColor = parse(backgroundColor, declaration.backgroundColor); + this.backgroundImage = parse(backgroundImage, declaration.backgroundImage); + this.backgroundOrigin = parse(backgroundOrigin, declaration.backgroundOrigin); + this.backgroundPosition = parse(backgroundPosition, declaration.backgroundPosition); + this.backgroundRepeat = parse(backgroundRepeat, declaration.backgroundRepeat); + this.backgroundSize = parse(backgroundSize, declaration.backgroundSize); + this.borderTopColor = parse(borderTopColor, declaration.borderTopColor); + this.borderRightColor = parse(borderRightColor, declaration.borderRightColor); + this.borderBottomColor = parse(borderBottomColor, declaration.borderBottomColor); + this.borderLeftColor = parse(borderLeftColor, declaration.borderLeftColor); + this.borderTopLeftRadius = parse(borderTopLeftRadius, declaration.borderTopLeftRadius); + this.borderTopRightRadius = parse(borderTopRightRadius, declaration.borderTopRightRadius); + this.borderBottomRightRadius = parse(borderBottomRightRadius, declaration.borderBottomRightRadius); + this.borderBottomLeftRadius = parse(borderBottomLeftRadius, declaration.borderBottomLeftRadius); + this.borderTopStyle = parse(borderTopStyle, declaration.borderTopStyle); + this.borderRightStyle = parse(borderRightStyle, declaration.borderRightStyle); + this.borderBottomStyle = parse(borderBottomStyle, declaration.borderBottomStyle); + this.borderLeftStyle = parse(borderLeftStyle, declaration.borderLeftStyle); + this.borderTopWidth = parse(borderTopWidth, declaration.borderTopWidth); + this.borderRightWidth = parse(borderRightWidth, declaration.borderRightWidth); + this.borderBottomWidth = parse(borderBottomWidth, declaration.borderBottomWidth); + this.borderLeftWidth = parse(borderLeftWidth, declaration.borderLeftWidth); + this.boxShadow = parse(boxShadow, declaration.boxShadow); + this.color = parse(color$1, declaration.color); + this.display = parse(display, declaration.display); + this.float = parse(float, declaration.cssFloat); + this.fontFamily = parse(fontFamily, declaration.fontFamily); + this.fontSize = parse(fontSize, declaration.fontSize); + this.fontStyle = parse(fontStyle, declaration.fontStyle); + this.fontVariant = parse(fontVariant, declaration.fontVariant); + this.fontWeight = parse(fontWeight, declaration.fontWeight); + this.letterSpacing = parse(letterSpacing, declaration.letterSpacing); + this.lineBreak = parse(lineBreak, declaration.lineBreak); + this.lineHeight = parse(lineHeight, declaration.lineHeight); + this.listStyleImage = parse(listStyleImage, declaration.listStyleImage); + this.listStylePosition = parse(listStylePosition, declaration.listStylePosition); + this.listStyleType = parse(listStyleType, declaration.listStyleType); + this.marginTop = parse(marginTop, declaration.marginTop); + this.marginRight = parse(marginRight, declaration.marginRight); + this.marginBottom = parse(marginBottom, declaration.marginBottom); + this.marginLeft = parse(marginLeft, declaration.marginLeft); + this.opacity = parse(opacity, declaration.opacity); + var overflowTuple = parse(overflow, declaration.overflow); + this.overflowX = overflowTuple[0]; + this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0]; + this.overflowWrap = parse(overflowWrap, declaration.overflowWrap); + this.paddingTop = parse(paddingTop, declaration.paddingTop); + this.paddingRight = parse(paddingRight, declaration.paddingRight); + this.paddingBottom = parse(paddingBottom, declaration.paddingBottom); + this.paddingLeft = parse(paddingLeft, declaration.paddingLeft); + this.position = parse(position, declaration.position); + this.textAlign = parse(textAlign, declaration.textAlign); + this.textDecorationColor = parse(textDecorationColor, declaration.textDecorationColor || declaration.color); + this.textDecorationLine = parse(textDecorationLine, declaration.textDecorationLine); + this.textShadow = parse(textShadow, declaration.textShadow); + this.textTransform = parse(textTransform, declaration.textTransform); + this.transform = parse(transform, declaration.transform); + this.transformOrigin = parse(transformOrigin, declaration.transformOrigin); + this.visibility = parse(visibility, declaration.visibility); + this.wordBreak = parse(wordBreak, declaration.wordBreak); + this.zIndex = parse(zIndex, declaration.zIndex); + } + CSSParsedDeclaration.prototype.isVisible = function () { + return this.display > 0 && this.opacity > 0 && this.visibility === VISIBILITY.VISIBLE; + }; + CSSParsedDeclaration.prototype.isTransparent = function () { + return isTransparent(this.backgroundColor); + }; + CSSParsedDeclaration.prototype.isTransformed = function () { + return this.transform !== null; + }; + CSSParsedDeclaration.prototype.isPositioned = function () { + return this.position !== POSITION.STATIC; + }; + CSSParsedDeclaration.prototype.isPositionedWithZIndex = function () { + return this.isPositioned() && !this.zIndex.auto; + }; + CSSParsedDeclaration.prototype.isFloating = function () { + return this.float !== FLOAT.NONE; + }; + CSSParsedDeclaration.prototype.isInlineLevel = function () { + return (contains(this.display, 4 /* INLINE */) || + contains(this.display, 33554432 /* INLINE_BLOCK */) || + contains(this.display, 268435456 /* INLINE_FLEX */) || + contains(this.display, 536870912 /* INLINE_GRID */) || + contains(this.display, 67108864 /* INLINE_LIST_ITEM */) || + contains(this.display, 134217728 /* INLINE_TABLE */)); + }; + return CSSParsedDeclaration; + }()); + var CSSParsedPseudoDeclaration = /** @class */ (function () { + function CSSParsedPseudoDeclaration(declaration) { + this.content = parse(content, declaration.content); + this.quotes = parse(quotes, declaration.quotes); + } + return CSSParsedPseudoDeclaration; + }()); + var CSSParsedCounterDeclaration = /** @class */ (function () { + function CSSParsedCounterDeclaration(declaration) { + this.counterIncrement = parse(counterIncrement, declaration.counterIncrement); + this.counterReset = parse(counterReset, declaration.counterReset); + } + return CSSParsedCounterDeclaration; + }()); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + var parse = function (descriptor, style) { + var tokenizer = new Tokenizer(); + var value = style !== null && typeof style !== 'undefined' ? style.toString() : descriptor.initialValue; + tokenizer.write(value); + var parser = new Parser(tokenizer.read()); + switch (descriptor.type) { + case PropertyDescriptorParsingType.IDENT_VALUE: + var token = parser.parseComponentValue(); + return descriptor.parse(isIdentToken(token) ? token.value : descriptor.initialValue); + case PropertyDescriptorParsingType.VALUE: + return descriptor.parse(parser.parseComponentValue()); + case PropertyDescriptorParsingType.LIST: + return descriptor.parse(parser.parseComponentValues()); + case PropertyDescriptorParsingType.TOKEN_VALUE: + return parser.parseComponentValue(); + case PropertyDescriptorParsingType.TYPE_VALUE: + switch (descriptor.format) { + case 'angle': + return angle.parse(parser.parseComponentValue()); + case 'color': + return color.parse(parser.parseComponentValue()); + case 'image': + return image.parse(parser.parseComponentValue()); + case 'length': + var length_1 = parser.parseComponentValue(); + return isLength(length_1) ? length_1 : ZERO_LENGTH; + case 'length-percentage': + var value_1 = parser.parseComponentValue(); + return isLengthPercentage(value_1) ? value_1 : ZERO_LENGTH; + } + } + throw new Error("Attempting to parse unsupported css format type " + descriptor.format); + }; + + var ElementContainer = /** @class */ (function () { + function ElementContainer(element) { + this.styles = new CSSParsedDeclaration(window.getComputedStyle(element, null)); + this.textNodes = []; + this.elements = []; + if (this.styles.transform !== null && isHTMLElementNode(element)) { + // getBoundingClientRect takes transforms into account + element.style.transform = 'none'; + } + this.bounds = parseBounds(element); + this.flags = 0; + } + return ElementContainer; + }()); + + var TextBounds = /** @class */ (function () { + function TextBounds(text, bounds) { + this.text = text; + this.bounds = bounds; + } + return TextBounds; + }()); + var parseTextBounds = function (value, styles, node) { + var textList = breakText(value, styles); + var textBounds = []; + var offset = 0; + textList.forEach(function (text) { + if (styles.textDecorationLine.length || text.trim().length > 0) { + if (FEATURES.SUPPORT_RANGE_BOUNDS) { + textBounds.push(new TextBounds(text, getRangeBounds(node, offset, text.length))); + } + else { + var replacementNode = node.splitText(text.length); + textBounds.push(new TextBounds(text, getWrapperBounds(node))); + node = replacementNode; + } + } + else if (!FEATURES.SUPPORT_RANGE_BOUNDS) { + node = node.splitText(text.length); + } + offset += text.length; + }); + return textBounds; + }; + var getWrapperBounds = function (node) { + var ownerDocument = node.ownerDocument; + if (ownerDocument) { + var wrapper = ownerDocument.createElement('html2canvaswrapper'); + wrapper.appendChild(node.cloneNode(true)); + var parentNode = node.parentNode; + if (parentNode) { + parentNode.replaceChild(wrapper, node); + var bounds = parseBounds(wrapper); + if (wrapper.firstChild) { + parentNode.replaceChild(wrapper.firstChild, wrapper); + } + return bounds; + } + } + return new Bounds(0, 0, 0, 0); + }; + var getRangeBounds = function (node, offset, length) { + var ownerDocument = node.ownerDocument; + if (!ownerDocument) { + throw new Error('Node has no owner document'); + } + var range = ownerDocument.createRange(); + range.setStart(node, offset); + range.setEnd(node, offset + length); + return Bounds.fromClientRect(range.getBoundingClientRect()); + }; + var breakText = function (value, styles) { + return styles.letterSpacing !== 0 ? toCodePoints(value).map(function (i) { return fromCodePoint(i); }) : breakWords(value, styles); + }; + var breakWords = function (str, styles) { + var breaker = LineBreaker(str, { + lineBreak: styles.lineBreak, + wordBreak: styles.overflowWrap === OVERFLOW_WRAP.BREAK_WORD ? 'break-word' : styles.wordBreak + }); + var words = []; + var bk; + while (!(bk = breaker.next()).done) { + if (bk.value) { + words.push(bk.value.slice()); + } + } + return words; + }; + + var TextContainer = /** @class */ (function () { + function TextContainer(node, styles) { + this.text = transform$1(node.data, styles.textTransform); + this.textBounds = parseTextBounds(this.text, styles, node); + } + return TextContainer; + }()); + var transform$1 = function (text, transform) { + switch (transform) { + case TEXT_TRANSFORM.LOWERCASE: + return text.toLowerCase(); + case TEXT_TRANSFORM.CAPITALIZE: + return text.replace(CAPITALIZE, capitalize); + case TEXT_TRANSFORM.UPPERCASE: + return text.toUpperCase(); + default: + return text; + } + }; + var CAPITALIZE = /(^|\s|:|-|\(|\))([a-z])/g; + var capitalize = function (m, p1, p2) { + if (m.length > 0) { + return p1 + p2.toUpperCase(); + } + return m; + }; + + var ImageElementContainer = /** @class */ (function (_super) { + __extends(ImageElementContainer, _super); + function ImageElementContainer(img) { + var _this = _super.call(this, img) || this; + _this.src = img.currentSrc || img.src; + _this.intrinsicWidth = img.naturalWidth; + _this.intrinsicHeight = img.naturalHeight; + CacheStorage.getInstance().addImage(_this.src); + return _this; + } + return ImageElementContainer; + }(ElementContainer)); + + var CanvasElementContainer = /** @class */ (function (_super) { + __extends(CanvasElementContainer, _super); + function CanvasElementContainer(canvas) { + var _this = _super.call(this, canvas) || this; + _this.canvas = canvas; + _this.intrinsicWidth = canvas.width; + _this.intrinsicHeight = canvas.height; + return _this; + } + return CanvasElementContainer; + }(ElementContainer)); + + var SVGElementContainer = /** @class */ (function (_super) { + __extends(SVGElementContainer, _super); + function SVGElementContainer(img) { + var _this = _super.call(this, img) || this; + var s = new XMLSerializer(); + _this.svg = "data:image/svg+xml," + encodeURIComponent(s.serializeToString(img)); + _this.intrinsicWidth = img.width.baseVal.value; + _this.intrinsicHeight = img.height.baseVal.value; + CacheStorage.getInstance().addImage(_this.svg); + return _this; + } + return SVGElementContainer; + }(ElementContainer)); + + var LIElementContainer = /** @class */ (function (_super) { + __extends(LIElementContainer, _super); + function LIElementContainer(element) { + var _this = _super.call(this, element) || this; + _this.value = element.value; + return _this; + } + return LIElementContainer; + }(ElementContainer)); + + var OLElementContainer = /** @class */ (function (_super) { + __extends(OLElementContainer, _super); + function OLElementContainer(element) { + var _this = _super.call(this, element) || this; + _this.start = element.start; + _this.reversed = typeof element.reversed === 'boolean' && element.reversed === true; + return _this; + } + return OLElementContainer; + }(ElementContainer)); + + var CHECKBOX_BORDER_RADIUS = [ + { + type: TokenType.DIMENSION_TOKEN, + flags: 0, + unit: 'px', + number: 3 + } + ]; + var RADIO_BORDER_RADIUS = [ + { + type: TokenType.PERCENTAGE_TOKEN, + flags: 0, + number: 50 + } + ]; + var reformatInputBounds = function (bounds) { + if (bounds.width > bounds.height) { + return new Bounds(bounds.left + (bounds.width - bounds.height) / 2, bounds.top, bounds.height, bounds.height); + } + else if (bounds.width < bounds.height) { + return new Bounds(bounds.left, bounds.top + (bounds.height - bounds.width) / 2, bounds.width, bounds.width); + } + return bounds; + }; + var getInputValue = function (node) { + var value = node.type === PASSWORD ? new Array(node.value.length + 1).join('\u2022') : node.value; + return value.length === 0 ? node.placeholder || '' : value; + }; + var CHECKBOX = 'checkbox'; + var RADIO = 'radio'; + var PASSWORD = 'password'; + var INPUT_COLOR = 0x2a2a2aff; + var InputElementContainer = /** @class */ (function (_super) { + __extends(InputElementContainer, _super); + function InputElementContainer(input) { + var _this = _super.call(this, input) || this; + _this.type = input.type.toLowerCase(); + _this.checked = input.checked; + _this.value = getInputValue(input); + if (_this.type === CHECKBOX || _this.type === RADIO) { + _this.styles.backgroundColor = 0xdededeff; + _this.styles.borderTopColor = _this.styles.borderRightColor = _this.styles.borderBottomColor = _this.styles.borderLeftColor = 0xa5a5a5ff; + _this.styles.borderTopWidth = _this.styles.borderRightWidth = _this.styles.borderBottomWidth = _this.styles.borderLeftWidth = 1; + _this.styles.borderTopStyle = _this.styles.borderRightStyle = _this.styles.borderBottomStyle = _this.styles.borderLeftStyle = + BORDER_STYLE.SOLID; + _this.styles.backgroundClip = [BACKGROUND_CLIP.BORDER_BOX]; + _this.styles.backgroundOrigin = [0 /* BORDER_BOX */]; + _this.bounds = reformatInputBounds(_this.bounds); + } + switch (_this.type) { + case CHECKBOX: + _this.styles.borderTopRightRadius = _this.styles.borderTopLeftRadius = _this.styles.borderBottomRightRadius = _this.styles.borderBottomLeftRadius = CHECKBOX_BORDER_RADIUS; + break; + case RADIO: + _this.styles.borderTopRightRadius = _this.styles.borderTopLeftRadius = _this.styles.borderBottomRightRadius = _this.styles.borderBottomLeftRadius = RADIO_BORDER_RADIUS; + break; + } + return _this; + } + return InputElementContainer; + }(ElementContainer)); + + var SelectElementContainer = /** @class */ (function (_super) { + __extends(SelectElementContainer, _super); + function SelectElementContainer(element) { + var _this = _super.call(this, element) || this; + var option = element.options[element.selectedIndex || 0]; + _this.value = option ? option.text || '' : ''; + return _this; + } + return SelectElementContainer; + }(ElementContainer)); + + var TextareaElementContainer = /** @class */ (function (_super) { + __extends(TextareaElementContainer, _super); + function TextareaElementContainer(element) { + var _this = _super.call(this, element) || this; + _this.value = element.value; + return _this; + } + return TextareaElementContainer; + }(ElementContainer)); + + var parseColor = function (value) { return color.parse(Parser.create(value).parseComponentValue()); }; + var IFrameElementContainer = /** @class */ (function (_super) { + __extends(IFrameElementContainer, _super); + function IFrameElementContainer(iframe) { + var _this = _super.call(this, iframe) || this; + _this.src = iframe.src; + _this.width = parseInt(iframe.width, 10) || 0; + _this.height = parseInt(iframe.height, 10) || 0; + _this.backgroundColor = _this.styles.backgroundColor; + try { + if (iframe.contentWindow && + iframe.contentWindow.document && + iframe.contentWindow.document.documentElement) { + _this.tree = parseTree(iframe.contentWindow.document.documentElement); + // http://www.w3.org/TR/css3-background/#special-backgrounds + var documentBackgroundColor = iframe.contentWindow.document.documentElement + ? parseColor(getComputedStyle(iframe.contentWindow.document.documentElement) + .backgroundColor) + : COLORS.TRANSPARENT; + var bodyBackgroundColor = iframe.contentWindow.document.body + ? parseColor(getComputedStyle(iframe.contentWindow.document.body).backgroundColor) + : COLORS.TRANSPARENT; + _this.backgroundColor = isTransparent(documentBackgroundColor) + ? isTransparent(bodyBackgroundColor) + ? _this.styles.backgroundColor + : bodyBackgroundColor + : documentBackgroundColor; + } + } + catch (e) { } + return _this; + } + return IFrameElementContainer; + }(ElementContainer)); + + var LIST_OWNERS = ['OL', 'UL', 'MENU']; + var parseNodeTree = function (node, parent, root) { + for (var childNode = node.firstChild, nextNode = void 0; childNode; childNode = nextNode) { + nextNode = childNode.nextSibling; + if (isTextNode(childNode) && childNode.data.trim().length > 0) { + parent.textNodes.push(new TextContainer(childNode, parent.styles)); + } + else if (isElementNode(childNode)) { + var container = createContainer(childNode); + if (container.styles.isVisible()) { + if (createsRealStackingContext(childNode, container, root)) { + container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */; + } + else if (createsStackingContext(container.styles)) { + container.flags |= 2 /* CREATES_STACKING_CONTEXT */; + } + if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) { + container.flags |= 8 /* IS_LIST_OWNER */; + } + parent.elements.push(container); + if (!isTextareaElement(childNode) && !isSVGElement(childNode) && !isSelectElement(childNode)) { + parseNodeTree(childNode, container, root); + } + } + } + } + }; + var createContainer = function (element) { + if (isImageElement(element)) { + return new ImageElementContainer(element); + } + if (isCanvasElement(element)) { + return new CanvasElementContainer(element); + } + if (isSVGElement(element)) { + return new SVGElementContainer(element); + } + if (isLIElement(element)) { + return new LIElementContainer(element); + } + if (isOLElement(element)) { + return new OLElementContainer(element); + } + if (isInputElement(element)) { + return new InputElementContainer(element); + } + if (isSelectElement(element)) { + return new SelectElementContainer(element); + } + if (isTextareaElement(element)) { + return new TextareaElementContainer(element); + } + if (isIFrameElement(element)) { + return new IFrameElementContainer(element); + } + return new ElementContainer(element); + }; + var parseTree = function (element) { + var container = createContainer(element); + container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */; + parseNodeTree(element, container, container); + return container; + }; + var createsRealStackingContext = function (node, container, root) { + return (container.styles.isPositionedWithZIndex() || + container.styles.opacity < 1 || + container.styles.isTransformed() || + (isBodyElement(node) && root.styles.isTransparent())); + }; + var createsStackingContext = function (styles) { return styles.isPositioned() || styles.isFloating(); }; + var isTextNode = function (node) { return node.nodeType === Node.TEXT_NODE; }; + var isElementNode = function (node) { return node.nodeType === Node.ELEMENT_NODE; }; + var isHTMLElementNode = function (node) { + return isElementNode(node) && typeof node.style !== 'undefined' && !isSVGElementNode(node); + }; + var isSVGElementNode = function (element) { + return typeof element.className === 'object'; + }; + var isLIElement = function (node) { return node.tagName === 'LI'; }; + var isOLElement = function (node) { return node.tagName === 'OL'; }; + var isInputElement = function (node) { return node.tagName === 'INPUT'; }; + var isHTMLElement = function (node) { return node.tagName === 'HTML'; }; + var isSVGElement = function (node) { return node.tagName === 'svg'; }; + var isBodyElement = function (node) { return node.tagName === 'BODY'; }; + var isCanvasElement = function (node) { return node.tagName === 'CANVAS'; }; + var isImageElement = function (node) { return node.tagName === 'IMG'; }; + var isIFrameElement = function (node) { return node.tagName === 'IFRAME'; }; + var isStyleElement = function (node) { return node.tagName === 'STYLE'; }; + var isScriptElement = function (node) { return node.tagName === 'SCRIPT'; }; + var isTextareaElement = function (node) { return node.tagName === 'TEXTAREA'; }; + var isSelectElement = function (node) { return node.tagName === 'SELECT'; }; + + var CounterState = /** @class */ (function () { + function CounterState() { + this.counters = {}; + } + CounterState.prototype.getCounterValue = function (name) { + var counter = this.counters[name]; + if (counter && counter.length) { + return counter[counter.length - 1]; + } + return 1; + }; + CounterState.prototype.getCounterValues = function (name) { + var counter = this.counters[name]; + return counter ? counter : []; + }; + CounterState.prototype.pop = function (counters) { + var _this = this; + counters.forEach(function (counter) { return _this.counters[counter].pop(); }); + }; + CounterState.prototype.parse = function (style) { + var _this = this; + var counterIncrement = style.counterIncrement; + var counterReset = style.counterReset; + var canReset = true; + if (counterIncrement !== null) { + counterIncrement.forEach(function (entry) { + var counter = _this.counters[entry.counter]; + if (counter && entry.increment !== 0) { + canReset = false; + counter[Math.max(0, counter.length - 1)] += entry.increment; + } + }); + } + var counterNames = []; + if (canReset) { + counterReset.forEach(function (entry) { + var counter = _this.counters[entry.counter]; + counterNames.push(entry.counter); + if (!counter) { + counter = _this.counters[entry.counter] = []; + } + counter.push(entry.reset); + }); + } + return counterNames; + }; + return CounterState; + }()); + var ROMAN_UPPER = { + integers: [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1], + values: ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'] + }; + var ARMENIAN = { + integers: [ + 9000, + 8000, + 7000, + 6000, + 5000, + 4000, + 3000, + 2000, + 1000, + 900, + 800, + 700, + 600, + 500, + 400, + 300, + 200, + 100, + 90, + 80, + 70, + 60, + 50, + 40, + 30, + 20, + 10, + 9, + 8, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ], + values: [ + 'Ք', + 'Փ', + 'Ւ', + 'Ց', + 'Ր', + 'Տ', + 'Վ', + 'Ս', + 'Ռ', + 'Ջ', + 'Պ', + 'Չ', + 'Ո', + 'Շ', + 'Ն', + 'Յ', + 'Մ', + 'Ճ', + 'Ղ', + 'Ձ', + 'Հ', + 'Կ', + 'Ծ', + 'Խ', + 'Լ', + 'Ի', + 'Ժ', + 'Թ', + 'Ը', + 'Է', + 'Զ', + 'Ե', + 'Դ', + 'Գ', + 'Բ', + 'Ա' + ] + }; + var HEBREW = { + integers: [ + 10000, + 9000, + 8000, + 7000, + 6000, + 5000, + 4000, + 3000, + 2000, + 1000, + 400, + 300, + 200, + 100, + 90, + 80, + 70, + 60, + 50, + 40, + 30, + 20, + 19, + 18, + 17, + 16, + 15, + 10, + 9, + 8, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ], + values: [ + 'י׳', + 'ט׳', + 'ח׳', + 'ז׳', + 'ו׳', + 'ה׳', + 'ד׳', + 'ג׳', + 'ב׳', + 'א׳', + 'ת', + 'ש', + 'ר', + 'ק', + 'צ', + 'פ', + 'ע', + 'ס', + 'נ', + 'מ', + 'ל', + 'כ', + 'יט', + 'יח', + 'יז', + 'טז', + 'טו', + 'י', + 'ט', + 'ח', + 'ז', + 'ו', + 'ה', + 'ד', + 'ג', + 'ב', + 'א' + ] + }; + var GEORGIAN = { + integers: [ + 10000, + 9000, + 8000, + 7000, + 6000, + 5000, + 4000, + 3000, + 2000, + 1000, + 900, + 800, + 700, + 600, + 500, + 400, + 300, + 200, + 100, + 90, + 80, + 70, + 60, + 50, + 40, + 30, + 20, + 10, + 9, + 8, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ], + values: [ + 'ჵ', + 'ჰ', + 'ჯ', + 'ჴ', + 'ხ', + 'ჭ', + 'წ', + 'ძ', + 'ც', + 'ჩ', + 'შ', + 'ყ', + 'ღ', + 'ქ', + 'ფ', + 'ჳ', + 'ტ', + 'ს', + 'რ', + 'ჟ', + 'პ', + 'ო', + 'ჲ', + 'ნ', + 'მ', + 'ლ', + 'კ', + 'ი', + 'თ', + 'ჱ', + 'ზ', + 'ვ', + 'ე', + 'დ', + 'გ', + 'ბ', + 'ა' + ] + }; + var createAdditiveCounter = function (value, min, max, symbols, fallback, suffix) { + if (value < min || value > max) { + return createCounterText(value, fallback, suffix.length > 0); + } + return (symbols.integers.reduce(function (string, integer, index) { + while (value >= integer) { + value -= integer; + string += symbols.values[index]; + } + return string; + }, '') + suffix); + }; + var createCounterStyleWithSymbolResolver = function (value, codePointRangeLength, isNumeric, resolver) { + var string = ''; + do { + if (!isNumeric) { + value--; + } + string = resolver(value) + string; + value /= codePointRangeLength; + } while (value * codePointRangeLength >= codePointRangeLength); + return string; + }; + var createCounterStyleFromRange = function (value, codePointRangeStart, codePointRangeEnd, isNumeric, suffix) { + var codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1; + return ((value < 0 ? '-' : '') + + (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, isNumeric, function (codePoint) { + return fromCodePoint(Math.floor(codePoint % codePointRangeLength) + codePointRangeStart); + }) + + suffix)); + }; + var createCounterStyleFromSymbols = function (value, symbols, suffix) { + if (suffix === void 0) { suffix = '. '; } + var codePointRangeLength = symbols.length; + return (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, false, function (codePoint) { return symbols[Math.floor(codePoint % codePointRangeLength)]; }) + suffix); + }; + var CJK_ZEROS = 1 << 0; + var CJK_TEN_COEFFICIENTS = 1 << 1; + var CJK_TEN_HIGH_COEFFICIENTS = 1 << 2; + var CJK_HUNDRED_COEFFICIENTS = 1 << 3; + var createCJKCounter = function (value, numbers, multipliers, negativeSign, suffix, flags) { + if (value < -9999 || value > 9999) { + return createCounterText(value, LIST_STYLE_TYPE.CJK_DECIMAL, suffix.length > 0); + } + var tmp = Math.abs(value); + var string = suffix; + if (tmp === 0) { + return numbers[0] + string; + } + for (var digit = 0; tmp > 0 && digit <= 4; digit++) { + var coefficient = tmp % 10; + if (coefficient === 0 && contains(flags, CJK_ZEROS) && string !== '') { + string = numbers[coefficient] + string; + } + else if (coefficient > 1 || + (coefficient === 1 && digit === 0) || + (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_COEFFICIENTS)) || + (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_HIGH_COEFFICIENTS) && value > 100) || + (coefficient === 1 && digit > 1 && contains(flags, CJK_HUNDRED_COEFFICIENTS))) { + string = numbers[coefficient] + (digit > 0 ? multipliers[digit - 1] : '') + string; + } + else if (coefficient === 1 && digit > 0) { + string = multipliers[digit - 1] + string; + } + tmp = Math.floor(tmp / 10); + } + return (value < 0 ? negativeSign : '') + string; + }; + var CHINESE_INFORMAL_MULTIPLIERS = '十百千萬'; + var CHINESE_FORMAL_MULTIPLIERS = '拾佰仟萬'; + var JAPANESE_NEGATIVE = 'マイナス'; + var KOREAN_NEGATIVE = '마이너스'; + var createCounterText = function (value, type, appendSuffix) { + var defaultSuffix = appendSuffix ? '. ' : ''; + var cjkSuffix = appendSuffix ? '、' : ''; + var koreanSuffix = appendSuffix ? ', ' : ''; + var spaceSuffix = appendSuffix ? ' ' : ''; + switch (type) { + case LIST_STYLE_TYPE.DISC: + return '•' + spaceSuffix; + case LIST_STYLE_TYPE.CIRCLE: + return '◦' + spaceSuffix; + case LIST_STYLE_TYPE.SQUARE: + return '◾' + spaceSuffix; + case LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO: + var string = createCounterStyleFromRange(value, 48, 57, true, defaultSuffix); + return string.length < 4 ? "0" + string : string; + case LIST_STYLE_TYPE.CJK_DECIMAL: + return createCounterStyleFromSymbols(value, '〇一二三四五六七八九', cjkSuffix); + case LIST_STYLE_TYPE.LOWER_ROMAN: + return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, LIST_STYLE_TYPE.DECIMAL, defaultSuffix).toLowerCase(); + case LIST_STYLE_TYPE.UPPER_ROMAN: + return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, LIST_STYLE_TYPE.DECIMAL, defaultSuffix); + case LIST_STYLE_TYPE.LOWER_GREEK: + return createCounterStyleFromRange(value, 945, 969, false, defaultSuffix); + case LIST_STYLE_TYPE.LOWER_ALPHA: + return createCounterStyleFromRange(value, 97, 122, false, defaultSuffix); + case LIST_STYLE_TYPE.UPPER_ALPHA: + return createCounterStyleFromRange(value, 65, 90, false, defaultSuffix); + case LIST_STYLE_TYPE.ARABIC_INDIC: + return createCounterStyleFromRange(value, 1632, 1641, true, defaultSuffix); + case LIST_STYLE_TYPE.ARMENIAN: + case LIST_STYLE_TYPE.UPPER_ARMENIAN: + return createAdditiveCounter(value, 1, 9999, ARMENIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix); + case LIST_STYLE_TYPE.LOWER_ARMENIAN: + return createAdditiveCounter(value, 1, 9999, ARMENIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix).toLowerCase(); + case LIST_STYLE_TYPE.BENGALI: + return createCounterStyleFromRange(value, 2534, 2543, true, defaultSuffix); + case LIST_STYLE_TYPE.CAMBODIAN: + case LIST_STYLE_TYPE.KHMER: + return createCounterStyleFromRange(value, 6112, 6121, true, defaultSuffix); + case LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH: + return createCounterStyleFromSymbols(value, '子丑寅卯辰巳午未申酉戌亥', cjkSuffix); + case LIST_STYLE_TYPE.CJK_HEAVENLY_STEM: + return createCounterStyleFromSymbols(value, '甲乙丙丁戊己庚辛壬癸', cjkSuffix); + case LIST_STYLE_TYPE.CJK_IDEOGRAPHIC: + case LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL: + return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS); + case LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL: + return createCJKCounter(value, '零壹貳參肆伍陸柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS); + case LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL: + return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS); + case LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL: + return createCJKCounter(value, '零壹贰叁肆伍陆柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS); + case LIST_STYLE_TYPE.JAPANESE_INFORMAL: + return createCJKCounter(value, '〇一二三四五六七八九', '十百千万', JAPANESE_NEGATIVE, cjkSuffix, 0); + case LIST_STYLE_TYPE.JAPANESE_FORMAL: + return createCJKCounter(value, '零壱弐参四伍六七八九', '拾百千万', JAPANESE_NEGATIVE, cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS); + case LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL: + return createCJKCounter(value, '영일이삼사오육칠팔구', '십백천만', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS); + case LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL: + return createCJKCounter(value, '零一二三四五六七八九', '十百千萬', KOREAN_NEGATIVE, koreanSuffix, 0); + case LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL: + return createCJKCounter(value, '零壹貳參四五六七八九', '拾百千', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS); + case LIST_STYLE_TYPE.DEVANAGARI: + return createCounterStyleFromRange(value, 0x966, 0x96f, true, defaultSuffix); + case LIST_STYLE_TYPE.GEORGIAN: + return createAdditiveCounter(value, 1, 19999, GEORGIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix); + case LIST_STYLE_TYPE.GUJARATI: + return createCounterStyleFromRange(value, 0xae6, 0xaef, true, defaultSuffix); + case LIST_STYLE_TYPE.GURMUKHI: + return createCounterStyleFromRange(value, 0xa66, 0xa6f, true, defaultSuffix); + case LIST_STYLE_TYPE.HEBREW: + return createAdditiveCounter(value, 1, 10999, HEBREW, LIST_STYLE_TYPE.DECIMAL, defaultSuffix); + case LIST_STYLE_TYPE.HIRAGANA: + return createCounterStyleFromSymbols(value, 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん'); + case LIST_STYLE_TYPE.HIRAGANA_IROHA: + return createCounterStyleFromSymbols(value, 'いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす'); + case LIST_STYLE_TYPE.KANNADA: + return createCounterStyleFromRange(value, 0xce6, 0xcef, true, defaultSuffix); + case LIST_STYLE_TYPE.KATAKANA: + return createCounterStyleFromSymbols(value, 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン', cjkSuffix); + case LIST_STYLE_TYPE.KATAKANA_IROHA: + return createCounterStyleFromSymbols(value, 'イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス', cjkSuffix); + case LIST_STYLE_TYPE.LAO: + return createCounterStyleFromRange(value, 0xed0, 0xed9, true, defaultSuffix); + case LIST_STYLE_TYPE.MONGOLIAN: + return createCounterStyleFromRange(value, 0x1810, 0x1819, true, defaultSuffix); + case LIST_STYLE_TYPE.MYANMAR: + return createCounterStyleFromRange(value, 0x1040, 0x1049, true, defaultSuffix); + case LIST_STYLE_TYPE.ORIYA: + return createCounterStyleFromRange(value, 0xb66, 0xb6f, true, defaultSuffix); + case LIST_STYLE_TYPE.PERSIAN: + return createCounterStyleFromRange(value, 0x6f0, 0x6f9, true, defaultSuffix); + case LIST_STYLE_TYPE.TAMIL: + return createCounterStyleFromRange(value, 0xbe6, 0xbef, true, defaultSuffix); + case LIST_STYLE_TYPE.TELUGU: + return createCounterStyleFromRange(value, 0xc66, 0xc6f, true, defaultSuffix); + case LIST_STYLE_TYPE.THAI: + return createCounterStyleFromRange(value, 0xe50, 0xe59, true, defaultSuffix); + case LIST_STYLE_TYPE.TIBETAN: + return createCounterStyleFromRange(value, 0xf20, 0xf29, true, defaultSuffix); + case LIST_STYLE_TYPE.DECIMAL: + default: + return createCounterStyleFromRange(value, 48, 57, true, defaultSuffix); + } + }; + + var IGNORE_ATTRIBUTE = 'data-html2canvas-ignore'; + var DocumentCloner = /** @class */ (function () { + function DocumentCloner(element, options) { + this.options = options; + this.scrolledElements = []; + this.referenceElement = element; + this.counters = new CounterState(); + this.quoteDepth = 0; + if (!element.ownerDocument) { + throw new Error('Cloned element does not have an owner document'); + } + this.documentElement = this.cloneNode(element.ownerDocument.documentElement); + } + DocumentCloner.prototype.toIFrame = function (ownerDocument, windowSize) { + var _this = this; + var iframe = createIFrameContainer(ownerDocument, windowSize); + if (!iframe.contentWindow) { + return Promise.reject("Unable to find iframe window"); + } + var scrollX = ownerDocument.defaultView.pageXOffset; + var scrollY = ownerDocument.defaultView.pageYOffset; + var cloneWindow = iframe.contentWindow; + var documentClone = cloneWindow.document; + /* Chrome doesn't detect relative background-images assigned in inline -``` - -Using a CDN URL will lock you to a specific version, which should ensure stability and give you control over when to change versions. cdnjs gives you access to [all past versions of html2pdf.js](https://cdnjs.com/libraries/html2pdf.js). - -*Note: [Read about dependences](#dependencies) for more information about using the unbundled version `dist/html2canvas.min.js`.* - -#### Raw JS - - You may also download `dist/html2pdf.bundle.min.js` directly to your project folder and include it in your HTML with: - -```html - -``` - -#### NPM - -Install html2pdf.js and its dependencies using NPM with `npm install --save html2pdf.js` (make sure to include `.js` in the package name). - -*Note: You can use NPM to create your project, but html2pdf.js **will not run in Node.js**, it must be run in a browser.* - -#### Bower - -Install html2pdf.js and its dependencies using Bower with `bower install --save html2pdf.js` (make sure to include `.js` in the package name). - -#### Console - -If you're on a webpage that you can't modify directly and wish to use html2pdf.js to capture a screenshot, you can follow these steps: - -1. Open your browser's console (instructions for different browsers [here](https://webmasters.stackexchange.com/a/77337/94367)). -2. Paste in this code: - ```js - function addScript(url) { - var script = document.createElement('script'); - script.type = 'application/javascript'; - script.src = url; - document.head.appendChild(script); - } - addScript('https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js'); - ``` -3. You may now execute html2pdf.js commands directly from the console. To capture a default PDF of the entire page, use `html2pdf(document.body)`. - -## Usage - -Once installed, html2pdf.js is ready to use. The following command will generate a PDF of `#element-to-print` and prompt the user to save the result: - -```js -var element = document.getElementById('element-to-print'); -html2pdf(element); -``` - -### Advanced usage - -Every step of html2pdf.js is configurable, using its new Promise-based API. If html2pdf.js is called without arguments, it will return a `Worker` object: - -```js -var worker = html2pdf(); // Or: var worker = new html2pdf.Worker; -``` - -This worker has methods that can be chained sequentially, as each Promise resolves, and allows insertion of your own intermediate functions between steps. A prerequisite system allows you to skip over mandatory steps (like canvas creation) without any trouble: - -```js -// This will implicitly create the canvas and PDF objects before saving. -var worker = html2pdf().from(element).save(); -``` - -#### Workflow - -The basic workflow of html2pdf.js tasks (enforced by the prereq system) is: - -``` -.from() -> .toContainer() -> .toCanvas() -> .toImg() -> .toPdf() -> .save() -``` - -#### Worker API - -| Method | Arguments | Description | -|--------------|--------------------|-------------| -| from | src, type | Sets the source (HTML string or element) for the PDF. Optional `type` specifies other sources: `'string'`, `'element'`, `'canvas'`, or `'img'`. | -| to | target | Converts the source to the specified target (`'container'`, `'canvas'`, `'img'`, or `'pdf'`). Each target also has its own `toX` method that can be called directly: `toContainer()`, `toCanvas()`, `toImg()`, and `toPdf()`. | -| output | type, options, src | Routes to the appropriate `outputPdf` or `outputImg` method based on specified `src` (`'pdf'` (default) or `'img'`). | -| outputPdf | type, options | Sends `type` and `options` to the jsPDF object's `output` method, and returns the result as a Promise (use `.then` to access). See the [jsPDF source code](https://rawgit.com/MrRio/jsPDF/master/docs/jspdf.js.html#line992) for more info. | -| outputImg | type, options | Returns the specified data type for the image as a Promise (use `.then` to access). Supported types: `'img'`, `'datauristring'`/`'dataurlstring'`, and `'datauri'`/`'dataurl'`. | -| save | filename | Saves the PDF object with the optional filename (creates user download prompt). | -| set | opt | Sets the specified properties. See [Options](#options) below for more details. | -| get | key, cbk | Returns the property specified in `key`, either as a Promise (use `.then` to access), or by calling `cbk` if provided. | -| then | onFulfilled, onRejected | Standard Promise method, with `this` re-bound to the Worker, and with added progress-tracking (see [Progress](#progress) below). Note that `.then` returns a `Worker`, which is a subclass of Promise. | -| thenCore | onFulFilled, onRejected | Standard Promise method, with `this` re-bound to the Worker (no progress-tracking). Note that `.thenCore` returns a `Worker`, which is a subclass of Promise. | -| thenExternal | onFulfilled, onRejected | True Promise method. Using this 'exits' the Worker chain - you will not be able to continue chaining Worker methods after `.thenExternal`. | -| catch, catchExternal | onRejected | Standard Promise method. `catchExternal` exits the Worker chain - you will not be able to continue chaining Worker methods after `.catchExternal`. | -| error | msg | Throws an error in the Worker's Promise chain. | - -A few aliases are also provided for convenience: - -| Method | Alias | -|-----------|-----------| -| save | saveAs | -| set | using | -| output | export | -| then | run | - -## Options - -html2pdf.js can be configured using an optional `opt` parameter: - -```js -var element = document.getElementById('element-to-print'); -var opt = { - margin: 1, - filename: 'myfile.pdf', - image: { type: 'jpeg', quality: 0.98 }, - html2canvas: { scale: 2 }, - jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' } -}; - -// New Promise-based usage: -html2pdf().set(opt).from(element).save(); - -// Old monolithic-style usage: -html2pdf(element, opt); -``` - -The `opt` parameter has the following optional fields: - -|Name |Type |Default |Description | -|------------|----------------|--------------------------------|------------------------------------------------------------------------------------------------------------| -|margin |number or array |`0` |PDF margin (in jsPDF units). Can be a single number, `[vMargin, hMargin]`, or `[top, left, bottom, right]`. | -|filename |string |`'file.pdf'` |The default filename of the exported PDF. | -|pagebreak |object |`{mode: ['css', 'legacy']}` |Controls the pagebreak behaviour on the page. See [Page-breaks](#page-breaks) below. | -|image |object |`{type: 'jpeg', quality: 0.95}` |The image type and quality used to generate the PDF. See [Image type and quality](#image-type-and-quality) below.| -|enableLinks |boolean |`true` |If enabled, PDF hyperlinks are automatically added ontop of all anchor tags. | -|html2canvas |object |`{ }` |Configuration options sent directly to `html2canvas` ([see here](https://html2canvas.hertzen.com/configuration) for usage).| -|jsPDF |object |`{ }` |Configuration options sent directly to `jsPDF` ([see here](http://rawgit.com/MrRio/jsPDF/master/docs/jsPDF.html) for usage).| - -### Page-breaks - -html2pdf.js has the ability to automatically add page-breaks to clean up your document. Page-breaks can be added by CSS styles, set on individual elements using selectors, or avoided from breaking inside all elements (`avoid-all` mode). - -By default, html2pdf.js will respect most CSS [`break-before`](https://developer.mozilla.org/en-US/docs/Web/CSS/break-before), [`break-after`](https://developer.mozilla.org/en-US/docs/Web/CSS/break-after), and [`break-inside`](https://developer.mozilla.org/en-US/docs/Web/CSS/break-inside) rules, and also add page-breaks after any element with class `html2pdf__page-break` (for legacy purposes). - -#### Page-break settings - -|Setting |Type |Default |Description | -|----------|----------------|--------------------|------------| -|mode |string or array |`['css', 'legacy']` |The mode(s) on which to automatically add page-breaks. One or more of `'avoid-all'`, `'css'`, and `'legacy'`. | -|before |string or array |`[]` |CSS selectors for which to add page-breaks before each element. Can be a specific element with an ID (`'#myID'`), all elements of a type (e.g. `'img'`), all of a class (`'.myClass'`), or even `'*'` to match every element. | -|after |string or array |`[]` |Like 'before', but adds a page-break immediately after the element. | -|avoid |string or array |`[]` |Like 'before', but avoids page-breaks on these elements. You can enable this feature on every element using the 'avoid-all' mode. | - -#### Page-break modes - -| Mode | Description | -|-----------|-------------| -| avoid-all | Automatically adds page-breaks to avoid splitting any elements across pages. | -| css | Adds page-breaks according to the CSS `break-before`, `break-after`, and `break-inside` properties. Only recognizes `always/left/right` for before/after, and `avoid` for inside. | -| legacy | Adds page-breaks after elements with class `html2pdf__page-break`. This feature may be removed in the future. | - -#### Example usage - -```js -// Avoid page-breaks on all elements, and add one before #page2el. -html2pdf().set({ - pagebreak: { mode: 'avoid-all', before: '#page2el' } -}); - -// Enable all 'modes', with no explicit elements. -html2pdf().set({ - pagebreak: { mode: ['avoid-all', 'css', 'legacy'] } -}); - -// No modes, only explicit elements. -html2pdf().set({ - pagebreak: { before: '.beforeClass', after: ['#after1', '#after2'], avoid: 'img' } -}); -``` - -### Image type and quality - -You may customize the image type and quality exported from the canvas by setting the `image` option. This must be an object with the following fields: - -|Name |Type |Default |Description | -|------------|----------------|------------------------------|---------------------------------------------------------------------------------------------| -|type |string |'jpeg' |The image type. HTMLCanvasElement only supports 'png', 'jpeg', and 'webp' (on Chrome). | -|quality |number |0.95 |The image quality, from 0 to 1. This setting is only used for jpeg/webp (not png). | - -These options are limited to the available settings for [HTMLCanvasElement.toDataURL()](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL), which ignores quality settings for 'png' images. To enable png image compression, try using the [canvas-png-compression shim](https://github.com/ShyykoSerhiy/canvas-png-compression), which should be an in-place solution to enable png compression via the `quality` option. - -## Progress tracking - -The Worker object returned by `html2pdf()` has a built-in progress-tracking mechanism. It will be updated to allow a progress callback that will be called with each update, however it is currently a work-in-progress. - -## Dependencies - -html2pdf.js depends on the external packages [html2canvas](https://github.com/niklasvh/html2canvas), [jsPDF](https://github.com/MrRio/jsPDF), and [es6-promise](https://github.com/stefanpenner/es6-promise). These dependencies are automatically loaded when using NPM or the bundled package. - -If using the unbundled `dist/html2pdf.min.js` (or its un-minified version), you must also include each dependency. Order is important, otherwise html2canvas will be overridden by jsPDF's own internal implementation: - -```html - - - - -``` - -## Contributing - -### Issues - -When submitting an issue, please provide reproducible code that highlights the issue, preferably by creating a fork of [this template jsFiddle](https://jsfiddle.net/u6o6ne41/) (which has html2pdf.js already loaded). Remember that html2pdf.js uses [html2canvas](https://github.com/niklasvh/html2canvas) and [jsPDF](https://github.com/MrRio/jsPDF) as dependencies, so it's a good idea to check each of those repositories' issue trackers to see if your problem has already been addressed. - -#### Known issues - -1. **Rendering:** The rendering engine html2canvas isn't perfect (though it's pretty good!). If html2canvas isn't rendering your content correctly, I can't fix it. - - You can test this with something like [this fiddle](https://jsfiddle.net/eKoopmans/z1rupL4c/), to see if there's a problem in the canvas creation itself. - -2. **Node cloning (CSS etc):** The way html2pdf.js clones your content before sending to html2canvas is buggy. A fix is currently being developed - try out: - - direct file: Go to [html2pdf.js/bugfix/clone-nodes-BUILD](/eKoopmans/html2pdf.js/tree/bugfix/clone-nodes-BUILD) and replace the files in your project with the relevant files (e.g. `dist/html2pdf.bundle.js`) - - npm: `npm install eKoopmans/html2pdf.js#bugfix/clone-nodes-BUILD` - - Related project: [Bugfix: Cloned nodes](https://github.com/eKoopmans/html2pdf.js/projects/9) - -3. **Resizing:** Currently, html2pdf.js resizes the root element to fit onto a PDF page (causing internal content to "reflow"). - - This is often desired behaviour, but not always. - - There are plans to add alternate behaviour (e.g. "shrink-to-page"), but nothing that's ready to test yet. - - Related project: [Feature: Single-page PDFs](https://github.com/eKoopmans/html2pdf.js/projects/1) - -4. **Rendered as image:** html2pdf.js renders all content into an image, then places that image into a PDF. - - This means text is *not selectable or searchable*, and causes large file sizes. - - This is currently unavoidable, however recent improvements in jsPDF mean that it may soon be possible to render straight into vector graphics. - - Related project: [Feature: New renderer](https://github.com/eKoopmans/html2pdf.js/projects/4) - -5. **Promise clashes:** html2pdf.js relies on specific Promise behaviour, and can fail when used with custom Promise libraries. - - In the next release, Promises will be sandboxed in html2pdf.js to remove this issue. - - Related project: [Bugfix: Sandboxed promises](https://github.com/eKoopmans/html2pdf.js/projects/11) - -6. **Maximum size:** HTML5 canvases have a [maximum height/width](https://stackoverflow.com/a/11585939/4080966). Anything larger will fail to render. - - This is a limitation of HTML5 itself, and results in large PDFs rendering completely blank in html2pdf.js. - - The jsPDF canvas renderer (mentioned in Known Issue #4) may be able to fix this issue! - - Related project: [Bugfix: Maximum canvas size](https://github.com/eKoopmans/html2pdf.js/projects/5) - -### Tests - -html2pdf.js is currently sorely lacking in unit tests. Any contributions or suggestions of automated (or manual) tests are welcome. This is high on the to-do list for this project. - -### Pull requests - -If you want to create a new feature or bugfix, please feel free to fork and submit a pull request! Create a fork, branch off of `master`, and make changes to the `/src/` files (rather than directly to `/dist/`). You can test your changes by rebuilding with `npm run build`. - -## Credits - -[Erik Koopmans](https://github.com/eKoopmans) - -#### Contributors - -- [@WilcoBreedt](https://github.com/WilcoBreedt) -- [@Ranger1230](https://github.com/Ranger1230) - -#### Special thanks - -- [Sauce Labs](https://saucelabs.com/) for unit testing. - -## License - -[The MIT License](http://opensource.org/licenses/MIT) - -Copyright (c) 2017-2019 Erik Koopmans <[http://www.erik-koopmans.com/](http://www.erik-koopmans.com/)> +For more information and configuration you can visit the [htm2pdf.js](https://github.com/eKoopmans/html2pdf.js) diff --git a/bower.json b/bower.json index 3ea77a7..412c033 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { - "name": "html2pdf.js", - "description": "Client-side HTML-to-PDF rendering using pure JS", + "name": "@ssamilg/html2pdf.js", + "description": "A fork of html2pdf.js with dependency updates", "main": "dist/html2pdf.bundle.js", "moduleType": [ "amd", @@ -8,6 +8,7 @@ "node" ], "authors": [ + "Şehit Şamil Gökmen ", "Erik Koopmans " ], "license": "MIT", diff --git a/package.json b/package.json index 395b9e6..4de1243 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@ssamilg/html2pdf.js", - "version": "0.11.0", - "description": "Client-side HTML-to-PDF rendering using pure JS", + "version": "1.0.0", + "description": "A fork of html2pdf.js with dependency updates", "main": "dist/html2pdf.js", "files": [ "/src", @@ -9,7 +9,7 @@ ], "repository": { "type": "git", - "url": "git+https://github.com/eKoopmans/html2pdf.js.git" + "url": "git+https://github.com/ssamilg/html2pdf.js.git" }, "keywords": [ "javascript", @@ -19,15 +19,12 @@ "canvas" ], "author": { - "name": "Erik Koopmans", - "email": "erik@erik-koopmans.com", - "url": "https://www.erik-koopmans.com" + "name": "Şehit Şamil Gökmen", + "email": "samil-98@hotmail.com", + "url": "https://www.ssamilg.dev" }, "license": "MIT", - "bugs": { - "url": "https://github.com/eKoopmans/html2pdf.js/issues" - }, - "homepage": "https://ekoopmans.github.io/html2pdf.js/", + "dependencies": { "es6-promise": "^4.2.5", "html2canvas": "^1.0.0", From a7115abf1289d2c7474e902ab2f76776380f01ee Mon Sep 17 00:00:00 2001 From: ssamilg Date: Mon, 25 Mar 2024 20:33:31 +0300 Subject: [PATCH 5/7] remove test change --- src/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/index.js b/src/index.js index d199efb..1b82157 100644 --- a/src/index.js +++ b/src/index.js @@ -12,7 +12,6 @@ import './plugin/hyperlinks.js'; * sent as settings to their corresponding functions. */ var html2pdf = function html2pdf(src, opt) { - console.log("---SSG TESTING---"); // Create a new worker with the given options. var worker = new html2pdf.Worker(opt); From c9d2b9391fe43bde8dca4566e975a966da7abb64 Mon Sep 17 00:00:00 2001 From: ssamilg Date: Mon, 25 Mar 2024 20:34:08 +0300 Subject: [PATCH 6/7] Build 1.0.0 --- dist/html2pdf.bundle.js | 3 +-- dist/html2pdf.bundle.min.js | 2 +- dist/html2pdf.bundle.min.js.LICENSE.txt | 2 +- dist/html2pdf.bundle.min.js.map | 2 +- dist/html2pdf.js | 3 +-- dist/html2pdf.min.js | 2 +- dist/html2pdf.min.js.LICENSE.txt | 2 +- dist/html2pdf.min.js.map | 2 +- 8 files changed, 8 insertions(+), 10 deletions(-) diff --git a/dist/html2pdf.bundle.js b/dist/html2pdf.bundle.js index ff60508..3bcd93f 100644 --- a/dist/html2pdf.bundle.js +++ b/dist/html2pdf.bundle.js @@ -1,5 +1,5 @@ /*! - * @ssamilg/html2pdf.js v0.11.0 + * @ssamilg/html2pdf.js v1.0.0 * Copyright (c) 2024 Erik Koopmans * Released under the MIT License. */ @@ -38048,7 +38048,6 @@ __webpack_require__.r(__webpack_exports__); * sent as settings to their corresponding functions. */ var html2pdf = function html2pdf(src, opt) { - console.log("---SSG TESTING---"); // Create a new worker with the given options. var worker = new html2pdf.Worker(opt); if (src) { diff --git a/dist/html2pdf.bundle.min.js b/dist/html2pdf.bundle.min.js index 6fecce2..841b88f 100644 --- a/dist/html2pdf.bundle.min.js +++ b/dist/html2pdf.bundle.min.js @@ -1,3 +1,3 @@ /*! For license information please see html2pdf.bundle.min.js.LICENSE.txt */ -!function(A,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("html2pdf",[],e):"object"==typeof exports?exports.html2pdf=e():A.html2pdf=e()}(self,(function(){return function(){var A,e,t={"./src/plugin/hyperlinks.js":function(A,e,t){"use strict";t.r(e),t("./node_modules/core-js/modules/es.object.to-string.js"),t("./node_modules/core-js/modules/es.string.link.js"),t("./node_modules/core-js/modules/esnext.async-iterator.for-each.js"),t("./node_modules/core-js/modules/esnext.iterator.constructor.js"),t("./node_modules/core-js/modules/esnext.iterator.for-each.js"),t("./node_modules/core-js/modules/web.dom-collections.for-each.js");var r=t("./src/worker.js"),n=t("./src/utils.js"),s=[],i={toContainer:r.default.prototype.toContainer,toPdf:r.default.prototype.toPdf};r.default.prototype.toContainer=function(){return i.toContainer.call(this).then((function(){if(this.opt.enableLinks){var A=this.prop.container,e=A.querySelectorAll("a"),t=(0,n.unitConvert)(A.getBoundingClientRect(),this.prop.pageSize.k);s=[],Array.prototype.forEach.call(e,(function(A){for(var e=A.getClientRects(),r=0;ra){var u=c;c=a,a=u}}else{if("l"!==A&&"landscape"!==A)throw"Invalid orientation: "+A;A="l",a>c&&(u=c,c=a,a=u)}return{width:c,height:a,unit:e,k:o}},e.default=r.jsPDF},"./src/plugin/pagebreaks.js":function(A,e,t){"use strict";t.r(e),t("./node_modules/core-js/modules/es.array.concat.js"),t("./node_modules/core-js/modules/es.array.join.js"),t("./node_modules/core-js/modules/es.array.slice.js"),t("./node_modules/core-js/modules/es.object.keys.js"),t("./node_modules/core-js/modules/es.object.to-string.js"),t("./node_modules/core-js/modules/esnext.async-iterator.for-each.js"),t("./node_modules/core-js/modules/esnext.iterator.constructor.js"),t("./node_modules/core-js/modules/esnext.iterator.for-each.js"),t("./node_modules/core-js/modules/web.dom-collections.for-each.js");var r=t("./src/worker.js"),n=t("./src/utils.js"),s={toContainer:r.default.prototype.toContainer};r.default.template.opt.pagebreak={mode:["css","legacy"],before:[],after:[],avoid:[]},r.default.prototype.toContainer=function(){return s.toContainer.call(this).then((function(){var A=this.prop.container,e=this.prop.pageSize.inner.px.height,t=[].concat(this.opt.pagebreak.mode),r={avoidAll:-1!==t.indexOf("avoid-all"),css:-1!==t.indexOf("css"),legacy:-1!==t.indexOf("legacy")},s={},i=this;["before","after","avoid"].forEach((function(e){var t=r.avoidAll&&"avoid"===e;s[e]=t?[]:[].concat(i.opt.pagebreak[e]||[]),s[e].length>0&&(s[e]=Array.prototype.slice.call(A.querySelectorAll(s[e].join(", "))))}));var o=A.querySelectorAll(".html2pdf__page-break");o=Array.prototype.slice.call(o);var a=A.querySelectorAll("*");Array.prototype.forEach.call(a,(function(A){var t={before:!1,after:r.legacy&&-1!==o.indexOf(A),avoid:r.avoidAll};if(r.css){var i=window.getComputedStyle(A),a=["always","page","left","right"];t={before:t.before||-1!==a.indexOf(i.breakBefore||i.pageBreakBefore),after:t.after||-1!==a.indexOf(i.breakAfter||i.pageBreakAfter),avoid:t.avoid||-1!==["avoid","avoid-page"].indexOf(i.breakInside||i.pageBreakInside)}}Object.keys(t).forEach((function(e){t[e]=t[e]||-1!==s[e].indexOf(A)}));var c=A.getBoundingClientRect();if(t.avoid&&!t.before){var u=Math.floor(c.top/e),l=Math.floor(c.bottom/e),h=Math.abs(c.bottom-c.top)/e;l!==u&&h<=1&&(t.before=!0)}if(t.before){var d=(0,n.createElement)("div",{style:{display:"block",height:e-c.top%e+"px"}});A.parentNode.insertBefore(d,A)}t.after&&(d=(0,n.createElement)("div",{style:{display:"block",height:e-c.bottom%e+"px"}}),A.parentNode.insertBefore(d,A.nextSibling))}))}))}},"./src/utils.js":function(A,e,t){"use strict";function r(A){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(A){return typeof A}:function(A){return A&&"function"==typeof Symbol&&A.constructor===Symbol&&A!==Symbol.prototype?"symbol":typeof A},r(A)}t.r(e),t.d(e,{cloneNode:function(){return i},createElement:function(){return s},objType:function(){return n},toPx:function(){return a},unitConvert:function(){return o}}),t("./node_modules/core-js/modules/es.symbol.js"),t("./node_modules/core-js/modules/es.symbol.description.js"),t("./node_modules/core-js/modules/es.symbol.iterator.js"),t("./node_modules/core-js/modules/es.array.iterator.js"),t("./node_modules/core-js/modules/es.number.constructor.js"),t("./node_modules/core-js/modules/es.object.to-string.js"),t("./node_modules/core-js/modules/es.string.iterator.js"),t("./node_modules/core-js/modules/web.dom-collections.iterator.js");var n=function(A){var e=r(A);return"undefined"===e?"undefined":"string"===e||A instanceof String?"string":"number"===e||A instanceof Number?"number":"function"===e||A instanceof Function?"function":A&&A.constructor===Array?"array":A&&1===A.nodeType?"element":"object"===e?"object":"unknown"},s=function(A,e){var t=document.createElement(A);if(e.className&&(t.className=e.className),e.innerHTML){t.innerHTML=e.innerHTML;for(var r=t.getElementsByTagName("script"),n=r.length;n-- >0;null)r[n].parentNode.removeChild(r[n])}for(var s in e.style)t.style[s]=e.style[s];return t},i=function A(e,t){for(var r=3===e.nodeType?document.createTextNode(e.nodeValue):e.cloneNode(!1),n=e.firstChild;n;n=n.nextSibling)!0!==t&&1===n.nodeType&&"SCRIPT"===n.nodeName||r.appendChild(A(n,t));return 1===e.nodeType&&("CANVAS"===e.nodeName?(r.width=e.width,r.height=e.height,r.getContext("2d").drawImage(e,0,0)):"TEXTAREA"!==e.nodeName&&"SELECT"!==e.nodeName||(r.value=e.value),r.addEventListener("load",(function(){r.scrollTop=e.scrollTop,r.scrollLeft=e.scrollLeft}),!0)),r},o=function(A,e){if("number"===n(A))return 72*A/96/e;var t={};for(var r in A)t[r]=72*A[r]/96/e;return t},a=function(A,e){return Math.floor(A*e/72*96)}},"./src/worker.js":function(A,e,t){"use strict";t.r(e),t("./node_modules/core-js/modules/es.array.concat.js"),t("./node_modules/core-js/modules/es.array.map.js"),t("./node_modules/core-js/modules/es.function.name.js"),t("./node_modules/core-js/modules/es.json.stringify.js"),t("./node_modules/core-js/modules/es.object.assign.js"),t("./node_modules/core-js/modules/es.object.keys.js"),t("./node_modules/core-js/modules/es.object.to-string.js"),t("./node_modules/core-js/modules/es.regexp.to-string.js"),t("./node_modules/core-js/modules/esnext.async-iterator.for-each.js"),t("./node_modules/core-js/modules/esnext.async-iterator.map.js"),t("./node_modules/core-js/modules/esnext.iterator.constructor.js"),t("./node_modules/core-js/modules/esnext.iterator.for-each.js"),t("./node_modules/core-js/modules/esnext.iterator.map.js"),t("./node_modules/core-js/modules/web.dom-collections.for-each.js");var r=t("./node_modules/jspdf/dist/jspdf.es.min.js"),n=t("./node_modules/html2canvas-pro/dist/html2canvas-pro.js"),s=t("./src/utils.js"),i=t("./node_modules/es6-promise/dist/es6-promise.js"),o=t.n(i)().Promise,a=function A(e){var t=Object.assign(A.convert(o.resolve()),JSON.parse(JSON.stringify(A.template))),r=A.convert(o.resolve(),t);return(r=r.setProgress(1,A,1,[A])).set(e)};(a.prototype=Object.create(o.prototype)).constructor=a,a.convert=function(A,e){return A.__proto__=e||a.prototype,A},a.template={prop:{src:null,container:null,overlay:null,canvas:null,img:null,pdf:null,pageSize:null},progress:{val:0,state:null,n:0,stack:[]},opt:{filename:"file.pdf",margin:[0,0,0,0],image:{type:"jpeg",quality:.95},enableLinks:!0,html2canvas:{},jsPDF:{}}},a.prototype.from=function(A,e){return this.then((function(){switch(e=e||function(A){switch((0,s.objType)(A)){case"string":return"string";case"element":return"canvas"===A.nodeName.toLowerCase?"canvas":"element";default:return"unknown"}}(A),e){case"string":return this.set({src:(0,s.createElement)("div",{innerHTML:A})});case"element":return this.set({src:A});case"canvas":return this.set({canvas:A});case"img":return this.set({img:A});default:return this.error("Unknown source type.")}}))},a.prototype.to=function(A){switch(A){case"container":return this.toContainer();case"canvas":return this.toCanvas();case"img":return this.toImg();case"pdf":return this.toPdf();default:return this.error("Invalid target.")}},a.prototype.toContainer=function(){return this.thenList([function(){return this.prop.src||this.error("Cannot duplicate - no source HTML.")},function(){return this.prop.pageSize||this.setPageSize()}]).then((function(){var A={position:"fixed",overflow:"hidden",zIndex:1e3,left:0,right:0,bottom:0,top:0,backgroundColor:"rgba(0,0,0,0.8)"},e={position:"absolute",width:this.prop.pageSize.inner.width+this.prop.pageSize.unit,left:0,right:0,top:0,height:"auto",margin:"auto",backgroundColor:"white"};A.opacity=0;var t=(0,s.cloneNode)(this.prop.src,this.opt.html2canvas.javascriptEnabled);this.prop.overlay=(0,s.createElement)("div",{className:"html2pdf__overlay",style:A}),this.prop.container=(0,s.createElement)("div",{className:"html2pdf__container",style:e}),this.prop.container.appendChild(t),this.prop.overlay.appendChild(this.prop.container),document.body.appendChild(this.prop.overlay)}))},a.prototype.toCanvas=function(){var A=[function(){return document.body.contains(this.prop.container)||this.toContainer()}];return this.thenList(A).then((function(){var A=Object.assign({},this.opt.html2canvas);return delete A.onrendered,n(this.prop.container,A)})).then((function(A){(this.opt.html2canvas.onrendered||function(){})(A),this.prop.canvas=A,document.body.removeChild(this.prop.overlay)}))},a.prototype.toImg=function(){return this.thenList([function(){return this.prop.canvas||this.toCanvas()}]).then((function(){var A=this.prop.canvas.toDataURL("image/"+this.opt.image.type,this.opt.image.quality);this.prop.img=document.createElement("img"),this.prop.img.src=A}))},a.prototype.toPdf=function(){return this.thenList([function(){return this.prop.canvas||this.toCanvas()}]).then((function(){var A=this.prop.canvas,e=this.opt,t=A.height,n=Math.floor(A.width*this.prop.pageSize.inner.ratio),s=Math.ceil(t/n),i=this.prop.pageSize.inner.height,o=document.createElement("canvas"),a=o.getContext("2d");o.width=A.width,o.height=n,this.prop.pdf=this.prop.pdf||new r.jsPDF(e.jsPDF);for(var c=0;cA.length)&&(e=A.length);for(var t=0,r=new Array(e);t1?t-1:0),n=1;n/gm),G=l(/\${[\w\W]*}/gm),X=l(/^data-[\-\w.\u00B7-\uFFFF]/),J=l(/^aria-[\-\w]+$/),W=l(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),q=l(/^(?:\w+script|data):/i),Y=l(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),z=l(/^html$/i),Z=l(/^[a-z][.\w]*(-[.\w]+)+$/i),$=function(){return"undefined"==typeof window?null:window};return function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:$(),n=function(A){return e(A)};if(n.version="2.4.9",n.removed=[],!t||!t.document||9!==t.document.nodeType)return n.isSupported=!1,n;var s=t.document,i=t.document,o=t.DocumentFragment,a=t.HTMLTemplateElement,c=t.Node,l=t.Element,h=t.NodeFilter,d=t.NamedNodeMap,f=void 0===d?t.NamedNodeMap||t.MozNamedAttrMap:d,B=t.HTMLFormElement,g=t.DOMParser,x=t.trustedTypes,AA=l.prototype,eA=L(AA,"cloneNode"),tA=L(AA,"nextSibling"),rA=L(AA,"childNodes"),nA=L(AA,"parentNode");if("function"==typeof a){var sA=i.createElement("template");sA.content&&sA.content.ownerDocument&&(i=sA.content.ownerDocument)}var iA=function(e,t){if("object"!==A(e)||"function"!=typeof e.createPolicy)return null;var r=null,n="data-tt-policy-suffix";t.currentScript&&t.currentScript.hasAttribute(n)&&(r=t.currentScript.getAttribute(n));var s="dompurify"+(r?"#"+r:"");try{return e.createPolicy(s,{createHTML:function(A){return A},createScriptURL:function(A){return A}})}catch(A){return console.warn("TrustedTypes policy "+s+" could not be created."),null}}(x,s),oA=iA?iA.createHTML(""):"",aA=i,cA=aA.implementation,uA=aA.createNodeIterator,lA=aA.createDocumentFragment,hA=aA.getElementsByTagName,dA=s.importNode,fA={};try{fA=H(i).documentMode?i.documentMode:{}}catch(A){}var BA={};n.isSupported="function"==typeof nA&&cA&&void 0!==cA.createHTMLDocument&&9!==fA;var gA,pA,wA=R,mA=V,QA=G,CA=X,yA=J,FA=q,vA=Y,UA=Z,bA=W,EA=null,xA=I({},[].concat(r(j),r(S),r(_),r(D),r(O))),IA=null,HA=I({},[].concat(r(P),r(K),r(M),r(k))),LA=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),jA=null,SA=null,_A=!0,NA=!0,DA=!1,TA=!0,OA=!1,PA=!1,KA=!1,MA=!1,kA=!1,RA=!1,VA=!1,GA=!0,XA=!1,JA=!0,WA=!1,qA={},YA=null,zA=I({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),ZA=null,$A=I({},["audio","video","img","source","image","track"]),Ae=null,ee=I({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),te="http://www.w3.org/1998/Math/MathML",re="http://www.w3.org/2000/svg",ne="http://www.w3.org/1999/xhtml",se=ne,ie=!1,oe=null,ae=I({},[te,re,ne],C),ce=["application/xhtml+xml","text/html"],ue=null,le=i.createElement("form"),he=function(A){return A instanceof RegExp||A instanceof Function},de=function(e){ue&&ue===e||(e&&"object"===A(e)||(e={}),e=H(e),gA=gA=-1===ce.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE,pA="application/xhtml+xml"===gA?C:Q,EA="ALLOWED_TAGS"in e?I({},e.ALLOWED_TAGS,pA):xA,IA="ALLOWED_ATTR"in e?I({},e.ALLOWED_ATTR,pA):HA,oe="ALLOWED_NAMESPACES"in e?I({},e.ALLOWED_NAMESPACES,C):ae,Ae="ADD_URI_SAFE_ATTR"in e?I(H(ee),e.ADD_URI_SAFE_ATTR,pA):ee,ZA="ADD_DATA_URI_TAGS"in e?I(H($A),e.ADD_DATA_URI_TAGS,pA):$A,YA="FORBID_CONTENTS"in e?I({},e.FORBID_CONTENTS,pA):zA,jA="FORBID_TAGS"in e?I({},e.FORBID_TAGS,pA):{},SA="FORBID_ATTR"in e?I({},e.FORBID_ATTR,pA):{},qA="USE_PROFILES"in e&&e.USE_PROFILES,_A=!1!==e.ALLOW_ARIA_ATTR,NA=!1!==e.ALLOW_DATA_ATTR,DA=e.ALLOW_UNKNOWN_PROTOCOLS||!1,TA=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,OA=e.SAFE_FOR_TEMPLATES||!1,PA=e.WHOLE_DOCUMENT||!1,kA=e.RETURN_DOM||!1,RA=e.RETURN_DOM_FRAGMENT||!1,VA=e.RETURN_TRUSTED_TYPE||!1,MA=e.FORCE_BODY||!1,GA=!1!==e.SANITIZE_DOM,XA=e.SANITIZE_NAMED_PROPS||!1,JA=!1!==e.KEEP_CONTENT,WA=e.IN_PLACE||!1,bA=e.ALLOWED_URI_REGEXP||bA,se=e.NAMESPACE||ne,LA=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&he(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(LA.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&he(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(LA.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(LA.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),OA&&(NA=!1),RA&&(kA=!0),qA&&(EA=I({},r(O)),IA=[],!0===qA.html&&(I(EA,j),I(IA,P)),!0===qA.svg&&(I(EA,S),I(IA,K),I(IA,k)),!0===qA.svgFilters&&(I(EA,_),I(IA,K),I(IA,k)),!0===qA.mathMl&&(I(EA,D),I(IA,M),I(IA,k))),e.ADD_TAGS&&(EA===xA&&(EA=H(EA)),I(EA,e.ADD_TAGS,pA)),e.ADD_ATTR&&(IA===HA&&(IA=H(IA)),I(IA,e.ADD_ATTR,pA)),e.ADD_URI_SAFE_ATTR&&I(Ae,e.ADD_URI_SAFE_ATTR,pA),e.FORBID_CONTENTS&&(YA===zA&&(YA=H(YA)),I(YA,e.FORBID_CONTENTS,pA)),JA&&(EA["#text"]=!0),PA&&I(EA,["html","head","body"]),EA.table&&(I(EA,["tbody"]),delete jA.tbody),u&&u(e),ue=e)},fe=I({},["mi","mo","mn","ms","mtext"]),Be=I({},["foreignobject","desc","title","annotation-xml"]),ge=I({},["title","style","font","a","script"]),pe=I({},S);I(pe,_),I(pe,N);var we=I({},D);I(we,T);var me=function(A){m(n.removed,{element:A});try{A.parentNode.removeChild(A)}catch(e){try{A.outerHTML=oA}catch(e){A.remove()}}},Qe=function(A,e){try{m(n.removed,{attribute:e.getAttributeNode(A),from:e})}catch(A){m(n.removed,{attribute:null,from:e})}if(e.removeAttribute(A),"is"===A&&!IA[A])if(kA||RA)try{me(e)}catch(A){}else try{e.setAttribute(A,"")}catch(A){}},Ce=function(A){var e,t;if(MA)A=""+A;else{var r=y(A,/^[\r\n\t ]+/);t=r&&r[0]}"application/xhtml+xml"===gA&&se===ne&&(A=''+A+"");var n=iA?iA.createHTML(A):A;if(se===ne)try{e=(new g).parseFromString(n,gA)}catch(A){}if(!e||!e.documentElement){e=cA.createDocument(se,"template",null);try{e.documentElement.innerHTML=ie?oA:n}catch(A){}}var s=e.body||e.documentElement;return A&&t&&s.insertBefore(i.createTextNode(t),s.childNodes[0]||null),se===ne?hA.call(e,PA?"html":"body")[0]:PA?e.documentElement:s},ye=function(A){return uA.call(A.ownerDocument||A,A,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT|h.SHOW_PROCESSING_INSTRUCTION|h.SHOW_CDATA_SECTION,null,!1)},Fe=function(e){return"object"===A(c)?e instanceof c:e&&"object"===A(e)&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},ve=function(A,e,t){BA[A]&&p(BA[A],(function(A){A.call(n,e,t,ue)}))},Ue=function(A){var e,t;if(ve("beforeSanitizeElements",A,null),(t=A)instanceof B&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof f)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore||"function"!=typeof t.hasChildNodes))return me(A),!0;if(b(/[\u0080-\uFFFF]/,A.nodeName))return me(A),!0;var r=pA(A.nodeName);if(ve("uponSanitizeElement",A,{tagName:r,allowedTags:EA}),A.hasChildNodes()&&!Fe(A.firstElementChild)&&(!Fe(A.content)||!Fe(A.content.firstElementChild))&&b(/<[/\w]/g,A.innerHTML)&&b(/<[/\w]/g,A.textContent))return me(A),!0;if("select"===r&&b(/